You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(52) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(315) |
Feb
(50) |
Mar
(36) |
Apr
(200) |
May
(65) |
Jun
(100) |
Jul
(110) |
Aug
(115) |
Sep
(52) |
Oct
(20) |
Nov
(27) |
Dec
(42) |
2005 |
Jan
(19) |
Feb
(11) |
Mar
(58) |
Apr
(3) |
May
(10) |
Jun
(38) |
Jul
(44) |
Aug
(106) |
Sep
(36) |
Oct
(35) |
Nov
|
Dec
|
From: Milosz D. <mde...@us...> - 2005-09-10 06:59:55
|
Update of /cvsroot/beepmp/bmpx In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6412 Removed Files: config.guess config.sub Log Message: Removed config.guess and config.sub --- config.guess DELETED --- --- config.sub DELETED --- |
From: Milosz D. <mde...@us...> - 2005-09-10 06:58:15
|
Update of /cvsroot/beepmp/bmpx/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6142 Modified Files: bmp_metadata.c Log Message: Fixed memory leak Index: bmp_metadata.c =================================================================== RCS file: /cvsroot/beepmp/bmpx/src/bmp_metadata.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** bmp_metadata.c 10 Sep 2005 05:16:05 -0000 1.1 --- bmp_metadata.c 10 Sep 2005 06:58:08 -0000 1.2 *************** *** 812,817 **** g_hash_table_insert (metadata, g_strdup(bmp_metadata_get_id(tag_id)), valuestr); - - g_free (valuestr); break; } --- 812,815 ---- |
From: Milosz D. <mde...@us...> - 2005-09-10 06:57:47
|
Update of /cvsroot/beepmp/bmpx/po In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6013 Removed Files: POTFILES Log Message: --- POTFILES DELETED --- |
From: Milosz D. <mde...@us...> - 2005-09-10 05:47:07
|
Update of /cvsroot/beepmp/bmpx/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29658 Added Files: skinlist-building.gif Log Message: Added images/skinlist-building.gif --- NEW FILE: skinlist-building.gif --- (This appears to be a binary file; contents omitted.) |
Update of /cvsroot/beepmp/bmpx/glade In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27937/glade Added Files: Makefile.am dialog_add_files.glade dialog_add_from_library.glade dialog_file_info.glade dialog_preferences.glade dialog_rename_playlist.glade Log Message: Added glade/ --- NEW FILE: dialog_preferences.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="preferences_window"> <property name="title" translatable="yes">BMP Preferences</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_CENTER</property> <property name="modal">False</property> <property name="default_width">600</property> <property name="default_height">500</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</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_DIALOG</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> [...2116 lines suppressed...] <property name="visible">True</property> <property name="label" translatable="yes"><span size="large"><b>Please wait...</b></span></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> </child> </widget> </glade-interface> --- NEW FILE: dialog_rename_playlist.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkDialog" id="dialog_rename_playlist"> <property name="width_request">400</property> <property name="visible">True</property> <property name="title" translatable="yes">BMP Rename Playlist</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> <property name="modal">True</property> <property name="default_width">400</property> <property name="resizable">False</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">True</property> <property name="skip_pager_hint">True</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> <property name="focus_on_map">True</property> <property name="has_separator">False</property> <child internal-child="vbox"> <widget class="GtkVBox" id="dialog-vbox2"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child internal-child="action_area"> <widget class="GtkHButtonBox" id="dialog-action_area2"> <property name="visible">True</property> <property name="layout_style">GTK_BUTTONBOX_END</property> <child> <widget class="GtkButton" id="cancelbutton1"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> <property name="label">gtk-cancel</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <property name="response_id">-6</property> </widget> </child> <child> <widget class="GtkButton" id="okbutton1"> <property name="visible">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="can_focus">True</property> <property name="label">gtk-ok</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <property name="response_id">-5</property> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">GTK_PACK_END</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment1"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">12</property> <property name="bottom_padding">12</property> <property name="left_padding">4</property> <property name="right_padding">4</property> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="label" translatable="yes">Rename Playlist:</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment2"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">8</property> <property name="bottom_padding">0</property> <property name="left_padding">12</property> <property name="right_padding">0</property> <child> <widget class="GtkEntry" id="dialog_rename_playlist_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">True</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">True</property> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">True</property> </packing> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> </widget> </child> </widget> </glade-interface> --- NEW FILE: dialog_file_info.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="dialog_file_information"> <property name="border_width">8</property> <property name="visible">True</property> <property name="title" translatable="yes">BMP File Information</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property> <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</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_DIALOG</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> <property name="focus_on_map">True</property> <child> <widget class="GtkVBox" id="vbox2"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkHBox" id="hbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkImage" id="fi_image"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment17"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">8</property> <property name="right_padding">0</property> <child> <widget class="GtkEventBox" id="eventbox1"> <property name="visible">True</property> <property name="visible_window">True</property> <property name="above_child">False</property> <child> <widget class="GtkLabel" id="label17"> <property name="visible">True</property> <property name="label" translatable="yes">File:</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment15"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">8</property> <property name="right_padding">8</property> <child> <widget class="GtkEntry" id="entry_file"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment12"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">4</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkTable" id="table2"> <property name="border_width">8</property> <property name="visible">True</property> <property name="n_rows">7</property> <property name="n_columns">2</property> <property name="homogeneous">False</property> <property name="row_spacing">6</property> <property name="column_spacing">12</property> <child> <widget class="GtkLabel" id="label7"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Title:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label6"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Album:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label5"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Artist:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment7"> <property name="visible">True</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkEntry" id="entry_artist"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options">fill</property> <property name="y_options">fill</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment8"> <property name="visible">True</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkEntry" id="entry_album"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">fill</property> <property name="y_options">fill</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment11"> <property name="visible">True</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkTable" id="table4"> <property name="visible">True</property> <property name="n_rows">1</property> <property name="n_columns">3</property> <property name="homogeneous">False</property> <property name="row_spacing">0</property> <property name="column_spacing">0</property> <child> <widget class="GtkLabel" id="label16"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Track Number:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkEntry" id="entry_date"> <property name="width_request">50</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment16"> <property name="visible">True</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xscale">0</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkEntry" id="entry_track"> <property name="width_request">50</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> </child> </widget> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options"></property> <property name="y_options"></property> </packing> </child> </widget> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">4</property> <property name="bottom_attach">5</property> <property name="x_options">fill</property> <property name="y_options">fill</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment6"> <property name="visible">True</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkEntry" id="entry_title"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label15"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Comment:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkEntry" id="entry_comment"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label8"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Genre:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">5</property> <property name="bottom_attach">6</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label10"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Year:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">4</property> <property name="bottom_attach">5</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label9"> <property name="visible">True</property> <property name="label" translatable="yes"><b>Bitrate:</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">1</property> <property name="yalign">0.5</property> <property name="xpad">4</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">6</property> <property name="bottom_attach">7</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkLabel" id="label_bitrate"> <property name="visible">True</property> <property name="label" translatable="yes">label11</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">6</property> <property name="bottom_attach">7</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkEntry" id="entry_genre"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">5</property> <property name="bottom_attach">6</property> <property name="y_options"></property> </packing> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment5"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">8</property> <property name="bottom_padding">8</property> <property name="left_padding">0</property> <property name="right_padding">8</property> <child> <widget class="GtkHButtonBox" id="hbuttonbox1"> <property name="visible">True</property> <property name="layout_style">GTK_BUTTONBOX_END</property> <property name="spacing">0</property> <child> <widget class="GtkButton" id="fi_ok"> <property name="visible">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="can_focus">True</property> <property name="label">gtk-close</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> </widget> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> </widget> </child> </widget> </glade-interface> --- NEW FILE: Makefile.am --- gladedir = $(pkgdatadir)/glade glade_DATA = \ dialog_add_files.glade \ dialog_add_from_library.glade \ dialog_file_info.glade \ dialog_preferences.glade \ dialog_rename_playlist.glade EXTRA_DIST = $(glade_DATA) --- NEW FILE: dialog_add_files.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="add_files_dialog"> <property name="visible">True</property> <property name="title" translatable="yes">BMP Add Files</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_CENTER</property> <property name="modal">False</property> <property name="default_width">700</property> <property name="default_height">450</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">True</property> <property name="skip_pager_hint">False</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> <property name="focus_on_map">True</property> <signal name="delete_event" handler="gtk_widget_hide_on_delete" last_modification_time="Wed, 01 Dec 2004 18:47:13 GMT"/> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkAlignment" id="alignment2"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">8</property> <property name="bottom_padding">8</property> <property name="left_padding">8</property> <property name="right_padding">8</property> <child> <placeholder/> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment1"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">8</property> <property name="bottom_padding">8</property> <property name="left_padding">4</property> <property name="right_padding">4</property> <child> <widget class="GtkTable" id="table1"> <property name="visible">True</property> <property name="n_rows">1</property> <property name="n_columns">2</property> <property name="homogeneous">False</property> <property name="row_spacing">0</property> <property name="column_spacing">0</property> <child> <widget class="GtkCheckButton" id="close_on_action"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Close Dialog on Add</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <property name="active">False</property> <property name="inconsistent">False</property> <property name="draw_indicator">True</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options"></property> </packing> </child> <child> <widget class="GtkHButtonBox" id="hbuttonbox2"> <property name="visible">True</property> <property name="layout_style">GTK_BUTTONBOX_END</property> <property name="spacing">8</property> <child> <widget class="GtkButton" id="deselect_all"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Deselect All</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> </widget> </child> <child> <widget class="GtkButton" id="select_all"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Select All</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> </widget> </child> <child> <widget class="GtkButton" id="action"> <property name="visible">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="can_focus">True</property> <property name="label">gtk-add</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> </widget> </child> <child> <widget class="GtkButton" id="close"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label">gtk-close</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <signal name="clicked" handler="gtk_widget_hide" object="add_files_dialog" last_modification_time="Wed, 01 Dec 2004 18:45:40 GMT"/> </widget> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="y_options">fill</property> </packing> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </glade-interface> --- NEW FILE: dialog_add_from_library.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="library_dialog"> <property name="visible">True</property> <property name="title" translatable="yes">BMP Add from Library</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_CENTER</property> <property name="modal">False</property> <property name="default_width">600</property> <property name="default_height">400</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</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> <child> <widget class="GtkVBox" id="vbox1"> <property name="border_width">8</property> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkAlignment" id="alignment3"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkEventBox" id="eventbox1"> <property name="visible">True</property> <property name="visible_window">True</property> <property name="above_child">False</property> <child> <widget class="GtkTable" id="table2"> <property name="visible">True</property> <property name="n_rows">3</property> <property name="n_columns">2</property> <property name="homogeneous">False</property> <property name="row_spacing">4</property> <property name="column_spacing">8</property> <child> <widget class="GtkScrolledWindow" id="scrolledwindow2"> <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_IN</property> <property name="window_placement">GTK_CORNER_TOP_LEFT</property> <child> <widget class="GtkTreeView" id="treeview_1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="headers_visible">False</property> <property name="rules_hint">False</property> <property name="reorderable">False</property> <property name="enable_search">True</property> <property name="fixed_height_mode">False</property> <property name="hover_selection">False</property> <property name="hover_expand">False</property> </widget> </child> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> </packing> </child> <child> <widget class="GtkComboBox" id="cbox_2"> <property name="visible">True</property> <property name="items" translatable="yes">DUMMY</property> <property name="add_tearoffs">False</property> <property name="focus_on_click">True</property> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options">fill</property> </packing> </child> <child> <widget class="GtkComboBox" id="cbox_1"> <property name="visible">True</property> <property name="items" translatable="yes">DUMMY</property> <property name="add_tearoffs">False</property> <property name="focus_on_click">True</property> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">fill</property> <property name="y_options">fill</property> </packing> </child> <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_IN</property> <property name="window_placement">GTK_CORNER_TOP_LEFT</property> <child> <widget class="GtkTreeView" id="treeview_2"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="headers_visible">False</property> <property name="rules_hint">False</property> <property name="reorderable">False</property> <property name="enable_search">True</property> <property name="fixed_height_mode">False</property> <property name="hover_selection">False</property> <property name="hover_expand">False</property> </widget> </child> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> </packing> </child> <child> <widget class="GtkHBox" id="hbox2"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkLabel" id="label4"> <property name="visible">True</property> <property name="label" translatable="yes">_Filter:</property> <property name="use_underline">True</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="mnemonic_widget">filter_entry</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment7"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">8</property> <property name="right_padding">0</property> <child> <widget class="GtkEntry" id="filter_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">True</property> <property name="visibility">True</property> <property name="max_length">0</property> <property name="text" translatable="yes"></property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">False</property> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> </widget> <packing> <property name="left_attach">0</property> <property name="right_attach">2</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">fill</property> <property name="y_options">fill</property> </packing> </child> </widget> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkAlignment" id="alignment4"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">1</property> <property name="yscale">1</property> <property name="top_padding">12</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkHButtonBox" id="hbuttonbox1"> <property name="visible">True</property> <property name="layout_style">GTK_BUTTONBOX_END</property> <property name="spacing">8</property> <child> <widget class="GtkButton" id="button_play"> <property name="visible">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="can_focus">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <child> <widget class="GtkAlignment" id="alignment6"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">0</property> <property name="yscale">0</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkHBox" id="hbox4"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">2</property> <child> <widget class="GtkImage" id="image3"> <property name="visible">True</property> <property name="stock">gtk-media-play</property> <property name="icon_size">4</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkLabel" id="label6"> <property name="visible">True</property> <property name="label" translatable="yes">Play</property> <property name="use_underline">True</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </child> </widget> </child> <child> <widget class="GtkButton" id="button_enqueue"> <property name="visible">True</property> <property name="can_default">True</property> <property name="has_default">True</property> <property name="can_focus">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <child> <widget class="GtkAlignment" id="alignment5"> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xscale">0</property> <property name="yscale">0</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> <property name="left_padding">0</property> <property name="right_padding">0</property> <child> <widget class="GtkHBox" id="hbox3"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">2</property> <child> <widget class="GtkImage" id="image2"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">4</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkLabel" id="label5"> <property name="visible">True</property> <property name="label">Enqueue</property> <property name="use_underline">True</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </child> </widget> </child> <child> <widget class="GtkButton" id="button_close"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> <property name="label">gtk-close</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> </widget> </child> </widget> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">True</property> </packing> </child> </widget> </child> </widget> </glade-interface> |
From: Milosz D. <mde...@us...> - 2005-09-10 05:30:30
|
Update of /cvsroot/beepmp/bmpx/glade In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27454/glade Log Message: Directory /cvsroot/beepmp/bmpx/glade added to the repository |
From: Milosz D. <mde...@us...> - 2005-09-10 05:28:45
|
Update of /cvsroot/beepmp/bmpx/intl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27197/intl Log Message: Directory /cvsroot/beepmp/bmpx/intl added to the repository |
From: Milosz D. <mde...@us...> - 2005-09-10 05:27:55
|
Update of /cvsroot/beepmp/bmpx/po In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26897/po Added Files: ChangeLog LINGUAS Makefile.in.in Makevars Makevars.template POTFILES POTFILES.in Rules-quot bmpx.pot boldquot.sed de.po en@boldquot.header en@quot.header insert-header.sin quot.sed remove-potcdate.sin stamp-po Log Message: Added po/ --- NEW FILE: LINGUAS --- # sorted in alphabetical order de #en@boldquot #en@quot --- NEW FILE: Rules-quot --- # Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en...@qu...sert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en...@qu...sert-header en...@bo...sert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en...@bo...sert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header --- NEW FILE: de.po --- # German translation for BMPx # Copyright (C) 2005 Milosz Derezynski <int...@gm...> # This file is distributed under the same license as the BMP package. # Milosz Derezynski <int...@gm...>, 2005. # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-09-09 02:22+0200\n" "PO-Revision-Date: 2004-11-19 04:17+0100\n" "Last-Translator: Milosz Derezynski <int...@gm...>\n" "Language-Team: german <int...@gm...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/ui_main.c:112 src/ui_main.c:113 src/ui_main.c:298 msgid "Quit BMP" msgstr "BMP Beenden" # Main Menu #: src/ui_main.c:118 src/ui_main.c:119 msgid "About BMP" msgstr "Ãber BMP" #: src/ui_main.c:124 src/ui_main.c:125 msgid "Preferences" msgstr "Einstellungen" #: src/ui_main.c:134 msgid "Stop After Current Track" msgstr "Nach momentanem Titel wiedergabe anhalten" #: src/ui_main.c:158 msgid "Show Playlist Editor" msgstr "Wiedergabeliste Anzeigen" #: src/ui_main.c:166 msgid "Scroll Textbox" msgstr "Textbox Animieren" # Tooltips #: src/ui_main.c:176 msgid "Toggle Shuffle Mode" msgstr "Zufällige Wiedergabe Ein-/Ausschalten" #: src/ui_main.c:187 msgid "Toggle Playlist Repeat" msgstr "Wiedergabelisten-Wiederholung Ein-/Ausschalten" #: src/ui_main.c:198 msgid "Toggle Equalizer window visibility" msgstr "Equalizer-Fenster Ein-/Ausschalten" #: src/ui_main.c:209 msgid "Toggle Playlist window visibility" msgstr "Wiedergabelisten-Fenster Ein-/Ausschalten" # Main Window #: src/ui_main.c:235 msgid "Open Files" msgstr "Dateien Ãffnen" #: src/ui_main.c:244 msgid "Previous Track" msgstr "Zum vorherigen Titel springen" #: src/ui_main.c:253 msgid "Play Current Track" msgstr "Aktuell ausgewählten Titel spielen" #: src/ui_main.c:262 msgid "Toggle Pause" msgstr "Pause Ein-/Ausschalten" #: src/ui_main.c:271 msgid "Stop Playback" msgstr "Wiedergabe Anhalten" #: src/ui_main.c:280 msgid "Next Track" msgstr "Zum nächsten Titel springen" #: src/ui_main.c:289 msgid "Minimize BMP" msgstr "BMP Minimieren" #: src/ui_playlist.c:122 msgid "New Playlist" msgstr "Neue Wiedergabeliste" #: src/ui_playlist.c:126 msgid "Remove Playlist" msgstr "Wiedergabeliste Entfernen" #: src/ui_playlist.c:130 msgid "Remove All Playlists" msgstr "Alle Wiedergabelisten Entfernen" #: src/ui_playlist.c:134 msgid "Rename Playlist" msgstr "Wiedergabeliste Umbenennen" #: src/ui_playlist.c:138 msgid "Set Playlist Filename" msgstr "Wiedergabelisten-Dateinamen setzen" #: src/ui_playlist.c:142 msgid "File Information" msgstr "Datei-Informationen" #: src/ui_playlist.c:146 msgid "Add CD..." msgstr "CD Hinzufügen..." #: src/ui_playlist.c:149 msgid "Add Files..." msgstr "Dateien Hinzufügen..." #: src/ui_playlist.c:152 msgid "Add From Library..." msgstr "Dateien aus Bibliothek hizufügen..." #: src/ui_playlist.c:155 msgid "Add Files to New..." msgstr "Dateien zu neuer Wiedergabeliste hinzufügen..." #: src/ui_playlist.c:158 msgid "Remove Selected" msgstr "Markierte Entfernen" #: src/ui_playlist.c:161 msgid "Remove Unselected" msgstr "Nicht Markierte Entfernen" #: src/ui_playlist.c:164 msgid "Remove All" msgstr "Alle Entfernen" #: src/ui_playlist.c:169 msgid "Select All" msgstr "Alle Auswählen" #: src/ui_playlist.c:172 msgid "Select None" msgstr "Auswahl Aufheben" #: src/ui_playlist.c:175 msgid "Invert Selection" msgstr "Auswahl Umkehren" #: src/ui_playlist.c:180 msgid "Sort by Visible Title" msgstr "Nach Angezeigtem Titel Sortieren" #: src/ui_playlist.c:183 msgid "Sort by Artist" msgstr "Nach Interpret Sortieren" #: src/ui_playlist.c:186 msgid "Sort by Album" msgstr "Nach Album Sortieren" #: src/ui_playlist.c:189 msgid "Sort by Title" msgstr "Nach Titel Sortieren" #: src/ui_playlist.c:192 msgid "Sort by Genre" msgstr "Nach Genre Sortieren" #: src/ui_playlist.c:195 msgid "Sort by Tracknumber" msgstr "Nach Stück-Nr. Sortieren" # Preferences window #: src/ui_prefswin.c:100 glade/dialog_preferences.glade:718 msgid "Appearance" msgstr "Erscheinungsbild" #: src/ui_prefswin.c:101 msgid "Equalizer" msgstr "Equalizer" #: src/ui_prefswin.c:102 msgid "Library" msgstr "Musik-Bibliothek" #: src/ui_prefswin.c:103 msgid "Mouse" msgstr "Maus" #: src/ui_prefswin.c:104 msgid "Playlist" msgstr "Wiedergabeliste" #: src/ui_prefswin.c:105 msgid "Playback" msgstr "Wiedergabe" #: src/ui_prefswin.c:111 msgid "Allows you to customize how text is displayed in the playlist" msgstr "" "Dieses Feld erlaubt es festzulegen, wie Titelinformationen in der " "Wiedergabeliste dargestellt werden" #: src/ui_prefswin.c:115 msgid "Here you can choose a skin to determine how BMP looks like" msgstr "" "Hiermit können sie einen Skin auswählen um das Erscheinungsbild von BMP " "festzulegen" #: src/ui_prefswin.c:119 msgid "" "Enabling this will make BMP remember the font for each skin individually, " "giving you more ease when theming BMP" msgstr "" "Wenn sie diese Option aktivieren, merkt sich BMP Schriftarten für jeden Skin " "einzeln, wodurch Ihnen das Ãndern des Gesamterscheinungsbildes erleichtert " "wird" #: src/ui_prefswin.c:123 msgid "Click on this button to select a font for BMP to use" msgstr "Klicken Sie auf diesen Knopf um eine Schriftart für BMP festzulegen" # Window Titles #: glade/dialog_preferences.glade:7 msgid "BMP Preferences" msgstr "BMP Einstellungen" # Generic #: glade/dialog_preferences.glade:139 #, fuzzy msgid "<b>_Skin</b>" msgstr "<b>_Schriftart</b>" #: glade/dialog_preferences.glade:220 msgid "label55" msgstr "" #: glade/dialog_preferences.glade:261 msgid "Building skin list, please wait." msgstr "Skin-Liste wird erstellt, bitte warten." #: glade/dialog_preferences.glade:309 msgid "label56" msgstr "" #: glade/dialog_preferences.glade:354 msgid "Use custom skin cursors" msgstr "Benutze Skin-Eigene Mauszeiger" # Generic #: glade/dialog_preferences.glade:394 msgid "<b>_Font</b>" msgstr "<b>_Schriftart</b>" #: glade/dialog_preferences.glade:452 #, fuzzy msgid "Select playlist font:" msgstr "Wiedergabelisten-Dateinamen setzen" #: glade/dialog_preferences.glade:504 msgid "Remember font for each skin individually" msgstr "Merke Schriftart für jeden Skin einzeln" #: glade/dialog_preferences.glade:590 msgid "<b>_Miscellaneous</b>" msgstr "<b>_Verschiedenes</b>" #: glade/dialog_preferences.glade:642 msgid "Display help tooltips" msgstr "Zeige Hilfepopups an" #: glade/dialog_preferences.glade:790 msgid "<span size=\"small\">30Hz</span>" msgstr "" #: glade/dialog_preferences.glade:846 msgid "<span size=\"small\">60Hz</span>" msgstr "" #: glade/dialog_preferences.glade:902 msgid "<span size=\"small\">125Hz</span>" msgstr "" #: glade/dialog_preferences.glade:958 msgid "<span size=\"small\">250Hz</span>" msgstr "" #: glade/dialog_preferences.glade:1014 msgid "<span size=\"small\">500Hz</span>" msgstr "" #: glade/dialog_preferences.glade:1070 msgid "<span size=\"small\">1KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1126 msgid "<span size=\"small\">2KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1182 msgid "<span size=\"small\">4KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1238 msgid "<span size=\"small\">8KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1294 msgid "<span size=\"small\">16KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1341 msgid "label58" msgstr "" #: glade/dialog_preferences.glade:1388 msgid "label59" msgstr "" # Preferences window #: glade/dialog_preferences.glade:1441 msgid "<b>_Track Display</b>" msgstr "<b>_Titelanzeige</b>" #: glade/dialog_preferences.glade:1487 msgid "Format String: " msgstr "Titelformat-String: " #: glade/dialog_preferences.glade:1553 msgid "Display Index Numbers In Tracklist" msgstr "Zeige Indexnummern in der Wiedergabeliste an" #: glade/dialog_preferences.glade:1583 msgid "label60" msgstr "" #: glade/dialog_preferences.glade:1630 msgid "label61" msgstr "" #: glade/dialog_preferences.glade:1695 msgid "<b>Library _Maintenance</b>" msgstr "<b>_Musikbibliotheks-Verwaltung</b>" #: glade/dialog_preferences.glade:1774 msgid "Add Path To Library..." msgstr "Verzeichnis zur Bibliothek hizufügen..." #: glade/dialog_preferences.glade:1807 msgid "Sanitize Library..." msgstr "Bibliothek aufräumen..." #: glade/dialog_preferences.glade:1880 msgid "" "<span size=\"small\">Sanitizing the library removes stale files from the " "cache.</span>" msgstr "" "<span size=\"small\">Beim Aufräumen der Bibliothek werden nicht mehr " "verfügbare Dateien aus der Bibliothek entfernt.</span>" #: glade/dialog_preferences.glade:1972 msgid "" "<span size=\"small\">This function will allow you to pre-load the metadata " "cache with music from a specified folder.</span>" msgstr "" "<span size=\"small\">Mit dieser Funktion können sie den Metadaten-Cache bzw. " "die Bibilothek mit Musik aus einem von Ihnen angegebenen Pfad füllen.</span>" #: glade/dialog_preferences.glade:2035 msgid "label86" msgstr "" #: glade/dialog_preferences.glade:2119 msgid "Processing..." msgstr "" #: glade/dialog_preferences.glade:2137 msgid "<span size=\"large\"><b>Please wait...</b></span>" msgstr "" #~ msgid "View" #~ msgstr "Ansicht" #~ msgid "Deselect All" #~ msgstr "Auswahl Aufheben" #~ msgid "This slider controls the volume" #~ msgstr "Dieser Regler stellt die Lautstärke ein" #~ msgid "This slider controls the left/right balance" #~ msgstr "Dieser Regler stellt die Links-/Rechts-Verschiebung ein" #~ msgid "With this slider you can seek within the track" #~ msgstr "" #~ "Mit diesem Regler können sie eine bestimmte Position innerhalb des Stücks " #~ "anwählen" #~ msgid "BMP File Information" #~ msgstr "BMP Datei-Informationen" #~ msgid "BMP Rename Playlist" #~ msgstr "BMP Wiedergabeliste Umbenennen" #~ msgid "BMP Add Files" #~ msgstr "BMP Dateien Hinzufügen" #~ msgid "BMP Add From Library" #~ msgstr "BMP Dateien aus Bibliothek hizufügen" --- NEW FILE: quot.sed --- (This appears to be a binary file; contents omitted.) --- NEW FILE: ChangeLog --- Wed Nov 26 09:20:47 SGT 2003 Chong Kai Xiong <des...@ph...> * Makefile.in.in: New file, from gettext-0.12.1. * en@boldquot.header: New file, from gettext-0.12.1. * en@quot.header: New file, from gettext-0.12.1. Fri Aug 8 17:12:10 CEST 2003 Håvard Kvålen <ha...@xm...> * sl.po: New translation by Tadej Panjtar <pa...@em...> * LINGUAS: Add "sl" (Slovenian). Wed Jul 16 01:41:20 CEST 2003 Håvard Kvålen <ha...@xm...> * no.po: Updated. [...1172 lines suppressed...] Andrew Lee <an...@cl...>, Chih-Wei Huang <cw...@li...>. * zh_TW.Big5.po: Added translation by: Jouston Huang <http://Linuxfab.cx> <jo...@li...>, Andrew Lee <an...@cl...>, Chih-Wei Huang <cw...@li...>. * wa.po: Added translation by: Pablo Saratxaga <sr...@ch...> * uk.po: Added translation by: "Dmytro Koval'ov" <ko...@to...> * fr.po: Added translation by: Eric Fernandez-Bellot <fer...@cg...> * de.po: Added translation by: Colin Marquardt <co...@ma...> --- NEW FILE: en@quot.header --- # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # --- NEW FILE: stamp-po --- timestamp --- NEW FILE: POTFILES --- ../src/ui_main.c \ ../src/ui_playlist.c \ ../src/ui_prefswin.c \ ../glade/dialog_preferences.glade --- NEW FILE: POTFILES.in --- # src src/ui_main.c src/ui_playlist.c src/ui_prefswin.c # glade glade/dialog_preferences.glade --- NEW FILE: en@boldquot.header --- # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # --- NEW FILE: Makevars.template --- # Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = --- NEW FILE: boldquot.sed --- (This appears to be a binary file; contents omitted.) --- NEW FILE: bmpx.pot --- # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-09-09 02:22+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL...@li...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/ui_main.c:112 src/ui_main.c:113 src/ui_main.c:298 msgid "Quit BMP" msgstr "" #: src/ui_main.c:118 src/ui_main.c:119 msgid "About BMP" msgstr "" #: src/ui_main.c:124 src/ui_main.c:125 msgid "Preferences" msgstr "" #: src/ui_main.c:134 msgid "Stop After Current Track" msgstr "" #: src/ui_main.c:158 msgid "Show Playlist Editor" msgstr "" #: src/ui_main.c:166 msgid "Scroll Textbox" msgstr "" #: src/ui_main.c:176 msgid "Toggle Shuffle Mode" msgstr "" #: src/ui_main.c:187 msgid "Toggle Playlist Repeat" msgstr "" #: src/ui_main.c:198 msgid "Toggle Equalizer window visibility" msgstr "" #: src/ui_main.c:209 msgid "Toggle Playlist window visibility" msgstr "" #: src/ui_main.c:235 msgid "Open Files" msgstr "" #: src/ui_main.c:244 msgid "Previous Track" msgstr "" #: src/ui_main.c:253 msgid "Play Current Track" msgstr "" #: src/ui_main.c:262 msgid "Toggle Pause" msgstr "" #: src/ui_main.c:271 msgid "Stop Playback" msgstr "" #: src/ui_main.c:280 msgid "Next Track" msgstr "" #: src/ui_main.c:289 msgid "Minimize BMP" msgstr "" #: src/ui_playlist.c:122 msgid "New Playlist" msgstr "" #: src/ui_playlist.c:126 msgid "Remove Playlist" msgstr "" #: src/ui_playlist.c:130 msgid "Remove All Playlists" msgstr "" #: src/ui_playlist.c:134 msgid "Rename Playlist" msgstr "" #: src/ui_playlist.c:138 msgid "Set Playlist Filename" msgstr "" #: src/ui_playlist.c:142 msgid "File Information" msgstr "" #: src/ui_playlist.c:146 msgid "Add CD..." msgstr "" #: src/ui_playlist.c:149 msgid "Add Files..." msgstr "" #: src/ui_playlist.c:152 msgid "Add From Library..." msgstr "" #: src/ui_playlist.c:155 msgid "Add Files to New..." msgstr "" #: src/ui_playlist.c:158 msgid "Remove Selected" msgstr "" #: src/ui_playlist.c:161 msgid "Remove Unselected" msgstr "" #: src/ui_playlist.c:164 msgid "Remove All" msgstr "" #: src/ui_playlist.c:169 msgid "Select All" msgstr "" #: src/ui_playlist.c:172 msgid "Select None" msgstr "" #: src/ui_playlist.c:175 msgid "Invert Selection" msgstr "" #: src/ui_playlist.c:180 msgid "Sort by Visible Title" msgstr "" #: src/ui_playlist.c:183 msgid "Sort by Artist" msgstr "" #: src/ui_playlist.c:186 msgid "Sort by Album" msgstr "" #: src/ui_playlist.c:189 msgid "Sort by Title" msgstr "" #: src/ui_playlist.c:192 msgid "Sort by Genre" msgstr "" #: src/ui_playlist.c:195 msgid "Sort by Tracknumber" msgstr "" #: src/ui_prefswin.c:100 glade/dialog_preferences.glade:718 msgid "Appearance" msgstr "" #: src/ui_prefswin.c:101 msgid "Equalizer" msgstr "" #: src/ui_prefswin.c:102 msgid "Library" msgstr "" #: src/ui_prefswin.c:103 msgid "Mouse" msgstr "" #: src/ui_prefswin.c:104 msgid "Playlist" msgstr "" #: src/ui_prefswin.c:105 msgid "Playback" msgstr "" #: src/ui_prefswin.c:111 msgid "Allows you to customize how text is displayed in the playlist" msgstr "" #: src/ui_prefswin.c:115 msgid "Here you can choose a skin to determine how BMP looks like" msgstr "" #: src/ui_prefswin.c:119 msgid "" "Enabling this will make BMP remember the font for each skin individually, " "giving you more ease when theming BMP" msgstr "" #: src/ui_prefswin.c:123 msgid "Click on this button to select a font for BMP to use" msgstr "" #: glade/dialog_preferences.glade:7 msgid "BMP Preferences" msgstr "" #: glade/dialog_preferences.glade:139 msgid "<b>_Skin</b>" msgstr "" #: glade/dialog_preferences.glade:220 msgid "label55" msgstr "" #: glade/dialog_preferences.glade:261 msgid "Building skin list, please wait." msgstr "" #: glade/dialog_preferences.glade:309 msgid "label56" msgstr "" #: glade/dialog_preferences.glade:354 msgid "Use custom skin cursors" msgstr "" #: glade/dialog_preferences.glade:394 msgid "<b>_Font</b>" msgstr "" #: glade/dialog_preferences.glade:452 msgid "Select playlist font:" msgstr "" #: glade/dialog_preferences.glade:504 msgid "Remember font for each skin individually" msgstr "" #: glade/dialog_preferences.glade:590 msgid "<b>_Miscellaneous</b>" msgstr "" #: glade/dialog_preferences.glade:642 msgid "Display help tooltips" msgstr "" #: glade/dialog_preferences.glade:790 msgid "<span size=\"small\">30Hz</span>" msgstr "" #: glade/dialog_preferences.glade:846 msgid "<span size=\"small\">60Hz</span>" msgstr "" #: glade/dialog_preferences.glade:902 msgid "<span size=\"small\">125Hz</span>" msgstr "" #: glade/dialog_preferences.glade:958 msgid "<span size=\"small\">250Hz</span>" msgstr "" #: glade/dialog_preferences.glade:1014 msgid "<span size=\"small\">500Hz</span>" msgstr "" #: glade/dialog_preferences.glade:1070 msgid "<span size=\"small\">1KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1126 msgid "<span size=\"small\">2KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1182 msgid "<span size=\"small\">4KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1238 msgid "<span size=\"small\">8KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1294 msgid "<span size=\"small\">16KHz</span>" msgstr "" #: glade/dialog_preferences.glade:1341 msgid "label58" msgstr "" #: glade/dialog_preferences.glade:1388 msgid "label59" msgstr "" #: glade/dialog_preferences.glade:1441 msgid "<b>_Track Display</b>" msgstr "" #: glade/dialog_preferences.glade:1487 msgid "Format String: " msgstr "" #: glade/dialog_preferences.glade:1553 msgid "Display Index Numbers In Tracklist" msgstr "" #: glade/dialog_preferences.glade:1583 msgid "label60" msgstr "" #: glade/dialog_preferences.glade:1630 msgid "label61" msgstr "" #: glade/dialog_preferences.glade:1695 msgid "<b>Library _Maintenance</b>" msgstr "" #: glade/dialog_preferences.glade:1774 msgid "Add Path To Library..." msgstr "" #: glade/dialog_preferences.glade:1807 msgid "Sanitize Library..." msgstr "" #: glade/dialog_preferences.glade:1880 msgid "" "<span size=\"small\">Sanitizing the library removes stale files from the " "cache.</span>" msgstr "" #: glade/dialog_preferences.glade:1972 msgid "" "<span size=\"small\">This function will allow you to pre-load the metadata " "cache with music from a specified folder.</span>" msgstr "" #: glade/dialog_preferences.glade:2035 msgid "label86" msgstr "" #: glade/dialog_preferences.glade:2119 msgid "Processing..." msgstr "" #: glade/dialog_preferences.glade:2137 msgid "<span size=\"large\"><b>Please wait...</b></span>" msgstr "" --- NEW FILE: remove-potcdate.sin --- # Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } --- NEW FILE: Makefile.in.in --- # Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <dr...@gn...> # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.14 PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @echo "touch stamp-po" @echo timestamp > stamp-poT @mv stamp-poT stamp-po # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir); \ else \ cp -p $(srcdir)/$$file $(distdir); \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: --- NEW FILE: Makevars --- # Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = --- NEW FILE: insert-header.sin --- # Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } |
From: Milosz D. <mde...@us...> - 2005-09-10 05:25:21
|
Update of /cvsroot/beepmp/bmpx/po In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26864/po Log Message: Directory /cvsroot/beepmp/bmpx/po added to the repository |
From: Milosz D. <mde...@us...> - 2005-09-10 05:21:25
|
Update of /cvsroot/beepmp/bmpx/dbus-examples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26410/dbus-examples Added Files: Makefile.am README bmp-dbus-introspect.c bmp-dbus-query-lists.c bmp-dbus-system-control.c Log Message: New directories docs/ and dbus-examples/ --- NEW FILE: bmp-dbus-introspect.c --- #include <dbus/dbus-glib.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { DBusGConnection *bus; DBusGProxy *remote_object_introspectable; GError *error = NULL; gchar *introspect_data; gint k, n; g_type_init (); { GLogLevelFlags fatal_mask; fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL; g_log_set_always_fatal (fatal_mask); } bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); if (!bus) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "Couldn't connect to session bus: %s", error->message); exit (EXIT_FAILURE); } remote_object_introspectable = dbus_g_proxy_new_for_name (bus, "org.beepmediaplayer.SystemControl", "/org/beepmediaplayer/SystemControl/BmpSystemControl", "org.freedesktop.DBus.Introspectable"); if (!dbus_g_proxy_call (remote_object_introspectable, "Introspect", &error, G_TYPE_INVALID, G_TYPE_STRING, &introspect_data, G_TYPE_INVALID)) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "Failed to complete Introspect: %s", error->message); exit (EXIT_FAILURE); } printf ("%s", introspect_data); g_free (introspect_data); exit(EXIT_SUCCESS); } --- NEW FILE: README --- bmp-dbus-query-lists.c: Description: Sample client that requests the name of all currently loaded playlists, and lists the lists with the files they contain in a simple XML format. Usage: bmp-dbus-query-lists bmp-dbus-send-control-message.c: Description: Sample client which sends a control message to BMP. Usage: bmp-dbus-send-control-message <message> <message-args> Details: Currently implemented commands are: (Please consult the output of bmp-dbus-introspect) bmp-dbus-introspect.c: Description: Runs a DBus introspection query and prints the result onto stdout Usage: bmp-dbus-introspect Details: --- NEW FILE: bmp-dbus-system-control.c --- #include <dbus/dbus-glib.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { DBusGConnection *bus; DBusGProxy *remote_object; GError *error = NULL; GValueArray *array_command_args; GValue value = {0,}; gchar *listname, *filename, *aux, *type_id, *data, **fragments; gint k, n, aux_int; g_type_init (); { GLogLevelFlags fatal_mask; fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL; g_log_set_always_fatal (fatal_mask); } bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); if (!bus) { g_log (G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Couldn't connect to session bus: %s", error->message); exit (EXIT_FAILURE); } remote_object = dbus_g_proxy_new_for_name (bus, "org.beepmediaplayer.SystemControl", "/org/beepmediaplayer/SystemControl/BmpSystemControl", "org.beepmediaplayer.SystemControl"); /* FIXME: Provide a generic interface a la gst-launch: bmp-dbus-system-control SomeCommand int=5 string='blahblah' */ if (! strcmp(argv[1], "Quit")) { if (!dbus_g_proxy_call (remote_object, "Quit", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "UiStart")) { if (!dbus_g_proxy_call (remote_object, "UiStart", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "UiStop")) { if (!dbus_g_proxy_call (remote_object, "UiStop", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "PlayNext")) { if (!dbus_g_proxy_call (remote_object, "PlayNext", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "PlayPrev")) { if (!dbus_g_proxy_call (remote_object, "PlayPrev", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "PlayPause")) { if (!dbus_g_proxy_call (remote_object, "PlayPause", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "PlayStop")) { if (!dbus_g_proxy_call (remote_object, "PlayStop", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "PlayCurrent")) { if (!dbus_g_proxy_call (remote_object, "PlayCurrent", &error, G_TYPE_INVALID, G_TYPE_INVALID)) g_message(error->message); goto END; } if (! strcmp(argv[1], "PlayTrack")) { gint track; track = strtol (argv[2], NULL, 10); if (!dbus_g_proxy_call (remote_object, "PlayTrack", &error, G_TYPE_INT, track, G_TYPE_INVALID, G_TYPE_INVALID)); goto END; } if (! strcmp(argv[1], "PlayListTrack")) { gint track; track = strtol (argv[3], NULL, 10); if (!dbus_g_proxy_call (remote_object, "PlayListTrack", &error, G_TYPE_STRING, argv[2], G_TYPE_INT, track, G_TYPE_INVALID, G_TYPE_INVALID)); goto END; } if (! strcmp(argv[1], "Volume")) { gint volume; volume = strtol (argv[2], NULL, 10); if (!dbus_g_proxy_call (remote_object, "Volume", &error, G_TYPE_INT, volume, G_TYPE_INVALID, G_TYPE_INVALID)); goto END; } if (! strcmp(argv[1], "SetCurrentList")) { gint list; list = strtol (argv[2], NULL, 10); if (!dbus_g_proxy_call (remote_object, "SetCurrentList", &error, G_TYPE_INT, list, G_TYPE_INVALID, G_TYPE_INVALID)); goto END; } if (! strcmp(argv[1], "Repeat")) { gint repeat; repeat = strtol (argv[2], NULL, 10); if (!dbus_g_proxy_call (remote_object, "Repeat", &error, G_TYPE_INT, repeat, G_TYPE_INVALID, G_TYPE_INVALID)); goto END; } if (! strcmp(argv[1], "Seek")) { gint seek; seek = strtol (argv[2], NULL, 10); if (!dbus_g_proxy_call (remote_object, "Seek", &error, G_TYPE_INT, seek, G_TYPE_INVALID, G_TYPE_INVALID)); goto END; } END: exit(EXIT_SUCCESS); } --- NEW FILE: Makefile.am --- transform = s/_/-/g if HAVE_DBUS bin_PROGRAMS = bmp_dbus_query_lists bmp_dbus_system_control bmp_dbus_introspect bmp_dbus_query_lists_LDADD = \ @GTK_LIBS@ @DBUS_LIBS@ -ltag_c -lfam bmp_dbus_query_lists_CFLAGS = \ @GTK_CFLAGS@ @BMPX_DEFINES@ @DBUS_CFLAGS@ -std=c99 -pedantic \ -DDBUS_API_SUBJECT_TO_CHANGE bmp_dbus_query_lists_SOURCES = \ bmp-dbus-query-lists.c bmp_dbus_system_control_LDADD = \ @GTK_LIBS@ @DBUS_LIBS@ -ltag_c -lfam bmp_dbus_system_control_CFLAGS = \ @GTK_CFLAGS@ @BMPX_DEFINES@ @DBUS_CFLAGS@ -std=c99 -pedantic \ -DDBUS_API_SUBJECT_TO_CHANGE bmp_dbus_system_control_SOURCES = \ bmp-dbus-system-control.c bmp_dbus_introspect_LDADD = \ @GTK_LIBS@ @DBUS_LIBS@ -ltag_c -lfam bmp_dbus_introspect_CFLAGS = \ @GTK_CFLAGS@ @BMPX_DEFINES@ @DBUS_CFLAGS@ -std=c99 -pedantic \ -DDBUS_API_SUBJECT_TO_CHANGE bmp_dbus_introspect_SOURCES = \ bmp-dbus-introspect.c endif EXTRA_DIST = \ README --- NEW FILE: bmp-dbus-query-lists.c --- #include <dbus/dbus-glib.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { DBusGConnection *bus; DBusGProxy *remote_object; GError *error = NULL; GValueArray *array_lists; GValueArray *array_list; gchar *listname, *filename, *aux; gint k, n; g_type_init (); { GLogLevelFlags fatal_mask; fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK); fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL; g_log_set_always_fatal (fatal_mask); } bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error); if (!bus) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "Couldn't connect to session bus: %s", error->message); exit (EXIT_FAILURE); } remote_object = dbus_g_proxy_new_for_name (bus, "org.beepmediaplayer.SystemControl", "/org/beepmediaplayer/SystemControl/BmpSystemControl", "org.beepmediaplayer.SystemControl"); if (!dbus_g_proxy_call (remote_object, "GetPlaylists", &error, G_TYPE_INVALID, G_TYPE_VALUE_ARRAY, &array_lists, G_TYPE_INVALID)) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "failed to complete getplaylists: %s", error->message); exit(EXIT_FAILURE); } printf ("<?xml version='1.0'?>\n"); printf ("<bmp:playlists>\n\n"); for (k = 0; k < array_lists->n_values; k++) { listname = g_value_get_string(g_value_array_get_nth(array_lists,k)); printf("\t<bmp:playlist name='%s'>\n", listname); if (!dbus_g_proxy_call (remote_object, "GetPlaylist", &error, G_TYPE_STRING, listname, G_TYPE_INVALID, G_TYPE_VALUE_ARRAY, &array_list, G_TYPE_INVALID)) { g_log (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, "Failed to complete GetPlaylist: %s", error->message); } for (n = 0; n < array_list->n_values; n++) { filename = g_value_get_string(g_value_array_get_nth(array_list,n)); aux = g_markup_escape_text(filename, strlen(filename)); printf ("\t\t<bmp:playlist-file position='%d'>%s</playlist-file>\n", n, aux); g_free(aux); } printf("\t</bmp:playlist>\n"); } printf("\n</bmp:playlists>\n\n"); exit(EXIT_SUCCESS); } |
From: Milosz D. <mde...@us...> - 2005-09-10 05:21:25
|
Update of /cvsroot/beepmp/bmpx/docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26410/docs Added Files: Makefile.am config-file-format.html media-library-format.html Log Message: New directories docs/ and dbus-examples/ --- NEW FILE: config-file-format.html --- <html> <head> <title>BMP XML Configuration File Format Documentation</title> <style type="text/css"/> tt { color: #101090; padding: 4px;} body { text-align: justify; margin-right: 2em; font-size: 10pt;} li { margin-bottom: 1em; } #example { margin-left: 6em; background-color: #e0e0e0; padding: 2em; border: 1px solid black;} .underline { text-decoration: none; font-weight: bold; color: #4040f0;} .domain { margin-left: 6em; } .key-name { font-family: monospace; color: blue; } .typename { color: green; font-weight: bold;} </style> </head> <body> <h1>BMP XML Configuration File</h1> <div id="header"> <p>BMP now uses an XML format to store it's session-persistent configuration settings. This document describes the format and explains the possible/settable values.</p> </div> <div> The configuration file is <span class="underline">domain/key based</span>. This means there are 'domains' which are contained inside the element <tt><domain/></tt> of which you can think as of 'sets', e.g. one 'set' (for example) for the playlist window, one set for the main window, one set with global settings, etc. Each <tt><domain/></tt> element holds an <tt>id</tt> attribute which specifies the <span class="underline">unique domain identifer</span>. <p>Each of the domains contains any number of keys, which are held inside a <tt><key/></tt> element, which has an <tt>id</tt> attribute that specifies the key id. <span class="underline">The key id has to be unique per-domain, but not inter-domain unique.</span> A key also has a <tt>type</tt> attribute which specifies it's value type. The type can be one of <tt>string</tt>, <tt>integer</tt> or <tt>boolean</tt>. For booleans, a value of either 'TRUE' or '1' means true, any other value means false. Unlike the <tt><domain/></tt> element, the <tt><key/></tt> element also holds a text node child which is the <span class="underline">key value</span>. <p> To illustrate everything better, here is a complete exemplary configuration file: <p> <div id="example"> <tt> <?xml version="1.0"?><br/> <bmp version="0.7"><br/><br/> <domain id="bmp"><br/> <key id="playlists-path" type="string">/home/user/.bmp/playlists</key><br/> <key id="skin" type="string">/home/user/share/bmpx/skins/default</key><br/> <key id="titlestring-format" type="string">%p: %t</key><br/> <key id="volume" type="integer">0</key><br/> </domain><br/><br/> <domain id="playlist-window"><br/> <key id="vsep-width" type="integer">250</key><br/> <key id="font" type="string">Bitstream Vera Sans 9</key><br/> <key id="pos_x" type="integer">251</key><br/> <key id="pos_y" type="integer">148</key><br/> <key id="width" type="integer">550</key><br/> <key id="height" type="integer">464</key><br/> <key id="visible" type="boolean">TRUE</key><br/> <key id="current-playlist" type="string">Bossa_Nova_2001</key><br/> </domain><br/><br/> <domain id="main-window"><br/> <key id="pos_x" type="integer">801</key><br/> <key id="pos_y" type="integer">148</key><br/> </domain><br/><br/> </bmp> </tt> </div> <p> First of all, we have the root node, <tt><bmp></tt>, which also holds the version information of the bmp version that saved this configuration file (note that 0.7 currently refers to the BMPx codebase version, not the mainline BMP which is at 0.9.7.1 in CVS). This root node contains the domains with their keys. <p> This example configuration file shows also all domains/keys currently respected by BMP (BMPx). Following a listing of all domains and keys with explanations. <p> <div> <div class="domain"> <h3>Domain: 'bmp'</h3> <ul> <li><span class="key-name"><span class="typename">string:</span> playlists-path</span><br/> Specifies the path where BMP is saving the playlists at exit. This can be any local path (not URI, currently), e..g $HOME/Desktop/Playlists (although you presently can't use $HOME in the specification, you have to use a fully qualified path). At the moment this cannot be changed trough the GUI so make sure you also actually move your playlists when you change the path. </li> <li><span class="key-name"><span class="typename">string:</span> skin</span><br/> Specifies the fully qualified local path to the currently used skin file or directory (not URI).<br/>Changeable from the GUI (Preferences section 'Appearance') (Actually you choose the skin trough a list, but what gets stored is the respective's skin file path.) </li> <li><span class="key-name"><span class="typename">string:</span> titlestring-format</span><br/> The titlestring format which specifies how metadata is displayed in the track list.<br/>Changeable from the GUI (Preferences section 'Playlist'). </li> <li><span class="key-name"><span class="typename">integer:</span> volume</span><br/> The saved volume at exit. Integer value, range 0-100. </li> <li><span class="key-name"><span class="typename">string:</span> file-chooser-path</span><br/> The path at which the file selector was the last time it was opened. </li> </ul> </div> <div class="domain"> <h3>Domain: 'playlist-window'</h3> <ul> <li><span class="key-name"><span class="typename">integer:</span> vsep-width</span><br/> Specifies the width of the right-side of the playlist pane. Do not change this value manually, the results could be unexpected. </li> <li><span class="key-name"><span class="typename">string:</span> font</span><br/> Specifies the font used in the playlist window.<br/>Changeable from the GUI (Preferences section 'Appearance'). </li> <li><span class="key-name"><span class="typename">integer:</span> pos_x</span><br/> Saved x-position of the playlist window.<br/>Don't change it manually unless needed (error condition or other). </li> <li><span class="key-name"><span class="typename">integer:</span> pos_y</span><br/> Saved y-position of the playlist window.<br/>Don't change it manually unless needed (error condition or other). </li> <li><span class="key-name"><span class="typename">integer:</span> width</span><br/> Saved width of the playlist window.<br/>Don't change it manually unless needed (error condition or other). </li> <li><span class="key-name"><span class="typename">integer:</span> height</span><br/> Saved height of the playlist window.<br/>Don't change it manually unless needed (error condition or other). </li> <li><span class="key-name"><span class="typename">boolean:</span> visible</span><br/> Indicates whether the playlist window should be initially shown after startup. </li> <li><span class="key-name"><span class="typename">string:</span> current-playlist</span><br/> The currently selected playlist name as file basename without extension. </li> </ul> </div> <div class="domain"> <h3>Domain: 'main-window'</h3> <ul> <li><span class="key-name"><span class="typename">integer:</span> pos_x</span><br/> Saved x-position of the main window.<br/>Don't change it manually unless needed (error condition or other). </li> <li><span class="key-name"><span class="typename">integer:</span> pos_y</span><br/> Saved y-position of the main window.<br/>Don't change it manually unless needed (error condition or other). </li> </ul> </div> </div> </body> </html> --- NEW FILE: Makefile.am --- EXTRA_DIST= HTML_FILES= \ config-file-format.html \ media-library-format.html all-local: $(HTML_FILES) EXTRA_DIST += $(HTML_FILES) --- NEW FILE: media-library-format.html --- <html> <head> <title>BMP Media Cache Format Documentation</title> <style type="text/css"/> .underline { text-decoration: none; font-weight: bold; color: #4040f0;} .domain { margin-left: 6em; } .key-name { font-family: monospace; color: blue; } .typename { color: green; font-weight: bold;} .info { color: #425ad5; } #packets { margin-top: 2em; } body { font-size: 10pt; } p { margin-left: 3em; margin-right: 2em;} ul { margin-left: 3em; } li { margin-top: 1.5em; margin-right: 2em; } tt { color: red; } </style> </head> <body> <h1>BMP Media Cache Format Documentation</h1> <p>The media library used by BMP is a binary metadata cache, binary here means it's not a human readable format like XML or CSV or plain text; this choice was made mostly because of speed concerns. <h2>File Format</h2> <p> <ul> <li>The beginning of the file must contain the string <tt>'MC'</tt> (in uppercase ASCII, non-null terminated) followed by the <tt>uint16_t</tt> value <tt>'666'</tt>; in other words the first 4 bytes of a BMP media cache file are <tt>0x4D 0x43 0x9A 0x02</tt>. This is the 'file magic' for BMP media cache files, and only those containing this file magic at the start of the file are recognized as BMP media cache files by BMP.</li> </ul> </p> <p>Following can be any of the following packets. Each packet type is identified by a <tt>uint8_t</tt> value, following the individual packet data as described below.</p> <div id="packets"> <h2>Packet Types</h2> <ul> <li><tt>0x01</tt><br/> Library Name<br/><br/> This packet holds the individual libary's name. This packet is <b><i>optional</i></b>.<br/> The next value is a <tt>uint8_t</tt> size of the following, <b><i>non-null terminated</i></b> string which is the library name. It should be obvious but just to make it totally clear, using a <tt>uint8_t</tt> size for the string length <b><i>limits the name to a maximal length of 255 characters</i></b>. </li> <li><tt>0x02</tt><br/> Media File<br/><br/> This packet type holds the information about a particular file. It is divided into sub-packets which are identified by a <tt>uint8_t</tt> value. They are described in the following list:<br/><br/> <ul> <li><tt>0x01</tt><br/> Database File ID<br/><br/> Following is a <tt>uint16_t</tt> value with the database's unique file id (UFID) for this file. It must not change for every individual file between reads and (re)-writes of the cache file. </li> <li><tt>0x02</tt><br/> File URI<br/><br/> Following is a <tt>uint16_t</tt> value with the length of the file's URI string, and directly after that the string itself. Currently only 'file://' URIs are supported. </li> <li><tt>0x03</tt><br/> Metadata Value<br/><br/> Following is a <tt>uint8_t</tt> identifier which specifies which particular metadatum is following. The enumeration is this (it is identical to the enumeration in <tt>src/bmp_metadata.h</tt>):<br/> <p> <tt>0x00</tt> TITLE</li><br/> <tt>0x01</tt> TIME</li><br/> <tt>0x02</tt> TRACK</li><br/> <tt>0x03</tt> RATING</li><br/> <tt>0x04</tt> ARTIST</li><br/> <tt>0x05</tt> ALBUM</li><br/> <tt>0x06</tt> DATE</li><br/> <tt>0x07</tt> GENRE</li><br/> <tt>0x08</tt> COMMENT</li><br/> <tt>0x09</tt> BITRATE</li><br/> </p> Currently all values are being saved as strings. Hence the next following field is a <tt>uint16_t</tt> value holding the length of the actual contents of the individual metadatum, after that the (non-null terminated) string holding the data itself.<br/><br/> Even though the point of the media cache is to cache metadata, holding metadata is optional for a file record in the BMP media cache file; it is possible for a file record to not hold any Metadata Value packet at all. Possible reasons are for example that the file simply doesn't hold any metadata; it is up to the application to make something out of that, e.g. use the filename for display instead of metadata. </li> <li><tt>0x04</tt><br/> End of Media File<br/><br/> No data follows, it signalises the end of the Media File packet. </li> </ul> <li><tt>0x03</tt><br/> EMC (End of Media Cache)<br/><br/> This packet signalizes the end of the cache file. No other data follows, it is a signal to the application to stop reading the metadata cache.</li> </ul> </div> </body> </html> |
From: Milosz D. <mde...@us...> - 2005-09-10 05:19:10
|
Update of /cvsroot/beepmp/bmpx/docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25978/docs Log Message: Directory /cvsroot/beepmp/bmpx/docs added to the repository |
From: Milosz D. <mde...@us...> - 2005-09-10 05:17:11
|
Update of /cvsroot/beepmp/bmpx/dbus-examples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25819/dbus-examples Log Message: Directory /cvsroot/beepmp/bmpx/dbus-examples added to the repository |
From: Milosz D. <mde...@us...> - 2005-09-10 05:16:14
|
Update of /cvsroot/beepmp/bmpx/ui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25648/ui Modified Files: main.ui playlist.ui Log Message: Readded src/ tree, updated icons and images Index: main.ui =================================================================== RCS file: /cvsroot/beepmp/bmpx/ui/main.ui,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** main.ui 7 Aug 2005 13:29:08 -0000 1.1 --- main.ui 10 Sep 2005 05:16:05 -0000 1.2 *************** *** 1,10 **** <ui> ! <popup action='dummy' name='menu_main'> ! <menu action='dummy-view-menu' name='menu_main_view'> <menuitem action='bmp_toggle_action_pl' /> </menu> <separator/> <menuitem action='bmp_action_about' /> <menuitem action='bmp_action_quit' /> ! </popup> </ui> --- 1,19 ---- <ui> ! <menubar name='popup'> ! <menu action='dummy' name='menu-main'> ! <menuitem action='bmp_action_preferences' /> ! <menu action='dummy-view-menu' name='menu-main-view'> <menuitem action='bmp_toggle_action_pl' /> + <menuitem action='bmp_toggle_action_scroll' /> </menu> <separator/> <menuitem action='bmp_action_about' /> <menuitem action='bmp_action_quit' /> ! </menu> ! ! <menu action='dummy' name='menu-button-stop'> ! <menuitem action='bmp_toggle_action_stop_after_next' /> ! </menu> ! ! </menubar> </ui> Index: playlist.ui =================================================================== RCS file: /cvsroot/beepmp/bmpx/ui/playlist.ui,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** playlist.ui 7 Aug 2005 13:29:08 -0000 1.1 --- playlist.ui 10 Sep 2005 05:16:05 -0000 1.2 *************** *** 1,8 **** <ui> ! <popup action='dummy' name='menu_playlists'> <menuitem action='plist_add' /> <menuitem action='plist_del' /> <menuitem action='plist_rename' /> ! <menuitem action='plist_set_filename' /> ! </popup> </ui> --- 1,70 ---- <ui> ! <menubar name='popup'> ! <menu action='dummy' name='menu-playlists'> <menuitem action='plist_add' /> + <menuitem action='plist_rename' /> + <!--separator/> + <menuitem action='tracklist_add_to_new' /--> + <separator/> + <!--menuitem action='plist_set_filename' /--> <menuitem action='plist_del' /> + <menuitem action='plist_del_all' /> + </menu> + <menu action='dummy' name='menu-list'> + <menuitem action='plist_del' /> + <separator/> + <!--menuitem action='plist_set_filename' /--> <menuitem action='plist_rename' /> ! <menuitem action='plist_add' /> ! </menu> ! <menu action='dummy' name='menu-tracklist'> ! <menuitem action='tracklist_fileinfo' /> ! <separator/> ! <menuitem action='tracklist_add_files' /> ! <menuitem action='tracklist_add_library' /> ! <!--menuitem action='tracklist_add_to_new' /> ! <separator/> ! <menuitem action='tracklist_add_library_new' /--> ! <separator/> ! <!--menuitem action='tracklist_add_files' /> ! <menuitem action='tracklist_add_library' /> ! <separator/--> ! <menuitem action='tracklist_del_files' /> ! <menuitem action='tracklist_crop_files' /> ! <menuitem action='tracklist_del_files_all' /> ! <!--separator/> ! <menuitem action='tracklist_select_all' /> ! <menuitem action='tracklist_select_none' /> ! <menuitem action='tracklist_select_invert' /--> ! </menu> ! <menu action='dummy' name='menu-del'> ! <menuitem action='tracklist_del_files_all' /> ! <menuitem action='tracklist_crop_files' /> ! <menuitem action='tracklist_del_files' /> ! </menu> ! <menu action='dummy' name='menu-add'> ! <menuitem action='tracklist_add_cd' /> ! <!--separator/> ! <menuitem action='tracklist_add_to_new' /--> ! <separator/> ! <menuitem action='tracklist_add_library' /> ! <menuitem action='tracklist_add_files' /> ! </menu> ! <menu action='dummy' name='menu-select'> ! <menuitem action='tracklist_select_invert' /> ! <separator/> ! <menuitem action='tracklist_select_none' /> ! <menuitem action='tracklist_select_all' /> ! </menu> ! <menu action='dummy' name='menu-sort'> ! <menuitem action='bmp_sort_track' /> ! <menuitem action='bmp_sort_title' /> ! <menuitem action='bmp_sort_genre' /> ! <menuitem action='bmp_sort_artist' /> ! <menuitem action='bmp_sort_album' /> ! <separator/> ! <menuitem action='bmp_sort_visible' /> ! </menu> ! ! </menubar> </ui> |
Update of /cvsroot/beepmp/bmpx/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25648/src Added Files: Makefile.am bmp-system-control.xml bmp.marshalers bmp_button.c bmp_button.h bmp_button_toggle.c bmp_button_toggle.h bmp_configuration.c bmp_configuration.h bmp_dock.c bmp_dock.h bmp_list.c bmp_list.h bmp_marshalers.c bmp_marshalers.h bmp_metadata.c bmp_metadata.h bmp_play.c bmp_play.gst.c bmp_play.gst.h bmp_play.h bmp_playlist.c bmp_playlist.h bmp_rel.c bmp_rel.h bmp_resource_manager.c bmp_resource_manager.h bmp_slider.c bmp_slider.h bmp_sm.c bmp_sm.h bmp_system_control.c bmp_system_control.h bmp_system_control_glue.h bmp_tooltips.c bmp_tooltips.h bmp_ui.c bmp_ui.h bmp_window.c bmp_window.h chroma_button.c chroma_button.h chroma_list.c chroma_list.h chroma_list.old.c chroma_vscrollbar.c chroma_vscrollbar.h chroma_widgets.h dnd.h error.h fam_monitor.c fam_monitor.h g_object_get.c g_object_get.h g_object_get.in.c g_object_get.in.h g_object_get.types glade.c glade.h gtkbindings.h gtkcontainer.h gtkhsv.c gtkhsv.h gtkmarshalers.h gtkprivate.h list_manager.c list_manager.h logger.c logger.h main.c main.h mkgets.sh song.c song.h types.h ui_about_dialog.c ui_about_dialog.h ui_callbacks.c ui_callbacks.h ui_equalizer.c ui_equalizer.h ui_main.c ui_main.h ui_playlist.c ui_playlist.h ui_prefswin.c ui_prefswin.h ui_util.c ui_util.h util.c util.h xml_document.c xml_document.h Log Message: Readded src/ tree, updated icons and images --- NEW FILE: ui_playlist.c --- #include <string.h> #include <stdlib.h> #include <glib/gi18n.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <glade/glade.h> #include <main.h> #include <bmp_ui.h> #include <dnd.h> #include <ui_main.h> #include <ui_playlist.h> #include <ui_util.h> /* bmp_dock.c/bmp_dock.h (C) 1998-2003 XMMS.org, (C) 2004-2005 BMP DT */ #include <bmp_dock.h> #include <bmp_window.h> [...2155 lines suppressed...] "signal::row_activated", G_CALLBACK(on_playlist_playlists_row_activated), bmp_play, NULL); g_object_connect (G_OBJECT(chroma_widgets[BMP_CHROMA_LIST_TRACKLIST]->widget), "signal::changed", G_CALLBACK(on_playlist_tracklist_changed), self, "signal::row_activated", G_CALLBACK(on_playlist_tracklist_row_activated), bmp_play, NULL); /* Initialize Actions (indirectly) */ chroma_list_emit_changed(CHROMA_LIST(chroma_widgets[BMP_CHROMA_LIST_PLAYLISTS]->widget)); chroma_list_emit_changed(CHROMA_LIST(chroma_widgets[BMP_CHROMA_LIST_TRACKLIST]->widget)); return self; } --- NEW FILE: ui_playlist.h --- #ifndef UI_PLAYLIST_H #define UI_PLAYLIST_H #include <glib-object.h> #define BMP_TYPE_WINDOW_PLAYLIST (bmp_window_playlist_get_type ()) #define BMP_WINDOW_PLAYLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BMP_TYPE_WINDOW_PLAYLIST, BmpWindowPlaylist)) #define BMP_WINDOW_PLAYLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BMP_TYPE_WINDOW_PLAYLIST, BmpWindowPlaylistClass)) #define BMP_IS_WINDOW_PLAYLIST(obj) (GTK_CHECK_TYPE ((obj), BMP_TYPE_WINDOW_PLAYLIST)) #define BMP_IS_WINDOW_PLAYLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BMP_TYPE_WINDOW_PLAYLIST)) #define BMP_WINDOW_PLAYLIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BMP_TYPE_WINDOW_PLAYLIST, BmpWindowPlaylistClass)) typedef struct _BmpWindowPlaylist BmpWindowPlaylist; typedef struct _BmpWindowPlaylistClass BmpWindowPlaylistClass; typedef struct _BmpWindowPlaylistPrivate BmpWindowPlaylistPrivate; struct _BmpWindowPlaylist { GObject parent; BmpWindowPlaylistPrivate *private; GtkWidget *window; }; struct _BmpWindowPlaylistClass { GObjectClass parent; }; GType bmp_window_playlist_get_type (void); BmpWindowPlaylist* bmp_window_playlist_new (void); void bmp_window_playlist_finalize_init (BmpWindowPlaylist *self); void bmp_window_playlist_configure(BmpWindowPlaylist *window_playlist); /* FIXME: Make this properties */ void bmp_window_playlist_set_font(BmpWindowPlaylist *window_playlist, const gchar * font); gint bmp_window_playlist_get_vsep_width (BmpWindowPlaylist *window_main); void bmp_window_playlist_resize_widgets (BmpWindowPlaylist *self); #endif /* UI_PLAYLIST_H */ --- NEW FILE: bmp_resource_manager.c --- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ #include <gtk/gtk.h> #include <bmp_resource_manager.h> G_DEFINE_TYPE(BmpResourceManager, bmp_resource_manager, G_TYPE_OBJECT) #if 0 typedef enum { BMP_RESOURCE_MANAGER_N_SIGNALS } BmpResourceManagerSignals; static guint bmp_resource_manager_signals[BMP_RESOURCE_MANAGER_N_SIGNALS] = {}; #endif typedef enum { BMP_RESOURCE_MANAGER_N_PROPERTIES } BmpResourceManagerProperties; struct _BmpResourceManagerPrivate { gboolean dispose_has_run; GHashTable *root; }; static void free_resource_item (BmpResource *item) { } static GHashTable* get_path (BmpResourceManager *self, const gchar *path) { BmpResource *resource; GHashTable *ht_path; gchar **path_elements, **_path_elements; g_return_val_if_fail (BMP_IS_RESOURCE_MANAGER(self), NULL); ht_path = self->private->root; if (! path) return ht_path; path_elements = g_strsplit (path, RM_PATH_DELIMITER_S, -1); if (! path_elements) return NULL; _path_elements = path_elements; while (*path_elements) { resource = g_hash_table_lookup (ht_path, *path_elements); if (! resource) { g_strfreev(_path_elements); return NULL; } else { ht_path = resource->value; path_elements++; } } return ht_path; } static BmpResource* get_item (BmpResourceManager *self, const gchar *path, const gchar *item_name) { GHashTable *ht_path; ht_path = get_path (self, path); return g_hash_table_lookup (ht_path, item_name); } static void create_new_node_path (BmpResourceManager *self, const gchar *path, const gchar *name) { GHashTable *ht, *ht_path; BmpResource *item; item = g_new0(BmpResource,1); ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_resource_item); item->type = BMP_RESOURCE_BRANCH; item->name = g_strdup(name); item->destroy = NULL; item->lock = NULL; item->value = ht; ht_path = get_path (self, path); if (! ht_path) { free_resource_item (item); return; } g_hash_table_insert (ht_path, name, item); } static void create_new_node_item (BmpResourceManager *self, const gchar *path, const gchar *name, gpointer value, GDestroyNotify destroy) { GHashTable *ht_path; BmpResource *item; item = g_new0(BmpResource,1); item->type = BMP_RESOURCE_DATA; item->name = g_strdup(name); item->destroy = destroy; item->lock = g_mutex_new(); item->value = value; ht_path = get_path (self, path); if (! ht_path) { free_resource_item (item); return; } g_hash_table_insert (ht_path, name, item); } /* Public API */ gboolean bmp_resource_manager_create_path (BmpResourceManager *self, const gchar *parent_path, const gchar *path) { create_new_node_path (self, parent_path, path); return TRUE; } gboolean bmp_resource_manager_append_item (BmpResourceManager *self, const gchar *path, const gchar *name, gpointer item_value, GDestroyNotify item_value_destroy) { create_new_node_item (self, path, name, item_value, item_value_destroy); return TRUE; } gpointer bmp_resource_manager_get_item (BmpResourceManager *self, const gchar *path, const gchar *name) { BmpResource *item; item = get_item (self, path, name); if (! item) return NULL; return item->value; } gpointer bmp_resource_manager_get_item_locked (BmpResourceManager *self, const gchar *path, const gchar *name) { BmpResource *item; item = get_item (self, path, name); if (! item) return NULL; g_mutex_lock (item->lock); return item->value; } void bmp_resource_manager_unlock_item (BmpResourceManager *self, const gchar *path, const gchar *name) { BmpResource *item; item = get_item (self, path, name); if (! item) return NULL; g_mutex_unlock (item->lock); } /* GObject */ static void bmp_resource_manager_init (BmpResourceManager *self) { self->private = g_new (BmpResourceManagerPrivate, 1); self->private->dispose_has_run = FALSE; self->private->root = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); } static void bmp_resource_manager_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { default: /* We don't have any other property... */ g_assert (FALSE); break; } } static void bmp_resource_manager_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { default: /* We don't have any other property... */ g_assert (FALSE); break; } } static GObject * bmp_resource_manager_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { GObject *obj; { /* Invoke parent constructor. */ BmpResourceManagerClass *klass; GObjectClass *parent_class; klass = BMP_RESOURCE_MANAGER_CLASS (g_type_class_peek (BMP_TYPE_RESOURCE_MANAGER)); parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); obj = parent_class->constructor (type, n_construct_properties, construct_properties); } /* do stuff. */ return obj; } static void bmp_resource_manager_dispose (GObject *obj) { BmpResourceManager *self = (BmpResourceManager *)obj; if (self->private->dispose_has_run) { /* If dispose did already run, return. */ return; } /* Make sure dispose does not run twice. */ self->private->dispose_has_run = TRUE; /* * In dispose, you are supposed to free all types referenced from this * object which might themselves hold a reference to self. Generally, * the most simple solution is to unref all members on which you own a * reference. */ } static void bmp_resource_manager_finalize (GObject *obj) { BmpResourceManager *self = (BmpResourceManager *)obj; /* * Here, complete object destruction. * You might not need to do much... */ g_free (self->private); } BmpResourceManager* bmp_resource_manager_new (void) { BmpResourceManager *rm; rm = g_object_new (bmp_resource_manager_get_type (), NULL); return rm; } static void bmp_resource_manager_class_init (BmpResourceManagerClass *g_class) { GObjectClass *gobject_class = G_OBJECT_CLASS (g_class); gobject_class->set_property = bmp_resource_manager_set_property; gobject_class->get_property = bmp_resource_manager_get_property; gobject_class->dispose = bmp_resource_manager_dispose; gobject_class->finalize = bmp_resource_manager_finalize; gobject_class->constructor = bmp_resource_manager_constructor; } --- NEW FILE: gtkhsv.c --- /* HSV color selector for GTK+ * * Copyright (C) 1999 The Free Software Foundation * * Authors: Simon Budig <Sim...@un...> (original code) * Federico Mena-Quintero <fed...@gi...> (cleanup for GTK+) * Jonathan Blandford <jr...@re...> (cleanup for GTK+) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public [...1749 lines suppressed...] gint8 *dash_list; focus_gc = gdk_gc_new (widget->window); gdk_gc_copy (focus_gc, widget->style->fg_gc[GTK_WIDGET_STATE (widget)]); gtk_widget_style_get (widget, "focus-line-width", line_width, "focus-line-pattern", (gchar *)&dash_list, NULL); gdk_gc_set_line_attributes (focus_gc, *line_width, dash_list[0] ? GDK_LINE_ON_OFF_DASH : GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); if (dash_list[0]) gdk_gc_set_dashes (focus_gc, 0, dash_list, strlen ((const gchar*)dash_list)); g_free (dash_list); return focus_gc; } --- NEW FILE: bmp_configuration.c --- #include <stdlib.h> #include <stdio.h> #include <string.h> #include <assert.h> #include <signal.h> #include <getopt.h> #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <glib.h> #include <glib-object.h> #include <glib/gstdio.h> #include <gtk/gtk.h> #include <libxml/tree.h> [...970 lines suppressed...] g_value_init (&value, G_TYPE_INT); g_value_set_int (&value, value_arg); bmp_configuration_key_set (configuration, domain_id, key_id, &value, TRUE); } void bmp_configuration_key_set_string (BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, gchar *value_arg) { GValue value = {0,}; g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, value_arg); bmp_configuration_key_set (configuration, domain_id, key_id, &value, TRUE); } --- NEW FILE: bmp_play.gst.h --- #ifndef _BMP_PLAY_H #define _BMP_PLAY_H #include <glib-object.h> #include <gst/gst.h> #define BMP_TYPE_PLAY (bmp_play_get_type ()) #define PLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BMP_TYPE_PLAY, BmpPlay)) #define PLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BMP_TYPE_PLAY, BmpPlayClass)) #define BMP_IS_PLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BMP_TYPE_PLAY)) #define BMP_IS_PLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BMP_TYPE_PLAY)) #define PLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BMP_TYPE_PLAY, BmpPlayClass)) typedef struct _BmpPlay BmpPlay; typedef struct _BmpPlayClass BmpPlayClass; typedef struct _BmpPlayPrivate BmpPlayPrivate; struct _BmpPlay { GObject parent; /* * instance members */ BmpPlayPrivate *private; }; struct _BmpPlayClass { GObjectClass parent; void (*eos) (BmpPlay * self); void (*error) (BmpPlay * self); void (*buffer) (BmpPlay * self); void (*no_sound) (BmpPlay * self); }; typedef enum { PLAYSTATUS_STOPPED = 1 << 1, PLAYSTATUS_PLAYING = 1 << 2, PLAYSTATUS_PAUSED = 1 << 3, PLAYSTATUS_SEEKING = 1 << 4, PLAYSTATUS_WAITING = 1 << 5 } BmpPlaybackstatus; /* * used by BMP_TYPE_PLAY */ GType bmp_play_get_type(void); /* * API */ BmpPlay* bmp_play_new(void); gboolean bmp_play_prepare(BmpPlay * self); gboolean bmp_play_set_stream(BmpPlay * self, const gchar * uri); gboolean bmp_play_ready(BmpPlay * self); gboolean bmp_play_change_stream(BmpPlay * self, const gchar * uri); gboolean bmp_play_play_stream(BmpPlay * self); gboolean bmp_play_pause_stream(BmpPlay * self); gboolean bmp_play_stop_stream (BmpPlay * play); gboolean bmp_play_seek_stream(BmpPlay * self, gint offset); gint bmp_play_get_time(BmpPlay * self); gint bmp_play_get_length(BmpPlay * self); GstElementState bmp_play_get_element_state(BmpPlay * self); void bmp_play_set_volume(BmpPlay * self, gdouble volume); void bmp_play_probe_outsinks(BmpPlay * play); #endif /* PLAY_H */ --- NEW FILE: bmp_rel.c --- /* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ /* * MT safe */ #include <stdarg.h> #include <string.h> #include <glib.h> #include <bmp_rel.h> typedef struct _GRealTuples GRealTuples; struct _BmpRelation { gint fields; gint current_field; GHashTable *all_tuples; GHashTable **hashed_tuple_tables; GMemChunk *tuple_chunk; gint count; }; struct _GRealTuples { gint len; gint width; gpointer *data; }; static gboolean tuple_equal_2 (gconstpointer v_a, gconstpointer v_b) { gpointer* a = (gpointer*) v_a; gpointer* b = (gpointer*) v_b; return a[0] == b[0] && a[1] == b[1]; } static guint tuple_hash_2 (gconstpointer v_a) { gpointer* a = (gpointer*) v_a; return (gulong)a[0] ^ (gulong)a[1]; } static GHashFunc tuple_hash (gint fields) { switch (fields) { case 2: return tuple_hash_2; default: g_error ("no tuple hash for %d", fields); } return NULL; } static GEqualFunc tuple_equal (gint fields) { switch (fields) { case 2: return tuple_equal_2; default: g_error ("no tuple equal for %d", fields); } return NULL; } BmpRelation* bmp_relation_new (gint fields) { BmpRelation* rel = g_new0 (BmpRelation, 1); rel->fields = fields; rel->tuple_chunk = g_mem_chunk_new ("Relation Chunk", fields * sizeof (gpointer), fields * sizeof (gpointer) * 128, G_ALLOC_AND_FREE); rel->all_tuples = g_hash_table_new (tuple_hash (fields), tuple_equal (fields)); rel->hashed_tuple_tables = g_new0 (GHashTable*, fields); return rel; } static void bmp_relation_free_array (gpointer key, gpointer value, gpointer user_data) { g_hash_table_destroy ((GHashTable*) value); } void bmp_relation_destroy (BmpRelation *relation) { gint i; if (relation) { g_hash_table_destroy (relation->all_tuples); g_mem_chunk_destroy (relation->tuple_chunk); for (i = 0; i < relation->fields; i += 1) { if (relation->hashed_tuple_tables[i]) { g_hash_table_foreach (relation->hashed_tuple_tables[i], bmp_relation_free_array, NULL); g_hash_table_destroy (relation->hashed_tuple_tables[i]); } } g_free (relation->hashed_tuple_tables); g_free (relation); } } void bmp_relation_index (BmpRelation *relation, gint field, GHashFunc hash_func, GEqualFunc key_equal_func) { g_return_if_fail (relation != NULL); g_return_if_fail (relation->count == 0 && relation->hashed_tuple_tables[field] == NULL); relation->hashed_tuple_tables[field] = g_hash_table_new (hash_func, key_equal_func); } void bmp_relation_insert (BmpRelation *relation, ...) { gpointer* tuple = g_chunk_new (gpointer, relation->tuple_chunk); va_list args; gint i; va_start(args, relation); for (i = 0; i < relation->fields; i += 1) tuple[i] = va_arg(args, gpointer); va_end(args); g_hash_table_insert (relation->all_tuples, tuple, tuple); relation->count += 1; for (i = 0; i < relation->fields; i += 1) { GHashTable *table; gpointer key; GHashTable *per_key_table; table = relation->hashed_tuple_tables[i]; if (table == NULL) continue; key = tuple[i]; per_key_table = g_hash_table_lookup (table, key); if (per_key_table == NULL) { per_key_table = g_hash_table_new (tuple_hash (relation->fields), tuple_equal (relation->fields)); g_hash_table_insert (table, key, per_key_table); } g_hash_table_insert (per_key_table, tuple, tuple); } } static void bmp_relation_delete_tuple (gpointer tuple_key, gpointer tuple_value, gpointer user_data) { gpointer *tuple = (gpointer*) tuple_value; BmpRelation *rel = (BmpRelation *) user_data; gint j; g_assert (tuple_key == tuple_value); for (j = 0; j < rel->fields; j += 1) { GHashTable *one_table = rel->hashed_tuple_tables[j]; gpointer one_key; GHashTable *per_key_table; if (one_table == NULL) continue; if (j == rel->current_field) /* can't delete from the table we're foreaching in */ continue; one_key = tuple[j]; per_key_table = g_hash_table_lookup (one_table, one_key); g_hash_table_remove (per_key_table, tuple); } g_hash_table_remove (rel->all_tuples, tuple); rel->count -= 1; } gint bmp_relation_delete (BmpRelation *relation, gconstpointer key, gint field) { GHashTable *table = relation->hashed_tuple_tables[field]; GHashTable *key_table; gint count = relation->count; g_return_val_if_fail (relation != NULL, 0); g_return_val_if_fail (table != NULL, 0); key_table = g_hash_table_lookup (table, key); if (!key_table) return 0; relation->current_field = field; g_hash_table_foreach (key_table, bmp_relation_delete_tuple, relation); g_hash_table_remove (table, key); g_hash_table_destroy (key_table); /* @@@ FIXME: Remove empty hash tables. */ return count - relation->count; } static void bmp_relation_select_tuple (gpointer tuple_key, gpointer tuple_value, gpointer user_data) { gpointer *tuple = (gpointer*) tuple_value; GRealTuples *tuples = (GRealTuples*) user_data; gint stride = sizeof (gpointer) * tuples->width; g_assert (tuple_key == tuple_value); memcpy (tuples->data + (tuples->len * tuples->width), tuple, stride); tuples->len += 1; } BmpTuples* bmp_relation_select (BmpRelation *relation, gconstpointer key, gint field) { GHashTable *table = relation->hashed_tuple_tables[field]; GHashTable *key_table; GRealTuples *tuples = g_new0 (GRealTuples, 1); gint count; g_return_val_if_fail (relation != NULL, NULL); g_return_val_if_fail (table != NULL, NULL); key_table = g_hash_table_lookup (table, key); if (!key_table) return (BmpTuples*)tuples; count = bmp_relation_count (relation, key, field); tuples->data = g_malloc (sizeof (gpointer) * relation->fields * count); tuples->width = relation->fields; g_hash_table_foreach (key_table, bmp_relation_select_tuple, tuples); g_assert (count == tuples->len); return (BmpTuples*)tuples; } typedef struct _RelationSelectData RelationSelectData; struct _RelationSelectData { GList *tables; gpointer key; gint count; GCompareDataFunc compare_data_func; gpointer compare_user_data; }; static void relation_select_custom (gpointer key, gpointer value, RelationSelectData *select_data) { if (select_data->compare_data_func (key, select_data->key, select_data->compare_user_data)) { select_data->tables = g_list_append (select_data->tables, value); select_data->count += g_hash_table_size (value); } } BmpTuples* bmp_relation_select_custom (BmpRelation *relation, gconstpointer key, gint field, GCompareDataFunc compare_data_func, gpointer user_data) { GHashTable *table = relation->hashed_tuple_tables[field]; GHashTable *key_table; GRealTuples *tuples = g_new0 (GRealTuples, 1); RelationSelectData *select_data = g_new0(RelationSelectData, 1); gint count; g_return_val_if_fail (relation != NULL, NULL); g_return_val_if_fail (table != NULL, NULL); select_data->tables = NULL; select_data->key = key; select_data->count = 0; select_data->compare_user_data = user_data; select_data->compare_data_func = compare_data_func; g_hash_table_foreach (table, relation_select_custom, select_data); if (! select_data->tables) return (BmpTuples*)tuples; count = select_data->count; tuples->data = g_malloc (sizeof (gpointer) * relation->fields * count); tuples->width = relation->fields; while (select_data->tables) { g_hash_table_foreach (select_data->tables->data, bmp_relation_select_tuple, tuples); select_data->tables = g_list_next (select_data->tables); } g_assert (count == tuples->len); return (BmpTuples*)tuples; } gint bmp_relation_count (BmpRelation *relation, gconstpointer key, gint field) { GHashTable *table = relation->hashed_tuple_tables[field]; GHashTable *key_table; g_return_val_if_fail (relation != NULL, 0); g_return_val_if_fail (table != NULL, 0); key_table = g_hash_table_lookup (table, key); if (!key_table) return 0; return g_hash_table_size (key_table); } gboolean bmp_relation_exists (BmpRelation *relation, ...) { gpointer* tuple = g_chunk_new (gpointer, relation->tuple_chunk); va_list args; gint i; gboolean result; va_start(args, relation); for (i = 0; i < relation->fields; i += 1) tuple[i] = va_arg(args, gpointer); va_end(args); result = g_hash_table_lookup (relation->all_tuples, tuple) != NULL; g_mem_chunk_free (relation->tuple_chunk, tuple); return result; } void bmp_tuples_destroy (BmpTuples *tuples0) { GRealTuples *tuples = (GRealTuples*) tuples0; if (tuples) { g_free (tuples->data); g_free (tuples); } } gpointer bmp_tuples_index (BmpTuples *tuples0, gint index, gint field) { GRealTuples *tuples = (GRealTuples*) tuples0; g_return_val_if_fail (tuples0 != NULL, NULL); g_return_val_if_fail (field < tuples->width, NULL); return tuples->data[index * tuples->width + field]; } /* Print */ static void bmp_relation_print_one (gpointer tuple_key, gpointer tuple_value, gpointer user_data) { gint i; GString *gstring; BmpRelation* rel = (BmpRelation*) user_data; gpointer* tuples = (gpointer*) tuple_value; gstring = g_string_new ("["); for (i = 0; i < rel->fields; i += 1) { g_string_append_printf (gstring, "%p", tuples[i]); if (i < (rel->fields - 1)) g_string_append (gstring, ","); } g_string_append (gstring, "]"); g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, gstring->str); g_string_free (gstring, TRUE); } static void bmp_relation_print_index (gpointer tuple_key, gpointer tuple_value, gpointer user_data) { BmpRelation* rel = (BmpRelation*) user_data; GHashTable* table = (GHashTable*) tuple_value; g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "*** key %p", tuple_key); g_hash_table_foreach (table, bmp_relation_print_one, rel); } void bmp_relation_print (BmpRelation *relation) { gint i; g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "*** all tuples (%d)", relation->count); g_hash_table_foreach (relation->all_tuples, bmp_relation_print_one, relation); for (i = 0; i < relation->fields; i += 1) { if (relation->hashed_tuple_tables[i] == NULL) continue; g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "*** index %d", i); g_hash_table_foreach (relation->hashed_tuple_tables[i], bmp_relation_print_index, relation); } } --- NEW FILE: bmp_play.gst.c --- #include <string.h> #include <assert.h> #include <signal.h> #include <getopt.h> #include <pthread.h> #include <sys/time.h> #include <sys/select.h> #include <sys/types.h> #include <unistd.h> #include <glib.h> #include <glib-object.h> #include <bmp_play.h> #include <config.h> #ifdef HAVE_GST #include <gst/gst.h> G_DEFINE_TYPE (BmpPlay, bmp_play, G_TYPE_OBJECT) enum { BMP_PLAY_SIGNAL_EOS, BMP_PLAY_SIGNAL_ERROR, BMP_PLAY_SIGNAL_BUFFER, BMP_PLAY_SIGNAL_NO_SOUND_OUTPUT, BMP_PLAY_N_SIGNALS }; static guint signals[BMP_PLAY_N_SIGNALS] = { 0, 0, 0, 0 }; enum { BMP_PLAY_PROP_STREAM = 1, BMP_PLAY_PROP_PLAYSTATUS = 2, BMP_PLAY_N_PROPS }; struct _BmpPlayPrivate { gboolean dispose_has_run; GstElement *playbin; GstElement *outsink; gchar *uri; gint playstatus; gdouble volume; }; static GObject *bmp_play_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties); static GstBusSyncReply bmp_play_bus_watch (GstBus *bus, GstMessage *message, BmpPlay *self); #if 0 void dn_caps_cb (GstElement * identity, GObject * obj, GParamSpec * pspec, gpointer data) { const GstCaps *caps; GstStructure *structure; gchar *s; gint chans = 0, rate = 0; g_return_if_fail (G_IS_OBJECT (obj)); if (!GST_IS_PAD (obj) || !GST_PAD_IS_SINK (GST_PAD (obj))) return; if (!gst_pad_is_negotiated (GST_PAD (obj))) return; caps = gst_pad_get_negotiated_caps (GST_PAD (obj)); s = gst_caps_to_string (caps); g_print ("Caps: %s\n", s); g_free (s); structure = gst_caps_get_structure (caps, 0); if (gst_structure_get_int (structure, "channels", &chans) && gst_structure_get_int (structure, "rate", &rate)) { g_print ("Format: %s\nChannels: %d\nRate: %d\n", gst_structure_get_name (structure), chans, rate); } } #endif void bmp_play_set_volume (BmpPlay * play, gdouble volume) { g_return_if_fail (BMP_IS_PLAY (play)); g_object_set (play->private->playbin, "volume", volume, NULL); } static void _playobjects_destroy (BmpPlay * play) { g_return_if_fail (BMP_IS_PLAY (play)); } static void _playobjects_create (BmpPlay *play) { play->private->playbin = gst_element_factory_make ("playbin", "playbin"); play->private->outsink = gst_element_factory_make ("alsasink", "alsasink"); g_object_set (G_OBJECT(play->private->outsink), "buffer-time", (gint64)50000, NULL); g_object_set (G_OBJECT(play->private->outsink), "latency-time", (gint64)500, NULL); g_object_set (G_OBJECT(play->private->playbin), "audio-sink", play->private->outsink, NULL); g_object_set (G_OBJECT(play->private->playbin), "play-timeout", (guint64)3000000000, NULL); gst_bus_set_sync_handler (gst_element_get_bus (GST_ELEMENT (play->private->playbin)), bmp_play_bus_watch, play); } #if 0 static gboolean bmp_play_eos_cb (BmpPlay * play, GstElement * element) { g_return_val_if_fail (BMP_IS_PLAY (play), FALSE); g_signal_emit (G_OBJECT (play), signals[BMP_PLAY_SIGNAL_EOS], g_quark_from_string (""), NULL); return FALSE; } #endif static void bmp_play_error_cb (BmpPlay * play, GstElement * arg1, GError * arg2, gchar * arg3, GstElement * element) { gchar *detail; if (!arg3) detail = g_strdup (""); else detail = g_strdup (arg3); g_signal_emit (G_OBJECT (play), signals[BMP_PLAY_SIGNAL_ERROR], g_quark_from_string (detail), arg2, NULL); g_idle_add ((GSourceFunc) _playobjects_destroy, play); } gboolean bmp_play_prepare (BmpPlay * play) { g_object_set (play->private->playbin, "uri", play->private->uri, 0); return TRUE; } gboolean bmp_play_stop_stream (BmpPlay * play) { g_return_val_if_fail (BMP_IS_PLAY (play), FALSE); gst_element_set_state (play->private->playbin, GST_STATE_READY); g_usleep(50000); return TRUE; } gboolean bmp_play_ready (BmpPlay * play) { g_return_val_if_fail (BMP_IS_PLAY (play), FALSE); gst_element_set_state (play->private->playbin, GST_STATE_READY); return TRUE; } gboolean bmp_play_play_stream (BmpPlay * play) { g_return_val_if_fail (BMP_IS_PLAY (play), FALSE); if (gst_element_set_state (play->private->playbin, GST_STATE_PLAYING) == GST_STATE_FAILURE) { gst_element_set_state (play->private->playbin, GST_STATE_READY); return FALSE; } return TRUE; } gboolean bmp_play_pause_stream (BmpPlay * play) { if (GST_STATE(play->private->playbin) == GST_STATE_PLAYING) return gst_element_set_state (play->private->playbin, GST_STATE_PAUSED); else if (GST_STATE(play->private->playbin) == GST_STATE_PAUSED) return gst_element_set_state (play->private->playbin, GST_STATE_PLAYING); } gboolean bmp_play_seek_stream (BmpPlay * play, gint offset) { GstEvent *event; GstFormat fmt = GST_FORMAT_TIME; guint64 s_offset; s_offset = offset * GST_SECOND; return gst_element_seek (play->private->playbin, 1.0, fmt, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, s_offset, GST_SEEK_TYPE_SET, s_offset); } GstElementState bmp_play_get_element_state (BmpPlay * play) { return GST_STATE (play->private->playbin); } gint bmp_play_get_time (BmpPlay * play) { GstQuery *query; GstFormat fmt = GST_FORMAT_TIME; gint64 time_in_nanoseconds, length_in_nanoseconds; gint time_in_seconds; if (!(GST_STATE (play->private->playbin) == GST_STATE_PLAYING)) return 0; query = gst_query_new_position(fmt); gst_element_query (play->private->playbin, query); gst_query_parse_position (query, &fmt, &time_in_nanoseconds, &length_in_nanoseconds); time_in_seconds = time_in_nanoseconds / 1000000000; return time_in_seconds; } gint bmp_play_get_length (BmpPlay * play) { GstQuery *query; GstFormat fmt = GST_FORMAT_TIME; gint64 time_in_nanoseconds, length_in_nanoseconds; gint time_in_seconds; if (!(GST_STATE (play->private->playbin) == GST_STATE_PLAYING)) return 0; query = gst_query_new_position(fmt); gst_element_query (play->private->playbin, query); gst_query_parse_position (query, &fmt, &time_in_nanoseconds, &length_in_nanoseconds); length_in_nanoseconds = length_in_nanoseconds / 1000000000; return length_in_nanoseconds; } static gboolean bmp_play_playstatus_notify_cb (BmpPlay * play) { gint status; g_return_val_if_fail (BMP_IS_PLAY (play), FALSE); g_object_get (play, "playstatus", &status, NULL); if (status & PLAYSTATUS_SEEKING) { bmp_play_pause_stream (play); return TRUE; } if (status & PLAYSTATUS_STOPPED) { bmp_play_stop_stream (play); return TRUE; } if (status & PLAYSTATUS_PAUSED) { bmp_play_pause_stream (play); return TRUE; } if (status & PLAYSTATUS_PLAYING) { bmp_play_play_stream (play); return TRUE; } return FALSE; } static void bmp_play_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { BmpPlay *play = (BmpPlay *) object; switch (property_id) { case BMP_PLAY_PROP_PLAYSTATUS: { gint status = g_value_get_int (value); play->private->playstatus = status; } break; case BMP_PLAY_PROP_STREAM: { gchar *stream_uri; if (play->private->uri) g_free (play->private->uri); stream_uri = g_value_dup_string (value); play->private->uri = g_strdup (stream_uri); g_object_set (play->private->playbin, "uri", play->private->uri, 0); } break; default: g_assert (FALSE); break; } } static void bmp_play_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { BmpPlay *play = (BmpPlay *) object; switch (property_id) { case BMP_PLAY_PROP_STREAM: { g_value_set_string (value, play->private->uri); } break; case BMP_PLAY_PROP_PLAYSTATUS: { g_value_set_int (value, play->private->playstatus); } break; default: /* * We don't have any other property... */ g_assert (FALSE); break; } } static void bmp_play_dispose (GObject * obj) { BmpPlay *play = (BmpPlay *) obj; if (play->private->dispose_has_run) { /* * If dispose did already run, return. */ return; } /* * Make sure dispose does not run twice. */ play->private->dispose_has_run = TRUE; /* * In dispose, you are supposed to free all types referenced from this * object which might themselves hold a reference to play. Generally, * the most simple solution is to unref all members on which you own a * reference. */ } static void bmp_play_finalize (GObject * obj) { BmpPlay *play = (BmpPlay *) obj; /* * Here, complete object destruction. * You might not need to do much... */ g_free (play->private); } static void bmp_play_class_init (BmpPlayClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *pspec; gobject_class->set_property = bmp_play_set_property; gobject_class->get_property = bmp_play_get_property; gobject_class->dispose = bmp_play_dispose; gobject_class->finalize = bmp_play_finalize; gobject_class->constructor = bmp_play_constructor; pspec = g_param_spec_string ("uri", "uri", "uri", "", G_PARAM_READWRITE); g_object_class_install_property (gobject_class, BMP_PLAY_PROP_STREAM, pspec); pspec = g_param_spec_int ("playstatus", "playstatus", "player playing status", 0, 128, 0, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, BMP_PLAY_PROP_PLAYSTATUS, pspec); signals[BMP_PLAY_SIGNAL_BUFFER] = g_signal_new ("buffer", G_OBJECT_CLASS_TYPE (gobject_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (BmpPlayClass, buffer), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); signals[BMP_PLAY_SIGNAL_EOS] = g_signal_new ("eos", G_OBJECT_CLASS_TYPE (gobject_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (BmpPlayClass, eos), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); signals[BMP_PLAY_SIGNAL_ERROR] = g_signal_new ("error", G_OBJECT_CLASS_TYPE (gobject_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (BmpPlayClass, error), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); signals[BMP_PLAY_SIGNAL_NO_SOUND_OUTPUT] = g_signal_new ("no_sound", G_OBJECT_CLASS_TYPE (gobject_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED, G_STRUCT_OFFSET (BmpPlayClass, no_sound), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } BmpPlay * bmp_play_new (void) { BmpPlay *play; play = g_object_new (BMP_TYPE_PLAY, NULL); return play; } static GObject * bmp_play_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) { GObject *obj; { /* * Invoke parent constructor. */ BmpPlayClass *klass; GObjectClass *parent_class; klass = PLAY_CLASS (g_type_class_peek (BMP_TYPE_PLAY)); parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); obj = parent_class->constructor (type, n_construct_properties, construct_properties); } /* * do stuff. */ return obj; } static gboolean _idle_emit_eos (BmpPlay *play) { g_return_val_if_fail (BMP_IS_PLAY (play), FALSE); g_signal_emit (G_OBJECT (play), signals[BMP_PLAY_SIGNAL_EOS], 0, NULL); return FALSE; } #define MAX_RESET_RETRIES 1 static GstBusSyncReply bmp_play_bus_watch (GstBus *bus, GstMessage *message, BmpPlay *self) { GstElementState old_state, new_state; switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_STATE_CHANGED: { gst_message_parse_state_changed(message, &old_state, &new_state); g_message("OLD_STATE: %d, NEW_STATE: %d", old_state, new_state); } break; case GST_MESSAGE_ERROR: case GST_MESSAGE_WARNING: { GError *err; gchar *debug; gst_message_parse_error (message, &err, &debug); g_print ("%s ERROR: %s\n", G_STRFUNC, err->message); g_error_free (err); g_free (debug); g_message("RESETTING Playbin"); #if 0 bmp_play_stop_stream (self); if (reset_ctr < MAX_RESET_RETRIES) { g_usleep (500000); bmp_play_play_stream (self); reset_ctr++; } else { #endif gchar *uri; g_object_get (G_OBJECT(self->private->playbin), "uri", &uri, NULL); gst_element_set_state (self->private->playbin, GST_STATE_NULL); _playobjects_create (self); g_object_set (self->private->playbin, "uri", uri, NULL); bmp_play_play_stream (self); #if 0 reset_ctr = 0; } #endif } break; case GST_MESSAGE_EOS: { /* end-of-stream */ g_message("STOP stream"); g_idle_add (_idle_emit_eos, self); } break; default: /* unhandled message */ break; } /* remove message from the queue */ return GST_BUS_DROP; } static void bmp_play_init (BmpPlay * play) { play->private = g_new (BmpPlayPrivate, 1); play->private->dispose_has_run = FALSE; play->private->uri = NULL; _playobjects_create (play); g_signal_connect (G_OBJECT (play), "notify::playstatus", G_CALLBACK (bmp_play_playstatus_notify_cb), NULL); } #endif --- NEW FILE: bmp_configuration.h --- #ifndef CONFIGURATION_H #define CONFIGURATION_H #include <glib-object.h> G_BEGIN_DECLS #define BMP_TYPE_CONFIGURATION (bmp_configuration_get_type ()) #define BMP_CONFIGURATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BMP_TYPE_CONFIGURATION, BmpConfiguration)) #define BMP_CONFIGURATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BMP_TYPE_CONFIGURATION, BmpConfigurationClass)) #define BMP_IS_CONFIGURATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BMP_TYPE_CONFIGURATION)) #define BMP_IS_CONFIGURATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BMP_TYPE_CONFIGURATION)) #define BMP_CONFIGURATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BMP_TYPE_CONFIGURATION, BmpConfigurationClass)) typedef struct _BmpConfiguration BmpConfiguration; typedef struct _BmpConfigurationClass BmpConfigurationClass; typedef struct _BmpConfigurationPrivate BmpConfigurationPrivate; struct _BmpConfiguration { GObject parent; BmpConfigurationPrivate *private; }; struct _BmpConfigurationClass { GObjectClass parent; void (*removed) (BmpConfiguration * configuration); void (*changed) (BmpConfiguration * configuration); void (*added) (BmpConfiguration * configuration); }; GType bmp_configuration_get_type(void); BmpConfiguration* bmp_configuration_new(void); gboolean bmp_configuration_save(BmpConfiguration * configuration); gboolean bmp_configuration_domain_new(BmpConfiguration * configuration, const gchar * domain_id); gboolean bmp_configuration_key_new(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, GValue * key_value); gboolean bmp_configuration_key_set(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, GValue * key_value, gboolean create); gboolean bmp_configuration_key_unset (BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, gboolean create); /* Simple API */ GHashTable* bmp_configuration_domain_fetch(BmpConfiguration *configuration, const gchar * domain_id); void bmp_configuration_ht_destroy(BmpConfiguration * configuration, GHashTable * ht); gchar* bmp_configuration_key_fetch(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id); gint bmp_configuration_key_fetch_int(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id); gboolean bmp_configuration_key_fetch_boolean(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id); void bmp_configuration_key_set_string (BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, gchar *value_arg); void bmp_configuration_key_set_int (BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, gint value_arg); void bmp_configuration_key_set_boolean (BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, gboolean value_arg); gboolean bmp_configuration_domain_exists(BmpConfiguration * configuration, const gchar * domain_id); gboolean bmp_configuration_domain_has_keys(BmpConfiguration * configuration, const gchar * domain_id); gboolean bmp_configuration_key_find(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, const gchar * key_value); /* Either key_id or key_value can be null, but of course not both */ gboolean bmp_configuration_remove_domain(BmpConfiguration * configuration, const gchar * domain_id); gboolean bmp_configuration_remove_key(BmpConfiguration * configuration, const gchar * domain_id, const gchar * key_id, const gchar * key_value); #define LOOKUP_OR_CREATE_DEFAULT(domain_id,key_id,default_value) \ if (!bmp_configuration_key_find (bmp_configuration, domain_id, key_id, NULL)) \ { \ bmp_configuration_key_set_string (bmp_configuration, domain_id, key_id, default_value); \ } #define LOOKUP_OR_CREATE_DEFAULT_INT(domain_id,key_id,default_value) \ if (!bmp_configuration_key_find (bmp_configuration, domain_id, key_id, NULL)) \ { \ bmp_configuration_key_set_int (bmp_configuration, domain_id, key_id, default_value); \ } #define LOOKUP_OR_CREATE_DEFAULT_BOOLEAN(domain_id,key_id,default_value) \ if (!bmp_configuration_key_find (bmp_configuration, domain_id, key_id, NULL)) \ { \ bmp_configuration_key_set_boolean (bmp_configuration, domain_id, key_id, default_value); \ } #endif /* CONFIGURATION_H */ --- NEW FILE: bmp_rel.h --- /* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ /* * Modified by M. Derezynski 2005 for BMP (http://beepmp.sf.net) */ #ifndef __BMP_REL_H__ #define __BMP_REL_H__ #include <glib/gtypes.h> G_BEGIN_DECLS typedef struct _BmpRelation BmpRelation; typedef struct _BmpTuples BmpTuples; struct _BmpTuples { guint len; }; /* BmpRelation * * Indexed Relations. Imagine a really simple table in a * database. Relations are not ordered. This data type is meant for * maintaining a N-way mapping. * * bmp_relation_new() creates a relation with FIELDS fields * * bmp_relation_destroy() frees all resources * bmp_tuples_destroy() frees the result of bmp_relation_select() * * bmp_relation_index() indexes relation FIELD with the provided * equality and hash functions. this must be done before any * calls to insert are made. * * bmp_relation_insert() inserts a new tuple. you are expected to * provide the right number of fields. * * bmp_relation_delete() deletes all relations with KEY in FIELD * bmp_relation_select() returns ... * bmp_relation_count() counts ... */ BmpRelation* bmp_relation_new (gint fields); void bmp_relation_destroy (BmpRelation *relation); void bmp_relation_index (BmpRelation *relation, gint field, GHashFunc hash_func, GEqualFunc key_equal_func); void bmp_relation_insert (BmpRelation *relation, ...); gint bmp_relation_delete (BmpRelation *relation, gconstpointer key, gint field); BmpTuples* bmp_relation_select (BmpRelation *relation, gconstpointer key, gint field); BmpTuples* bmp_relation_select_custom (BmpRelation *relation, gconstpointer key, gint field, GCompareDataFunc compare_data_func, gpointer user_data); gint bmp_relation_count (BmpRelation *relation, gconstpointer key, gint field); gboolean bmp_relation_exists (BmpRelation *relation, ...); void bmp_relation_print (BmpRelation *relation); void bmp_tuples_destroy (BmpTuples *tuples); gpointer bmp_tuples_index (BmpTuples *tuples, gint index_, gint field); G_END_DECLS #endif /* __BMP_REL_H__ */ --- NEW FILE: bmp_metadata.c --- #include <gtk/gtk.h> #include <taglib/tag_c.h> #include <main.h> #include <bmp_metadata.h> #include <bmp_rel.h> G_DEFINE_TYPE (BmpMetadataCache, bmp_metadata_cache, G_TYPE_OBJECT) struct _BmpMetadataCachePrivate { gboolean dispose_has_run; FILE *fh; gint ufid; GHashTable *ht_uri; GHashTable *ht_ufid; /* We hold a shallow-copy-based hash table for each metadatum */ GHashTable *ht_metadatum[BMP_TAG_NONE]; BmpRelation *database; }; struct _BmpTagDefine { gchar *title; gchar *id; BmpTagId tag_id; }; typedef struct _BmpTagDefine BmpTagDefine; /* We're using GST-style tag identifiers here */ static BmpTagDefine bmp_tag_defines[] = { {"Title", "title", BMP_TAG_TITLE}, {"Time", "time", BMP_TAG_TIME}, {"Track", "track-number", BMP_TAG_TRACK}, {"Rating", "rating", BMP_TAG_RATING}, {"Artist", "artist", BMP_TAG_ARTIST}, {"Album", "album", BMP_TAG_ALBUM}, {"Date", "date", BMP_TAG_DATE}, {"Genre", "genre", BMP_TAG_GENRE}, {"Comment", "comment", BMP_TAG_COMMENT}, {"Bitrate", "bitrate", BMP_TAG_BITRATE}, {"Location", "location", BMP_TAG_LOCATION} }; G_LOCK_DEFINE(METADATA); const gchar* bmp_metadata_get_id (BmpTagId tag_id) { return bmp_tag_defines[tag_id].id; } const gchar* bmp_metadata_get_title (BmpTagId tag_id) { return bmp_tag_defines[tag_id].title; } const gchar* bmp_metadata_get_field (GHashTable *metadata, BmpTagId tag_id) { return g_hash_table_lookup (metadata, bmp_metadata_get_id(tag_id)); } static void metadata_get_from_uri (GHashTable *metadata) { TagLib_File *file = NULL; TagLib_Tag *tag = NULL; TagLib_AudioProperties const *audio = NULL; gchar *artist, *album, *title, *track, *year, *genre, *comment, *ttime, *rating, *bitrate, *title_rep, *album_rep = NULL, *filename, *uri; uri = g_hash_table_lookup (metadata, "uri"); filename = g_filename_from_uri (uri, NULL, NULL); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_LOCATION), g_strdup(uri)); if (! filename) return; file = taglib_file_new (filename); if (file) { tag = taglib_file_tag (file); if (!tag) { g_message ("%s: no metadata", filename); taglib_file_free (file); return; } audio = taglib_file_audioproperties (file); track = g_strdup_printf ("%d", taglib_tag_track (tag)); year = g_strdup_printf ("%d", taglib_tag_year (tag)); artist = taglib_tag_artist (tag); album = taglib_tag_album (tag); title = taglib_tag_title (tag); genre = taglib_tag_genre (tag); comment = taglib_tag_comment (tag); ttime = g_strdup_printf ("%d", taglib_audioproperties_length (audio)); rating = g_strdup ("0"); bitrate = g_strdup_printf ("%d",taglib_audioproperties_bitrate (audio)); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_BITRATE), bitrate); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_RATING), rating); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_TIME), ttime); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_TRACK), track); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_ARTIST), g_strdup (artist)); if (strlen (title) == 0) { title_rep = g_path_get_basename (filename); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_TITLE), g_strdup (title_rep)); g_free (title_rep); } else { g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_TITLE), g_strdup (title)); } if (strlen (album) == 0) { gchar **path_frags; gint n = 0; path_frags = g_strsplit (filename, "/", -1); while (path_frags[n + 1]) { album_rep = path_frags[n++]; } g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_ALBUM), g_strdup (album_rep)); g_strfreev (path_frags); } else { g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_ALBUM), g_strdup (album)); } g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_GENRE), g_strdup (genre)); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_DATE), year); g_hash_table_insert (metadata, bmp_metadata_get_id (BMP_TAG_COMMENT), g_strdup (comment)); taglib_tag_free_strings (); taglib_file_free (file); } else { #ifdef HAVE_XINE bmp_play_get_metadata_xine (bmp_play, metadata, uri); #endif #ifdef HAVE_GST bmp_play_get_metadata_gst (bmp_play, filename); #endif } } GHashTable* bmp_metadata_get_from_uri (const gchar *uri) { GHashTable *metadata; return bmp_metadata_cache_get_metadata_for_uri (bmp_metadata_cache, uri); } typedef struct { gint start; gint end; BmpListType *list; } MetadataThreadTuple; static gpointer metadata_thread (MetadataThreadTuple *mtt) { BmpFileItem *item; GHashTable *metadata; gint n; for (n = mtt->start; n < mtt->end; n++) { item = g_list_nth(mtt->list->items, n)->data; if (item->metadata == NULL) { item->locked = TRUE; item->metadata = bmp_metadata_get_from_uri (item->uri); item->dirty = TRUE; item->locked = FALSE; } } g_thread_exit(NULL); } void bmp_metadata_get_for_files_threaded (BmpListType *list, gint start, gint end) { GThread *mt; GError *error = NULL; MetadataThreadTuple *mtt; if (!list) return; if (!list->items) return; mtt = g_new0(MetadataThreadTuple, 1); mtt->start = start; mtt->end = end; mtt->list = list; mt = g_thread_create (metadata_thread, mtt, TRUE, &error); } /* Media Cache functions */ static void bmp_metadata_cache_init (BmpMetadataCache *self) { gint n; self->private = g_new (BmpMetadataCachePrivate, 1); self->private->dispose_has_run = FALSE; self->private->ufid = -1; self->private->ht_uri = g_hash_table_new (g_str_hash, g_str_equal); self->private->ht_ufid = g_hash_table_new (g_direct_hash, g_direct_equal); for (n = 0; n < BMP_TAG_NONE; self->private->ht_metadatum[n++] = g_hash_table_new (g_str_hash, g_str_equal)); #if 0 self->private->database = bmp_relation_new (BMP_TAG_NONE); for (n = 0; n < BMP_TAG_NONE; n++) { bmp_relation_index (self->private->database, n, g_str_hash, g_str_equal); } #endif g_message("%s (INITIALIZED)", G_STRFUNC); } static void bmp_metadata_cache_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { default: g_ass... [truncated message content] |
From: Milosz D. <mde...@us...> - 2005-09-10 05:16:14
|
Update of /cvsroot/beepmp/bmpx In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25648 Modified Files: AUTHORS Makefile.am README autogen.sh config.h.in configure.ac Log Message: Readded src/ tree, updated icons and images Index: config.h.in =================================================================== RCS file: /cvsroot/beepmp/bmpx/config.h.in,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** config.h.in 3 Aug 2005 13:07:27 -0000 1.1.1.1 --- config.h.in 10 Sep 2005 05:16:05 -0000 1.2 *************** *** 1,19 **** /* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H ! /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H --- 1,175 ---- /* config.h.in. Generated from configure.ac by autoheader. */ + /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ + #undef CRAY_STACKSEG_END + + /* Define to 1 if using `alloca.c'. */ + #undef C_ALLOCA + + /* Define to 1 if translation of program messages to the user's native + language is requested. */ + #undef ENABLE_NLS + + /* Define to 1 if you have `alloca', as a function or macro. */ + #undef HAVE_ALLOCA + + /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ + #undef HAVE_ALLOCA_H + + /* Define to 1 if you have the <argz.h> header file. */ + #undef HAVE_ARGZ_H + + /* Define to 1 if you have the `asprintf' function. */ + #undef HAVE_ASPRINTF + + /* Define if building with DBus remote interface */ + #undef HAVE_DBUS + + /* Define if the GNU dcgettext() function is already present or preinstalled. + */ + #undef HAVE_DCGETTEXT + + /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ + #undef HAVE_DECL_FEOF_UNLOCKED + + /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ + #undef HAVE_DECL_FGETS_UNLOCKED + + /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ + #undef HAVE_DECL_GETC_UNLOCKED + + /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ + #undef HAVE_DECL__SNPRINTF + + /* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you + don't. */ + #undef HAVE_DECL__SNWPRINTF + /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H ! /* Define to 1 if you have the <fam.h> header file. */ ! #undef HAVE_FAM_H ! ! /* Define to 1 if you have the `fwprintf' function. */ ! #undef HAVE_FWPRINTF ! ! /* Define to 1 if you have the `getcwd' function. */ ! #undef HAVE_GETCWD ! ! /* Define to 1 if you have the `getegid' function. */ ! #undef HAVE_GETEGID ! ! /* Define to 1 if you have the `geteuid' function. */ ! #undef HAVE_GETEUID ! ! /* Define to 1 if you have the `getgid' function. */ ! #undef HAVE_GETGID ! ! /* Define to 1 if you have the `getpagesize' function. */ ! #undef HAVE_GETPAGESIZE ! ! /* Define if the GNU gettext() function is already present or preinstalled. */ ! #undef HAVE_GETTEXT ! ! /* Define to 1 if you have the `getuid' function. */ ! #undef HAVE_GETUID ! ! /* Define if building with GST backend */ ! #undef HAVE_GST ! ! /* Define if you have the iconv() function. */ ! #undef HAVE_ICONV ! ! /* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ ! #undef HAVE_INTMAX_T ! ! /* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */ #undef HAVE_INTTYPES_H + /* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and + declares uintmax_t. */ + #undef HAVE_INTTYPES_H_WITH_UINTMAX + + /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ + #undef HAVE_LANGINFO_CODESET + + /* Define if your <locale.h> file defines LC_MESSAGES. */ + #undef HAVE_LC_MESSAGES + + /* Define to 1 if you have the <limits.h> header file. */ + #undef HAVE_LIMITS_H + + /* Define to 1 if you have the <locale.h> header file. */ + #undef HAVE_LOCALE_H + + /* Define if you have the 'long double' type. */ + #undef HAVE_LONG_DOUBLE + + /* Define if you have the 'long long' type. */ + #undef HAVE_LONG_LONG + + /* Define to 1 if you have the <malloc.h> header file. */ + #undef HAVE_MALLOC_H + /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H + /* Define to 1 if you have the `mempcpy' function. */ + #undef HAVE_MEMPCPY + + /* Define to 1 if you have a working `mmap' system call. */ + #undef HAVE_MMAP + + /* Define to 1 if you have the `munmap' function. */ + #undef HAVE_MUNMAP + + /* Define to 1 if you have the <nl_types.h> header file. */ + #undef HAVE_NL_TYPES_H + + /* Define if your printf() function supports format strings with positions. */ + #undef HAVE_POSIX_PRINTF + + /* Define to 1 if you have the `putenv' function. */ + #undef HAVE_PUTENV + + /* Define to 1 if you have the `setenv' function. */ + #undef HAVE_SETENV + + /* Define to 1 if you have the `setlocale' function. */ + #undef HAVE_SETLOCALE + + /* Define to 1 if you have the `snprintf' function. */ + #undef HAVE_SNPRINTF + + /* Define to 1 if you have the <stddef.h> header file. */ + #undef HAVE_STDDEF_H + /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H + /* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares + uintmax_t. */ + #undef HAVE_STDINT_H_WITH_UINTMAX + /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H + /* Define to 1 if you have the `stpcpy' function. */ + #undef HAVE_STPCPY + + /* Define to 1 if you have the `strcasecmp' function. */ + #undef HAVE_STRCASECMP + + /* Define to 1 if you have the `strdup' function. */ + #undef HAVE_STRDUP + /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H *************** *** 22,25 **** --- 178,187 ---- #undef HAVE_STRING_H + /* Define to 1 if you have the `strtoul' function. */ + #undef HAVE_STRTOUL + + /* Define to 1 if you have the <sys/param.h> header file. */ + #undef HAVE_SYS_PARAM_H + /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H *************** *** 28,34 **** --- 190,235 ---- #undef HAVE_SYS_TYPES_H + /* Define to 1 if you have the `tsearch' function. */ + #undef HAVE_TSEARCH + + /* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */ + #undef HAVE_UINTMAX_T + /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H + /* Define if you have the 'unsigned long long' type. */ + #undef HAVE_UNSIGNED_LONG_LONG + + /* Define if you have the 'wchar_t' type. */ + #undef HAVE_WCHAR_T + + /* Define to 1 if you have the `wcslen' function. */ + #undef HAVE_WCSLEN + + /* Define if you have the 'wint_t' type. */ + #undef HAVE_WINT_T + + /* Define if building with XINE backend */ + #undef HAVE_XINE + + /* Define to 1 if you have the `__argz_count' function. */ + #undef HAVE___ARGZ_COUNT + + /* Define to 1 if you have the `__argz_next' function. */ + #undef HAVE___ARGZ_NEXT + + /* Define to 1 if you have the `__argz_stringify' function. */ + #undef HAVE___ARGZ_STRINGIFY + + /* Define to 1 if you have the `__fsetlocking' function. */ + #undef HAVE___FSETLOCKING + + /* Define as const if the declaration of iconv() needs const. */ + #undef ICONV_CONST + + /* Define if integer division by zero raises signal SIGFPE. */ + #undef INTDIV0_RAISES_SIGFPE + /* Name of package */ #undef PACKAGE *************** *** 49,52 **** --- 250,268 ---- #undef PACKAGE_VERSION + /* Define if <inttypes.h> exists and defines unusable PRI* macros. */ + #undef PRI_MACROS_BROKEN + + /* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ + #undef SIZE_MAX + + /* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + #undef STACK_DIRECTION + /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS *************** *** 63,64 **** --- 279,297 ---- #undef inline #endif + + /* Define to `long' if <sys/types.h> does not define. */ + #undef off_t + + /* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ + #undef ptrdiff_t + + /* Define to empty if the C compiler doesn't support this keyword. */ + #undef signed + + /* Define to `unsigned' if <sys/types.h> does not define. */ + #undef size_t + + /* Define to unsigned long or unsigned long long if <stdint.h> and + <inttypes.h> don't define. */ + #undef uintmax_t Index: configure.ac =================================================================== RCS file: /cvsroot/beepmp/bmpx/configure.ac,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** configure.ac 7 Aug 2005 13:29:06 -0000 1.2 --- configure.ac 10 Sep 2005 05:16:05 -0000 1.3 *************** *** 1,5 **** dnl Process this file with autoconf to produce a configure script. ! AC_INIT(bmpx, 0.2) AC_PREREQ(2.5) --- 1,5 ---- dnl Process this file with autoconf to produce a configure script. ! AC_INIT(bmpx, 0.10-2) AC_PREREQ(2.5) *************** *** 18,21 **** --- 18,25 ---- AC_C_CONST + dnl GNU Gettext + + AM_GNU_GETTEXT + AM_GNU_GETTEXT_VERSION(0.14.1) dnl Check for assembler *************** *** 30,35 **** dnl Libtool - dnl FIXME: find a way to allow building static libbeep, - dnl without building static plugins AC_DISABLE_STATIC --- 34,37 ---- *************** *** 37,69 **** AC_PROG_LIBTOOL ! dnl FIXME: Don't hardcode the package name here ! BMPX_DEFINES="-DDATA_DIR=\\\"$datadir/bmpx\\\"" ! AC_SUBST(BMPX_DEFINES) ! dnl Path settings ! PKG_CHECK_MODULES(GTK, [glib-2.0 >= 2.7.0 gtk+-2.0 >= 2.7.0 gthread-2.0 pango >= 1.9.1 cairo >= 0.6.0 libxml-2.0 >= 2.6.1 ] ) ! AC_PATH_PROG(TAGLIBCONFIG, taglib-config) ! AC_MSG_CHECKING([TAGLIB_CFLAGS]) TAGLIB_CFLAGS=`$TAGLIBCONFIG --cflags` ! AC_MSG_CHECKING([TAGLIB_LIBS]) TAGLIB_LIBS=`$TAGLIBCONFIG --libs` AC_SUBST(TAGLIB_CFLAGS) AC_SUBST(TAGLIB_LIBS) AC_CONFIG_FILES([ Makefile ! src/Makefile ! skin/Makefile icons/Makefile - ui/Makefile images/Makefile ! data/Makefile ]) AC_OUTPUT --- 39,158 ---- AC_PROG_LIBTOOL ! dnl XINE ! AC_ARG_ENABLE(xine, ! AS_HELP_STRING([--enable-xine], [enable XINE backend (default=enabled)]), ! [enable_xine=$enableval], ! [enable_xine="yes"] ! ) ! dnl GST ! AC_ARG_ENABLE(gst, ! AS_HELP_STRING([--enable-gst], [enable GST backend (default=disabled)]), ! [enable_gst=$enableval], ! [enable_gst="no"] ! ) ! if test "$enable_xine" = "yes"; then ! ! if test "$enable_gst" = "yes"; then ! AC_MSG_ERROR([You can't enable both XINE and GST backend, silly!]) ! else ! BACKEND="XINE" ! AC_DEFINE(HAVE_XINE, 1, [Define if building with XINE backend]) ! AC_PATH_PROG(XINECONFIG, xine-config, no) ! ! AC_MSG_CHECKING([XINE_CFLAGS], ok) ! XINE_CFLAGS=`$XINECONFIG --cflags` ! AC_MSG_RESULT([ok]) ! ! AC_MSG_CHECKING([XINE_LIBS], ok) ! XINE_LIBS=`$XINECONFIG --libs` ! AC_MSG_RESULT([ok]) ! ! AC_SUBST(XINE_CFLAGS) ! AC_SUBST(XINE_LIBS) ! ! AC_SUBST(GST_LIBS) ! AC_SUBST(GST_CFLAGS) ! fi ! fi ! AM_CONDITIONAL(HAVE_XINE, test "$enable_xine" = "yes") ! ! if test "$enable_gst" = "yes"; then ! ! if test "$enable_xine" = "yes"; then ! AC_MSG_ERROR([You can't enable both XINE and GST backend, silly!]) ! else ! BACKEND="GStreamer" ! AC_DEFINE(HAVE_GST, 1, [Define if building with GST backend]) ! PKG_CHECK_MODULES(GST, [gstreamer-0.9]) ! fi ! fi ! AM_CONDITIONAL(HAVE_GST, test "$enable_gst" = "yes") ! ! dnl DBUS ! AC_ARG_ENABLE(dbus, ! AS_HELP_STRING([--enable-dbus], [enable DBus remote interface (default=enabled)]), ! [enable_dbus=$enableval], ! [enable_dbus="yes"] ) ! if test "$enable_dbus" = "yes"; then ! AC_DEFINE(HAVE_DBUS, 1, [Define if building with DBus remote interface]) ! PKG_CHECK_MODULES(DBUS, [dbus-1 dbus-glib-1]) ! fi ! AM_CONDITIONAL(HAVE_DBUS, test "$enable_dbus" = "yes") ! ! dnl FAM ! AC_CHECK_HEADERS(fam.h) ! ! dnl Taglib ! ! AC_PATH_PROG(TAGLIBCONFIG, taglib-config, no) ! ! AC_MSG_CHECKING([TAGLIB_CFLAGS], ok) TAGLIB_CFLAGS=`$TAGLIBCONFIG --cflags` + AC_MSG_RESULT([ok]) ! AC_MSG_CHECKING([TAGLIB_LIBS], ok) TAGLIB_LIBS=`$TAGLIBCONFIG --libs` + AC_MSG_RESULT([ok]) AC_SUBST(TAGLIB_CFLAGS) AC_SUBST(TAGLIB_LIBS) + localedir=$datadir/locale + AC_SUBST(localedir) + + dnl FIXME: Don't hardcode the package name here + BMPX_DEFINES="-DDATA_DIR=\\\"$datadir/bmpx\\\" -DLOCALEDIR=\\\"$localedir\\\"" + AC_SUBST(BMPX_DEFINES) + + PKG_CHECK_MODULES(GTK, [glib-2.0 >= 2.7.0 gtk+-2.0 >= 2.7.0 gthread-2.0 pango >= 1.9.1 cairo >= 0.6.0 libxml-2.0 >= 2.6.1 libglade-2.0 >= 2.5.1]) + AC_CONFIG_FILES([ Makefile ! data/Makefile ! dbus-examples/Makefile ! docs/Makefile ! glade/Makefile icons/Makefile images/Makefile ! intl/Makefile ! po/Makefile.in ! skin/Makefile ! src/Makefile ! ui/Makefile ]) AC_OUTPUT + + echo + echo "BMPx build configuration:" + echo "-------------------------" + echo + echo " BMPx Version: $PACKAGE_VERSION" + echo " DBus interface: $enable_dbus" + echo " Audio Backend: $BACKEND" + echo Index: Makefile.am =================================================================== RCS file: /cvsroot/beepmp/bmpx/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Makefile.am 7 Aug 2005 13:28:57 -0000 1.2 --- Makefile.am 10 Sep 2005 05:16:05 -0000 1.3 *************** *** 1,3 **** ACLOCAL_AMFLAGS = -I m4 ! SUBDIRS = src skin icons ui images data --- 1,5 ---- ACLOCAL_AMFLAGS = -I m4 ! SUBDIRS = src skin icons ui images data glade dbus-examples docs po intl ! ! EXTRA_DIST = autogen.sh Index: AUTHORS =================================================================== RCS file: /cvsroot/beepmp/bmpx/AUTHORS,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** AUTHORS 7 Aug 2005 13:28:57 -0000 1.2 --- AUTHORS 10 Sep 2005 05:16:05 -0000 1.3 *************** *** 1,4 **** ! Chong Kai Xiong <des...@cl...> ! Milosz Dereyznski <int...@gm...> Kenneth "Langly" Ãstby <la...@la...> --- 1,4 ---- ! Chong Kai Xiong <des...@ph...> ! Milosz Derezynski <int...@gm...> Kenneth "Langly" Ãstby <la...@la...> Index: README =================================================================== RCS file: /cvsroot/beepmp/bmpx/README,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** README 3 Aug 2005 13:06:37 -0000 1.1.1.1 --- README 10 Sep 2005 05:16:05 -0000 1.2 *************** *** 1,4 **** ! 1) Compile ! 2) Run with: ! bmpx <skin file|skin directory> ! 3) The "Open" ("Eject") button in the main window opens a file requester that allows to load a different skin --- 1,30 ---- ! BMPx 0.9 "Nuthin' but a B Thang" ! ! Requirements: ! ------------- ! ! Fixed: ! ! * libxine >= 1.0.1 --enable-xine ! OR ! * gstreamer >= 0.9.1 --enable-gst ! ! * taglib >= 1.3.1 ! * gtk+-2.0 >= 2.7.5 ! * cairo >= 0.9.0 ! * fam >= 2.6.10 ! * libglade >= 2.5.1 ! ! Optionally (for the moment): ! ! * dbus >= 0.35.2 ! * dbus-glib ! ! (C) GPL 2005 ! Chong Kai Xiong <des...@ph...> ! Milosz Derezynski <int...@gm...> ! Kenneth Ãstby <la...@la...> ! ! with a lot of initial help from ! ! Tim-Philipp Mueller <tim at centricular dot net> Index: autogen.sh =================================================================== RCS file: /cvsroot/beepmp/bmpx/autogen.sh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** autogen.sh 3 Aug 2005 13:07:23 -0000 1.1.1.1 --- autogen.sh 10 Sep 2005 05:16:05 -0000 1.2 *************** *** 13,21 **** ACLOCAL=${ACLOCAL:-aclocal} AUTOHEADER=${AUTOHEADER:-autoheader} LIBTOOLIZE=${LIBTOOLIZE:-libtoolize} dump_help_screen () { ! echo "Usage: gen-auto-scripts.sh [options]" echo echo "options:" --- 13,22 ---- ACLOCAL=${ACLOCAL:-aclocal} AUTOHEADER=${AUTOHEADER:-autoheader} + AUTOPOINT=${AUTOPOINT:-autopoint} LIBTOOLIZE=${LIBTOOLIZE:-libtoolize} dump_help_screen () { ! echo "Usage: autogen.sh [options]" echo echo "options:" *************** *** 77,80 **** --- 78,84 ---- cd $TOP_DIR + touch ChangeLog + + run_or_die $AUTOPOINT -f run_or_die $LIBTOOLIZE -f -c run_or_die $ACLOCAL -I m4 |
From: Milosz D. <mde...@us...> - 2005-09-10 05:16:13
|
Update of /cvsroot/beepmp/bmpx/icons In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25648/icons Modified Files: icon_player_128.png icon_player_16.png icon_player_32.png icon_player_48.png icon_player_64.png icon_playlist_128.png icon_playlist_16.png icon_playlist_32.png icon_playlist_48.png icon_playlist_64.png Log Message: Readded src/ tree, updated icons and images Index: icon_player_32.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_player_32.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsETkK20 and /tmp/cvsAxlAfk differ Index: icon_playlist_128.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_playlist_128.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsZaFcy4 and /tmp/cvslMIWNn differ Index: icon_player_16.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_player_16.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsPpb9G3 and /tmp/cvsgZeO0m differ Index: icon_player_128.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_player_128.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsRv0ff7 and /tmp/cvsTnu7Bq differ Index: icon_playlist_16.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_playlist_16.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsEWXOZ5 and /tmp/cvsw8Tdpp differ Index: icon_playlist_32.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_playlist_32.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsmteRs9 and /tmp/cvs7BXiVs differ Index: icon_player_64.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_player_64.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsavr5Db and /tmp/cvs63wPbv differ Index: icon_playlist_64.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_playlist_64.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsqPTZ4a and /tmp/cvsLNlwHu differ Index: icon_playlist_48.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_playlist_48.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsZL2Vwe and /tmp/cvsPRj5by differ Index: icon_player_48.png =================================================================== RCS file: /cvsroot/beepmp/bmpx/icons/icon_player_48.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsHVRngd and /tmp/cvs531gYw differ |
From: Milosz D. <mde...@us...> - 2005-09-10 05:16:13
|
Update of /cvsroot/beepmp/bmpx/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25648/images Modified Files: Makefile.am Added Files: appearance.png appearance_ia.png audio.png eq.png eq_ia.png library.png library_ia.png logo-experimental.png mouse.png mouse_ia.png playback.png playback_ia.png playlist.png playlist_ia.png preferences-logo.png Log Message: Readded src/ tree, updated icons and images --- NEW FILE: playback_ia.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: playlist.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: library.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: library_ia.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mouse.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: appearance_ia.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: audio.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: eq_ia.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: playback.png --- (This appears to be a binary file; contents omitted.) Index: Makefile.am =================================================================== RCS file: /cvsroot/beepmp/bmpx/images/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Makefile.am 7 Aug 2005 13:29:07 -0000 1.1 --- Makefile.am 10 Sep 2005 05:16:05 -0000 1.2 *************** *** 2,6 **** images_DATA = \ ! about_logo.png EXTRA_DIST = $(images_DATA) --- 2,22 ---- images_DATA = \ ! about_logo.png \ ! logo-experimental.png \ ! appearance.png \ ! eq.png \ ! mouse.png \ ! playlist.png \ ! playback.png \ ! appearance_ia.png \ ! eq_ia.png \ ! mouse_ia.png \ ! playlist_ia.png \ ! playback_ia.png \ ! library.png \ ! library_ia.png \ ! audio.png \ ! preferences-logo.png \ ! skinlist-building.gif EXTRA_DIST = $(images_DATA) *************** *** 8,9 **** --- 24,26 ---- + --- NEW FILE: mouse_ia.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: playlist_ia.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: appearance.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: preferences-logo.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: logo-experimental.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: eq.png --- (This appears to be a binary file; contents omitted.) |
Update of /cvsroot/beepmp/bmpx/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24773/src Removed Files: Makefile.am about_dialog.c about_dialog.h bmp_button.c bmp_button.h bmp_button_toggle.c bmp_button_toggle.h bmp_configuration.c bmp_configuration.h bmp_marshalers.c bmp_marshalers.h bmp_slider.c bmp_slider.h bmp_window.c bmp_window.h chroma_button.c chroma_button.h chroma_list.c chroma_list.h chroma_vscrollbar.c chroma_vscrollbar.h chroma_widgets.h delete_small.xbm dock.c dock.h error.h g_object_get.c g_object_get.h gtkbindings.h gtkcontainer.h gtkhsv.c gtkhsv.h gtkmarshalers.h list_manager.c list_manager.h main.c main.h metadata.c metadata.h new_small.xbm playlist.c playlist.h playlist_manager.c playlist_manager.h rename_small.xbm resource_manager.c resource_manager.h song.c song.h types.h ui.c ui.h ui_callbacks.c ui_callbacks.h ui_main.c ui_main.h ui_playlist.c ui_playlist.h ui_util.c ui_util.h util.c util.h xml_document.c xml_document.h Log Message: Removed src/ tree for replacement --- resource_manager.h DELETED --- --- list_manager.h DELETED --- --- ui_playlist.c DELETED --- --- Makefile.am DELETED --- --- error.h DELETED --- --- ui.h DELETED --- --- resource_manager.c DELETED --- --- bmp_window.c DELETED --- --- ui_main.c DELETED --- --- ui.c DELETED --- --- dock.c DELETED --- --- playlist.c DELETED --- --- util.h DELETED --- --- ui_main.h DELETED --- --- gtkhsv.c DELETED --- --- dock.h DELETED --- --- chroma_vscrollbar.h DELETED --- --- new_small.xbm DELETED --- --- gtkcontainer.h DELETED --- --- bmp_slider.c DELETED --- --- chroma_vscrollbar.c DELETED --- --- ui_playlist.h DELETED --- --- chroma_button.c DELETED --- --- bmp_marshalers.h DELETED --- --- bmp_configuration.h DELETED --- --- ui_util.h DELETED --- --- chroma_button.h DELETED --- --- rename_small.xbm DELETED --- --- ui_util.c DELETED --- --- bmp_button.h DELETED --- --- gtkmarshalers.h DELETED --- --- delete_small.xbm DELETED --- --- bmp_configuration.c DELETED --- --- bmp_button_toggle.h DELETED --- --- metadata.h DELETED --- --- xml_document.h DELETED --- --- metadata.c DELETED --- --- bmp_button_toggle.c DELETED --- --- chroma_widgets.h DELETED --- --- xml_document.c DELETED --- --- song.c DELETED --- --- types.h DELETED --- --- playlist_manager.c DELETED --- --- main.h DELETED --- --- song.h DELETED --- --- main.c DELETED --- --- playlist_manager.h DELETED --- --- g_object_get.h DELETED --- --- ui_callbacks.h DELETED --- --- gtkbindings.h DELETED --- --- bmp_window.h DELETED --- --- ui_callbacks.c DELETED --- --- g_object_get.c DELETED --- --- gtkhsv.h DELETED --- --- playlist.h DELETED --- --- chroma_list.c DELETED --- --- util.c DELETED --- --- list_manager.c DELETED --- --- about_dialog.c DELETED --- --- bmp_slider.h DELETED --- --- chroma_list.h DELETED --- --- bmp_marshalers.c DELETED --- --- about_dialog.h DELETED --- --- bmp_button.c DELETED --- |
From: Chong K. X. <des...@us...> - 2005-09-04 22:36:17
|
Update of /cvsroot/beepmp/bmp/beep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17768/beep Modified Files: Tag: release_0_9_7_1 controlsocket.c Log Message: * beep/controlsocket.c: Merge fix for #331 from HEAD. Index: controlsocket.c =================================================================== RCS file: /cvsroot/beepmp/bmp/beep/controlsocket.c,v retrieving revision 1.34.4.1 retrieving revision 1.34.4.2 diff -C2 -d -r1.34.4.1 -r1.34.4.2 *** controlsocket.c 11 Aug 2005 07:25:51 -0000 1.34.4.1 --- controlsocket.c 4 Sep 2005 22:36:04 -0000 1.34.4.2 *************** *** 369,373 **** case CMD_GET_BALANCE: input_get_volume(&v[0], &v[1]); ! if (v[0] > v[1]) b = -100 + ((v[1] * 100) / v[0]); else if (v[1] > v[0]) --- 369,375 ---- case CMD_GET_BALANCE: input_get_volume(&v[0], &v[1]); ! if (v[0] < 0 || v[1] < 0) ! b = 0; ! else if (v[0] > v[1]) b = -100 + ((v[1] * 100) / v[0]); else if (v[1] > v[0]) |
From: Chong K. X. <des...@us...> - 2005-09-04 22:20:09
|
Update of /cvsroot/beepmp/bmp/beep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14341 Modified Files: controlsocket.c Log Message: * controlsocket.c (ctrlsocket_func): Fix crash when output plugin returns zero volume for one channel, and does not return the other i.e. -1 (#331, Mike Lundy). Index: controlsocket.c =================================================================== RCS file: /cvsroot/beepmp/bmp/beep/controlsocket.c,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** controlsocket.c 11 Aug 2005 07:15:09 -0000 1.39 --- controlsocket.c 4 Sep 2005 22:20:00 -0000 1.40 *************** *** 375,379 **** case CMD_GET_BALANCE: input_get_volume(&v[0], &v[1]); ! if (v[0] > v[1]) b = -100 + ((v[1] * 100) / v[0]); else if (v[1] > v[0]) --- 375,381 ---- case CMD_GET_BALANCE: input_get_volume(&v[0], &v[1]); ! if (v[0] < 0 || v[1] < 0) ! b = 0; ! else if (v[0] > v[1]) b = -100 + ((v[1] * 100) / v[0]); else if (v[1] > v[0]) |
From: Chong K. X. <des...@us...> - 2005-08-27 20:11:05
|
Update of /cvsroot/beepmp/bmp/beep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11966 Modified Files: Tag: release_0_9_7_1 input.c Log Message: * input.c (input_get_song_info): Merge crash fix from HEAD. Index: input.c =================================================================== RCS file: /cvsroot/beepmp/bmp/beep/input.c,v retrieving revision 1.45 retrieving revision 1.45.2.1 diff -C2 -d -r1.45 -r1.45.2.1 *** input.c 26 Jan 2005 05:56:14 -0000 1.45 --- input.c 27 Aug 2005 20:10:57 -0000 1.45.2.1 *************** *** 424,428 **** BmpTitleInput *input; GList *node; ! gchar *tmp, *ext; gchar *filename_proxy; --- 424,428 ---- BmpTitleInput *input; GList *node; ! gchar *tmp = NULL, *ext; gchar *filename_proxy; |
From: Chong K. X. <des...@us...> - 2005-08-27 20:07:41
|
Update of /cvsroot/beepmp/bmp/beep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10993 Modified Files: input.c Log Message: * input.c (input_get_song_info): Initialize tmp to NULL to avoid crashing if input plugins do not set the title when getting song info. Index: input.c =================================================================== RCS file: /cvsroot/beepmp/bmp/beep/input.c,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -d -r1.48 -r1.49 *** input.c 31 Jul 2005 20:04:40 -0000 1.48 --- input.c 27 Aug 2005 20:07:34 -0000 1.49 *************** *** 423,427 **** BmpTitleInput *input; GList *node; ! gchar *tmp, *ext; gchar *filename_proxy; --- 423,427 ---- BmpTitleInput *input; GList *node; ! gchar *tmp = NULL, *ext; gchar *filename_proxy; |
From: Chong K. X. <des...@us...> - 2005-08-27 11:20:35
|
Update of /cvsroot/beepmp/bmp/beep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10554/beep Modified Files: Tag: release_0_9_7_1 main.c main.h Log Message: * beep/main.c, beep/main.h, libbeep/vfs.h, libbeep/vfs_gnome.c, libbeep/vfs_stdio.h: Merge VFS initialization changes from HEAD. Index: main.c =================================================================== RCS file: /cvsroot/beepmp/bmp/beep/main.c,v retrieving revision 1.132.2.1 retrieving revision 1.132.2.2 diff -C2 -d -r1.132.2.1 -r1.132.2.2 *** main.c 23 Mar 2005 04:55:10 -0000 1.132.2.1 --- main.c 27 Aug 2005 11:20:04 -0000 1.132.2.2 *************** *** 48,51 **** --- 48,52 ---- #include "libbeep/beepctrl.h" #include "libbeep/util.h" + #include "libbeep/vfs.h" #include "controlsocket.h" *************** *** 928,940 **** } ! #ifdef HAVE_GNOME_VFS ! if (!gnome_vfs_init()) { ! g_printerr(_("Could not initialize gnome-vfs.\n")); exit(EXIT_FAILURE); } - g_atexit(gnome_vfs_shutdown); - #endif - signal(SIGPIPE, SIG_IGN); /* for controlsocket.c */ signal(SIGSEGV, segfault_handler); --- 929,937 ---- } ! if (!vfs_init()) { ! g_printerr(Q_("Could not initialize VFS.\n")); exit(EXIT_FAILURE); } signal(SIGPIPE, SIG_IGN); /* for controlsocket.c */ signal(SIGSEGV, segfault_handler); Index: main.h =================================================================== RCS file: /cvsroot/beepmp/bmp/beep/main.h,v retrieving revision 1.30.2.2 retrieving revision 1.30.2.3 diff -C2 -d -r1.30.2.2 -r1.30.2.3 *** main.h 15 Jun 2005 00:28:54 -0000 1.30.2.2 --- main.h 27 Aug 2005 11:20:05 -0000 1.30.2.3 *************** *** 23,30 **** #define MAIN_H - #ifdef HAVE_GNOME_VFS - #include <libgnomevfs/gnome-vfs.h> - #endif - #include "mainwin.h" #include "textbox.h" --- 23,26 ---- |
From: Chong K. X. <des...@us...> - 2005-08-27 11:20:35
|
Update of /cvsroot/beepmp/bmp/libbeep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10554/libbeep Modified Files: Tag: release_0_9_7_1 vfs.h vfs_gnome.c vfs_stdio.c Log Message: * beep/main.c, beep/main.h, libbeep/vfs.h, libbeep/vfs_gnome.c, libbeep/vfs_stdio.h: Merge VFS initialization changes from HEAD. Index: vfs_gnome.c =================================================================== RCS file: /cvsroot/beepmp/bmp/libbeep/vfs_gnome.c,v retrieving revision 1.4 retrieving revision 1.4.8.1 diff -C2 -d -r1.4 -r1.4.8.1 *** vfs_gnome.c 8 Jul 2004 01:48:33 -0000 1.4 --- vfs_gnome.c 27 Aug 2005 11:20:05 -0000 1.4.8.1 *************** *** 30,33 **** --- 30,43 ---- gboolean * append); + gboolean + vfs_init(void) + { + if (!gnome_vfs_init()) + return FALSE; + + g_atexit(gnome_vfs_shutdown); + return TRUE; + } + VFSFile * vfs_fopen(const gchar * path, Index: vfs_stdio.c =================================================================== RCS file: /cvsroot/beepmp/bmp/libbeep/vfs_stdio.c,v retrieving revision 1.4 retrieving revision 1.4.8.1 diff -C2 -d -r1.4 -r1.4.8.1 *** vfs_stdio.c 8 Jul 2004 01:48:33 -0000 1.4 --- vfs_stdio.c 27 Aug 2005 11:20:05 -0000 1.4.8.1 *************** *** 27,30 **** --- 27,36 ---- + gboolean + vfs_init(void) + { + return TRUE; + } + VFSFile * vfs_fopen(const gchar * path, Index: vfs.h =================================================================== RCS file: /cvsroot/beepmp/bmp/libbeep/vfs.h,v retrieving revision 1.4 retrieving revision 1.4.8.1 diff -C2 -d -r1.4 -r1.4.8.1 *** vfs.h 8 Jul 2004 01:48:33 -0000 1.4 --- vfs.h 27 Aug 2005 11:20:05 -0000 1.4.8.1 *************** *** 9,12 **** --- 9,15 ---- G_BEGIN_DECLS + /* Reserved for private use by BMP */ + gboolean vfs_init(void); + VFSFile * vfs_fopen(const gchar * path, const gchar * mode); |