CFirstMenu :: CFirstMenu(int iTrans, int iRemoveMe, int x, int y, int wide, int tall) : CMenuPanel(iTrans, iRemoveMe, x,y,wide,tall) { CSchemeManager *pSchemes = gViewPort->GetSchemeManager(); SchemeHandle_t hTitleScheme = pSchemes->getSchemeHandle( "Title Font" ); int r, g, b, a; m_pPanel = new CTransparentPanel( 200, XRES(80), YRES(80), XRES(BASE_WIDTH), YRES(BASE_HEIGHT)); m_pPanel->setParent( this ); m_pPanel->setBorder( new LineBorder( Color(255 * 0.7,170 * 0.7,0,0) ) ); m_pCancelButton = new CommandButton( gHUD.m_TextMessage.BufferedLocaliseTextString( "Cancel" ), XRES(50), YRES(279), XRES(378), YRES(42)); m_pCancelButton->setContentAlignment(vgui::Label::a_center); m_pCancelButton->setParent( m_pPanel ); m_pCancelButton->addActionSignal( new CMenuHandler_TextWindow(HIDE_TEXTWINDOW) ); m_pTitle = new Label( "", XRES(1), YRES(1), XRES(478), YRES(58) ); m_pTitle->setParent( m_pPanel ); m_pTitle->setFont( pSchemes->getFont(hTitleScheme) ); pSchemes->getFgColor( hTitleScheme, r, g, b, a ); m_pTitle->setFgColor( r, g, b, a ); pSchemes->getBgColor( hTitleScheme, r, g, b, a ); m_pTitle->setBgColor( r, g, b, a ); m_pTitle->setContentAlignment( vgui::Label::a_center ); m_pTitle->setText( "Your First Menu" ); // Start - VGUI Tutorial 2 m_pSpeak = new CommandButton( "Say something", XRES(1), YRES(61), XRES(478), YRES(58)); m_pSpeak->setContentAlignment( vgui::Label::a_center ); m_pSpeak->setParent( m_pPanel ); m_pSpeak->addActionSignal( new CMenuHandler_StringCommand( "test_say" ) ); // End - VGUI Tutorial 2 // Start - VGUI Tutorial 3 /* m_pEditbox = new TextEntry( "Testing!", XRES(200), YRES(230), XRES(230), 17); m_pEditbox->setVisible( true ); m_pEditbox->setParent( m_pPanel ); */ m_pMyPicture = new CImageLabel( "cross", XRES(BASE_WIDTH/2), YRES(BASE_HEIGHT/2) ); m_pMyPicture->setParent( m_pPanel ); m_pMyPicture->setVisible( true ); // End - VGUI Tutorial 3 }
// Creation CClassMenuPanel::CClassMenuPanel(int iTrans, int iRemoveMe, int x,int y,int wide,int tall) : CMenuPanel(iTrans, iRemoveMe, x,y,wide,tall) { // don't show class graphics at below 640x480 resolution bool bShowClassGraphic = true; if ( ScreenWidth < 640 ) { bShowClassGraphic = false; } memset( m_pClassImages, 0, sizeof(m_pClassImages) ); // Get the scheme used for the Titles CSchemeManager *pSchemes = gViewPort->GetSchemeManager(); // schemes SchemeHandle_t hTitleScheme = pSchemes->getSchemeHandle( "Title Font" ); SchemeHandle_t hClassWindowText = pSchemes->getSchemeHandle( "Briefing Text" ); // color schemes int r, g, b, a; // Create the title Label *pLabel = new Label( "", CLASSMENU_TITLE_X, CLASSMENU_TITLE_Y ); pLabel->setParent( this ); pLabel->setFont( pSchemes->getFont(hTitleScheme) ); pSchemes->getFgColor( hTitleScheme, r, g, b, a ); pLabel->setFgColor( r, g, b, a ); pSchemes->getBgColor( hTitleScheme, r, g, b, a ); pLabel->setBgColor( r, g, b, a ); pLabel->setContentAlignment( vgui::Label::a_west ); pLabel->setText(gHUD.m_TextMessage.BufferedLocaliseTextString("#Title_SelectYourClass")); // Create the Scroll panel m_pScrollPanel = new CTFScrollPanel( CLASSMENU_WINDOW_X, CLASSMENU_WINDOW_Y, CLASSMENU_WINDOW_SIZE_X, CLASSMENU_WINDOW_SIZE_Y ); m_pScrollPanel->setParent(this); //force the scrollbars on, so after the validate clientClip will be smaller m_pScrollPanel->setScrollBarAutoVisible(false, false); m_pScrollPanel->setScrollBarVisible(true, true); m_pScrollPanel->setBorder( new LineBorder( Color(255 * 0.7,170 * 0.7,0,0) ) ); m_pScrollPanel->validate(); int clientWide=m_pScrollPanel->getClient()->getWide(); //turn scrollpanel back into auto show scrollbar mode and validate m_pScrollPanel->setScrollBarAutoVisible(false,true); m_pScrollPanel->setScrollBarVisible(false,false); m_pScrollPanel->validate(); // Create the Class buttons for (int i = 0; i <= PC_RANDOM; i++) { char sz[256]; int iYPos = CLASSMENU_TOPLEFT_BUTTON_Y + ( (CLASSMENU_BUTTON_SIZE_Y + CLASSMENU_BUTTON_SPACER_Y) * i ); ActionSignal *pASignal = new CMenuHandler_StringCommandClassSelect( sTFClassSelection[i], true ); // Class button sprintf(sz, "%s", CHudTextMessage::BufferedLocaliseTextString( sLocalisedClasses[i] ) ); m_pButtons[i] = new ClassButton( i, sz, CLASSMENU_TOPLEFT_BUTTON_X, iYPos, CLASSMENU_BUTTON_SIZE_X, CLASSMENU_BUTTON_SIZE_Y, true); // RandomPC uses '0' if ( i >= 1 && i <= 9 ) { sprintf(sz,"%d",i); } else { sprintf(sz,"0"); } m_pButtons[i]->setBoundKey( sz[0] ); m_pButtons[i]->setContentAlignment( vgui::Label::a_west ); m_pButtons[i]->addActionSignal( pASignal ); m_pButtons[i]->addInputSignal( new CHandler_MenuButtonOver(this, i) ); m_pButtons[i]->setParent( this ); // Create the Class Info Window //m_pClassInfoPanel[i] = new CTransparentPanel( 255, CLASSMENU_WINDOW_X, CLASSMENU_WINDOW_Y, CLASSMENU_WINDOW_SIZE_X, CLASSMENU_WINDOW_SIZE_Y ); m_pClassInfoPanel[i] = new CTransparentPanel( 255, 0, 0, clientWide, CLASSMENU_WINDOW_SIZE_Y ); m_pClassInfoPanel[i]->setParent( m_pScrollPanel->getClient() ); //m_pClassInfoPanel[i]->setVisible( false ); // don't show class pic in lower resolutions int textOffs = XRES(8); if ( bShowClassGraphic ) { textOffs = CLASSMENU_WINDOW_NAME_X; } // Create the Class Name Label sprintf(sz, "#Title_%s", sTFClassSelection[i]); char* localName=CHudTextMessage::BufferedLocaliseTextString( sz ); Label *pNameLabel = new Label( "", textOffs, CLASSMENU_WINDOW_NAME_Y ); pNameLabel->setFont( pSchemes->getFont(hTitleScheme) ); pNameLabel->setParent( m_pClassInfoPanel[i] ); pSchemes->getFgColor( hTitleScheme, r, g, b, a ); pNameLabel->setFgColor( r, g, b, a ); pSchemes->getBgColor( hTitleScheme, r, g, b, a ); pNameLabel->setBgColor( r, g, b, a ); pNameLabel->setContentAlignment( vgui::Label::a_west ); //pNameLabel->setBorder(new LineBorder()); pNameLabel->setText(localName); // Create the Class Image if ( bShowClassGraphic ) { for ( int team = 0; team < 2; team++ ) { if ( team == 1 ) { sprintf( sz, "%sred", sTFClassSelection[i] ); } else { sprintf( sz, "%sblue", sTFClassSelection[i] ); } m_pClassImages[team][i] = new CImageLabel( sz, 0, 0, CLASSMENU_WINDOW_TEXT_X, CLASSMENU_WINDOW_TEXT_Y ); CImageLabel *pLabel = m_pClassImages[team][i]; pLabel->setParent( m_pClassInfoPanel[i] ); //pLabel->setBorder(new LineBorder()); if ( team != 1 ) { pLabel->setVisible( false ); } // Reposition it based upon it's size int xOut, yOut; pNameLabel->getTextSize( xOut, yOut ); pLabel->setPos( (CLASSMENU_WINDOW_TEXT_X - pLabel->getWide()) / 2, yOut /2 ); } } // Create the Player count string gHUD.m_TextMessage.LocaliseTextString( "#Title_CurrentlyOnYourTeam", m_sPlayersOnTeamString, STRLENMAX_PLAYERSONTEAM ); m_pPlayers[i] = new Label( "", textOffs, CLASSMENU_WINDOW_PLAYERS_Y ); m_pPlayers[i]->setParent( m_pClassInfoPanel[i] ); m_pPlayers[i]->setBgColor( 0, 0, 0, 255 ); m_pPlayers[i]->setContentAlignment( vgui::Label::a_west ); m_pPlayers[i]->setFont( pSchemes->getFont(hClassWindowText) ); // Open up the Class Briefing File sprintf(sz, "classes/short_%s.txt", sTFClassSelection[i]); char *cText = "Class Description not available."; char *pfile = (char *)gEngfuncs.COM_LoadFile( sz, 5, NULL ); if (pfile) { cText = pfile; } // Create the Text info window TextPanel *pTextWindow = new TextPanel(cText, textOffs, CLASSMENU_WINDOW_TEXT_Y, (CLASSMENU_WINDOW_SIZE_X - textOffs)-5, CLASSMENU_WINDOW_SIZE_Y - CLASSMENU_WINDOW_TEXT_Y); pTextWindow->setParent( m_pClassInfoPanel[i] ); pTextWindow->setFont( pSchemes->getFont(hClassWindowText) ); pSchemes->getFgColor( hClassWindowText, r, g, b, a ); pTextWindow->setFgColor( r, g, b, a ); pSchemes->getBgColor( hClassWindowText, r, g, b, a ); pTextWindow->setBgColor( r, g, b, a ); // Resize the Info panel to fit it all int wide,tall; pTextWindow->getTextImage()->getTextSizeWrapped( wide,tall); pTextWindow->setSize(wide,tall); int xx,yy; pTextWindow->getPos(xx,yy); int maxX=xx+wide; int maxY=yy+tall; //check to see if the image goes lower than the text //just use the red teams [0] images if(m_pClassImages[0][i]!=null) { m_pClassImages[0][i]->getPos(xx,yy); if((yy+m_pClassImages[0][i]->getTall())>maxY) { maxY=yy+m_pClassImages[0][i]->getTall(); } } m_pClassInfoPanel[i]->setSize( maxX , maxY ); if (pfile) gEngfuncs.COM_FreeFile( pfile ); //m_pClassInfoPanel[i]->setBorder(new LineBorder()); } // Create the Cancel button m_pCancelButton = new CommandButton( gHUD.m_TextMessage.BufferedLocaliseTextString( "#Menu_Cancel" ), CLASSMENU_TOPLEFT_BUTTON_X, 0, CLASSMENU_BUTTON_SIZE_X, CLASSMENU_BUTTON_SIZE_Y); m_pCancelButton->setParent( this ); m_pCancelButton->addActionSignal( new CMenuHandler_TextWindow(HIDE_TEXTWINDOW) ); m_iCurrentInfo = 0; }
// Creation CTeamMenuPanel::CTeamMenuPanel(int iTrans, int iRemoveMe, int x,int y,int wide,int tall) : CMenuPanel(iTrans, iRemoveMe, x,y,wide,tall) { // Get the scheme used for the Titles CSchemeManager *pSchemes = gViewPort->GetSchemeManager(); // schemes SchemeHandle_t hTitleScheme = pSchemes->getSchemeHandle( "Title Font" ); SchemeHandle_t hTeamWindowText = pSchemes->getSchemeHandle( "Briefing Text" ); SchemeHandle_t hTeamInfoText = pSchemes->getSchemeHandle( "Team Info Text" ); // get the Font used for the Titles Font *pTitleFont = pSchemes->getFont( hTitleScheme ); int r, g, b, a; // Create the title Label *pLabel = new Label( "", TEAMMENU_TITLE_X, TEAMMENU_TITLE_Y ); pLabel->setParent( this ); pLabel->setFont( pTitleFont ); pSchemes->getFgColor( hTitleScheme, r, g, b, a ); pLabel->setFgColor( r, g, b, a ); pSchemes->getBgColor( hTitleScheme, r, g, b, a ); pLabel->setBgColor( r, g, b, a ); pLabel->setContentAlignment( vgui::Label::a_west ); pLabel->setText( "%s", gHUD.m_TextMessage.BufferedLocaliseTextString("#Title_SelectYourTeam")); // Create the Info Window m_pTeamWindow = new CTransparentPanel( 255, TEAMMENU_WINDOW_X, TEAMMENU_WINDOW_Y, TEAMMENU_WINDOW_SIZE_X, TEAMMENU_WINDOW_SIZE_Y ); m_pTeamWindow->setParent( this ); m_pTeamWindow->setBorder( new LineBorder( Color(255*0.7,170*0.7,0,0 )) ); // Create the Map Name Label m_pMapTitle = new Label( "", TEAMMENU_WINDOW_TITLE_X, TEAMMENU_WINDOW_TITLE_Y ); m_pMapTitle->setFont( pTitleFont ); m_pMapTitle->setParent( m_pTeamWindow ); pSchemes->getFgColor( hTitleScheme, r, g, b, a ); m_pMapTitle->setFgColor( r, g, b, a ); pSchemes->getBgColor( hTitleScheme, r, g, b, a ); m_pMapTitle->setBgColor( r, g, b, a ); m_pMapTitle->setContentAlignment( vgui::Label::a_west ); // Create the Scroll panel m_pScrollPanel = new CTFScrollPanel( TEAMMENU_WINDOW_TEXT_X, TEAMMENU_WINDOW_TEXT_Y, TEAMMENU_WINDOW_SIZE_X - (TEAMMENU_WINDOW_TEXT_X * 2), TEAMMENU_WINDOW_TEXT_SIZE_Y ); m_pScrollPanel->setParent(m_pTeamWindow); m_pScrollPanel->setScrollBarVisible(false, false); // Create the Map Briefing panel m_pBriefing = new TextPanel("", 0,0, TEAMMENU_WINDOW_SIZE_X - TEAMMENU_WINDOW_TEXT_X, TEAMMENU_WINDOW_TEXT_SIZE_Y ); m_pBriefing->setParent( m_pScrollPanel->getClient() ); m_pBriefing->setFont( pSchemes->getFont(hTeamWindowText) ); pSchemes->getFgColor( hTeamWindowText, r, g, b, a ); m_pBriefing->setFgColor( r, g, b, a ); pSchemes->getBgColor( hTeamWindowText, r, g, b, a ); m_pBriefing->setBgColor( r, g, b, a ); m_pBriefing->setText( gHUD.m_TextMessage.BufferedLocaliseTextString("#Map_Description_not_available") ); // Team Menu buttons for (int i = 1; i <= 5; i++) { char sz[256]; int iYPos = TEAMMENU_TOPLEFT_BUTTON_Y + ( (TEAMMENU_BUTTON_SIZE_Y + TEAMMENU_BUTTON_SPACER_Y) * i ); // Team button m_pButtons[i] = new CommandButton( "", TEAMMENU_TOPLEFT_BUTTON_X, iYPos, TEAMMENU_BUTTON_SIZE_X, TEAMMENU_BUTTON_SIZE_Y, true); m_pButtons[i]->setParent( this ); m_pButtons[i]->setContentAlignment( vgui::Label::a_west ); m_pButtons[i]->setVisible( false ); // AutoAssign button uses special case if (i == 5) { m_pButtons[5]->setBoundKey( '5' ); m_pButtons[5]->setText( gHUD.m_TextMessage.BufferedLocaliseTextString("#Team_AutoAssign") ); m_pButtons[5]->setVisible( true ); } // Create the Signals sprintf(sz, "jointeam %d", i); m_pButtons[i]->addActionSignal( new CMenuHandler_StringCommandWatch( sz, true ) ); m_pButtons[i]->addInputSignal( new CHandler_MenuButtonOver(this, i) ); // Create the Team Info panel m_pTeamInfoPanel[i] = new TextPanel("", TEAMMENU_WINDOW_INFO_X, TEAMMENU_WINDOW_INFO_Y, TEAMMENU_WINDOW_SIZE_X - TEAMMENU_WINDOW_INFO_X, TEAMMENU_WINDOW_SIZE_X - TEAMMENU_WINDOW_INFO_Y ); m_pTeamInfoPanel[i]->setParent( m_pTeamWindow ); m_pTeamInfoPanel[i]->setFont( pSchemes->getFont(hTeamInfoText) ); m_pTeamInfoPanel[i]->setFgColor( iTeamColors[i % iNumberOfTeamColors][0], iTeamColors[i % iNumberOfTeamColors][1], iTeamColors[i % iNumberOfTeamColors][2], 0 ); m_pTeamInfoPanel[i]->setBgColor( 0,0,0, 255 ); } // Create the Cancel button m_pCancelButton = new CommandButton( CHudTextMessage::BufferedLocaliseTextString( "#Menu_Cancel" ), TEAMMENU_TOPLEFT_BUTTON_X, 0, TEAMMENU_BUTTON_SIZE_X, TEAMMENU_BUTTON_SIZE_Y); m_pCancelButton->setParent( this ); m_pCancelButton->addActionSignal( new CMenuHandler_TextWindow(HIDE_TEXTWINDOW) ); // Create the Spectate button m_pSpectateButton = new SpectateButton( CHudTextMessage::BufferedLocaliseTextString( "#Menu_Spectate" ), TEAMMENU_TOPLEFT_BUTTON_X, 0, TEAMMENU_BUTTON_SIZE_X, TEAMMENU_BUTTON_SIZE_Y, true); m_pSpectateButton->setParent( this ); m_pSpectateButton->addActionSignal( new CMenuHandler_StringCommand( "spectate", true ) ); m_pSpectateButton->setBoundKey( '6' ); m_pSpectateButton->addInputSignal( new CHandler_MenuButtonOver(this, 6) ); Initialize(); }
//----------------------------------------------------------------------------- // Purpose: Constructs a message panel //----------------------------------------------------------------------------- CMessageWindowPanel::CMessageWindowPanel( const char *szMOTD, const char *szTitle, int iShadeFullscreen, int iRemoveMe, int x, int y, int wide, int tall ) : CMenuPanel( iShadeFullscreen ? 100 : 255, iRemoveMe, x, y, wide, tall ) { // Get the scheme used for the Titles CSchemeManager *pSchemes = gViewPort->GetSchemeManager(); // schemes SchemeHandle_t hTitleScheme = pSchemes->getSchemeHandle( "Title Font" ); SchemeHandle_t hMOTDText = pSchemes->getSchemeHandle( "Briefing Text" ); // color schemes int r, g, b, a; // Create the window m_pBackgroundPanel = new CTransparentPanel( iShadeFullscreen ? 255 : 100, MOTD_WINDOW_X, MOTD_WINDOW_Y, MOTD_WINDOW_SIZE_X, MOTD_WINDOW_SIZE_Y ); m_pBackgroundPanel->setParent( this ); m_pBackgroundPanel->setBorder( new LineBorder( Color(255 * 0.7,170 * 0.7,0,0)) ); m_pBackgroundPanel->setVisible( true ); int iXSize,iYSize,iXPos,iYPos; m_pBackgroundPanel->getPos( iXPos,iYPos ); m_pBackgroundPanel->getSize( iXSize,iYSize ); // Create the title Label *pLabel = new Label( "", iXPos + MOTD_TITLE_X, iYPos + MOTD_TITLE_Y ); pLabel->setParent( this ); pLabel->setFont( pSchemes->getFont(hTitleScheme) ); pLabel->setFont( Scheme::sf_primary1 ); pSchemes->getFgColor( hTitleScheme, r, g, b, a ); pLabel->setFgColor( r, g, b, a ); pLabel->setFgColor( Scheme::sc_primary1 ); pSchemes->getBgColor( hTitleScheme, r, g, b, a ); pLabel->setBgColor( r, g, b, a ); pLabel->setContentAlignment( vgui::Label::a_west ); pLabel->setText( "%s", szTitle); // Create the Scroll panel ScrollPanel *pScrollPanel = new CTFScrollPanel( iXPos + XRES(16), iYPos + MOTD_TITLE_Y*2 + YRES(16), iXSize - XRES(32), iYSize - (YRES(48) + BUTTON_SIZE_Y*2) ); pScrollPanel->setParent(this); //force the scrollbars on so clientClip will take them in account after the validate pScrollPanel->setScrollBarAutoVisible(false, false); pScrollPanel->setScrollBarVisible(true, true); pScrollPanel->validate(); // Create the text panel TextPanel *pText = new TextPanel( "", 0,0, 64,64); pText->setParent( pScrollPanel->getClient() ); // get the font and colors from the scheme pText->setFont( pSchemes->getFont(hMOTDText) ); pSchemes->getFgColor( hMOTDText, r, g, b, a ); pText->setFgColor( r, g, b, a ); pSchemes->getBgColor( hMOTDText, r, g, b, a ); pText->setBgColor( r, g, b, a ); pText->setText( szMOTD); // Get the total size of the MOTD text and resize the text panel int iScrollSizeX, iScrollSizeY; // First, set the size so that the client's wdith is correct at least because the // width is critical for getting the "wrapped" size right. // You'll see a horizontal scroll bar if there is a single word that won't wrap in the // specified width. pText->getTextImage()->setSize(pScrollPanel->getClientClip()->getWide(), pScrollPanel->getClientClip()->getTall()); pText->getTextImage()->getTextSizeWrapped( iScrollSizeX, iScrollSizeY ); // Now resize the textpanel to fit the scrolled size pText->setSize( iScrollSizeX , iScrollSizeY ); //turn the scrollbars back into automode pScrollPanel->setScrollBarAutoVisible(true, true); pScrollPanel->setScrollBarVisible(false, false); pScrollPanel->validate(); CommandButton *pButton = new CommandButton( CHudTextMessage::BufferedLocaliseTextString( "#Menu_OK" ), iXPos + XRES(16), iYPos + iYSize - YRES(16) - BUTTON_SIZE_Y, CMENU_SIZE_X, BUTTON_SIZE_Y); pButton->addActionSignal(new CMenuHandler_TextWindow(HIDE_TEXTWINDOW)); pButton->setParent(this); }