📄 gtkmusicbrowser.cpp
字号:
if (shuffled)
w = gtk_item_factory_get_widget(menuFactory,
"/Controls/Play Tracks in Random Order");
else
w = gtk_item_factory_get_widget(menuFactory,
"/Controls/Play Tracks in Normal Order");
if (GTK_IS_CHECK_MENU_ITEM(GTK_OBJECT(w)))
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), TRUE);
}
void GTKMusicBrowser::ShowOptions(int page)
{
m_context->target->AcceptEvent(new ShowPreferencesEvent(page));
}
void GTKMusicBrowser::AddFileCMD()
{
bool playNow = true;
m_context->prefs->GetPrefBoolean(kPlayImmediatelyPref, &playNow);
FileSelector *filesel = new FileSelector("Select a file to play");
if (filesel->Run(false)) {
char *returnpath = filesel->GetReturnPath();
char *ext = m_context->player->GetExtension(returnpath);
if (ext) {
uint32 length = strlen(returnpath) + 10;
char *tempurl = new char[length];
if (IsntError(FilePathToURL(returnpath, tempurl, &length))) {
if (playNow)
DeleteListEvent();
if (m_plm->IsSupportedPlaylistFormat(ext)) {
string tobeloaded = tempurl;
LoadPlaylist(tobeloaded);
}
else {
char *filereturn = strdup_new(filesel->GetReturnPath());
if (filereturn) {
char *temp;
char *first= strtok(filereturn, "\n");
while ((temp = strtok(NULL, "\n"))) {
AddTrackPlaylistEvent(temp);
m_lastindex++;
}
AddTrackPlaylistEvent(first);
}
delete [] filereturn;
}
}
delete [] ext;
delete [] tempurl;
}
if (playNow) {
m_lastindex = 0;
PlayEvent();
}
}
delete filesel;
}
void GTKMusicBrowser::CreateExpanded(void)
{
GtkWidget *browserlabel;
GtkWidget *browservbox;
GtkWidget *hbox;
masterBrowserBox = gtk_vbox_new(FALSE, 0);
gtk_paned_pack1(GTK_PANED(masterBox), masterBrowserBox, TRUE, TRUE);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(masterBrowserBox), hbox, FALSE, FALSE, 5);
browserlabel = gtk_label_new("My Music:");
gtk_box_pack_start(GTK_BOX(hbox), browserlabel, FALSE, FALSE, 5);
browservbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(masterBrowserBox), browservbox);
gtk_container_set_border_width(GTK_CONTAINER(browservbox), 5);
musicBrowserWindow = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(musicBrowserWindow),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(browservbox), musicBrowserWindow, TRUE, TRUE, 0);
gtk_widget_set_usize(musicBrowserWindow, 200, 200);
CreateTree();
gtk_widget_show_all(masterBrowserBox);
}
void set_label_menu(GtkWidget *w, void *title)
{
gchar *newtitle = (gchar*)title;
if (GTK_IS_ACCEL_LABEL(GTK_OBJECT(w))) {
gtk_label_set_text(&(GTK_ACCEL_LABEL(w)->label), newtitle);
}
}
void GTKMusicBrowser::UpdatePlayPause(void)
{
GtkWidget *w = gtk_item_factory_get_widget(menuFactory, "/Controls/Play");
if (pauseState)
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu, (gpointer)"Pause");
else
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu, (gpointer)"Play");
w = gtk_item_factory_get_widget(menuFactory, "/Controls/Stop");
if (stopState)
gtk_widget_set_sensitive(w, FALSE);
else
gtk_widget_set_sensitive(w, TRUE);
}
void GTKMusicBrowser::ExpandCollapseEvent(void)
{
string title = string(BRANDING);
if (m_state == kStateCollapsed) {
m_state = kStateExpanded;
if (lastPanedPosition != -1) {
gtk_paned_set_position(GTK_PANED(masterBox), lastPanedPosition);
gtk_paned_set_handle_size(GTK_PANED(masterBox), lastPanedHandle);
}
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(musicBrowserWindow),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
title += string(" - 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_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(musicBrowserWindow),
GTK_POLICY_NEVER, GTK_POLICY_NEVER);
title += string(" - 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");
}
if (master)
title += string("Current listening list");
else {
if (m_bCDMode)
title += string("New Audio CD");
else if (m_currentListName.length() == 0)
title += string("New Playlist");
else
title += string("Editing playlist ") + m_currentListName;
}
gtk_window_set_title(GTK_WINDOW(musicBrowser), title.c_str());
}
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;
}
void GTKMusicBrowser::SetStatusText(const char *text)
{
if (statusContext > 0)
gtk_statusbar_pop(GTK_STATUSBAR(statusBar), statusContext);
else
statusContext = 1;
gtk_statusbar_push(GTK_STATUSBAR(statusBar), 1, text);
}
void GTKMusicBrowser::CreateNewEditor(char *playlisturl, bool cd_mode)
{
string newURL;
if (playlisturl) {
if (!strncmp("file://", playlisturl, 7))
newURL = playlisturl;
else
newURL = string("file://") + string(playlisturl);
}
else
newURL = "";
parentUI->CreateNewEditor(newURL, cd_mode);
}
GtkWidget *GTKMusicBrowser::NewPixmap(char **data)
{
GtkWidget *wpixmap;
GdkPixmap *pixmap;
GdkBitmap *mask;
GtkStyle *style = gtk_widget_get_style(musicBrowser);
pixmap = gdk_pixmap_create_from_xpm_d(musicBrowser->window, &mask,
&style->bg[GTK_STATE_NORMAL], data);
wpixmap = gtk_pixmap_new(pixmap, mask);
return wpixmap;
}
void GTKMusicBrowser::CreatePlaylist(void)
{
GtkWidget *vbox;
GtkWidget *playlistwindow;
musicBrowser = gtk_window_new(GTK_WINDOW_TOPLEVEL);
string titlestr = string(BRANDING) + string(" - My Music: ");
if (master)
titlestr += string("Current listening list");
else {
if (m_bCDMode)
titlestr += string("New Audio CD");
else if (m_currentListName.length() == 0)
titlestr += string("New Playlist");
else
titlestr += string("Editing playlist ") + m_currentListName;
}
gtk_window_set_title(GTK_WINDOW(musicBrowser), titlestr.c_str());
gtk_window_set_policy(GTK_WINDOW(musicBrowser), TRUE, TRUE, FALSE);
gtk_signal_connect(GTK_OBJECT(musicBrowser), "delete_event",
GTK_SIGNAL_FUNC(toggle_vis_delete_event), this);
gtk_container_set_border_width(GTK_CONTAINER(musicBrowser), 0);
gtk_widget_realize(musicBrowser);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(musicBrowser), vbox);
gtk_widget_show(vbox);
statusBar = gtk_statusbar_new();
gtk_box_pack_end(GTK_BOX(vbox), statusBar, FALSE, TRUE, 0);
gtk_widget_show(statusBar);
CreateMenu(vbox);
CreateToolbar(vbox);
GtkWidget *separator = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(vbox), separator, FALSE, TRUE, 0);
gtk_widget_show(separator);
masterBox = gtk_hpaned_new();
gtk_box_pack_start(GTK_BOX(vbox), masterBox, TRUE, TRUE, 0);
gtk_widget_show(masterBox);
masterPlaylistBox = gtk_vbox_new(FALSE, 0);
gtk_paned_pack2(GTK_PANED(masterBox), masterPlaylistBox, TRUE, TRUE);
gtk_widget_show(masterPlaylistBox);
GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(masterPlaylistBox), hbox, FALSE, FALSE, 5);
gtk_widget_show(hbox);
if (master)
playlistLabel = gtk_label_new("Currently listening to:");
else {
if (m_bCDMode) {
playlistLabel = gtk_label_new("New Audio CD:");
}
else {
string labelstr = string("Editing playlist: ");
if (m_currentListName.length() == 0)
labelstr += string("New Playlist");
else
labelstr += m_currentListName;
playlistLabel = gtk_label_new(labelstr.c_str());
}
}
gtk_box_pack_start(GTK_BOX(hbox), playlistLabel, FALSE, FALSE, 5);
gtk_widget_show(playlistLabel);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(masterPlaylistBox), hbox, TRUE, TRUE, 0);
gtk_container_set_border_width(GTK_CONTAINER(masterPlaylistBox), 5);
gtk_widget_show(hbox);
playlistwindow = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(playlistwindow),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(hbox), playlistwindow, TRUE, TRUE, 5);
gtk_widget_set_usize(playlistwindow, 200, 200);
gtk_widget_show(playlistwindow);
normStyle = gtk_style_copy(gtk_widget_get_style(musicBrowser));
boldStyle = gtk_style_copy(normStyle);
GdkFont *font =
gdk_font_load("-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"); if (!font)
font = gdk_font_load("fixed");
gdk_font_unref(boldStyle->font);
boldStyle->font = font;
gdk_font_ref(boldStyle->font);
GdkColor red;
GdkColor green;
red.red = 56000;
red.green = 0;
red.blue = 0;
green.red = 0;
green.green = 56000;
green.blue = 000;
greenStyle = gtk_style_copy(normStyle);
greenStyle->fg[GTK_STATE_NORMAL] = green;
redStyle = gtk_style_copy(normStyle);
redStyle->fg[GTK_STATE_NORMAL] = red;
CreatePlaylistList(playlistwindow);
CreateExpanded();
UpdateCatalog();
SetClickState(kContextNone);
gtk_widget_show(musicBrowser);
m_state = kStateExpanded;
}
void GTKMusicBrowser::DeleteListEvent(void)
{
if (m_plm->CountItems() == 0)
return;
m_plm->RemoveAll();
if (master)
m_context->target->AcceptEvent(new Event(CMD_Stop));
m_lastindex = kInvalidIndex;
}
void GTKMusicBrowser::SetClickState(ClickState newState)
{
if (m_bCDMode) {
GtkWidget *w = gtk_item_factory_get_widget(menuFactory,
"/File/Create New Audio CD");
gtk_container_foreach(GTK_CONTAINER(w), set_label_menu,
(gpointer)"Burn Audio CD");
}
GtkWidget *sig = gtk_item_factory_get_widget(menuFactory,
"/Relatable/Start Signaturing");
gtk_widget_set_sensitive(sig, m_sigsExist);
if (m_sigsStart)
gtk_container_foreach(GTK_CONTAINER(sig), set_label_menu,
(gpointer)"Start Signaturing");
else
gtk_container_foreach(GTK_CONTAINER(sig), set_label_menu,
(gpointer)"Stop Signaturing");
sig = gtk_item_factory_get_widget(menuFactory,
"/Relatable/Learn Playlist");
bool advancedRelate = false;
m_context->prefs->GetPrefBoolean(kAdvancedRelatablePref, &advancedRelate);
gtk_widget_set_sensitive(sig, advancedRelate);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -