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

📄 win32musicbrowser.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    hMenu = GetMenu(m_hWnd);
    hMenu = GetSubMenu(hMenu, 0);
    sItem.cbSize = sizeof(MENUITEMINFO);
    sItem.fMask = MIIM_TYPE;
    sItem.fType = MFT_STRING;
    sItem.dwTypeData = "Search Computer for &Music...";
    sItem.cch = strlen(sItem.dwTypeData);
    SetMenuItemInfo(hMenu, ID_FILE_SEARCHFORMUSIC, false, &sItem);
                    
    m_bSearchInProgress = false;
                
    TreeView_Expand(m_hMusicView,m_hPlaylistItem, TVE_EXPAND);
    TreeView_Expand(m_hMusicView,m_hMyMusicItem, TVE_EXPAND);

	AcceptEvent(new CDInfoEvent(0, 0, ""));
	m_context->player->UpdateCDNow();
}

void MusicBrowserUI::DisplayBrowserMessage(const char* msg)
{
    if (m_initialized)
        SendMessage(m_hStatus, SB_SETTEXT, 0, (LPARAM)msg);
}

void MusicBrowserUI::SaveCurrentPlaylist()
{
    bool savePlaylist = true;

    m_context->prefs->GetPrefBoolean(kSaveCurrentPlaylistOnExitPref, &savePlaylist);

    if(savePlaylist)
    {
        char path[MAX_PATH];
        char url[MAX_PATH + 7];
        uint32 length = sizeof(path);

        m_context->prefs->GetPrefString(kInstallDirPref, path, &length);

        strcat(path, "\\freeamp.m3u");

        length = sizeof(url);
        FilePathToURL(path, url, &length);

        m_plm->WritePlaylist(url);
        m_context->prefs->SetPrefInt32(kSavedPlaylistPositionPref, m_plm->GetCurrentIndex());
    }
}

