// Audacious // // Douglas Thrift // // $Id$ #ifndef _Audacious_hpp_ #define _Audacious_hpp_ #include #include #include #include #include namespace Audacious { class Error : public std::exception { ::GError *error; public: Error(::GError *error) : error(error) {} virtual ~Error() throw() { ::g_error_free(error); } virtual const char *what() const throw() { return error->message; } }; class Audacious { ::DBusGProxy *session; public: Audacious(); template inline void Playlist(const Type_ &list, bool enqueue = false) { char **list_(NULL); int size(0); _tforeach (const Type_, item, list) { list_ = reinterpret_cast(list_ ? std::realloc(list_, ++size) : std::malloc(++size)); list_[_index] = const_cast(item->c_str()); } Playlist(list_, size, enqueue); if (list_) std::free(list_); } void Playlist(char **list, int size, bool enqueue = false); std::string GetVersion() const; template inline void PlaylistAdd(const Type_ &list) { ::GList *list_(NULL); _tforeach (const Type_, item, list) list_ = ::g_list_append(list_, const_cast(item->c_str())); PlaylistAdd(list_); ::g_list_free(list_); } void PlaylistAdd(::GList *list); void PlaylistDelete(unsigned position); void Play(); void Pause(); void Stop(); bool IsPlaying() const; bool IsPaused() const; int GetPlaylistPosition() const; void SetPlaylistPosition(unsigned position); int GetPlaylistLength() const; void PlaylistClear(); int GetOutputTime() const; void JumpToTime(int position); void GetVolume(int &left, int &right) const; int GetMainVolume() const; int GetBalance() const; void SetVolume(int left, int right); void SetMainVolume(int volume); void SetBalance(int balance); std::string GetSkin() const; void SetSkin(const std::string &skin); std::string GetPlaylistFile(int position) const; std::string GetPlaylistTitle(int position) const; int GetPlaylistTime(int position) const; void GetInfo(int &rate, int &frequency, int &channels) const; void MainWindowToggle(bool show); void PlaylistWindowToggle(bool show); void EqualizerWindowToggle(bool show); bool IsMainWindow() const; bool IsPlaylistWindow() const; bool IsEqualizerWindow() const; void ShowPreferencesBox(); void ToggleAlwaysOnTop(bool always); void Eject(); void PlaylistPrevious(); void PlaylistNext(); void PlaylistAddUrl(const std::string &url); bool IsRunning() const; void ToggleRepeat(); void ToggleShuffle(); bool IsRepeat() const; bool IsShuffle() const; inline void ToggleRepeat(bool repeat) { if (repeat != IsRepeat()) ToggleRepeat(); } inline void ToggleShuffle(bool shuffle) { if (shuffle != IsShuffle()) ToggleShuffle(); } void GetEqualizer(double &preamp, double bands[10]) const; double GetEqualizerPreamp() const; double GetEqualizerBand(int band) const; void SetEqualizer(double preamp, double bands[10]); void SetEqualizerPreamp(double preamp); void SetEqualizerBand(int band, double value); // XMMS 1.2.1 void Quit(); // XMMS 1.2.6 void PlayPause(); void PlaylistInsertUrl(const std::string &url, int position); // XMMS 1.2.11 void PlayqueueAdd(int position); void PlayqueueRemove(int position); int GetPlayqueueLength() const; void ToggleAdvance(); bool IsAdvance() const; inline void ToggleAdvance(bool advance) { if (advance != IsAdvance()) ToggleAdvance(); } // BMP 0.9.7 void Activate(); // Audacious 1.1 void ShowJumpToFileBox(); void PlayqueueClear(); bool PlayqueueIsQueued(int position) const; int GetPlayqueueQueuePosition(int position) const; // Audacious 1.3 void PlaylistEnqueueToTemp(const std::string &string); std::string GetTupleFieldData(const std::string &field, int position); // Audacious 1.4 void ShowAboutBox(); void ToggleAboutBox(bool show); void ToggleJumpToFileBox(bool show); void TogglePreferencesBox(bool show); void ToggleFileBrowser(bool show); void EqualizerActivate(bool active); }; template <> inline void Audacious::Playlist(const std::string &item, bool enqueue) { char *list[] = { const_cast(item.c_str()) }; Playlist(list, 1, enqueue); } template <> inline void Audacious::PlaylistAdd(const std::string &item) { ::GList list = { const_cast(item.c_str()), NULL, NULL }; PlaylistAdd(&list); } } #endif//_Audacious_hpp_