⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infoeditor.cpp

📁 一个简单漂亮的C++编写的mp3播放器
💻 CPP
字号:
/*____________________________________________________________________________

        FreeAmp - The Free MP3 Player

        Portions Copyright (C) 1999 EMusic.com

        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.

        $Id: infoeditor.cpp,v 1.7 1999/12/18 16:57:20 ijr Exp $
____________________________________________________________________________*/

#include "utility.h"
#include "infoeditor.h"
#include "metadata.h"
#include "musiccatalog.h"

void infoeditorUI::DoApplyInfoEdit(void)
{
    gchar *text;

    MetaData newmeta;

    if (!changed)
        return;
    gtk_widget_set_sensitive(m_okButton, FALSE);
    gtk_widget_set_sensitive(m_applyButton, FALSE);
    text = gtk_entry_get_text(GTK_ENTRY(m_titleEntry));
    newmeta.SetTitle(strdup_new(text));
    text = gtk_entry_get_text(GTK_ENTRY(m_artistEntry));
    newmeta.SetArtist(strdup_new(text));
    text = gtk_entry_get_text(GTK_ENTRY(m_albumEntry));
    newmeta.SetAlbum(strdup_new(text));
    text = gtk_entry_get_text(GTK_ENTRY(m_yearEntry));
    newmeta.SetYear(atoi(text));
    text = gtk_entry_get_text(GTK_ENTRY(m_commentEntry));
    newmeta.SetComment(strdup_new(text));
    text = gtk_entry_get_text(GTK_ENTRY(m_genreEntry));
    newmeta.SetGenre(strdup_new(text));
    text = gtk_entry_get_text(GTK_ENTRY(m_trackEntry));
    newmeta.SetTrack(atoi(text));

    MetaData oldmeta = m_playlistItem->GetMetaData();

    newmeta.SetTime(oldmeta.Time());
    newmeta.SetSize(oldmeta.Size());

    m_playlistItem->SetMetaData(&newmeta);

    m_context->catalog->UpdateSong(m_playlistItem);
}

gint info_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
    return FALSE;
}

void info_destroy(GtkWidget *widget, infoeditorUI *p)
{
    delete p;
}

void info_ok_button_event(GtkWidget *widget, infoeditorUI *p)
{
    p->DoApplyInfoEdit();
    delete p;
}

void info_close_button_event(GtkWidget *widget, infoeditorUI *p)
{
    delete p;
}

void info_apply_button_event(GtkWidget * widget, infoeditorUI *p)
{
    p->DoApplyInfoEdit();
}

void text_changed_event(GtkWidget * widget, infoeditorUI *p)
{
   gtk_widget_set_sensitive(p->m_okButton, TRUE);
   gtk_widget_set_sensitive(p->m_applyButton, TRUE);
   p->changed = true;
}

infoeditorUI::infoeditorUI(FAContext *context, PlaylistItem *editee)
{
    m_context = context;
    m_playlistItem = editee;
}