Error MusicBrowserUI::AcceptEvent(Event *event)
{
    switch(event->Type()) 
    {
        case INFO_FileNotFound: 
        {
            MissingFileEvent* mfe = (MissingFileEvent*)event;
            
            MissingFileDialog* mf= new MissingFileDialog(m_context, 
                                                         m_hWnd, 
                                                         mfe->Item());
            mf->Show();

            break; 
        }

        case INFO_CDDiscStatus:
        {
            CDInfoEvent* cie = (CDInfoEvent*)event;
            uint32 numTracks = cie->GetNumTracks();

            if(m_cdTracks && cie->GetCDDB() != m_cdId)
            {			
                m_cdId = cie->GetCDDB();

                m_cdTracks->erase(m_cdTracks->begin(), m_cdTracks->end()); 

                for(uint32 track = 1; track <= numTracks; track++)
                {
                    char url[40];

                    sprintf(url, "file://%d.cda", track);

                    PlaylistItem* item = new PlaylistItem(url);
                
                    m_cdTracks->push_back(item);
                }

                if(m_cdTracks->size() > 0) 
                {
                    vector<PlaylistItem*>* metalist =
                                       new vector<PlaylistItem*>(m_cdTracks->size());

                    copy(m_cdTracks->begin(), m_cdTracks->end(), metalist->begin());
                    m_plm->RetrieveMetaData(metalist);
                }

                vector<MusicBrowserUI *>::iterator i;

                for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
                {
                    (*i)->RefreshCDList(m_cdTracks);
                }

                RefreshCDList(m_cdTracks);
            }

            break;
        }

        case INFO_PrefsChanged:
        {
            bool useTextLabels, useImages;
            m_context->prefs->GetPrefBoolean(kShowToolbarTextLabelsPref, &useTextLabels);
            m_context->prefs->GetPrefBoolean(kShowToolbarImagesPref, &useImages);

            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->AddToolbarButtons(useTextLabels, useImages);
                (*i)->UpdateButtonStates();
            }

            //
            //  Insert the columns that are specified by the user.
            unsigned int size = 100;
            char *buffer = (char *)malloc( size );
            if(kError_BufferTooSmall == m_context->prefs->GetPrefString(kPlaylistHeaderColumnsPref, buffer, &size))
            {
                int bufferSize = size;
                buffer = (char*)realloc(buffer, bufferSize);
                m_context->prefs->GetPrefString(kPlaylistHeaderColumnsPref, buffer, &size);
            } 

			//
			// Only recreate the header columns if they've changed.
			if ( strcmp( m_columnCache.c_str(), buffer ) == 0 )
				break;

			// Save new columns.
			m_columnCache = buffer;

            //
            //  Remove all the columns in the playlist.
            RemoveAllColumns( );
            // First column is always inserted.
            InsertColumn( "#", 0 );


            int columnN = 1;
            char *token = strtok( buffer, "|" );
            while( token != NULL )
            {
                InsertColumn( token , columnN );
                token = strtok( NULL, "|" );
                columnN += 1;
            }

            free( buffer );

            // Resize the columns appropriately
            ResizeColumns();

            AddToolbarButtons(useTextLabels, useImages);
            UpdateButtonStates();

            if(m_hPortableItem && 
               TreeView_GetChild(m_hMusicView, m_hPortableItem) != NULL)
            {    
                FillPortables();
            }
            break;
        }

        case CMD_Cleanup: 
        {
            SaveCurrentPlaylist();

            CloseMainDialog();
            m_uiThread->Join();
            
            m_playerEQ->AcceptEvent(new Event(INFO_ReadyToDieUI));
            break; 
        }

        case INFO_MusicCatalogCleared:
        {
            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogCleared();
            }

            MusicCatalogCleared();

            break;
        }

        case INFO_MusicCatalogTrackChanged:
        {
            MusicCatalogTrackChangedEvent* pie = (MusicCatalogTrackChangedEvent*)event;

            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogTrackChanged(pie->OldArtist(), 
                                               pie->NewArtist(), 
                                               pie->OldAlbum(), 
                                               pie->NewAlbum(), 
                                               pie->OldItem(),
                                               pie->NewItem());
            }

            MusicCatalogTrackChanged(pie->OldArtist(), 
                                     pie->NewArtist(), 
                                     pie->OldAlbum(), 
                                     pie->NewAlbum(), 
                                     pie->OldItem(),
                                     pie->NewItem());
            
            break; 
        }

        case INFO_MusicCatalogStreamAdded:
        {
            MusicCatalogStreamAddedEvent* pie = (MusicCatalogStreamAddedEvent*)event;

            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogStreamAdded(pie->Item());
            }

            MusicCatalogStreamAdded(pie->Item());

            break;
        }

        case INFO_MusicCatalogStreamRemoved:
        {
            MusicCatalogStreamRemovedEvent* pie = (MusicCatalogStreamRemovedEvent*)event;

            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogStreamRemoved(pie->Item());
            }

            MusicCatalogStreamRemoved(pie->Item());

            break;
        }

        case INFO_MusicCatalogTrackAdded:
        {
            MusicCatalogTrackAddedEvent* pie = (MusicCatalogTrackAddedEvent*)event;

            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogTrackAdded(pie->Artist(), pie->Album(), pie->Item());
            }

            MusicCatalogTrackAdded(pie->Artist(), pie->Album(), pie->Item());
            
            break; 
        }

        case INFO_MusicCatalogTrackRemoved:
        {
            MusicCatalogTrackRemovedEvent* pie = (MusicCatalogTrackRemovedEvent*)event;

            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogTrackRemoved(pie->Artist(), pie->Album(), pie->Item());
            }

            MusicCatalogTrackRemoved(pie->Artist(), pie->Album(), pie->Item());
            
            break; 
        }

        case INFO_MusicCatalogPlaylistAdded:
        {
            MusicCatalogPlaylistAddedEvent* pie = (MusicCatalogPlaylistAddedEvent*)event;
            
            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogPlaylistAdded(pie->Item());
            }

            MusicCatalogPlaylistAdded(pie->Item());
            
            break; 
        }

        case INFO_MusicCatalogPlaylistRemoved:
        {
            MusicCatalogPlaylistRemovedEvent* pie = (MusicCatalogPlaylistRemovedEvent*)event;
            
            vector<MusicBrowserUI *>::iterator i;

            for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
            {
                (*i)->MusicCatalogPlaylistRemoved(pie->Item());
            }

            MusicCatalogPlaylistRemoved(pie->Item());
            
            break; 
        }

        case INFO_PlaylistItemsAdded:
        {
            PlaylistItemsAddedEvent* pie = (PlaylistItemsAddedEvent*)event;

            if(pie->Manager() == m_plm)
                PlaylistListItemsAdded(pie->Items());
            else
            {
                vector<MusicBrowserUI *>::iterator i;

                for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
                {
                    if((*i)->PLManager() == pie->Manager())
                    {
                        (*i)->PlaylistListItemsAdded(pie->Items());
                        break;
                    }
                }
            }
            
            break; 
        }

        case INFO_PlaylistItemAdded:
        {
            PlaylistItemAddedEvent* pie = (PlaylistItemAddedEvent*)event;

            if(pie->Manager() == m_plm)
                PlaylistListItemAdded(pie->Item());
            else
            {
                vector<MusicBrowserUI *>::iterator i;

                for(i = m_oWindowList.begin(); i != m_oWindowList.end(); i++)
                {
                    if((*i)->PLManager() == pie->Manager())

⌨️ 快捷键说明

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