📄 gtkmusicbrowser.cpp
字号:
m_clickState = newState;
if (m_clickState == kContextPlaylist) {
gtk_widget_set_sensitive(toolRemove, TRUE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Stream to Favorites"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music"), FALSE);
if (m_lastindex != 0 && m_plSelected.size() == 1) {
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Move Up"), TRUE);
gtk_widget_set_sensitive(toolUp, TRUE);
}
else {
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Move Up"), FALSE);
gtk_widget_set_sensitive(toolUp, FALSE);
}
if (m_lastindex != m_plm->CountItems() - 1 && m_plSelected.size() == 1)
{
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Move Down"), TRUE);
gtk_widget_set_sensitive(toolDown, TRUE);
}
else {
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Move Down"), FALSE);
gtk_widget_set_sensitive(toolDown, FALSE);
}
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info"), TRUE);
if (musicBrowserTree)
gtk_clist_unselect_all(GTK_CLIST(musicBrowserTree));
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Edit Track Info");
}
else if (m_clickState == kContextBrowser) {
gtk_widget_set_sensitive(toolUp, FALSE);
gtk_widget_set_sensitive(toolDown, FALSE);
gtk_widget_set_sensitive(toolRemove, FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Stream to Favorites"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music"), TRUE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Move Up"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Move Down"), FALSE);
gtk_clist_unselect_all(GTK_CLIST(playlistList));
if (m_mbState == kTreePlaylist) {
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Edit Playlist");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Items to Playlist");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Add Playlist to Playlist");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Remove Playlist from My Music");
}
else if (m_mbState == kTreeTrack) {
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Edit Track Info");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Items to Playlist");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Add Track to Playlist");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Remove Track from My Music");
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info"), TRUE);
}
else if (m_mbState == kTreeStream) {
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Stream to Favorites"), TRUE);
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Edit Stream Info");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Items to Playlist");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Add Stream to Playlist");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Remove Stream from My Music");
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info"), TRUE);
}
else if (m_mbState == kTreeCD) {
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Edit Info");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Items to Playlist");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Add Track to Playlist");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Remove Items from My Music");
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music"), FALSE);
}
else {
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Edit Info");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Add Items to Playlist");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Add Items to Playlist");
w = gtk_item_factory_get_widget(menuFactory,
"/Edit/Remove Items from My Music");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Remove Items from My Music");
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info"), FALSE);
}
}
else {
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Edit/Edit Info"), FALSE);
gtk_widget_set_sensitive(toolUp, FALSE);
gtk_widget_set_sensitive(toolDown, FALSE);
gtk_clist_unselect_all(GTK_CLIST(playlistList));
if (musicBrowserTree)
gtk_clist_unselect_all(GTK_CLIST(musicBrowserTree));
}
if (!master) {
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Play"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Stop"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Next Track"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Previous Track"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Repeat No Tracks"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Repeat Current Track"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(menuFactory,
"/Controls/Repeat All Tracks"), FALSE);
}
}
void GTKMusicBrowser::DeletePlaylistItem(uint32 loc)
{
bool stopped = false;
if (master) {
if (loc == m_playingindex) {
m_context->target->AcceptEvent(new Event(CMD_Stop));
stopped = true;
}
else if (m_playingindex > loc)
m_playingindex--;
if (stopped && (m_plm->CountItems() - 1 > loc)) {
m_plm->SetCurrentIndex(loc + 1);
m_context->target->AcceptEvent(new Event(CMD_Play));
}
}
m_plm->RemoveItem(loc);
}
void GTKMusicBrowser::DeleteEvent(void)
{
if (GetClickState() == kContextPlaylist) {
set<uint32>::reverse_iterator i = m_plSelected.rbegin();
for (; i != m_plSelected.rend(); i++)
DeletePlaylistItem(*i);
}
else if (GetClickState() == kContextBrowser) {
vector<TreeData *>::reverse_iterator i = mbSelections->rbegin();
for (; i != mbSelections->rend(); i++) {
switch ((*i)->type) {
case kTreePlaylist: {
m_context->catalog->RemovePlaylist((*i)->playlistname.c_str());
break; }
case kTreeTrack: {
m_context->catalog->RemoveSong((*i)->track->URL().c_str());
break; }
case kTreeFavStream: {
m_context->catalog->RemoveStream((*i)->track->URL().c_str());
break; }
case kTreeAlbum: {
AlbumList *list = (*i)->album;
vector<PlaylistItem *>::reverse_iterator j =
list->m_trackList->rbegin();
for (; j != list->m_trackList->rend(); j++)
m_context->catalog->RemoveSong((*j)->URL().c_str());
break; }
case kTreeArtist: {
ArtistList *list = (*i)->artist;
vector<AlbumList *>::reverse_iterator j =
list->m_albumList->rbegin();
for (; j != list->m_albumList->rend(); j++) {
vector<PlaylistItem *>::reverse_iterator k =
(*j)->m_trackList->rbegin();
for (; k != (*j)->m_trackList->rend(); k++)
m_context->catalog->RemoveSong((*k)->URL().c_str());
}
break; }
default:
break;
}
}
}
}
void GTKMusicBrowser::MoveUpEvent(void)
{
if (m_lastindex == 0 || m_lastindex == kInvalidIndex)
return;
m_plm->SwapItems(m_lastindex, m_lastindex - 1);
m_lastindex--;
UpdatePlaylistList();
}
void GTKMusicBrowser::MoveDownEvent(void)
{
if (m_lastindex == m_plm->CountItems() - 1 ||
m_lastindex == kInvalidIndex)
return;
m_plm->SwapItems(m_lastindex, m_lastindex + 1);
m_lastindex++;
UpdatePlaylistList();
}
void GTKMusicBrowser::MoveItemEvent(int source, int dest)
{
m_plm->MoveItem(source, dest);
}
void GTKMusicBrowser::AddTrackPlaylistEvent(char *path)
{
if (m_lastindex == kInvalidIndex)
m_lastindex = 0;
char *tempurl;
bool additReally = false;
bool needToDelete = false;
if ((tempurl = strstr(path, "http://")))
additReally = true;
else if ((tempurl = strstr(path, "file://")))
additReally = true;
else if ((tempurl = strstr(path, "rtp://")))
additReally = true;
else {
tempurl = new char[_MAX_PATH];
uint32 length = _MAX_PATH;
if (IsntError(FilePathToURL(path, tempurl, &length))) {
additReally = true;
needToDelete = true;
}
}
if (additReally)
m_plm->AddItem(tempurl, m_lastindex);
if (needToDelete)
delete [] tempurl;
}
void GTKMusicBrowser::AddTrackPlaylistEvent(PlaylistItem *newitem)
{
if (m_lastindex == kInvalidIndex)
m_lastindex = 0;
m_plm->AddItem(newitem, m_lastindex, true);
}
void GTKMusicBrowser::AddTracksPlaylistEvent(vector<PlaylistItem *> *newlist,
bool end, bool forcePlay,
bool forceNoPlay)
{
bool play = false;
int playPos = 0;
if (m_lastindex == kInvalidIndex)
m_lastindex = 0;
else if (end)
m_lastindex = m_plm->CountItems();
if (master && (m_plm->CountItems() == 0)) {
bool playNow = false;
m_context->prefs->GetPrefBoolean(kPlayImmediatelyPref, &playNow);
if (playNow)
play = true;
}
else
playPos = m_lastindex;
m_plm->AddItems(newlist, m_lastindex, true);
if (forceNoPlay)
play = false;
if (forcePlay)
play = true;
if (play) {
m_lastindex = playPos;
PlayEvent();
}
}
void GTKMusicBrowser::AddTracksDoubleClick(vector<PlaylistItem *> *newlist)
{
bool playNow = false;
m_context->prefs->GetPrefBoolean(kPlayImmediatelyPref, &playNow);
if (playNow) {
DeleteListEvent();
m_lastindex = 0;
AddTracksPlaylistEvent(newlist, true, true);
}
else
AddTracksPlaylistEvent(newlist, true);
}
void GTKMusicBrowser::PlayEvent(void)
{
m_context->target->AcceptEvent(new Event(CMD_Stop));
m_plm->SetCurrentIndex(m_lastindex);
m_context->target->AcceptEvent(new Event(CMD_Play));
}
void GTKMusicBrowser::StartMusicSearch(bool runMain, bool intro)
{
parentUI->StartSearch(runMain, intro);
}
void GTKMusicBrowser::SortPlaylistEvent(PlaylistSortKey order, PlaylistSortType
type)
{
if (order == kPlaylistSortKey_LastKey) {
if (type == kPlaylistSortType_Ascending)
m_plm->SetShuffleMode(true);
else
m_plm->SetShuffleMode(false);
}
else
m_plm->Sort(order, type);
}
void GTKMusicBrowser::TipArtist(PlaylistItem *tipee)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -