📄 gtkmusicbrowser.cpp
字号:
}
gtk_window_set_title(GTK_WINDOW(musicBrowser), BRANDING" - My Music");
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/View/View Playlist Only");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu, (gpointer)"View Playlist Only");
UpdateCatalog();
}
else {
m_state = kStateCollapsed;
lastPanedPosition = ((GtkPaned *)masterBox)->child1_size;
lastPanedHandle = ((GtkPaned *)masterBox)->handle_size;
gtk_paned_set_position(GTK_PANED(masterBox), 0);
gtk_paned_set_handle_size(GTK_PANED(masterBox), 0);
gtk_window_set_title(GTK_WINDOW(musicBrowser), BRANDING" - Playlist Editor");
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/View/View Playlist Only");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu, (gpointer)"View My Music");
}
}
void GTKMusicBrowser::ToggleVisEvent(void)
{
gdk_threads_leave();
Close();
gdk_threads_enter();
}
static gint toggle_vis_delete_event(GtkWidget *w, GdkEvent *e,
GTKMusicBrowser *p)
{
p->ToggleVisEvent();
return TRUE;
}
static void add_tool(GtkWidget *widget, GTKMusicBrowser *p)
{
p->SetClickState(kContextPlaylist);
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 (ext && 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"))) {
ext = p->GetContext()->player->GetExtension(temp);
if (ext &&
p->GetContext()->player->IsSupportedExtension(ext)) {
p->AddTrackPlaylistEvent(temp);
p->m_currentindex++;
}
}
ext = p->GetContext()->player->GetExtension(first);
if (ext &&
p->GetContext()->player->IsSupportedExtension(ext))
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_LastKey, kPlaylistSortType_Descending);
}
static void sort_random2(GTKMusicBrowser *p, guint action, GtkWidget *w)
{
p->iSetShuffleMode = true;
p->SortPlaylistEvent(kPlaylistSortKey_LastKey, 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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -