You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
6.1 KiB
271 lines
6.1 KiB
8 years ago
|
//++ BulliT
|
||
|
|
||
|
#include<VGUI_HeaderPanel.h>
|
||
|
#include<VGUI_TablePanel.h>
|
||
|
#include<VGUI_LineBorder.h>
|
||
|
#include<VGUI_Label.h>
|
||
|
#include<VGUI_Button.h>
|
||
|
#include<VGUI_ActionSignal.h>
|
||
|
#include<VGUI_TextGrid.h>
|
||
|
#include<VGUI_TextEntry.h>
|
||
|
#include<VGUI_EtchedBorder.h>
|
||
|
#include<VGUI_LoweredBorder.h>
|
||
|
#include "VGUI_ScrollPanel.h"
|
||
|
#include "VGUI_TextImage.h"
|
||
|
#include<VGUI_StackLayout.h>
|
||
|
#include<VGUI_EditPanel.h>
|
||
|
|
||
|
#include "hud.h"
|
||
|
#include "cl_util.h"
|
||
|
#include <keydefs.h>
|
||
|
#include "vgui_TeamFortressViewport.h"
|
||
|
#include "AGVGuiWinamp.h"
|
||
|
|
||
|
static HWND hwnd = NULL;
|
||
|
|
||
|
struct WINAMP
|
||
|
{
|
||
|
char szCommand[16];
|
||
|
UINT uiMessage;
|
||
|
char szCommandButton[16];
|
||
|
};
|
||
|
|
||
|
static WINAMP s_Commands[]=
|
||
|
{
|
||
|
"play" ,40045, "Play",
|
||
|
"pause" ,40046, "Pause",
|
||
|
"stop" ,40047, "Stop",
|
||
|
"next" ,40048, "Next Track",
|
||
|
"prev" ,40044, "Previous Track",
|
||
|
"playcd" ,40323, "Play CD",
|
||
|
"increase" ,40058, "Increase Vol.",
|
||
|
"decrease" ,40059, "Decrease Vol.",
|
||
|
"repeat" ,40022, "Toggle Repeat",
|
||
|
"shuffle" ,40023, "Toggle Shuffle",
|
||
|
"forward" ,40148, "Fast Forward",
|
||
|
"rewind" ,40144, "Fast Rewind",
|
||
|
};
|
||
|
|
||
|
using namespace vgui;
|
||
|
|
||
|
namespace
|
||
|
{
|
||
|
class WinampCommandHandler : public ActionSignal
|
||
|
{
|
||
|
private:
|
||
|
char m_szCommand[256];
|
||
|
public:
|
||
|
WinampCommandHandler(const char* szCommand)
|
||
|
{
|
||
|
strcpy(m_szCommand,szCommand);
|
||
|
}
|
||
|
public:
|
||
|
virtual void actionPerformed(Panel* panel)
|
||
|
{
|
||
|
gEngfuncs.pfnClientCmd(m_szCommand);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class CloseHandler : public ActionSignal
|
||
|
{
|
||
|
public:
|
||
|
CloseHandler()
|
||
|
{
|
||
|
}
|
||
|
public:
|
||
|
virtual void actionPerformed(Panel* panel)
|
||
|
{
|
||
|
gViewPort->ToggleWinamp();
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#define WINAMP_TITLE_X XRES(16)
|
||
|
#define WINAMP_TITLE_Y YRES(16)
|
||
|
|
||
|
#define WINAMP_TOPLEFT_BUTTON_X XRES(80)
|
||
|
#define WINAMP_TOPLEFT_BUTTON_Y YRES(60)
|
||
|
#define WINAMP_BUTTON_SIZE_X XRES(124)
|
||
|
#define WINAMP_BUTTON_SIZE_Y YRES(24)
|
||
|
#define WINAMP_BUTTON_SPACER_Y YRES(8)
|
||
|
#define WINAMP_BUTTON_SPACER_X XRES(8)
|
||
|
|
||
|
AGVGuiWinamp::AGVGuiWinamp(int x,int y,int wide,int tall) : Panel(x,y,wide,tall)
|
||
|
{
|
||
|
setBorder( new LineBorder( Color(255 * 0.7,170 * 0.7,0,0)) );
|
||
|
|
||
|
// Get the scheme used for the Titles
|
||
|
CSchemeManager *pSchemes = gViewPort->GetSchemeManager();
|
||
|
|
||
|
// schemes
|
||
|
SchemeHandle_t hTitleScheme = pSchemes->getSchemeHandle( "Title Font" );
|
||
|
// SchemeHandle_t hIRCText = pSchemes->getSchemeHandle( "Briefing Text" );
|
||
|
|
||
|
// color schemes
|
||
|
int r, g, b, a;
|
||
|
|
||
|
// Create the title
|
||
|
m_pLabel = new Label( "AG Winamp", WINAMP_TITLE_X, WINAMP_TITLE_Y );
|
||
|
m_pLabel->setParent( this );
|
||
|
m_pLabel->setFont( pSchemes->getFont(hTitleScheme) );
|
||
|
m_pLabel->setFont( Scheme::sf_primary1 );
|
||
|
|
||
|
pSchemes->getFgColor( hTitleScheme, r, g, b, a );
|
||
|
m_pLabel->setFgColor( r, g, b, a );
|
||
|
m_pLabel->setFgColor( Scheme::sc_primary1 );
|
||
|
pSchemes->getBgColor( hTitleScheme, r, g, b, a );
|
||
|
m_pLabel->setBgColor( r, g, b, a );
|
||
|
m_pLabel->setContentAlignment( vgui::Label::a_west );
|
||
|
m_pLabel->setText("AG Winamp");
|
||
|
|
||
|
int iXSize,iYSize;
|
||
|
getSize( iXSize,iYSize );
|
||
|
|
||
|
for (int i = 0; i < sizeof(s_Commands)/sizeof(s_Commands[0]); i++)
|
||
|
{
|
||
|
char szCommand[256];
|
||
|
sprintf(szCommand,"winamp %s",s_Commands[i].szCommand);
|
||
|
|
||
|
int iXPos = WINAMP_TOPLEFT_BUTTON_X;
|
||
|
int iYPos = WINAMP_TOPLEFT_BUTTON_Y + ( (WINAMP_BUTTON_SIZE_Y + WINAMP_BUTTON_SPACER_Y) * i );
|
||
|
if (i > 5)
|
||
|
{
|
||
|
iXPos += WINAMP_BUTTON_SIZE_X + WINAMP_BUTTON_SPACER_X;
|
||
|
iYPos = WINAMP_TOPLEFT_BUTTON_Y + ( (WINAMP_BUTTON_SIZE_Y + WINAMP_BUTTON_SPACER_Y) * (i-6) );
|
||
|
}
|
||
|
|
||
|
CommandButton* pPlay = new CommandButton(s_Commands[i].szCommandButton,iXPos, iYPos, WINAMP_BUTTON_SIZE_X, WINAMP_BUTTON_SIZE_Y);
|
||
|
pPlay->addActionSignal(new WinampCommandHandler(szCommand));
|
||
|
pPlay->setParent(this);
|
||
|
}
|
||
|
|
||
|
CommandButton* pClose = new CommandButton("Close",iXSize - XRES(16) - CMENU_SIZE_X, iYSize - YRES(16) - BUTTON_SIZE_Y, CMENU_SIZE_X, BUTTON_SIZE_Y);
|
||
|
pClose->addActionSignal(new CloseHandler());
|
||
|
pClose->setParent(this);
|
||
|
}
|
||
|
|
||
|
void GetSongTitle(LPSTR pszSong, int iSize)
|
||
|
{
|
||
|
GetWindowText(hwnd,pszSong,iSize);
|
||
|
char* p = pszSong + strlen(pszSong)-8;
|
||
|
while (p >= pszSong)
|
||
|
{
|
||
|
if (!strnicmp(p,"- Winamp",8))
|
||
|
break;
|
||
|
p--;
|
||
|
}
|
||
|
if (p >= pszSong)
|
||
|
p--;
|
||
|
while (p >= pszSong && *p == ' ')
|
||
|
p--;
|
||
|
*++p = 0;
|
||
|
}
|
||
|
|
||
|
static DWORD dwTime = 0;
|
||
|
void AGVGuiWinamp::paintBackground()
|
||
|
{
|
||
|
// Transparent black background
|
||
|
drawSetColor( 0,0,0, 100 );
|
||
|
drawFilledRect(0,0,_size[0],_size[1]);
|
||
|
|
||
|
if (NULL == hwnd)
|
||
|
return;
|
||
|
|
||
|
if (dwTime > GetTickCount())
|
||
|
return;
|
||
|
|
||
|
char szSong[2048];
|
||
|
GetSongTitle(szSong,sizeof(szSong));
|
||
|
if (0 == strlen(szSong))
|
||
|
{
|
||
|
dwTime = GetTickCount() + 10000;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_pLabel->setText(szSong);
|
||
|
dwTime = GetTickCount() + 1000;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void AGVGuiWinamp::UserCmd_Winamp()
|
||
|
{
|
||
|
if (NULL == hwnd)
|
||
|
hwnd = FindWindow("Winamp v1.x",NULL);
|
||
|
|
||
|
if (!::IsWindow(hwnd))
|
||
|
{
|
||
|
ConsolePrint("Could not find Winamp window.\n");
|
||
|
hwnd = NULL;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (gEngfuncs.Cmd_Argc() == 1)
|
||
|
{
|
||
|
char szSong[2048];
|
||
|
GetSongTitle(szSong,sizeof(szSong));
|
||
|
strcat(szSong,"\n");
|
||
|
ConsolePrint(szSong);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (gEngfuncs.Cmd_Argc() < 2)
|
||
|
return;
|
||
|
|
||
|
if (3 == gEngfuncs.Cmd_Argc() && 0 == strcmp("volume",gEngfuncs.Cmd_Argv(1)))
|
||
|
{
|
||
|
PostMessage(hwnd,WM_USER,atoi(gEngfuncs.Cmd_Argv(2)),122);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (int i = 0; i < sizeof(s_Commands)/sizeof(s_Commands[0]); i++)
|
||
|
{
|
||
|
if (0 == strcmp(s_Commands[i].szCommand,gEngfuncs.Cmd_Argv(1)))
|
||
|
{
|
||
|
PostMessage(hwnd,WM_COMMAND,s_Commands[i].uiMessage,0);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
int AGVGuiWinamp::KeyInput(int down, int keynum, const char *pszCurrentBinding)
|
||
|
{
|
||
|
if (!down)
|
||
|
return 1;
|
||
|
|
||
|
if (!isVisible())
|
||
|
return 1;
|
||
|
|
||
|
if (K_ESCAPE == keynum || pszCurrentBinding && 0 == _stricmp("togglewinamp",pszCurrentBinding))
|
||
|
{
|
||
|
gViewPort->ToggleWinamp();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (K_MWHEELUP == keynum || K_MWHEELDOWN == keynum)
|
||
|
{
|
||
|
if (NULL == hwnd)
|
||
|
hwnd = FindWindow("Winamp v1.x",NULL);
|
||
|
|
||
|
if (!::IsWindow(hwnd))
|
||
|
{
|
||
|
ConsolePrint("Could not find Winamp window.\n");
|
||
|
hwnd = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
if (K_MWHEELUP == keynum)
|
||
|
PostMessage(hwnd,WM_COMMAND,40058,0);
|
||
|
else
|
||
|
PostMessage(hwnd,WM_COMMAND,40059,0);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-- Martin Webrant
|