D:/Zythum/DinoKod/Mod_Aeternis_Client/A_WinOptionsControllers.cpp

00001 //---------------------------------------------------------------------------------------------
00002 //      This file is a part of "DinoKod".
00003 //      Copyright © 2003 Dino Productions. All Rights Reserved.
00004 //      
00005 //      File                    : WinOptionsControllers.cpp
00006 //      Author                  : Cedric Stanus
00007 //      Date                    : 28/08/2003
00008 //      Modification    :
00009 //
00010 //---------------------------------------------------------------------------------------------
00011 #include "Common/Time.h"
00012 #include "Render/Render.h"
00013 #include "Render/Font.h"
00014 
00015 #include "Mod_Aeternis_Client/A_Interface.h"
00016 
00017 
00018 #include "Mod_Aeternis_Client/A_WinOptionsControllers.h"
00019 
00020 #define GUIDIR( __gui ) KStr( "GUI/%s/%s", GETLANGUAGEPREFIX(), __gui )
00021 
00022 #define BUTTONAPPLY                     GUIDIR("Apply")
00023 #define BUTTONAPPLYHL           GUIDIR("Apply_HL")
00024 #define BUTTONAPPLYC            GUIDIR("Apply_C")
00025 #define BUTTONBACK                      GUIDIR("Return")
00026 #define BUTTONBACKHL            GUIDIR("Return_HL")
00027 #define BUTTONBACKC                     GUIDIR("Return_C")
00028 
00029 //------------------------------------------------------------------------------------------
00030 //------------------------------------------------------------------------------------------
00031 //------------------------------------------------------------------------------------------
00032 KAWinOptionsControllers::KAWinOptionsControllers( KWin* pFather, KFPt& Pos, KFPt& Size, KInterface* pInterface )
00033 : KWin( pFather, Pos, Size, pInterface )
00034 {
00035         m_BackGround = KSHADER_NO;
00036 
00037         KFPt    ButtonSize = KFPt( 0.25f, 0.04f );
00038         // Button Apply
00039         m_pButtonApply = new KButton( this, KFPt( 0.2f, 0.9f ) - ButtonSize / 2, ButtonSize, m_pInterface );
00040         // Button Back
00041         m_pButtonBack = new KButton( this, KFPt( 0.8f, 0.9f ) - ButtonSize / 2, ButtonSize, m_pInterface );
00042 
00043         KFPt    KeySize = KFPt( 0.25f, 0.03f );
00044         float fDefaultPosY = 0.2f ;
00045 
00046         m_pWinTab = new KWinTab(this,KFPt( 0.05f, 0.1f ),KFPt( 0.9f, 0.75f ), m_pInterface) ;
00047 
00048         m_pWinTab->SetNbtab(E_TAB_COUNT) ;
00049         m_pWinTab->AddTab((char*)GETLOCALSTRING(E_TAB_ACTION),E_TAB_ACTION) ;
00050         m_pWinTab->AddTab((char*)GETLOCALSTRING(E_TAB_VOICECMD),E_TAB_VOICECMD) ;
00051         m_pWinTab->AddTab((char*)GETLOCALSTRING(E_TAB_HUD),E_TAB_HUD) ;
00052 
00053         float fPosY = fDefaultPosY ;
00054 
00055         for(u32 uiCpt = E_ACTIONS_FIRST_ACTION ; uiCpt < E_ACTIONS_FIRST_HUD ; uiCpt ++)
00056         {
00057                 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00058                 m_pTabActionsName[uiCpt] = new KText(this, KFPt( 0.2f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,(char*)pKey->GetpLocalStringActionName()) ;
00059                 m_pTabActionsKey[uiCpt].pButtonText = new KButton(this, KFPt( 0.8f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,pKey->GetpKeyName()) ;
00060                 m_pTabActionsKey[uiCpt].bPressed = false ;
00061                 fPosY += KeySize.y ;
00062 
00063                 m_pWinTab->AddControl(m_pTabActionsName[uiCpt],                                 E_TAB_ACTION) ;
00064                 m_pWinTab->AddControl(m_pTabActionsKey [uiCpt].pButtonText,             E_TAB_ACTION) ;
00065 
00066         }
00067 
00068         fPosY = fDefaultPosY ;
00069 
00070         for(u32 uiCpt = E_ACTIONS_FIRST_HUD ; uiCpt < E_ACTIONS_FIRST_VOICECMD ; uiCpt ++)
00071         {
00072                 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00073                 m_pTabActionsName[uiCpt] = new KText(this, KFPt( 0.2f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,(char*)pKey->GetpLocalStringActionName()) ;
00074                 m_pTabActionsKey[uiCpt].pButtonText = new KButton(this, KFPt( 0.8f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,pKey->GetpKeyName()) ;
00075                 m_pTabActionsKey[uiCpt].bPressed = false ;
00076                 fPosY += KeySize.y ;
00077 
00078                 m_pWinTab->AddControl(m_pTabActionsName[uiCpt],                                 E_TAB_HUD) ;
00079                 m_pWinTab->AddControl(m_pTabActionsKey [uiCpt].pButtonText,             E_TAB_HUD) ;
00080 
00081         }
00082 
00083         fPosY = fDefaultPosY ;
00084 
00085         for(u32 uiCpt = E_ACTIONS_FIRST_VOICECMD ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00086         {
00087                 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00088                 m_pTabActionsName[uiCpt] = new KText(this, KFPt( 0.2f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,(char*)pKey->GetpLocalStringActionName()) ;
00089                 m_pTabActionsKey[uiCpt].pButtonText = new KButton(this, KFPt( 0.8f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,pKey->GetpKeyName()) ;
00090                 m_pTabActionsKey[uiCpt].bPressed = false ;
00091                 fPosY += KeySize.y ;
00092 
00093                 m_pWinTab->AddControl(m_pTabActionsName[uiCpt],                                 E_TAB_VOICECMD) ;
00094                 m_pWinTab->AddControl(m_pTabActionsKey [uiCpt].pButtonText,             E_TAB_VOICECMD) ;
00095         }
00096 
00097         m_bWaitingMode  = false;
00098         m_bIgnoreNextMouseEvent = false;
00099 }
00100 
00101 //------------------------------------------------------------------------------------------
00102 KAWinOptionsControllers::~KAWinOptionsControllers()
00103 {
00104 }
00105 
00106 //------------------------------------------------------------------------------------------
00107 void KAWinOptionsControllers::Display()
00108 {
00109         u8              FadeAlpha = (u8)(255.0f * GetFade());
00110 
00111         m_pInterface->ShowMouse();
00112         DrawQuad( 0.0f, 0.0f, 1.0f, 1.0f, m_BackGround, KRGBA( 255, 255, 255, FadeAlpha ) );
00113 }
00114 
00115 //------------------------------------------------------------------------------------------
00116 void KAWinOptionsControllers::Manage()
00117 {
00118         // Appliquer
00119         if( m_pButtonApply->IsClicked() )
00120         {
00121                 m_pButtonApply->Reset() ;
00122                 g_AInputManager.SaveConfigFile() ;
00123                 ((KAInterface*)m_pInterface)->SetWin( KAIW_OPTIONS );
00124         }
00125         // Back
00126         if( m_pButtonBack->IsClicked() )
00127         {
00128                 EnableButtons(true) ;
00129                 m_bWaitingMode = false;
00130                 g_AInputManager.ReadConfigFile() ;
00131                 m_pButtonBack->Reset() ;
00132                 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00133                 {
00134                         KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00135                         m_pTabActionsKey[uiCpt].pButtonText->SetpText(pKey->GetpKeyName()) ;
00136                 }
00137                 ((KAInterface*)m_pInterface)->SetWin( KAIW_OPTIONS );
00138         }
00139 
00140         for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00141         {
00142                 if(m_pTabActionsKey[uiCpt].pButtonText->IsClicked())
00143                 {
00144                         m_pTabActionsKey[uiCpt].pButtonText->SetpText( NULL ) ;
00145                         PressButton(uiCpt) ;
00146                         EnableButtons(false) ;
00147                         m_bWaitingMode  = true;
00148                         m_pTabActionsKey[uiCpt].pButtonText->Reset() ;
00149                 }
00150         }
00151 }
00152 
00153 //------------------------------------------------------------------------------------------
00154 bool KAWinOptionsControllers::OnKeyDown( u32 Virtkey, u32 KeyData )
00155 {
00156         KKEY    uKey = (KKEY)Virtkey;
00157 
00158         if( m_bWaitingMode )
00159         {
00160                 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00161                 {
00162                         if(m_pTabActionsKey[uiCpt].bPressed)
00163                         {
00164                                 if(IsKeyAlreadyAffected(uiCpt,uKey))
00165                                 {
00166                                         m_pTabActionsKey[uiCpt].pButtonText->SetpText((char*)GETLOCALSTRING(LS_KEY_ALREADY_USED)) ;
00167                                 }
00168                                 else if( g_AInputManager.IsMappable( uKey ) )
00169                                 {
00170                                         g_AInputManager.SetKey(uiCpt,uKey) ;
00171                                         KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00172                                         m_pTabActionsKey[uiCpt].pButtonText->SetpText(pKey->GetpKeyName()) ;
00173                                         PressButton(E_ACTIONS_COUNT) ;
00174                                         EnableButtons(true) ;
00175                                         m_bWaitingMode = false;
00176                                         m_pTabActionsKey[uiCpt].pButtonText->Reset() ;
00177                                         
00178                                         // Et voici une magnifique rustine !
00179                                         if( Virtkey == VK_MOUSEBUTTON1 )
00180                                                 m_bIgnoreNextMouseEvent = true;
00181                                 }
00182                                 else
00183                                         m_pTabActionsKey[uiCpt].pButtonText->SetpText((char*)GETLOCALSTRING(LS_KEY_RESERVED)) ;
00184 
00185                         }
00186                 }
00187         }
00188 
00189         return true;
00190 }
00191 
00192 //------------------------------------------------------------------------------------------
00193 bool KAWinOptionsControllers::OnMouseEvent( KWMOUSEEVENT Event, u32 Param )
00194 {
00195         if( m_bIgnoreNextMouseEvent )
00196         {
00197                 m_bIgnoreNextMouseEvent = false;
00198                 return true;
00199         }
00200 
00201         return false;
00202 }
00203 
00204 //------------------------------------------------------------------------------------------
00205 void KAWinOptionsControllers::EnableButtons(bool bEnable)
00206 {
00207         for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00208         {
00209                 m_pTabActionsKey[uiCpt].pButtonText->Enable(bEnable) ;
00210         }
00211 //      m_pButtonBack->Enable(bEnable) ;
00212         m_pButtonApply->Enable(bEnable) ;
00213 }
00214 
00215 //------------------------------------------------------------------------------------------
00216 void KAWinOptionsControllers::PressButton(u32 eAction)
00217 {
00218         for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00219         {
00220                 m_pTabActionsKey[uiCpt].bPressed = false ;
00221         }
00222         if(eAction != E_ACTIONS_COUNT)
00223                 m_pTabActionsKey[eAction].bPressed = true ;
00224 }
00225 //------------------------------------------------------------------------------------------
00226 bool KAWinOptionsControllers::IsKeyAlreadyAffected(u32 uiAction,KKEY uKey)
00227 {
00228         for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00229         {
00230                 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00231                 if((pKey->GetKey() == uKey) && (uiAction != uiCpt))
00232                         return true ;
00233         }
00234         return false ;
00235 }
00236 
00237 //------------------------------------------------------------------------------------------
00238 void KAWinOptionsControllers::Load()
00239 {
00240         KWin::Load();
00241 
00242         for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00243         {
00244                 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00245                 m_pTabActionsName[uiCpt]->SetpText((char*)pKey->GetpLocalStringActionName()) ;
00246         }
00247 
00248         KASSERT( m_BackGround == KSHADER_NO );
00249         m_BackGround = m_pRender->GetpShaderBank()->LoadShader( GUIDIR("Controllers_bg") );
00250         m_pButtonApply->SetShaders( BUTTONAPPLY, BUTTONAPPLYHL, BUTTONAPPLYC );
00251         m_pButtonBack->SetShaders( BUTTONBACK, BUTTONBACKHL, BUTTONBACKC );
00252 
00253         m_pWinTab->SetTabName((char*)GETLOCALSTRING(E_TAB_ACTION),E_TAB_ACTION) ;
00254         m_pWinTab->SetTabName((char*)GETLOCALSTRING(E_TAB_VOICECMD),E_TAB_VOICECMD) ;
00255         m_pWinTab->SetTabName((char*)GETLOCALSTRING(E_TAB_HUD),E_TAB_HUD) ;
00256 
00257         m_pWinTab->ActiveTab(0) ;
00258 }
00259 
00260 //------------------------------------------------------------------------------------------
00261 void KAWinOptionsControllers::Unload()
00262 {
00263         KWin::Unload();
00264 
00265         if( m_BackGround != KSHADER_NO )
00266                 m_pRender->GetpShaderBank()->UnloadShader( m_BackGround );
00267 }

Generated on Sun Mar 25 20:02:14 2007 for Zythum Project by  doxygen 1.5.1-p1