- audioplayer: small design reworks ...

* use OFFSET defines
* use CComponentsScrollbar
* rename some variables
* many, many position calculation fixes
* re-format code

Signed-off-by: Thilo Graf <dbt@novatux.de>
This commit is contained in:
svenhoefer
2017-06-18 00:04:40 +02:00
committed by Thilo Graf
parent 224521bc40
commit 4c21971b4a
3 changed files with 643 additions and 658 deletions

View File

@@ -160,8 +160,8 @@ audioplayer.add_loc Lokale Radioliste
audioplayer.add_sc SHOUTcast audioplayer.add_sc SHOUTcast
audioplayer.artist_title Interpret, Titel audioplayer.artist_title Interpret, Titel
audioplayer.building_search_index Erstelle Suchindex audioplayer.building_search_index Erstelle Suchindex
audioplayer.button_select_title_by_id Suche n. ID audioplayer.button_select_title_by_id Suche nach ID
audioplayer.button_select_title_by_name Suche n. Name audioplayer.button_select_title_by_name Suche nach Name
audioplayer.defdir Start-Verzeichnis audioplayer.defdir Start-Verzeichnis
audioplayer.delete Entfernen audioplayer.delete Entfernen
audioplayer.deleteall Alle entfernen audioplayer.deleteall Alle entfernen

File diff suppressed because it is too large Load Diff

View File

@@ -1,33 +1,24 @@
/* /*
$Id: audioplayer.h,v 1.24 2009/10/03 10:36:29 seife Exp $ Neutrino-GUI - DBoxII-Project
Neutrino-GUI - DBoxII-Project
Copyright (C) 2001 Steffen Hehn 'McClean' Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/ Copyright (C) 2009 Stefan Seyfried
Copyright (C) 2017 Sven Hoefer
Kommentar: License: GPL
Diese GUI wurde von Grund auf neu programmiert und sollte nun vom This program is free software; you can redistribute it and/or modify
Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert it under the terms of the GNU General Public License as published by
auf der Client-Server Idee, diese GUI ist also von der direkten DBox- the Free Software Foundation; either version 2 of the License, or
Steuerung getrennt. Diese wird dann von Daemons uebernommen. (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.
License: GPL You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef __audioplayergui__ #ifndef __audioplayergui__
@@ -55,212 +46,208 @@ typedef std::pair<unsigned char, CPosList> CTitle2PosItem;
class CFrameBuffer; class CFrameBuffer;
class CAudiofileExt : public CAudiofile class CAudiofileExt : public CAudiofile
{ {
public: public:
CAudiofileExt();
CAudiofileExt(); CAudiofileExt(std::string name, CFile::FileType type);
CAudiofileExt(std::string name, CFile::FileType type); CAudiofileExt(const CAudiofileExt& src);
CAudiofileExt(const CAudiofileExt& src); void operator=(const CAudiofileExt& src);
void operator=(const CAudiofileExt& src); char firstChar;
char firstChar;
}; };
typedef std::vector<CAudiofileExt> CAudioPlayList; typedef std::vector<CAudiofileExt> CAudioPlayList;
class RandomNumber class RandomNumber
{ {
public: public:
RandomNumber() RandomNumber() { std::srand(time(0)); }
{
std::srand(time(0));
}
int operator()(int n){ int operator()(int n) { return std::rand() / (1.0 + RAND_MAX) * n; }
return std::rand() / (1.0 + RAND_MAX) * n;
}
}; };
class CAudioPlayerGui : public CMenuTarget class CAudioPlayerGui : public CMenuTarget
{ {
public: public:
enum State enum State
{ {
PLAY=0, PLAY=0,
STOP, STOP,
PAUSE, PAUSE,
FF, FF,
REV REV
}; };
enum DisplayOrder {ARTIST_TITLE = 0, TITLE_ARTIST=1}; enum DisplayOrder
{
ARTIST_TITLE = 0,
TITLE_ARTIST=1
};
private: private:
void Init(void); void Init(void);
CFrameBuffer * m_frameBuffer; CFrameBuffer * m_frameBuffer;
unsigned int m_selected; unsigned int m_selected;
int m_current; int m_current;
unsigned int m_liststart; unsigned int m_liststart;
unsigned int m_listmaxshow; unsigned int m_listmaxshow;
int m_fheight; // Fonthoehe Playlist-Inhalt int m_item_height;
int m_theight; // Fonthoehe Playlist-Titel int m_header_height;
int m_sheight; // Fonthoehe MP Info int m_meta_height;
int m_buttonHeight; int m_button_height;
int m_title_height; int m_title_height;
int m_info_height; int m_info_height;
int m_key_level; int m_key_level;
bool m_visible; bool m_visible;
State m_state; State m_state;
time_t m_time_total; time_t m_time_total;
time_t m_time_played; time_t m_time_played;
std::string m_metainfo; std::string m_metainfo;
bool m_select_title_by_name; bool m_select_title_by_name;
bool m_show_playlist; bool m_show_playlist;
bool m_playlistHasChanged;
bool m_playlistHasChanged; CAudioPlayList m_playlist;
CAudioPlayList m_radiolist;
CAudioPlayList m_filelist;
CTitle2Pos m_title2Pos;
CAudiofileExt m_curr_audiofile;
std::string m_Path;
CAudioPlayList m_playlist; int m_width;
CAudioPlayList m_radiolist; int m_height;
CAudioPlayList m_filelist; int m_x;
CTitle2Pos m_title2Pos; int m_y;
CAudiofileExt m_curr_audiofile; int m_title_w;
std::string m_Path;
int m_width; int m_LastMode;
int m_height; int m_idletime;
int m_x; bool m_screensaver;
int m_y; bool m_inetmode;
int m_title_w; CComponentsDetailsLine *m_detailsline;
CComponentsInfoBox *m_infobox;
int m_LastMode; SMSKeyInput m_SMSKeyInput;
int m_idletime;
bool m_screensaver;
bool m_inetmode;
CComponentsDetailsLine *dline;
CComponentsInfoBox *ibox;
SMSKeyInput m_SMSKeyInput; void paintItem(int pos);
void paint();
void paintHead();
void paintFoot();
void paintTitleBox();
void paintCover();
void paintLCD();
void paintDetailsLine(int pos);
void clearDetailsLine();
void hide();
void paintItem(int pos); void get_id3(CAudiofileExt * audiofile);
void paint(); void get_mp3info(CAudiofileExt * audiofile);
void paintHead(); CFileFilter audiofilefilter;
void paintFoot(); void ff(unsigned int seconds=0);
void paintInfo(); void rev(unsigned int seconds=0);
void paintCover(); int getNext();
void paintLCD(); void GetMetaData(CAudiofileExt &File);
void hide(); void updateMetaData();
void updateTimes(const bool force = false);
void showMetaData();
void screensaver(bool on);
bool getNumericInput(neutrino_msg_t& msg, int& val);
void get_id3(CAudiofileExt * audiofile); void addToPlaylist(CAudiofileExt &file);
void get_mp3info(CAudiofileExt * audiofile); void removeFromPlaylist(long pos);
CFileFilter audiofilefilter;
void paintItemID3DetailsLine (int pos);
void clearItemID3DetailsLine ();
void ff(unsigned int seconds=0);
void rev(unsigned int seconds=0);
int getNext();
void GetMetaData(CAudiofileExt &File);
void updateMetaData();
void updateTimes(const bool force = false);
void showMetaData();
void screensaver(bool on);
bool getNumericInput(neutrino_msg_t& msg,int& val);
void addToPlaylist(CAudiofileExt &file); /**
void removeFromPlaylist(long pos); * Adds an url (shoutcast, ...) to the to the audioplayer playlist
*/
void addUrl2Playlist(const char *url, const char *name = NULL, const time_t bitrate = 0);
/** /**
* Adds an url (shoutcast, ...) to the to the audioplayer playlist * Adds a url which points to an .m3u format (playlist, ...) to the audioplayer playlist
*/ */
void addUrl2Playlist(const char *url, const char *name = NULL, const time_t bitrate = 0); void processPlaylistUrl(const char *url, const char *name = NULL, const time_t bitrate = 0);
/** /**
* Adds a url which points to an .m3u format (playlist, ...) to the audioplayer playlist * Loads a given XML file of internet audiostreams or playlists and processes them
*/ */
void processPlaylistUrl(const char *url, const char *name = NULL, const time_t bitrate = 0); void scanXmlFile(std::string filename);
/** /**
* Loads a given XML file of internet audiostreams or playlists and processes them * Processes a loaded XML file/data of internet audiostreams or playlists
*/ */
void scanXmlFile(std::string filename); void scanXmlData(xmlDocPtr answer_parser, const char *nametag, const char *urltag, const char *bitratetag = NULL, bool usechild = false);
/** /**
* Processes a loaded XML file/data of internet audiostreams or playlists * Reads the icecast directory (XML file) and calls scanXmlData
*/ */
void scanXmlData(xmlDocPtr answer_parser, const char *nametag, const char *urltag, const char *bitratetag = NULL, bool usechild = false); void readDir_ic(void);
/** void selectTitle(unsigned char selectionChar);
* Reads the icecast directory (XML file) and calls scanXmlData
*/
void readDir_ic(void);
void selectTitle(unsigned char selectionChar); /**
/** * Appends the file information to the given string.
* Appends the file information to the given string. * @param fileInfo a string where the file information will be appended
* @param fileInfo a string where the file information will be appended * @param file the file to return the information for
* @param file the file to return the information for */
*/ void getFileInfoToDisplay(std::string& fileInfo, CAudiofileExt &file);
void getFileInfoToDisplay(std::string& fileInfo, CAudiofileExt &file);
void printSearchTree(); void printSearchTree();
void buildSearchTree(); void buildSearchTree();
unsigned char getFirstChar(CAudiofileExt &file); unsigned char getFirstChar(CAudiofileExt &file);
void printTimevalDiff(timeval &start, timeval &end); void printTimevalDiff(timeval &start, timeval &end);
/** /**
* Saves the current playlist into a .m3u playlist file. * Saves the current playlist into a .m3u playlist file.
*/ */
void savePlaylist(); void savePlaylist();
/** /**
* Converts an absolute filename to a relative one * Converts an absolute filename to a relative one
* as seen from a file in fromDir. * as seen from a file in fromDir.
* Example: * Example:
* absFilename: /mnt/audio/A/abc.mp3 * absFilename: /mnt/audio/A/abc.mp3
* fromDir: /mnt/audio/B * fromDir: /mnt/audio/B
* => ../A/abc.mp3 will be returned * => ../A/abc.mp3 will be returned
* @param fromDir the directory from where we want to * @param fromDir the directory from where we want to
* access the file * access the file
* @param absFilename the file we want to access in a * @param absFilename the file we want to access in a
* relative way from fromDir (given as an absolute path) * relative way from fromDir (given as an absolute path)
* @return the location of absFilename as seen from fromDir * @return the location of absFilename as seen from fromDir
* (relative path) * (relative path)
*/ */
std::string absPath2Rel(const std::string& fromDir, std::string absPath2Rel(const std::string& fromDir, const std::string& absFilename);
const std::string& absFilename);
/** /**
* Asks the user if the file filename should be overwritten or not * Asks the user if the file filename should be overwritten or not
* @param filename the name of the file * @param filename the name of the file
* @return true if file should be overwritten, false otherwise * @return true if file should be overwritten, false otherwise
*/ */
bool askToOverwriteFile(const std::string& filename); bool askToOverwriteFile(const std::string& filename);
bool openFilebrowser(void);
bool openSCbrowser(void);
bool clearPlaylist(void);
bool shufflePlaylist(void);
bool pictureviewer; bool openFilebrowser(void);
bool openSCbrowser(void);
bool clearPlaylist(void);
bool shufflePlaylist(void);
public: bool pictureviewer;
CAudioPlayerGui(bool inetmode = false);
~CAudioPlayerGui();
int show();
int exec(CMenuTarget* parent, const std::string & actionKey);
void wantNextPlay(); public:
void pause(); CAudioPlayerGui(bool inetmode = false);
void play(unsigned int pos); ~CAudioPlayerGui();
void stop(); int show();
bool playNext(bool allow_rotate = false); int exec(CMenuTarget* parent, const std::string & actionKey);
bool playPrev(bool allow_rotate = false);
int getAudioPlayerM_current() {return m_current;} void wantNextPlay();
void pause();
void play(unsigned int pos);
void stop();
bool playNext(bool allow_rotate = false);
bool playPrev(bool allow_rotate = false);
int getAudioPlayerM_current() { return m_current; }
}; };
#endif #endif