Andrew Reed / Mbed OS CITY1082-i2c_master_wifi_mqtt
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers WIDGET_MultieditTryIt.c Source File

WIDGET_MultieditTryIt.c

00001 /*********************************************************************
00002 *                SEGGER Microcontroller GmbH                         *
00003 *        Solutions for real time microcontroller applications        *
00004 **********************************************************************
00005 *                                                                    *
00006 *        (c) 1996 - 2018  SEGGER Microcontroller GmbH                *
00007 *                                                                    *
00008 *        Internet: www.segger.com    Support:  support@segger.com    *
00009 *                                                                    *
00010 **********************************************************************
00011 
00012 ** emWin V5.48 - Graphical user interface for embedded applications **
00013 All  Intellectual Property rights  in the Software belongs to  SEGGER.
00014 emWin is protected by  international copyright laws.  Knowledge of the
00015 source code may not be used to write a similar product.  This file may
00016 only be used in accordance with the following terms:
00017 
00018 The software  has been licensed to  Cypress Semiconductor Corporation,
00019 whose registered  office is situated  at 198 Champion Ct. San Jose, CA 
00020 95134 USA  solely for the  purposes of creating  libraries for Cypress
00021 PSoC3 and  PSoC5 processor-based devices,  sublicensed and distributed
00022 under  the  terms  and  conditions  of  the  Cypress  End User License
00023 Agreement.
00024 Full source code is available at: www.segger.com
00025 
00026 We appreciate your understanding and fairness.
00027 ----------------------------------------------------------------------
00028 Licensing information
00029 Licensor:                 SEGGER Microcontroller Systems LLC
00030 Licensed to:              Cypress Semiconductor Corp, 198 Champion Ct., San Jose, CA 95134, USA
00031 Licensed SEGGER software: emWin
00032 License number:           GUI-00319
00033 License model:            Services and License Agreement, signed June 10th, 2009
00034 Licensed platform:        Any Cypress platform (Initial targets are: PSoC3, PSoC5)
00035 ----------------------------------------------------------------------
00036 Support and Update Agreement (SUA)
00037 SUA period:               2009-06-12 - 2022-07-27
00038 Contact to extend SUA:    sales@segger.com
00039 ----------------------------------------------------------------------
00040 File        : DIALOG_MultiEdit.c
00041 Purpose     : Example demonstrating the use of a MULTIEDIT widget
00042 Requirements: WindowManager - (x)
00043               MemoryDevices - (x)
00044               AntiAliasing  - ( )
00045               VNC-Server    - ( )
00046               PNG-Library   - ( )
00047               TrueTypeFonts - ( )
00048 ----------------------------------------------------------------------
00049 */
00050 #include <stddef.h>
00051 #include "GUI.h"
00052 #include "DIALOG.h"
00053 
00054 /*********************************************************************
00055 *
00056 *       Defines
00057 *
00058 **********************************************************************
00059 */
00060 //
00061 // Recommended memory to run the sample with adequate performance
00062 //
00063 #define RECOMMENDED_MEMORY (1024L * 20)
00064 
00065 /*********************************************************************
00066 *
00067 *       Static data
00068 *
00069 **********************************************************************
00070 */
00071 static int _Password = 0;
00072 static int _RdOnly   = 0;
00073 static int _RTF8     = 0;
00074 
00075 /*********************************************************************
00076 *
00077 *       Dialog resource
00078 *
00079 * This table conatins the info required to create the dialog.
00080 * It has been created manually, but could also be created by a GUI-builder.
00081 */
00082 static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
00083   { FRAMEWIN_CreateIndirect,  "MultiEdit sample",        0,                   3,   3, 314, 234, FRAMEWIN_CF_MOVEABLE },
00084   { MULTIEDIT_CreateIndirect, "Suspend",                 GUI_ID_MULTIEDIT0,   5,   5, 152, 120, 0, 0 },
00085 //
00086 // Read only check box
00087 //
00088   { CHECKBOX_CreateIndirect,  0,                         GUI_ID_CHECK0,       5, 110,   0,   0 },
00089   { TEXT_CreateIndirect,      "R/O",                     0,                  25, 110,  50,  15, TEXT_CF_LEFT },
00090 //
00091 // UTF8 check box
00092 //
00093   { CHECKBOX_CreateIndirect,  0,                         GUI_ID_CHECK1,      50, 110,   0,   0 },
00094   { TEXT_CreateIndirect,      "UTF8",                    0,                  70, 110,  50,  15, TEXT_CF_LEFT },
00095 //
00096 // Password mode check box
00097 //
00098   { CHECKBOX_CreateIndirect,  0,                         GUI_ID_CHECK2,     102, 110,   0,   0 },
00099   { TEXT_CreateIndirect,      "Passw.",                  0,                 122, 110,  50,  15, TEXT_CF_LEFT },
00100 //
00101 // Radio button for scroll mode
00102 //
00103   { TEXT_CreateIndirect,      "H",                       0,                 241,   3,  50,  15, TEXT_CF_LEFT },
00104   { TEXT_CreateIndirect,      "V",                       0,                 257,   3,  50,  15, TEXT_CF_LEFT },
00105   { TEXT_CreateIndirect,      "Scroll",                  0,                 272,   3,  50,  15, TEXT_CF_LEFT },
00106   { TEXT_CreateIndirect,      "Auto",                    0,                 272,  17,  50,  15, TEXT_CF_LEFT },
00107   { TEXT_CreateIndirect,      "Off",                     0,                 272,  32,  50,  15, TEXT_CF_LEFT },
00108   { TEXT_CreateIndirect,      "On",                      0,                 272,  47,  50,  15, TEXT_CF_LEFT },
00109   { RADIO_CreateIndirect,      NULL,                     GUI_ID_RADIO0,     236,  16,   0,   0, 0, 0x0f03 },
00110   { RADIO_CreateIndirect,      NULL,                     GUI_ID_RADIO1,     252,  16,   0,   0, 0, 0x0f03 },
00111 //
00112 // Radio button for effect type
00113 //
00114   { TEXT_CreateIndirect,      "Effect",                    0,               169,   3,  60,  15, TEXT_CF_LEFT },
00115   { RADIO_CreateIndirect,      NULL,                     GUI_ID_RADIO3,     165,  16,  51,   0, 0, 0x0f03 },
00116 //
00117 // Radio button for wrap mode
00118 //
00119   { TEXT_CreateIndirect,      "Wrap",                    0,                 159, 155,  60,  15, TEXT_CF_LEFT },
00120   { RADIO_CreateIndirect,      NULL,                     GUI_ID_RADIO2,     155, 168,  47,   0, 0, 0x0d03 },
00121 //
00122 // Prompt
00123 //
00124   { TEXT_CreateIndirect,      "Prompt:",                 0,                 167,  65,  50,  15, TEXT_CF_LEFT },
00125   { EDIT_CreateIndirect,      "Prompt:",                 GUI_ID_EDIT0,      212,  65,  45,  15, TEXT_CF_LEFT },
00126   { BUTTON_CreateIndirect,    "Set",                     GUI_ID_BUTTON1,    262,  65,  35,  15 },
00127 //
00128 // Cursor offset
00129 //
00130   { TEXT_CreateIndirect,      "CurOff:",                 0,                 167,  83,  50,  15, TEXT_CF_LEFT },
00131   { EDIT_CreateIndirect,      0,                         GUI_ID_EDIT1,      212,  83,  45,  15, TEXT_CF_LEFT, 3 },
00132   { BUTTON_CreateIndirect,    "Set",                     GUI_ID_BUTTON2,    262,  83,  35,  15 },
00133 //
00134 // Window size
00135 //
00136   { TEXT_CreateIndirect,      "Window size",             0,                 167, 102,  60,  15, TEXT_CF_LEFT },
00137   { TEXT_CreateIndirect,      "Y: ",                     0,                 167, 114,  60,  15, TEXT_CF_LEFT },
00138   { TEXT_CreateIndirect,      "X: ",                     0,                 167, 133,  60,  15, TEXT_CF_LEFT },
00139   { SLIDER_CreateIndirect,    NULL,                      GUI_ID_SLIDER0,    182, 114, 115,  20, 0},
00140   { SLIDER_CreateIndirect,    NULL,                      GUI_ID_SLIDER1,    182, 133, 115,  20, 0},
00141 //
00142 // HBorder
00143 //
00144   { TEXT_CreateIndirect,      "HBorder",                 0,                 207, 151,  60,  15, TEXT_CF_LEFT },
00145   { SLIDER_CreateIndirect,    NULL,                      GUI_ID_SLIDER2,    207, 163,  90,  20, 0},
00146 //
00147 // MaxNumChars
00148 //
00149   { TEXT_CreateIndirect,      "NumChars",                0,                 207, 181,  60,  15, TEXT_CF_LEFT },
00150   { SLIDER_CreateIndirect,    NULL,                      GUI_ID_SLIDER3,    207, 193,  90,  20, 0},
00151 //
00152 // Set font
00153 //
00154   { BUTTON_CreateIndirect,    "Monosp. Font",            GUI_ID_BUTTON6,      5, 130,  78,  20 },
00155   { BUTTON_CreateIndirect,    "Prop. Font",              GUI_ID_BUTTON7,     88, 130,  68,  20 },
00156 //
00157 // Set text
00158   { BUTTON_CreateIndirect,    "Short\nText",             GUI_ID_BUTTON3,      5, 155,  47,  30 },
00159   { BUTTON_CreateIndirect,    "Long\nText",              GUI_ID_BUTTON4,     57, 155,  47,  30 },
00160   { BUTTON_CreateIndirect,    "Add\nText",               GUI_ID_BUTTON5,    107, 155,  47,  30 },
00161 //
00162 // Add. buttons
00163 //
00164   { BUTTON_CreateIndirect,    "OK",                      GUI_ID_OK,           5, 190,  47,  20 },
00165   { BUTTON_CreateIndirect,    "Cancel",                  GUI_ID_CANCEL,      57, 190,  47,  20 },
00166 };
00167 
00168 /*********************************************************************
00169 *
00170 *       Static code
00171 *
00172 **********************************************************************
00173 */
00174 /*********************************************************************
00175 *
00176 *       _cbBkWindow
00177 */
00178 static void _cbBkWindow(WM_MESSAGE* pMsg) {
00179   switch (pMsg->MsgId) {
00180   case WM_PAINT:
00181     GUI_SetBkColor(GUI_RED);
00182     GUI_Clear();
00183     GUI_SetColor(GUI_WHITE);
00184     GUI_SetFont(&GUI_Font24_ASCII);
00185     GUI_DispStringHCenterAt("WIDGET_MultiEdit", 160, 5);
00186     break;
00187   default:
00188     WM_DefaultProc(pMsg);
00189   }
00190 }
00191 
00192 /*********************************************************************
00193 *
00194 *       _cbCallback
00195 */
00196 static void _cbCallback(WM_MESSAGE * pMsg) {
00197   int     NCode;
00198   int     Id;
00199   int     Sel;
00200   char    ac[80];
00201   WM_HWIN hDlg;
00202   WM_HWIN hMulti;
00203   WM_HWIN hItem;
00204 
00205   hDlg   = pMsg->hWin;
00206   hMulti = WM_GetDialogItem(hDlg, GUI_ID_MULTIEDIT0);
00207   switch (pMsg->MsgId) {
00208   case WM_INIT_DIALOG:
00209     hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0);
00210     SLIDER_SetRange(hItem, 1, 100);
00211     SLIDER_SetValue(hItem, 100);
00212     hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER1);
00213     SLIDER_SetRange(hItem, 1, 152);
00214     SLIDER_SetValue(hItem, 152);
00215     hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER2);
00216     SLIDER_SetRange(hItem, 0, 5);
00217     SLIDER_SetValue(hItem, 2);
00218     hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER3);
00219     SLIDER_SetRange(hItem, 0, 100);
00220     SLIDER_SetValue(hItem, 0);
00221     hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT1);
00222     EDIT_SetDecMode(hItem, 0, 0, 1000, 0, 0);
00223     hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO2);
00224     RADIO_SetText(hItem, "None", 0);
00225     RADIO_SetText(hItem, "Char", 1);
00226     RADIO_SetText(hItem, "Word", 2);
00227     hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO3);
00228     RADIO_SetText(hItem, "None",   0);
00229     RADIO_SetText(hItem, "Simple", 1);
00230     RADIO_SetText(hItem, "3D",     2);
00231     RADIO_SetValue(hItem, 2);
00232     RADIO_SetTextColor(hItem, GUI_BLUE);
00233     MULTIEDIT_EnableBlink(hMulti, 300, 1);
00234     MULTIEDIT_SetFont(hMulti, &GUI_Font8x16);
00235     MULTIEDIT_SetBkColor(hMulti, 0, GUI_YELLOW);
00236     MULTIEDIT_SetTextColor(hMulti, 0, GUI_BLUE);
00237     MULTIEDIT_SetAutoScrollV(hMulti, 1);
00238     MULTIEDIT_SetInsertMode(hMulti, 1);
00239     MULTIEDIT_SetPrompt(hMulti, "C:\\>");
00240     MULTIEDIT_SetHBorder(hMulti, 2);
00241     MULTIEDIT_SetText(hMulti, "Multiedit - long line 12345678901234567890\nThis demonstrates the use of a MULTIEDIT widget");
00242     MULTIEDIT_AddKey(hMulti, 'A');
00243     MULTIEDIT_AddKey(hMulti, 'B');
00244     MULTIEDIT_AddKey(hMulti, 'C');
00245     MULTIEDIT_AddKey(hMulti, GUI_KEY_ENTER);
00246     MULTIEDIT_SetAutoScrollH(hMulti, 1);
00247     hItem = WM_GetDialogItem(hDlg, GUI_ID_BUTTON5);
00248     BUTTON_SetFocussable(hItem, 0);
00249     break;
00250   case WM_KEY:
00251     switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
00252     case GUI_KEY_ESCAPE:
00253       GUI_EndDialog(hDlg, 1);
00254       break;
00255     case GUI_KEY_ENTER:
00256       GUI_EndDialog(hDlg, 0);
00257       break;
00258     }
00259     break;
00260   case WM_NOTIFY_PARENT:
00261     Id     = WM_GetId(pMsg->hWinSrc);
00262     NCode  = pMsg->Data.v;
00263     hItem  = WM_GetDialogItem(hDlg, Id);
00264     switch (NCode) {
00265     case WM_NOTIFICATION_VALUE_CHANGED:
00266       switch (Id) {
00267       case GUI_ID_SLIDER0:
00268         Sel = SLIDER_GetValue(hItem);
00269         WM_SetYSize(hMulti, Sel);
00270         break;
00271       case GUI_ID_SLIDER1:
00272         Sel = SLIDER_GetValue(hItem);
00273         WM_SetXSize(hMulti, Sel);
00274         break;
00275       case GUI_ID_SLIDER2:
00276         Sel = SLIDER_GetValue(hItem);
00277         MULTIEDIT_SetHBorder(hMulti, Sel);
00278         break;
00279       case GUI_ID_SLIDER3:
00280         Sel = SLIDER_GetValue(hItem);
00281         MULTIEDIT_SetMaxNumChars(hMulti, Sel);
00282         break;
00283       case GUI_ID_RADIO0:
00284         //
00285         // Horizontal scrollbar
00286         //
00287         Sel = RADIO_GetValue(hItem);
00288         switch (Sel) {
00289         case 0:
00290           MULTIEDIT_SetAutoScrollH(hMulti, 1);           // Auto
00291           break;
00292         case 1:
00293           MULTIEDIT_SetAutoScrollH(hMulti, 0);           // Off
00294           WM_SetScrollbarH(hMulti, 0);
00295           break;
00296         case 2:
00297           MULTIEDIT_SetAutoScrollH(hMulti, 0);           // On
00298           WM_SetScrollbarH(hMulti, 1);
00299           break;
00300         }
00301         break;
00302       case GUI_ID_RADIO1:
00303         //
00304         // Vertical scrollbar
00305         //
00306         Sel = RADIO_GetValue(hItem);
00307         switch (Sel) {
00308         case 0:
00309           MULTIEDIT_SetAutoScrollV(hMulti, 1);
00310           break;
00311         case 1:
00312           MULTIEDIT_SetAutoScrollV(hMulti, 0);
00313           WM_SetScrollbarV(hMulti, 0);
00314           break;
00315         case 2:
00316           MULTIEDIT_SetAutoScrollV(hMulti, 0);
00317           WM_SetScrollbarV(hMulti, 1);
00318           break;
00319         }
00320         break;
00321       case GUI_ID_RADIO2:
00322         //
00323         // Wrap
00324         //
00325         Sel = RADIO_GetValue(hItem);
00326         switch (Sel) {
00327         case 0:
00328           MULTIEDIT_SetWrapNone(hMulti);
00329           break;
00330         case 1:
00331           MULTIEDIT_SetWrapChar(hMulti);
00332           break;
00333         case 2:
00334           MULTIEDIT_SetWrapWord(hMulti);
00335           break;
00336         }
00337         break;
00338       case GUI_ID_RADIO3:
00339         //
00340         // Effect type
00341         //
00342         Sel = RADIO_GetValue(hItem);
00343         switch (Sel) {
00344         case 0:
00345           WIDGET_SetEffect(hMulti, &WIDGET_Effect_None);
00346           break;
00347         case 1:
00348           WIDGET_SetEffect(hMulti, &WIDGET_Effect_Simple);
00349           break;
00350         case 2:
00351           WIDGET_SetEffect(hMulti, &WIDGET_Effect_3D);
00352           break;
00353         }
00354         break;
00355       }
00356       break;
00357       case WM_NOTIFICATION_RELEASED:      // React only if released
00358         WM_GetDialogItem(hDlg, Id);
00359         switch (Id) {
00360         case GUI_ID_OK:
00361           GUI_EndDialog(hDlg, 0);
00362           break;
00363         case GUI_ID_CANCEL:
00364           GUI_EndDialog(hDlg, 1);
00365           break;
00366         case GUI_ID_CHECK0:
00367           _RdOnly ^= 1;
00368           MULTIEDIT_SetReadOnly(hMulti, _RdOnly);
00369           break;
00370         case GUI_ID_CHECK1:
00371           _RTF8 ^= 1;
00372           if (_RTF8) {
00373             GUI_UC_SetEncodeUTF8();
00374           } else {
00375             GUI_UC_SetEncodeNone();
00376           }
00377           WM_InvalidateWindow(hMulti);
00378           break;
00379         case GUI_ID_CHECK2:
00380           _Password ^= 1;
00381           MULTIEDIT_SetPasswordMode(hMulti, _Password);
00382           break;
00383         case GUI_ID_BUTTON1:
00384           hItem  = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);
00385           EDIT_GetText(hItem, &ac[0], sizeof(ac));
00386           MULTIEDIT_SetPrompt(hMulti, ac);
00387           break;
00388         case GUI_ID_BUTTON2:
00389           hItem  = WM_GetDialogItem(hDlg, GUI_ID_EDIT1);
00390           MULTIEDIT_SetCursorOffset(hMulti, EDIT_GetValue(hItem));
00391           WM_SetFocus(hMulti);
00392           break;
00393         case GUI_ID_BUTTON3:
00394           MULTIEDIT_SetText(hMulti, "Short text");
00395           break;
00396         case GUI_ID_BUTTON4:
00397           MULTIEDIT_SetText(hMulti, "Long text\n123456789012345678901234567890\nLast line\n");
00398           break;
00399         case GUI_ID_BUTTON5:
00400           MULTIEDIT_AddText(hMulti, "Added");
00401           break;
00402         case GUI_ID_BUTTON6:
00403           MULTIEDIT_SetFont(hMulti, &GUI_Font8x16);
00404           break;
00405         case GUI_ID_BUTTON7:
00406           MULTIEDIT_SetFont(hMulti, &GUI_Font16_1);
00407           break;
00408         }
00409         break;
00410     }
00411     break;
00412     default:
00413       WM_DefaultProc(pMsg);
00414   }
00415 }
00416 
00417 /*********************************************************************
00418 *
00419 *       Public code
00420 *
00421 **********************************************************************
00422 */
00423 /*********************************************************************
00424 *
00425 *       MainTask
00426 */
00427 void MainTask(void) {
00428   GUI_Init();
00429   //
00430   // Check if recommended memory for the sample is available
00431   //
00432   if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
00433     GUI_ErrorOut("Not enough memory available."); 
00434     return;
00435   }
00436   WM_SetCallback(WM_HBKWIN, _cbBkWindow);
00437   WM_SetCreateFlags(WM_CF_MEMDEV);  // Use memory devices on all windows to avoid flicker
00438   while (1) {
00439     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbCallback, 0, 0, 0);
00440     GUI_Delay(1000);
00441   }
00442 }
00443 
00444 /*************************** End of file ****************************/