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

📄 freeamptheme.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
          else
          {
              m_sigState = kIdle;
              iState = 0;
          }

          if (!m_pContext->aps->IsTurnedOn())
              iState = 0;

          m_pWindow->ControlIntValue(string("SigIndicator"), true, iState);
      	 break;
      }

      case CMD_LoadTheme:
      {
          char         *szSavedTheme, *szNewTheme;
          uint32        iLen = _MAX_PATH;
          string        oThemePath;
          MessageDialog oBox(m_pContext);
          string        oMessage(szKeepThemeMessage);

          szSavedTheme = new char[iLen];
          szNewTheme = new char[iLen];

          LoadThemeEvent *pInfo = (LoadThemeEvent *)e;
          strncpy(szNewTheme, pInfo->URL(), _MAX_PATH);
          szNewTheme[_MAX_PATH - 1] = 0;
          strncpy(szSavedTheme, pInfo->SavedTheme(), _MAX_PATH);
          szSavedTheme[_MAX_PATH - 1] = 0;

          m_pContext->prefs->SetPrefString(kThemePathPref, szNewTheme);
          ReloadTheme();
  
          if (oBox.Show(oMessage.c_str(), string(BRANDING), kMessageYesNo) == 
              kMessageReturnYes)
          {
              ThemeManager *pMan;
              string        oThemePath(szNewTheme);
          
              pMan = new ThemeManager(m_pContext);
              if (IsntError(pMan->AddTheme(oThemePath, true))) {
                  m_pContext->prefs->SetPrefString(kThemePathPref, oThemePath.c_str());
                  ReloadTheme();
              }
              delete pMan;    
          }
          else
          {
              m_pContext->prefs->SetPrefString(kThemePathPref, szSavedTheme);
              ReloadTheme();
          }
         
          unlink(szNewTheme);
          delete [] szSavedTheme;
          delete [] szNewTheme;
          
          break;
      }
      
      default:
         break;
   }
   return kError_NoErr;
}

Error FreeAmpTheme::HandleControlMessage(string &oControlName, 
                                         ControlMessageEnum eMesg)
{
   if (oControlName == string("WindowStatus")) 
   {
       bool bEnable;

       if (eMesg == CM_WindowEnter) 
           bEnable = true;
       else if (eMesg == CM_WindowLeave)
           bEnable = false;
       else
           return kError_NoErr;

       m_pWindow->ControlEnable(oControlName, true, bEnable);
       return kError_NoErr;
   } 

   if (eMesg == CM_MouseEnter)
   {
       string oName("Info"), oDesc("");

       if (oControlName == string("Time") ||
           oControlName == string("TimeRemaining"))
       {
           if (m_eTimeDisplayState == kTimeRemaining && 
               m_pWindow->DoesControlExist("TimeRemaining"))
               m_pWindow->ControlGetDesc("TimeRemaining", oDesc);
           else
               m_pWindow->ControlGetDesc("Time", oDesc);
       }
       else
           m_pWindow->ControlGetDesc(oControlName, oDesc);

       m_pWindow->ControlStringValue(oName, true, oDesc);
                                
       return kError_NoErr;
   }    
   if (eMesg == CM_MouseLeave)
   {
       string oName("Info"), oEmpty("");
      
       m_pWindow->ControlStringValue(oName, true, oEmpty);
                                
       return kError_NoErr;
   }
   if (eMesg == CM_TogglePanel)
   {
       m_pWindow->PanelStateChanged();
       return kError_NoErr;
   }
   if (oControlName == string("Minimize") && eMesg == CM_Pressed)
   {
       m_pWindow->Minimize();
       
       return kError_NoErr;
   }
   if (oControlName == string("Volume") && 
       (eMesg == CM_ValueChanged || eMesg == CM_SliderUpdate))
   {
       int iVol;

       if (eMesg == CM_SliderUpdate)
           m_bVolumeChangeInProgress = true;
           
       if (eMesg == CM_ValueChanged)
           m_bVolumeChangeInProgress = false;

       m_pWindow->ControlIntValue(oControlName, false, iVol);
       SetVolume(iVol, m_iBalance);
           
       return kError_NoErr;
   }    
   if (oControlName == string("Balance") && 
       (eMesg == CM_ValueChanged || eMesg == CM_SliderUpdate))
   {
       int iBal;

       m_pWindow->ControlIntValue(oControlName, false, iBal);
       SetVolume(m_iVolume, iBal);
           
       return kError_NoErr;
   }    
   if (oControlName == string("Mute") && eMesg == CM_Pressed)
   {
       int iState;

       m_pWindow->ControlIntValue(oControlName, false, iState);
       if (iState == 0)
       {
           m_iMuteVolume = m_iVolume;
           m_iVolume = 0;
           iState = 1;
       }
       else
       {
           m_iVolume = m_iMuteVolume;
           m_iMuteVolume = -1;
           iState = 0;
       }
       SetVolume(m_iVolume, m_iBalance);
       m_pWindow->ControlIntValue(oControlName, true, iState);
       return kError_NoErr;
   }
   
   if (eMesg == CM_SliderUpdate && strncmp(oControlName.c_str(), "Eq", 2) == 0)
   {
       string oName("Info"), oDesc;
       char   szText[20];
       int    iPos;

       m_pWindow->ControlIntValue(oControlName, false, iPos);
       m_eq->ChangeValue(atoi(oControlName.c_str() + 2), iPos); 
       sprintf(szText, "%d db", ((iPos - 50) * 2) / 5);
       oDesc = string(szText);
       m_pWindow->ControlStringValue(oName, true, oDesc);
                                
       return kError_NoErr;
   }    
   if (oControlName == string("Seek") && eMesg == CM_ValueChanged)
   {
       string oName("Info"), oEmpty("");
       int    iValue, iFrame;
       
       m_pWindow->ControlIntValue(oControlName, false, iValue);
       
       iFrame = (int)(((float)iValue * (float)m_iTotalSeconds) / 
                      ((float)100 * m_fSecondsPerFrame));

       m_bSeekInProgress = false;
      
       m_pContext->target->AcceptEvent(new 
              VolumeEvent(CMD_ChangePosition, iFrame + 1));
       m_iFramesSinceSeek = 0;
       
       m_pWindow->ControlStringValue(oName, true, oEmpty);
              
       return kError_NoErr;
   }    
   if (oControlName == string("Seek") && eMesg == CM_SliderUpdate)
   {
       string oName("Time"), oText("");
       int    iValue, iTime;
       
       m_pWindow->ControlIntValue(oControlName, false, iValue);
       
       iTime = (iValue * m_iTotalSeconds) / 100;
       UpdateTimeDisplay(iTime);
       m_bSeekInProgress = true;
              
       return kError_NoErr;
   }    
   if (oControlName == string("Preamp") && eMesg == CM_SliderUpdate)
   {
       string oName("Info"), oDesc;
       char   szText[20];
       int    iPos;

       m_pWindow->ControlIntValue(oControlName, false, iPos);
       m_eq->ChangePreamp(iPos); 
       sprintf(szText, "%d db", ((iPos - 50) * 10) / 25);
       oDesc = string(szText);
       m_pWindow->ControlStringValue(oName, true, oDesc);
                                
       return kError_NoErr;
   }    
   if (oControlName == string("PlayPause") && eMesg == CM_Pressed)
   {
       int iState = 0;

       if (m_pContext->plm->CountItems() == 0)
       {
           m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
           return kError_NoErr;
       }
       m_pWindow->ControlIntValue(oControlName, false, iState);
       if (iState == 0)
           m_pContext->target->AcceptEvent(new Event(CMD_Play));
       else
           m_pContext->target->AcceptEvent(new Event(CMD_Pause));
       return kError_NoErr;
   }
   
   if (oControlName == string("PlayStop") && eMesg == CM_Pressed)
   {
       int iState = 0;

       if (m_pContext->plm->CountItems() == 0)
       {
           m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
           return kError_NoErr;
       }
       m_pWindow->ControlIntValue(oControlName, false, iState);
       if (iState > 1)
          iState = 1;
       
       if (iState == 0)
           m_pContext->target->AcceptEvent(new Event(CMD_Play));
	   else
           m_pContext->target->AcceptEvent(new Event(CMD_Stop));
       return kError_NoErr;
   }
  
   if (oControlName == string("Relatable Playlist") && eMesg == CM_Pressed)
   {
       GeneratePlaylistEvent *gpe;
       gpe = new GeneratePlaylistEvent(m_pContext->plm->GetCurrentItem(),
                                       m_pContext->plm);
       m_pContext->target->AcceptEvent((Event *)gpe);
       return kError_NoErr;
   }

   if (oControlName == string("Play") && eMesg == CM_Pressed)
   {
       if (m_pContext->plm->CountItems() == 0)
       {
           m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
           return kError_NoErr;
       }
       m_pContext->target->AcceptEvent(new Event(CMD_Play));
       return kError_NoErr;
   }
   if (oControlName == string("MPause") && eMesg == CM_Pressed)
   {
   	 int iState = 0;
       m_pWindow->ControlIntValue(oControlName, false, iState);
       if (iState == 0)
           m_pContext->target->AcceptEvent(new Event(CMD_Pause));
	   else
           m_pContext->target->AcceptEvent(new Event(CMD_Play));
       return kError_NoErr;
   }
   if (oControlName == string("Pause") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_Pause));
       return kError_NoErr;
   }
   if (oControlName == string("Stop") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_Stop));
       return kError_NoErr;
   }
   if (oControlName == string("Next") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_NextMediaPiece));
       return kError_NoErr;
   }
   if (oControlName == string("Prev") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_PrevMediaPiece));
       return kError_NoErr;
   }
   if (oControlName == string("MyMusic") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
       return kError_NoErr;
   }
   if (oControlName == string("Files") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_AddFiles));
       return kError_NoErr;
   }
   if (oControlName == string("Download") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_ToggleDownloadUI));
       return kError_NoErr;
   }
   if (oControlName == string("Options") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new ShowPreferencesEvent(0));
       return kError_NoErr;
   }
   if (oControlName == string("Quit") && eMesg == CM_Pressed)
   {
       m_pContext->target->AcceptEvent(new Event(CMD_QuitPlayer));
       return kError_NoErr;
   }
   if (eMesg == CM_ChangeWindow)
   {
       m_pWindow->ControlStringValue(oControlName, false, m_oCurrentWindow);

       // This is cheating, but I don't know how else to do it. :-(
       m_pWindow->DecUsageRef();
       m_pWindow->DecUsageRef();
       SwitchWindow(m_oCurrentWindow);
       m_pWindow->IncUsageRef();
       m_pWindow->IncUsageRef();
   
       return kError_NoErr;
   }
   if (oControlName == string("ReloadTheme") && eMesg == CM_Pressed)
   {
       m_pWindow->DecUsageRef();
       m_pWindow->DecUsageRef();
       ReloadTheme();
       m_pWindow->IncUsageRef();
       m_pWindow->IncUsageRef();
       return kError_NoErr;
   }
   if (oControlName == string("Shuffle") && eMesg == CM_Pressed)
   {
       int iState = 0;
       string     oName("Info"), oDesc("");

       m_pWindow->ControlIntValue(oControlName, false, iState);
       iState = (iState + 1) % 2;
       m_pContext->plm->SetShuffleMode(iState == 1);
       m_pWindow->ControlIntValue(oControlName, true, iState);
       
       m_pWindow->ControlGetDesc(oControlName, oDesc);
       m_pWindow->ControlStringValue(oName, true, oDesc);
       
       return kError_NoErr;
   }    
   if (oControlName == string("Repeat") && eMesg == CM_Pressed)
   {
       int        iState = 0;
       RepeatMode eMode = kPlaylistMode_RepeatNone;
       string     oName("Info"), oDesc("");

       m_pWindow->ControlIntValue(oControlName, false, iState);
       iState = (iState + 1) % 3;
       m_pWindow->ControlIntValue(oControlName, true, iState);
       
       switch(iState)
       {
          case 0:  
              eMode = kPlaylistMode_RepeatNone;
              break;
          case 1:  
              eMode = kPlaylistMode_RepeatOne;
              break;
          case 2:  
              eMode = kPlaylistMode_RepeatAll;
              break;
       }
       m_pContext->plm->SetRepeatMode(eMode);
       
       m_pWindow->ControlGetDesc(oControlName, oDesc);
       m_pWindow->ControlStringValue(oName, true, oDesc);
       
       return kError_NoErr;
   }    
   if (oControlName == string("Time") && eMesg == CM_Pressed)
   {
       string oName("Info"), oDesc("");
       
       if (m_iTotalSeconds < 0)
           return kError_NoErr;       
          
       if (m_eTimeDisplayState == kNormal)
       {
           m_eTimeDisplayState = kTimeRemaining;
           if (m_pWindow->DoesControlExist("TimeRemaining"))
               m_pWindow->ControlStringValue("Time", true, oDesc);
       }    
       else     
       { 
           m_eTimeDisplayState = kNormal;
           if (m_pWindow->DoesControlExist("TimeRemaining"))
               m_pWindow->ControlStringValue("TimeRemaining", true, oDesc);
       }    
       
       m_pWindow->ControlStringValue("Info", true, oDesc);
       UpdateTimeDisplay(m_iCurrentSeconds);                      
   }
   if (oControlName == string("Logo") && eMesg == CM_Pressed)
   {
       string oUrl;
       

⌨️ 快捷键说明

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