Advertisement
BaSs_HaXoR

SPRX Dialogs (Credits: Sony & BLB)

Aug 15th, 2014
559
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.35 KB | None | 0 0
  1. #include <sys/return_code.h>
  2. #include <sysutil/sysutil_oskdialog.h>
  3. #include <sysutil/sysutil_msgdialog.h>
  4.  
  5.  
  6. namespace Dialog
  7. {
  8.         bool Finished = false;
  9.         bool YESNO = false;
  10.  
  11. enum {
  12.         MODE_IDLE = 0,
  13.         MODE_ERRORCODE_DIALOG_TEST,
  14.         MODE_STRING_OK,
  15.         MODE_STRING_YESNO,
  16.         MODE_STRING_DIALOG_3,
  17.         MODE_STRING_DIALOG_4,
  18.         MODE_STRING_DIALOG_5,
  19.         MODE_CHECK_PROGRESSBAR_1,
  20.         MODE_RUNNING,
  21.         MODE_CHECK_TIMEOUT,
  22.         MODE_TIMEOUT_NEXT,
  23.         MODE_EXIT
  24. };
  25.  
  26. static int msgdialog_mode = MODE_IDLE;
  27.  
  28. static void cb_dialogText1( int button_type, void *userdata )
  29. {
  30.         switch ( button_type ) {
  31.  
  32.         case CELL_MSGDIALOG_BUTTON_OK:
  33.                 msgdialog_mode = MODE_EXIT;
  34.                 break;
  35.         case CELL_MSGDIALOG_BUTTON_ESCAPE:
  36.                 msgdialog_mode = MODE_EXIT;
  37.                 break;
  38.  
  39.         default:
  40.                 msgdialog_mode = MODE_EXIT;
  41.                 break;
  42.         }
  43. }
  44. static void cb_dialogText2( int button_type, void *userdata )
  45. {
  46.         switch ( button_type ) {
  47.  
  48.         case CELL_MSGDIALOG_BUTTON_YES:
  49.                 YESNO = true;
  50.                 msgdialog_mode = MODE_EXIT;
  51.                 break;
  52.  
  53.         case CELL_MSGDIALOG_BUTTON_NO:
  54.                 msgdialog_mode = MODE_EXIT;
  55.                 break;
  56.  
  57.         case CELL_MSGDIALOG_BUTTON_ESCAPE:
  58.                 msgdialog_mode = MODE_EXIT;
  59.                 break;
  60.  
  61.         default:
  62.                 break;
  63.         }
  64. }
  65.  
  66.  
  67. void ShowYESNO(char* msg)
  68. {
  69.         int ret = 0;
  70.          unsigned int type =   CELL_MSGDIALOG_TYPE_SE_TYPE_NORMAL                      
  71.                                                    | CELL_MSGDIALOG_TYPE_BG_INVISIBLE                  
  72.                                                | CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO        
  73.                                            | CELL_MSGDIALOG_TYPE_DISABLE_CANCEL_ON    
  74.                                                | CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_YES;      
  75.  
  76.  
  77.         switch ( msgdialog_mode )
  78.         {
  79.         case MODE_IDLE:
  80.                 break;
  81.  
  82.         case MODE_STRING_YESNO:
  83.      cellMsgDialogOpen2(type, msg, cb_dialogText2, NULL, NULL);
  84.          msgdialog_mode = MODE_RUNNING;
  85.          break;
  86.  
  87.         case MODE_EXIT:
  88.           cellMsgDialogClose((float)1);
  89.           break;
  90.  
  91.             default:
  92.                 break;
  93.  
  94.         }
  95.  
  96.  
  97. }
  98. void Show(char* msg)
  99. {
  100.        
  101.          unsigned int type =   CELL_MSGDIALOG_TYPE_SE_TYPE_ERROR                      
  102.                                                    | CELL_MSGDIALOG_TYPE_BG_INVISIBLE                  
  103.                                                | CELL_MSGDIALOG_TYPE_BUTTON_TYPE_OK            
  104.                                            | CELL_MSGDIALOG_TYPE_DISABLE_CANCEL_ON    
  105.                                                | CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_OK;
  106.  
  107.  
  108.         switch ( msgdialog_mode )
  109.         {
  110.         case MODE_IDLE:
  111.                 break;
  112.  
  113.         case MODE_STRING_OK:
  114.      cellMsgDialogOpen2(type, msg, cb_dialogText1, NULL, NULL);
  115.          msgdialog_mode = MODE_EXIT;
  116.          break;
  117.  
  118.         case MODE_EXIT:
  119.           cellMsgDialogClose((float)5);
  120.           break;
  121.  
  122.             default:
  123.                 break;
  124.  
  125.         }
  126.  
  127.         while(Dialog::msgdialog_mode != Dialog::MODE_EXIT){}  //wait for the dialog to end :P
  128. }
  129.  
  130. void End()
  131. {
  132.           Finished = false;
  133.           YESNO = false;
  134. }
  135.  
  136.  
  137. }
  138.  
  139.  
  140.  
  141. namespace Keyboard
  142. {
  143.         enum{
  144.         MODE_IDLE = 0,
  145.         MODE_OPEN,
  146.         MODE_RUNNING,
  147.         MODE_CLOSE,
  148.         MODE_ENTERED,
  149.         MODE_CANCELED,
  150.         SET_ABORT_TIMER,
  151.         CHANGE_PANEL_MODE,
  152.         CHANGE_SCALE,
  153.         SET_CALLBACK,
  154.         MODE_EXIT,
  155.         START_DIALOG_TYPE,
  156.         START_SEPARATE_TYPE_1,
  157.         START_SEPARATE_TYPE_2,
  158. };
  159.         static int oskdialog_mode = MODE_IDLE;
  160.  
  161.         int getkbLen(char* str)
  162. {
  163.         int nullCount = 0;
  164.         int i = 0; //num of chars..
  165.     for(i = 0; i < 64;i++)
  166.         {
  167.                 if(nullCount == 2){break;}
  168.                 if(*(str+i) == 0x00) { nullCount++; } else {nullCount = 0;}
  169.         }
  170.         return i;
  171. }
  172.         void makekbStr(char* str,char* dest, int len)
  173. {
  174.         int nulls = 0;
  175.         for(int i = 0; i < len; i++)
  176.     {
  177.           if(*(str+i) == 0x00) {nulls++; }
  178.           else {*(dest+i-nulls) = *(str+i);}
  179.         }
  180.         *(dest+len+1-nulls) = 0x00;  //make sure its nulled...
  181. }
  182.  
  183.         static void sysutil_callback( uint64_t status, uint64_t param, void *userdata )
  184. {
  185.         (void)param;
  186.         (void)userdata;
  187.         int ret = 0;
  188.  
  189.         switch( status ){
  190.         case CELL_SYSUTIL_OSKDIALOG_LOADED:
  191.                 break;
  192.         case CELL_SYSUTIL_OSKDIALOG_FINISHED:
  193.                 oskdialog_mode = MODE_CLOSE;
  194.                 break;
  195.         case CELL_SYSUTIL_OSKDIALOG_UNLOADED:
  196.                 break;
  197.         case CELL_SYSUTIL_REQUEST_EXITGAME:
  198.                 oskdialog_mode = MODE_EXIT;
  199.                 break;
  200.         case CELL_SYSUTIL_DRAWING_BEGIN:
  201.                 break;
  202.         case CELL_SYSUTIL_DRAWING_END:
  203.                 break;
  204.         case CELL_SYSUTIL_OSKDIALOG_INPUT_ENTERED:
  205.                 oskdialog_mode = MODE_ENTERED;
  206.                 break;
  207.         case CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED:
  208.                 oskdialog_mode = MODE_CANCELED;
  209.                 break;
  210.         case CELL_SYSUTIL_OSKDIALOG_INPUT_DEVICE_CHANGED:
  211.                 break;
  212.         case CELL_SYSUTIL_OSKDIALOG_DISPLAY_CHANGED:
  213.                 break;
  214.         case CELL_SYSUTIL_SYSTEM_MENU_CLOSE:
  215.  
  216.                 break;
  217.         case CELL_SYSUTIL_SYSTEM_MENU_OPEN:
  218.                 break;
  219.         default:
  220.                 break;
  221.         }
  222. }
  223.         int keyboard(char* dest, char* INIT_TEXT, char* MESSAGE)
  224. {
  225.        
  226.        
  227. #pragma region Declarations
  228.  
  229.         int ret;
  230. CellOskDialogInputFieldInfo inputFieldInfo;
  231. inputFieldInfo.message = (uint16_t*)MESSAGE;
  232. inputFieldInfo.init_text = (uint16_t*)INIT_TEXT;
  233. inputFieldInfo.limit_length = CELL_OSKDIALOG_STRING_SIZE;
  234.  
  235.  
  236. CellOskDialogCallbackReturnParam OutputInfo;
  237. OutputInfo.result = CELL_OSKDIALOG_INPUT_FIELD_RESULT_OK;
  238. OutputInfo.numCharsResultString = 32;
  239.  
  240. uint16_t Result_Text_Buffer[CELL_OSKDIALOG_STRING_SIZE + 1];
  241. OutputInfo.pResultString = Result_Text_Buffer;
  242.  
  243. ret = cellOskDialogSetKeyLayoutOption (CELL_OSKDIALOG_10KEY_PANEL | CELL_OSKDIALOG_FULLKEY_PANEL);
  244.  
  245.  
  246. CellOskDialogPoint pos;
  247. pos.x = 0.0;  pos.y = 0.0;
  248. int32_t LayoutMode = CELL_OSKDIALOG_LAYOUTMODE_X_ALIGN_CENTER | CELL_OSKDIALOG_LAYOUTMODE_Y_ALIGN_TOP;
  249. ret = cellOskDialogSetLayoutMode( LayoutMode );
  250.  
  251.  
  252. CellOskDialogParam dialogParam;
  253. dialogParam.allowOskPanelFlg = CELL_OSKDIALOG_PANELMODE_KOREAN |
  254.  CELL_OSKDIALOG_PANELMODE_ALPHABET |
  255.  CELL_OSKDIALOG_PANELMODE_NUMERAL_FULL_WIDTH |
  256.  CELL_OSKDIALOG_PANELMODE_NUMERAL |
  257.  CELL_OSKDIALOG_PANELMODE_JAPANESE |
  258.  CELL_OSKDIALOG_PANELMODE_JAPANESE_KATAKANA |
  259.  CELL_OSKDIALOG_PANELMODE_ENGLISH;
  260. /*E Panel to display first */
  261. dialogParam.firstViewPanel = CELL_OSKDIALOG_PANELMODE_ALPHABET;
  262. /* E Initial display position of the on-screen keyboard dialog */
  263. dialogParam.controlPoint = pos;
  264. /*E Prohibited operation flag(s) (ex. CELL_OSKDIALOG_NO_SPACE) */
  265. dialogParam.prohibitFlgs = 0;
  266.  
  267.  
  268. #pragma endregion
  269.  
  270. sys_timer_usleep( 16 * 1000 );
  271.  ret = cellSysutilCheckCallback();
  272.  
  273.  
  274. if(oskdialog_mode == MODE_OPEN)
  275.         {
  276.     if(cellSysutilRegisterCallback( 0, sysutil_callback, NULL ) != 0) {console_write("\nCouldn't register the keyboard !\n");}
  277.     ret = cellOskDialogLoadAsync(SYS_MEMORY_CONTAINER_ID_INVALID, &dialogParam, &inputFieldInfo);
  278.     oskdialog_mode = MODE_RUNNING;
  279.         }
  280.          
  281.  if( oskdialog_mode == MODE_ENTERED )
  282.  {
  283.         ret = cellOskDialogGetInputText( &OutputInfo );
  284.         oskdialog_mode = MODE_RUNNING;
  285.  }
  286.  if( oskdialog_mode == MODE_CLOSE )
  287.  {
  288.         ret = cellOskDialogUnloadAsync( &OutputInfo );
  289.  
  290.         int strLen = getkbLen((char*)(*(&OutputInfo.pResultString)));
  291.         makekbStr((char*)(*(&OutputInfo.pResultString)),dest, strLen);
  292.         inputFieldInfo.init_text = (uint16_t*)INIT_TEXT;      
  293.         if(cellSysutilUnregisterCallback(0) != 0) {console_write("\nCouldn't unload the keyboard !\n");}
  294.         oskdialog_mode = MODE_EXIT;
  295.  }
  296.  
  297. return 0;
  298. }
  299.  
  300.  
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement