Mercurial > audlegacy-plugins
diff src/evdev-plug/ed.c @ 422:5e46b57d1eda trunk
[svn] - added evdev-plug, written-from-scratch plugin that allows to control the player via event devices on linux systems
author | giacomo |
---|---|
date | Sun, 14 Jan 2007 17:55:24 -0800 |
parents | |
children | f757e1aa62e6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/evdev-plug/ed.c Sun Jan 14 17:55:24 2007 -0800 @@ -0,0 +1,239 @@ +/* +* +* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007 +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program; if not, write to the Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include "ed.h" +#include "ed_types.h" +#include "ed_internals.h" +#include "ed_actions.h" +#include "ed_ui.h" +#include "ed_common.h" +#include <glib/gi18n.h> +#include <audacious/beepctrl.h> + + +GList *ed_device_listening_list = NULL; +gboolean plugin_is_active = FALSE; + +/* action callbacks */ +void ed_action_pb_play ( gpointer ); +void ed_action_pb_stop ( gpointer ); +void ed_action_pb_pause ( gpointer ); +void ed_action_pb_prev ( gpointer ); +void ed_action_pb_next ( gpointer ); +void ed_action_pb_eject ( gpointer ); +void ed_action_vol_up5 ( gpointer ); +void ed_action_vol_down5 ( gpointer ); +void ed_action_vol_up10 ( gpointer ); +void ed_action_vol_down10 ( gpointer ); +void ed_action_win_main ( gpointer ); +void ed_action_win_playlist ( gpointer ); +void ed_action_win_equalizer ( gpointer ); +void ed_action_pl_repeat ( gpointer ); +void ed_action_pl_shuffle ( gpointer ); + +/* map action codes to ed_action_t objects */ +ed_action_t player_actions[] = +{ + [ED_ACTION_PB_PLAY] = { N_("Playback->Play") , ed_action_pb_play }, + [ED_ACTION_PB_STOP] = { N_("Playback->Stop") , ed_action_pb_stop }, + [ED_ACTION_PB_PAUSE] = { N_("Playback->Pause") , ed_action_pb_pause }, + [ED_ACTION_PB_PREV] = { N_("Playback->Prev") , ed_action_pb_prev }, + [ED_ACTION_PB_NEXT] = { N_("Playback->Next") , ed_action_pb_next }, + [ED_ACTION_PB_EJECT] = { N_("Playback->Eject") , ed_action_pb_eject }, + + [ED_ACTION_PL_REPEAT] = { N_("Playlist->Repeat") , ed_action_pl_repeat }, + [ED_ACTION_PL_SHUFFLE] = { N_("Playlist->Shuffle") , ed_action_pl_shuffle }, + + [ED_ACTION_VOL_UP5] = { N_("Volume->Up_5") , ed_action_vol_up5 }, + [ED_ACTION_VOL_DOWN5] = { N_("Volume->Down_5") , ed_action_vol_down5 }, + [ED_ACTION_VOL_UP10] = { N_("Volume->Up_10") , ed_action_vol_up10 }, + [ED_ACTION_VOL_DOWN10] = { N_("Volume->Down_10") , ed_action_vol_down10 }, + + [ED_ACTION_WIN_MAIN] = { N_("Window->Main") , ed_action_win_main }, + [ED_ACTION_WIN_PLAYLIST] = { N_("Window->Playlist") , ed_action_win_playlist }, + [ED_ACTION_WIN_EQUALIZER] = { N_("Window->Equalizer") , ed_action_win_equalizer } +}; + + + +/* ***************** */ +/* plug-in functions */ + +GeneralPlugin *get_gplugin_info() +{ + return &ed_gp; +} + + +void +ed_init ( void ) +{ + g_log_set_handler( NULL , G_LOG_LEVEL_WARNING , g_log_default_handler , NULL ); + + plugin_is_active = TRUE; /* go! */ + + /* read event devices and bindings from user + configuration and start listening for active ones */ + ed_device_start_listening_from_config(); + + return; +} + + +void +ed_cleanup ( void ) +{ + /* shut down all devices being listened */ + ed_device_stop_listening_all( TRUE ); + + plugin_is_active = FALSE; /* stop! */ + + return; +} + + +void +ed_config ( void ) +{ + ed_ui_config_show(); +} + + +void +ed_about ( void ) +{ + ed_ui_about_show(); +} + + + +/* ************** */ +/* player actions */ + +void +ed_action_call ( gint code , gpointer param ) +{ + DEBUGMSG( "Calling action; code %i ( %s )\n" , code , player_actions[code].desc ); + + /* activate callback for requested action */ + player_actions[code].callback( param ); +} + + +void +ed_action_pb_play ( gpointer param ) +{ + xmms_remote_play( ed_gp.xmms_session ); +} + +void +ed_action_pb_stop ( gpointer param ) +{ + xmms_remote_stop( ed_gp.xmms_session ); +} + +void +ed_action_pb_pause ( gpointer param ) +{ + xmms_remote_pause( ed_gp.xmms_session ); +} + +void +ed_action_pb_prev ( gpointer param ) +{ + xmms_remote_playlist_prev( ed_gp.xmms_session ); +} + +void +ed_action_pb_next ( gpointer param ) +{ + xmms_remote_playlist_next( ed_gp.xmms_session ); +} + +void +ed_action_pb_eject ( gpointer param ) +{ + xmms_remote_eject( ed_gp.xmms_session ); +} + +void +ed_action_pl_repeat ( gpointer param ) +{ + xmms_remote_toggle_repeat( ed_gp.xmms_session ); +} + +void +ed_action_pl_shuffle ( gpointer param ) +{ + xmms_remote_toggle_shuffle( ed_gp.xmms_session ); +} + +void +ed_action_vol_up5 ( gpointer param ) +{ + gint vl, vr; + xmms_remote_get_volume( ed_gp.xmms_session , &vl , &vr ); + xmms_remote_set_volume( ed_gp.xmms_session , CLAMP(vl + 5, 0, 100) , CLAMP(vr + 5, 0, 100) ); +} + +void +ed_action_vol_down5 ( gpointer param ) +{ + gint vl, vr; + xmms_remote_get_volume( ed_gp.xmms_session , &vl , &vr ); + xmms_remote_set_volume( ed_gp.xmms_session , CLAMP(vl - 5, 0, 100) , CLAMP(vr - 5, 0, 100) ); +} + +void +ed_action_vol_up10 ( gpointer param ) +{ + gint vl, vr; + xmms_remote_get_volume( ed_gp.xmms_session , &vl , &vr ); + xmms_remote_set_volume( ed_gp.xmms_session , CLAMP(vl + 10, 0, 100) , CLAMP(vr + 10, 0, 100) ); +} + +void +ed_action_vol_down10 ( gpointer param ) +{ + gint vl, vr; + xmms_remote_get_volume( ed_gp.xmms_session , &vl , &vr ); + xmms_remote_set_volume( ed_gp.xmms_session , CLAMP(vl - 10, 0, 100) , CLAMP(vr - 10, 0, 100) ); +} + +void +ed_action_win_main ( gpointer param ) +{ + xmms_remote_main_win_toggle( ed_gp.xmms_session , + !xmms_remote_is_main_win ( ed_gp.xmms_session ) ); +} + +void +ed_action_win_playlist ( gpointer param ) +{ + xmms_remote_pl_win_toggle( ed_gp.xmms_session , + !xmms_remote_is_pl_win ( ed_gp.xmms_session ) ); +} + +void +ed_action_win_equalizer ( gpointer param ) +{ + xmms_remote_eq_win_toggle( ed_gp.xmms_session , + !xmms_remote_is_eq_win ( ed_gp.xmms_session ) ); +}