void infoeditorUI::DisplayInfo(void)
{
   GtkWidget *vbox;
   GtkWidget *hbox;
   GtkWidget *table;
   GtkWidget *label;
   GtkWidget *separator;
   GtkWidget *close_button;

   MetaData songmeta = m_playlistItem->GetMetaData();

   m_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title(GTK_WINDOW(m_window), BRANDING" - Information Editor");
   gtk_signal_connect(GTK_OBJECT(m_window), "delete_event",
                      GTK_SIGNAL_FUNC(info_delete_event), this);
   gtk_container_set_border_width(GTK_CONTAINER(m_window), 5);

   vbox = gtk_vbox_new(FALSE, 0);
   gtk_container_add(GTK_CONTAINER(m_window), vbox);
   gtk_widget_show(vbox);

   table = gtk_table_new(10, 2, FALSE);
   gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
   gtk_widget_show(table);

   /* Song title entry */
   label = gtk_label_new("Song Title:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_titleEntry = gtk_entry_new();
   if (songmeta.Title().c_str())
      gtk_entry_set_text(GTK_ENTRY(m_titleEntry), songmeta.Title().c_str());
   gtk_signal_connect(GTK_OBJECT(m_titleEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_titleEntry, 1, 2, 0, 1);
   gtk_widget_show(m_titleEntry);

   /* Artist entry */
   label = gtk_label_new("Artist:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_artistEntry = gtk_entry_new();
   if (songmeta.Artist().c_str())
      gtk_entry_set_text(GTK_ENTRY(m_artistEntry), songmeta.Artist().c_str());
   gtk_signal_connect(GTK_OBJECT(m_artistEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_artistEntry, 1, 2, 1, 2);
   gtk_widget_show(m_artistEntry);

   /* Album entry */
   label = gtk_label_new("Album:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_albumEntry = gtk_entry_new();
   if (songmeta.Album().c_str())
      gtk_entry_set_text(GTK_ENTRY(m_albumEntry), songmeta.Album().c_str());
   gtk_signal_connect(GTK_OBJECT(m_albumEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_albumEntry, 1, 2, 2, 3);
   gtk_widget_show(m_albumEntry);

   /* Year entry */
   label = gtk_label_new("Year:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_yearEntry = gtk_entry_new();
   if (songmeta.Year() != 0) {
       char tempstr[10];
       sprintf(tempstr, "%d", songmeta.Year());
       gtk_entry_set_text(GTK_ENTRY(m_yearEntry), tempstr);
   }
   gtk_signal_connect(GTK_OBJECT(m_yearEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_yearEntry, 1, 2, 3, 4);
   gtk_widget_show(m_yearEntry);

   /* Genre entry */
   label = gtk_label_new("Genre:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_genreEntry = gtk_entry_new();
   if (songmeta.Genre().c_str())
      gtk_entry_set_text(GTK_ENTRY(m_genreEntry), songmeta.Genre().c_str());
   gtk_signal_connect(GTK_OBJECT(m_genreEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_genreEntry, 1, 2, 4, 5);
   gtk_widget_show(m_genreEntry);

   /* Track Entry */
   label = gtk_label_new("Track:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_trackEntry = gtk_entry_new();
   if (songmeta.Track() != 0) {
      char strtemp[5];
      sprintf(strtemp, "%d", songmeta.Track());
      gtk_entry_set_text(GTK_ENTRY(m_trackEntry), strtemp);
   }
   gtk_signal_connect(GTK_OBJECT(m_trackEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_trackEntry, 1, 2, 5, 6);
   gtk_widget_show(m_trackEntry);

   /* Comment entry */
   label = gtk_label_new("Comments:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 6, 7, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   m_commentEntry = gtk_entry_new();
   if (songmeta.Comment().c_str())
      gtk_entry_set_text(GTK_ENTRY(m_commentEntry), songmeta.Comment().c_str());
   gtk_signal_connect(GTK_OBJECT(m_commentEntry), "changed",
                      GTK_SIGNAL_FUNC(text_changed_event), this);
   gtk_table_attach_defaults(GTK_TABLE(table), m_commentEntry, 1, 2, 6, 7);
   gtk_widget_show(m_commentEntry);

   /* Length display */
   label = gtk_label_new("Length:");
   gtk_misc_set_alignment(GTK_MISC(label), (gfloat)1.0, (gfloat)0.5);
   gtk_table_attach(GTK_TABLE(table), label, 0, 1, 7, 8, GTK_FILL, GTK_FILL,
                    10, 1);
   gtk_widget_show(label);

   {
      gchar *length;
      char minutes[5];
      char seconds[5];
      int min, sec;

      min = songmeta.Time() / 60;
      sec = songmeta.Time() % 60;
      sprintf(minutes, "%02d", min);
      sprintf(seconds, "%02d", sec);
      length = g_strconcat((gchar *) minutes, ":", (gchar *) seconds, NULL);
      GtkWidget *time_label;
      time_label = gtk_label_new(length);
      gtk_table_attach_defaults(GTK_TABLE(table), time_label, 1, 2, 7, 8);
      gtk_widget_show(time_label);
   }

   /* Control buttons at the bottom */
   separator = gtk_hseparator_new();
   gtk_container_add(GTK_CONTAINER(vbox), separator);
   gtk_widget_show(separator);

   hbox = gtk_hbox_new(FALSE, 10);
   gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
   gtk_container_add(GTK_CONTAINER(vbox), hbox);
   gtk_widget_show(hbox);

   m_okButton = gtk_button_new_with_label("OK");
   gtk_signal_connect(GTK_OBJECT(m_okButton), "clicked",
                      GTK_SIGNAL_FUNC(info_ok_button_event), this);
   gtk_container_add(GTK_CONTAINER(hbox), m_okButton);
   gtk_widget_show(m_okButton);

   m_applyButton = gtk_button_new_with_label("Apply");
   gtk_signal_connect(GTK_OBJECT(m_applyButton), "clicked",
                      GTK_SIGNAL_FUNC(info_apply_button_event), this);
   gtk_container_add(GTK_CONTAINER(hbox), m_applyButton);
   gtk_widget_show(m_applyButton);

   close_button = gtk_button_new_with_label("Close");
   gtk_signal_connect(GTK_OBJECT(close_button), "clicked",
                      GTK_SIGNAL_FUNC(info_close_button_event), this);
   gtk_container_add(GTK_CONTAINER(hbox), close_button);
   gtk_widget_show(close_button);

   gtk_widget_show(m_window);

   gtk_widget_set_sensitive(m_okButton, FALSE);
   gtk_widget_set_sensitive(m_applyButton, FALSE);

   changed = FALSE;
}

infoeditorUI::~infoeditorUI()
{
   gtk_widget_destroy(m_window);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -