Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 ****************************/
Generated on Thu Jul 14 2022 12:58:43 by
