📄 gtkmusicbrowser.cpp
字号:
FileSelector *filesel = new FileSelector("Add a Track");
filesel->SetExtended();
if (filesel->Run()) {
char *returnpath = filesel->GetReturnPath();
char *ext = p->GetContext()->player->GetExtension(returnpath);
uint32 length = strlen(returnpath) + 10;
char *tempurl = new char[length];
if (IsntError(FilePathToURL(returnpath, tempurl, &length))) {
if (p->GetContext()->plm->IsSupportedPlaylistFormat(ext)) {
string tobeloaded = tempurl;
p->LoadPlaylist(tobeloaded);
}
else {
char *filereturn = strdup_new(filesel->GetReturnPath());
if (filereturn) {
char *temp;
char *first= strtok(filereturn, "\n");
while ((temp = strtok(NULL, "\n"))) {
p->AddTrackPlaylistEvent(temp);
p->m_currentindex++;
}
p->AddTrackPlaylistEvent(first);
}
delete [] filereturn;
}
}
delete [] tempurl;
}
delete filesel;
}
static void move_up_tool(GtkWidget *widget, GTKMusicBrowser *p)
{
p->MoveUpEvent();
p->SetClickState(kContextPlaylist);
}
static void move_down_tool(GtkWidget *widget, GTKMusicBrowser *p)
{
p->MoveDownEvent();
p->SetClickState(kContextPlaylist);
}
static void playlist_row_move_internal(GtkWidget *widget, int source, int dest,
GTKMusicBrowser *p)
{
p->MoveItemEvent(source, dest);
p->SetClickState(kContextPlaylist);
}
static void set_current_index_internal(GtkWidget *widget, int row, int column,
GdkEventButton *button,
GTKMusicBrowser *p)
{
p->m_currentindex = row;
if (button && button->type == GDK_2BUTTON_PRESS)
p->PlayEvent();
p->SetClickState(kContextPlaylist);
}
static void quit_menu(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->ToggleVisEvent();
}
static void sort_artist(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Artist, kPlaylistSortType_Ascending);
}
static void sort_album(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Album, kPlaylistSortType_Ascending);
}
static void sort_title(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Title, kPlaylistSortType_Ascending);
}
static void sort_year(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Year, kPlaylistSortType_Ascending);
}
static void sort_track(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Track, kPlaylistSortType_Ascending);
}
static void sort_genre(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Genre, kPlaylistSortType_Ascending);
}
static void sort_time(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Time, kPlaylistSortType_Ascending);
}
static void sort_location(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Location, kPlaylistSortType_Ascending);
}
static void sort_normal(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->iSetShuffleMode = true;
p->SortPlaylistEvent(kPlaylistSortKey_Random, kPlaylistSortType_Descending);
}
static void sort_random2(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->iSetShuffleMode = true;
p->SortPlaylistEvent(kPlaylistSortKey_Random, kPlaylistSortType_Ascending);
}
static void sort_random(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SortPlaylistEvent(kPlaylistSortKey_Random, kPlaylistSortType_Ascending);
}
static void catalog_tog(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->ExpandCollapseEvent();
}
static void infoedit(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
edit_tool(w, p);
}
static void new_plist(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SaveCurrentPlaylist();
p->CreateNewEditor(NULL);
}
static void new_plist_tool(GtkWidget *w, GTKMusicBrowser *p)
{
new_plist(p, 1, w);
}
static void open_list(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->SaveCurrentPlaylist();
FileSelector *filesel = new FileSelector("Open a Playlist from Disk");
if (filesel->Run())
p->CreateNewEditor(filesel->GetReturnPath());
delete filesel;
}
static void saveas_list(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
GTKMessageDialog oBox;
string oMessage = string("What do you want to call this playlist?");
if (oBox.Show(oMessage.c_str(), "Save This List to Disk?", kMessageOkCancel,
true, true)
== kMessageReturnOk) {
char *temp = oBox.GetEntryText();
if (!temp)
return;
for (unsigned int i = 0; i < strlen(temp); i++)
if (temp[i] == '/')
temp[i] = '_';
string name = FreeampDir(NULL) + string("/") + string(temp) +
string(".m3u");
p->m_currentListName = string(name);
p->SaveCurrentPlaylist();
}
}
static void save_list(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
if (p->m_currentListName.length() == 0) {
saveas_list(p, action, w);
}
else
p->SaveCurrentPlaylist();
}
static void save_list_tool(GtkWidget *w, GTKMusicBrowser *p)
{
save_list(p, 0, w);
}
static void export_list(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
FileSelector *filesel = new FileSelector("Export This Playlist to Disk");
if (filesel->Run())
p->SaveCurrentPlaylist(filesel->GetReturnPath());
delete filesel;
}
static void import_list(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
import_tool(w, p);
}
static void add_track_mb(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
if (p->GetClickState() == kContextBrowser) {
vector<PlaylistItem *> *newlist = getTreeSelection(p->musicBrowserTree);
p->AddTracksPlaylistEvent(newlist, true);
}
}
static void add_track_tool(GtkWidget *w, GTKMusicBrowser *p)
{
add_track_mb(p, 0, w);
}
static void add_track(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
FileSelector *filesel = new FileSelector("Add a Track");
filesel->SetExtended();
if (filesel->Run()) {
char *filereturn = strdup_new(filesel->GetReturnPath());
if (filereturn) {
char *temp;
char *first;
first = strtok(filereturn, "\n");
while ((temp = strtok(NULL, "\n"))) {
p->AddTrackPlaylistEvent(temp);
p->m_currentindex++;
}
p->AddTrackPlaylistEvent(first);
}
delete filereturn;
}
delete filesel;
}
static void delete_sel(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
string urlToDel;
if (p->GetClickState() == kContextPlaylist)
urlToDel = p->GetContext()->plm->ItemAt(p->m_currentindex)->URL();
else if (p->GetClickState() == kContextBrowser) {
if (p->GetTreeClick() == kClickPlaylist)
urlToDel = p->mbSelection->playlistname;
else if (p->GetTreeClick() == kClickTrack)
urlToDel = p->mbSelection->track->URL();
else
return;
}
uint32 length = urlToDel.length();
char *filename = new char[length];
if (IsntError(URLToFilePath(urlToDel.c_str(), filename, &length))) {
GTKMessageDialog oBox;
string oMessage = string("Are you sure you want to delete ")
+ string(filename) + string("?");
if (oBox.Show(oMessage.c_str(), "Delete Confirmation", kMessageYesNo,
true, false, "Delete it Permantly From the Disk")
== kMessageReturnYes) {
if (oBox.GetCheckStatus())
unlink(filename);
if (p->GetClickState() == kContextPlaylist) {
p->DeleteEvent();
}
else if (p->GetClickState() == kContextBrowser) {
if (p->GetTreeClick() == kClickPlaylist) {
p->GetContext()->catalog->RemovePlaylist(p->mbSelection->playlistname.c_str());
}
else if (p->GetTreeClick() == kClickTrack) {
p->GetContext()->catalog->RemoveSong(p->mbSelection->track->URL().c_str());
}
}
}
}
delete [] filename;
}
static void move_up(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->MoveUpEvent();
}
static void move_down(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->MoveDownEvent();
}
static void clear_list(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->DeleteListEvent();
}
void GTKMusicBrowser::CreateMenu(GtkWidget *topbox)
{
GtkAccelGroup *accel_group;
GtkWidget *separator;
accel_group = gtk_accel_group_new();
menuFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<blah>",
accel_group);
CreateMenuItems(menuFactory, (void *)this);
gtk_accel_group_attach(accel_group, GTK_OBJECT(musicBrowser));
gtk_box_pack_start(GTK_BOX(topbox), gtk_item_factory_get_widget(
menuFactory, "<blah>"), FALSE, TRUE, 0);
gtk_widget_show(gtk_item_factory_get_widget(menuFactory, "<blah>"));
separator = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(topbox), separator, FALSE, TRUE, 0);
gtk_widget_show(separator);
}
void GTKMusicBrowser::UpdatePlaylistList(void)
{
if (!playlistList || !m_plm)
return;
gtk_clist_freeze(GTK_CLIST(playlistList));
gtk_clist_clear(GTK_CLIST(playlistList));
uint32 iLoop = m_plm->CountItems();
for (uint32 i = 0; i < iLoop; i++) {
PlaylistItem *item = m_plm->ItemAt(i);
if (!item)
continue;
while (item->GetState() == kPlaylistItemState_RetrievingMetaData)
usleep(10);
MetaData mdata = item->GetMetaData();
char *iText[4];
char position[10];
char *title;
char *artist;
char length[50];
sprintf(position, "%d", i + 1);
title = (char *)mdata.Title().c_str();
artist = (char *)mdata.Artist().c_str();
if (mdata.Time() == 0)
sprintf(length, "Unknown");
else {
int secs = mdata.Time();
if (secs > 3600)
spr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -