2013-10-20 02:40:52 +00:00
// Copyright (c) 2013- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
2020-02-29 20:51:14 +00:00
# include "gfx/texture_atlas.h"
2013-10-20 02:40:52 +00:00
# include "TouchControlVisibilityScreen.h"
# include "Core/Config.h"
2013-10-20 03:22:21 +00:00
# include "i18n/i18n.h"
2013-10-20 02:40:52 +00:00
2018-06-17 06:25:46 +00:00
static const int leftColumnWidth = 140 ;
2018-06-17 06:32:34 +00:00
class CheckBoxChoice : public UI : : Choice {
public :
CheckBoxChoice ( const std : : string & text , UI : : CheckBox * checkbox , UI : : LayoutParams * lp )
: Choice ( text , lp ) , checkbox_ ( checkbox ) {
OnClick . Handle ( this , & CheckBoxChoice : : HandleClick ) ;
}
CheckBoxChoice ( ImageID imgID , UI : : CheckBox * checkbox , UI : : LayoutParams * lp )
: Choice ( imgID , lp ) , checkbox_ ( checkbox ) {
OnClick . Handle ( this , & CheckBoxChoice : : HandleClick ) ;
}
private :
UI : : EventReturn HandleClick ( UI : : EventParams & e ) ;
UI : : CheckBox * checkbox_ ;
} ;
2013-10-20 02:40:52 +00:00
void TouchControlVisibilityScreen : : CreateViews ( ) {
using namespace UI ;
2020-01-26 18:43:18 +00:00
auto di = GetI18NCategory ( " Dialog " ) ;
auto co = GetI18NCategory ( " Controls " ) ;
2018-06-17 06:25:46 +00:00
root_ = new AnchorLayout ( new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
Choice * back = new Choice ( di - > T ( " Back " ) , " " , false , new AnchorLayoutParams ( leftColumnWidth - 10 , WRAP_CONTENT , 10 , NONE , NONE , 10 ) ) ;
root_ - > Add ( back ) - > OnClick . Handle < UIScreen > ( this , & UIScreen : : OnBack ) ;
Choice * toggleAll = new Choice ( di - > T ( " Toggle All " ) , " " , false , new AnchorLayoutParams ( leftColumnWidth - 10 , WRAP_CONTENT , 10 , NONE , NONE , 84 ) ) ;
root_ - > Add ( toggleAll ) - > OnClick . Handle ( this , & TouchControlVisibilityScreen : : OnToggleAll ) ;
TabHolder * tabHolder = new TabHolder ( ORIENT_VERTICAL , leftColumnWidth , new AnchorLayoutParams ( 10 , 0 , 10 , 0 , false ) ) ;
tabHolder - > SetTag ( " TouchControlVisibility " ) ;
root_ - > Add ( tabHolder ) ;
ScrollView * rightPanel = new ScrollView ( ORIENT_VERTICAL ) ;
tabHolder - > AddTab ( co - > T ( " Visibility " ) , rightPanel ) ;
LinearLayout * vert = rightPanel - > Add ( new LinearLayout ( ORIENT_VERTICAL , new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ) ;
vert - > SetSpacing ( 0 ) ;
2013-10-20 03:56:04 +00:00
vert - > Add ( new ItemHeader ( co - > T ( " Touch Control Visibility " ) ) ) ;
2013-10-20 02:40:52 +00:00
2018-06-17 06:25:46 +00:00
const int cellSize = 380 ;
2013-10-20 02:40:52 +00:00
UI : : GridLayoutSettings gridsettings ( cellSize , 64 , 5 ) ;
gridsettings . fillCells = true ;
GridLayout * grid = vert - > Add ( new GridLayout ( gridsettings , new LayoutParams ( FILL_PARENT , WRAP_CONTENT ) ) ) ;
2019-11-13 17:55:18 +00:00
static const char * rightAnalogKey = " Right Analog Stick (tap to customize) " ;
2018-06-17 06:11:56 +00:00
toggles_ . clear ( ) ;
2020-02-29 20:51:14 +00:00
toggles_ . push_back ( { " Circle " , & g_Config . bShowTouchCircle , ImageID ( " I_CIRCLE " ) } ) ;
toggles_ . push_back ( { " Cross " , & g_Config . bShowTouchCross , ImageID ( " I_CROSS " ) } ) ;
toggles_ . push_back ( { " Square " , & g_Config . bShowTouchSquare , ImageID ( " I_SQUARE " ) } ) ;
toggles_ . push_back ( { " Triangle " , & g_Config . bShowTouchTriangle , ImageID ( " I_TRIANGLE " ) } ) ;
toggles_ . push_back ( { " L " , & g_Config . touchLKey . show , ImageID ( " I_L " ) } ) ;
toggles_ . push_back ( { " R " , & g_Config . touchRKey . show , ImageID ( " I_R " ) } ) ;
toggles_ . push_back ( { " Start " , & g_Config . touchStartKey . show , ImageID ( " I_START " ) } ) ;
toggles_ . push_back ( { " Select " , & g_Config . touchSelectKey . show , ImageID ( " I_SELECT " ) } ) ;
toggles_ . push_back ( { " Dpad " , & g_Config . touchDpad . show , ImageID : : invalid ( ) } ) ;
toggles_ . push_back ( { " Analog Stick " , & g_Config . touchAnalogStick . show , ImageID : : invalid ( ) } ) ;
2019-11-13 17:55:18 +00:00
toggles_ . push_back ( { rightAnalogKey , & g_Config . touchRightAnalogStick . show , ImageID : : invalid ( ) } ) ;
2020-02-29 20:51:14 +00:00
toggles_ . push_back ( { " Unthrottle " , & g_Config . touchUnthrottleKey . show , ImageID : : invalid ( ) } ) ;
toggles_ . push_back ( { " Combo0 " , & g_Config . touchCombo0 . show , ImageID ( " I_1 " ) } ) ;
toggles_ . push_back ( { " Combo1 " , & g_Config . touchCombo1 . show , ImageID ( " I_2 " ) } ) ;
toggles_ . push_back ( { " Combo2 " , & g_Config . touchCombo2 . show , ImageID ( " I_3 " ) } ) ;
toggles_ . push_back ( { " Combo3 " , & g_Config . touchCombo3 . show , ImageID ( " I_4 " ) } ) ;
toggles_ . push_back ( { " Combo4 " , & g_Config . touchCombo4 . show , ImageID ( " I_5 " ) } ) ;
toggles_ . push_back ( { " Alt speed 1 " , & g_Config . touchSpeed1Key . show , ImageID : : invalid ( ) } ) ;
toggles_ . push_back ( { " Alt speed 2 " , & g_Config . touchSpeed2Key . show , ImageID : : invalid ( ) } ) ;
toggles_ . push_back ( { " RapidFire " , & g_Config . touchRapidFireKey . show , ImageID : : invalid ( ) } ) ;
2020-03-23 08:24:36 +00:00
toggles_ . push_back ( { " Auto Analog Rotation (CW) " , & g_Config . touchAnalogRotationCWKey . show , ImageID : : invalid ( ) } ) ;
toggles_ . push_back ( { " Auto Analog Rotation (CCW) " , & g_Config . touchAnalogRotationCCWKey . show , ImageID : : invalid ( ) } ) ;
2013-10-20 02:40:52 +00:00
2020-01-26 18:43:18 +00:00
auto mc = GetI18NCategory ( " MappableControls " ) ;
2018-06-17 06:11:56 +00:00
for ( auto toggle : toggles_ ) {
2013-10-20 02:40:52 +00:00
LinearLayout * row = new LinearLayout ( ORIENT_HORIZONTAL , new LinearLayoutParams ( FILL_PARENT , WRAP_CONTENT ) ) ;
row - > SetSpacing ( 0 ) ;
2013-10-27 05:27:25 +00:00
2018-06-17 06:11:56 +00:00
CheckBox * checkbox = new CheckBox ( toggle . show , " " , " " , new LinearLayoutParams ( 50 , WRAP_CONTENT ) ) ;
2013-10-27 05:27:25 +00:00
row - > Add ( checkbox ) ;
2013-10-20 02:40:52 +00:00
2019-11-13 17:55:18 +00:00
if ( toggle . key = = rightAnalogKey ) {
Choice * rightAnalog = new Choice ( co - > T ( rightAnalogKey ) , " " , false , new LinearLayoutParams ( 1.0f ) ) ;
rightAnalog - > SetCentered ( true ) ;
row - > Add ( rightAnalog ) - > OnClick . Handle ( this , & TouchControlVisibilityScreen : : RightAnalogBindScreen ) ;
2013-10-20 02:40:52 +00:00
} else {
2019-11-13 17:55:18 +00:00
Choice * choice ;
if ( toggle . img . isValid ( ) ) {
choice = new CheckBoxChoice ( toggle . img , checkbox , new LinearLayoutParams ( 1.0f ) ) ;
} else {
choice = new CheckBoxChoice ( mc - > T ( toggle . key ) , checkbox , new LinearLayoutParams ( 1.0f ) ) ;
}
choice - > SetCentered ( true ) ;
row - > Add ( choice ) ;
2013-10-20 02:40:52 +00:00
}
grid - > Add ( row ) ;
}
}
2013-10-25 11:19:08 +00:00
void TouchControlVisibilityScreen : : onFinish ( DialogResult result ) {
2019-02-23 09:49:49 +00:00
g_Config . Save ( " TouchControlVisibilityScreen::onFinish " ) ;
2013-10-20 02:40:52 +00:00
}
2019-11-13 17:55:18 +00:00
void RightAnalogMappingScreen : : CreateViews ( ) {
using namespace UI ;
auto di = GetI18NCategory ( " Dialog " ) ;
auto co = GetI18NCategory ( " Controls " ) ;
root_ = new AnchorLayout ( new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ;
Choice * back = new Choice ( di - > T ( " Back " ) , " " , false , new AnchorLayoutParams ( leftColumnWidth - 10 , WRAP_CONTENT , 10 , NONE , NONE , 10 ) ) ;
root_ - > Add ( back ) - > OnClick . Handle < UIScreen > ( this , & UIScreen : : OnBack ) ;
TabHolder * tabHolder = new TabHolder ( ORIENT_VERTICAL , leftColumnWidth , new AnchorLayoutParams ( 10 , 0 , 10 , 0 , false ) ) ;
root_ - > Add ( tabHolder ) ;
ScrollView * rightPanel = new ScrollView ( ORIENT_VERTICAL ) ;
tabHolder - > AddTab ( co - > T ( " Binds " ) , rightPanel ) ;
LinearLayout * vert = rightPanel - > Add ( new LinearLayout ( ORIENT_VERTICAL , new LayoutParams ( FILL_PARENT , FILL_PARENT ) ) ) ;
vert - > SetSpacing ( 0 ) ;
static const char * rightAnalogButton [ ] = { " None " , " Left trigger " , " Right trigger " , " Square " , " Triangle " , " Circle " , " Cross " , " D-PAD Up " , " D-PAD Down " , " D-PAD Left " , " D-PAD Right " , " Start " , " Select " } ;
vert - > Add ( new CheckBox ( & g_Config . bRightAnalogCustom , co - > T ( " Use custom right analog " ) ) ) ;
PopupMultiChoice * rightAnalogUp = vert - > Add ( new PopupMultiChoice ( & g_Config . iRightAnalogUp , co - > T ( " Right analog up " ) , rightAnalogButton , 0 , ARRAY_SIZE ( rightAnalogButton ) , co - > GetName ( ) , screenManager ( ) ) ) ;
PopupMultiChoice * rightAnalogDown = vert - > Add ( new PopupMultiChoice ( & g_Config . iRightAnalogDown , co - > T ( " Right analog down " ) , rightAnalogButton , 0 , ARRAY_SIZE ( rightAnalogButton ) , co - > GetName ( ) , screenManager ( ) ) ) ;
PopupMultiChoice * rightAnalogLeft = vert - > Add ( new PopupMultiChoice ( & g_Config . iRightAnalogLeft , co - > T ( " Right analog left " ) , rightAnalogButton , 0 , ARRAY_SIZE ( rightAnalogButton ) , co - > GetName ( ) , screenManager ( ) ) ) ;
PopupMultiChoice * rightAnalogRight = vert - > Add ( new PopupMultiChoice ( & g_Config . iRightAnalogRight , co - > T ( " Right analog right " ) , rightAnalogButton , 0 , ARRAY_SIZE ( rightAnalogButton ) , co - > GetName ( ) , screenManager ( ) ) ) ;
PopupMultiChoice * rightAnalogPress = vert - > Add ( new PopupMultiChoice ( & g_Config . iRightAnalogPress , co - > T ( " Keep this button pressed when right analog is pressed " ) , rightAnalogButton , 0 , ARRAY_SIZE ( rightAnalogButton ) , co - > GetName ( ) , screenManager ( ) ) ) ;
vert - > Add ( new CheckBox ( & g_Config . touchRightAnalogStick . show , co - > T ( " Show right analog " ) ) ) ;
rightAnalogUp - > SetEnabledPtr ( & g_Config . bRightAnalogCustom ) ;
rightAnalogDown - > SetEnabledPtr ( & g_Config . bRightAnalogCustom ) ;
rightAnalogLeft - > SetEnabledPtr ( & g_Config . bRightAnalogCustom ) ;
rightAnalogRight - > SetEnabledPtr ( & g_Config . bRightAnalogCustom ) ;
rightAnalogPress - > SetEnabledPtr ( & g_Config . bRightAnalogCustom ) ;
}
2013-10-20 02:40:52 +00:00
UI : : EventReturn TouchControlVisibilityScreen : : OnToggleAll ( UI : : EventParams & e ) {
2018-06-17 06:11:56 +00:00
for ( auto toggle : toggles_ ) {
* toggle . show = nextToggleAll_ ;
2013-10-20 15:57:35 +00:00
}
2018-06-17 06:11:56 +00:00
nextToggleAll_ = ! nextToggleAll_ ;
2013-10-21 20:57:00 +00:00
2013-10-20 02:40:52 +00:00
return UI : : EVENT_DONE ;
}
2013-10-27 05:27:25 +00:00
2019-11-13 17:55:18 +00:00
UI : : EventReturn TouchControlVisibilityScreen : : RightAnalogBindScreen ( UI : : EventParams & e ) {
screenManager ( ) - > push ( new RightAnalogMappingScreen ( ) ) ;
return UI : : EVENT_DONE ;
}
2018-06-17 06:32:34 +00:00
UI : : EventReturn CheckBoxChoice : : HandleClick ( UI : : EventParams & e ) {
2013-10-27 05:27:25 +00:00
checkbox_ - > Toggle ( ) ;
return UI : : EVENT_DONE ;
} ;