38
|
1 ///////////////////////////////////////////////////////////////////////////////
|
|
2 /// -*- coding: UTF-8 -*-
|
|
3 ///
|
|
4 /// \file Discovery/Src/tInfo.c
|
|
5 /// \brief Main Template file for Info menu page on left side
|
|
6 /// \author heinrichs weikamp gmbh
|
|
7 /// \date 11-Aug-2014
|
|
8 ///
|
|
9 /// \details
|
|
10 ///
|
|
11 /// $Id$
|
|
12 ///////////////////////////////////////////////////////////////////////////////
|
|
13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
|
|
14 ///
|
|
15 /// This program is free software: you can redistribute it and/or modify
|
|
16 /// it under the terms of the GNU General Public License as published by
|
|
17 /// the Free Software Foundation, either version 3 of the License, or
|
|
18 /// (at your option) any later version.
|
|
19 ///
|
|
20 /// This program is distributed in the hope that it will be useful,
|
|
21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
23 /// GNU General Public License for more details.
|
|
24 ///
|
|
25 /// You should have received a copy of the GNU General Public License
|
|
26 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
27 //////////////////////////////////////////////////////////////////////////////
|
|
28
|
|
29 /* Includes ------------------------------------------------------------------*/
|
|
30 #include "tInfo.h"
|
|
31
|
|
32 #include "data_exchange.h"
|
|
33 #include "tDebug.h"
|
|
34 #include "gfx_fonts.h"
|
|
35 #include "tHome.h"
|
|
36 //#include "tInfoDive.h"
|
|
37 //#include "tInfoSurface.h"
|
|
38 #include "tInfoCompass.h"
|
|
39 #include "tMenu.h"
|
|
40
|
|
41 #include <string.h>
|
|
42
|
|
43 /* Private types -------------------------------------------------------------*/
|
|
44
|
|
45 typedef struct
|
|
46 {
|
|
47 uint32_t pEventFunction;
|
|
48 uint32_t callerID;
|
|
49 } SInfoEventHandler;
|
|
50
|
|
51 typedef struct
|
|
52 {
|
|
53 char orgText[32];
|
|
54 char newText[32];
|
|
55 char input;
|
|
56 char symbolCounter;
|
|
57 int8_t begin[4], size[4];
|
|
58 uint16_t coord[3];
|
|
59 tFont *fontUsed;
|
|
60 uint32_t callerID;
|
|
61 uint8_t maintype;
|
|
62 uint8_t subtype;
|
|
63 } SInfoIdent;
|
|
64
|
|
65 typedef enum
|
|
66 {
|
|
67 FIELD_BUTTON = 1,
|
|
68 FIELD_SELECT,
|
|
69 FIELD_SYMBOL,
|
|
70 FIELD_TOGGLE,
|
|
71 FIELD_ON_OFF,
|
|
72 FIELD_END
|
|
73 } SInfoField;
|
|
74
|
|
75 /* Private variables ---------------------------------------------------------*/
|
|
76 GFX_DrawCfgScreen tIscreen;
|
|
77 GFX_DrawCfgScreen tIcursor;
|
|
78
|
|
79 uint8_t infoColor = CLUT_InfoSurface;
|
|
80
|
|
81 int8_t TIid = 0;
|
|
82 int8_t TIidLast = -1;
|
|
83 SInfoIdent TIident[10];
|
|
84
|
|
85 int8_t TIevid = 0;
|
|
86 int8_t TIevidLast = -1;
|
|
87 SInfoEventHandler TIevent[10];
|
|
88
|
|
89 /* Private function prototypes -----------------------------------------------*/
|
|
90 void tInfo_build_page(void);
|
|
91 void tInfo_showlog(void);
|
|
92
|
|
93 void tI_draw_tIdesign(void);
|
|
94 void tI_set_cursor(uint8_t forThisIdentID);
|
|
95 void tI_startInfoFieldSelect(void);
|
|
96 void tInfo_write_content_of_actual_Id(void);
|
|
97 void tI_clean_content_of_actual_Id(void);
|
|
98 void tInfo_write_content_without_Id(void);
|
|
99
|
|
100 void tI_clean_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font);
|
|
101 void tInfo_write_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color);
|
|
102
|
|
103 void tI_resetInfo(uint8_t color);
|
|
104
|
|
105 void tI_tInfo_refresh_live_content(void);
|
|
106 void tI_evaluateNewString (uint32_t editID, uint32_t *pNewValue1, uint32_t *pNewValue2, uint32_t *pNewValue3, uint32_t *pNewValue4);
|
|
107
|
|
108 //void tI_tInfo_newInput (uint32_t editID, uint32_t int1, uint32_t int2, uint32_t int3, uint32_t int4);
|
|
109 //void tI_tInfo_newButtonText (uint32_t editID, char *text);
|
|
110
|
|
111 void tI_enterInfoField(void);
|
|
112 void tI_nextInfoField(void);
|
|
113
|
|
114 /* Announced function prototypes -----------------------------------------------*/
|
|
115 //uint8_t OnAction_ILoglist (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
|
|
116 //uint8_t OnAction_ISimulator (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
|
|
117
|
|
118 /* Exported functions --------------------------------------------------------*/
|
|
119
|
|
120 void tI_init(void)
|
|
121 {
|
|
122 tIscreen.FBStartAdress = 0;
|
|
123 tIscreen.ImageHeight = 480;
|
|
124 tIscreen.ImageWidth = 800;
|
|
125 tIscreen.LayerIndex = 1;
|
|
126
|
|
127 tIcursor.FBStartAdress = getFrame(12);
|
|
128 tIcursor.ImageHeight = 480;
|
|
129 tIcursor.ImageWidth = 800;
|
|
130 tIcursor.LayerIndex = 0;
|
|
131
|
|
132 GFX_fill_buffer(tIcursor.FBStartAdress, 0xFF, CLUT_InfoCursor);
|
|
133 }
|
|
134
|
|
135
|
|
136 void openInfo(uint32_t modeToStart)
|
|
137 {
|
|
138 if((modeToStart != StILOGLIST) && (modeToStart != StIDEBUG))
|
|
139 return;
|
|
140
|
|
141 TIid = 0;
|
|
142 TIidLast = -1;
|
|
143 TIevid = 0;
|
|
144 TIevidLast = -1;
|
|
145
|
|
146 if(tIscreen.FBStartAdress)
|
|
147 releaseFrame(14,tIscreen.FBStartAdress);
|
|
148 tIscreen.FBStartAdress = getFrame(14);
|
|
149
|
|
150 // GFX_SetFramesTopBottom(tIscreen.FBStartAdress, tIcursor.FBStartAdress,480);
|
|
151 GFX_SetFramesTopBottom(tIscreen.FBStartAdress, NULL,480);
|
|
152 infoColor = CLUT_InfoSurface;
|
|
153
|
|
154 if(modeToStart == StIDEBUG)
|
|
155 {
|
|
156 tDebug_start();
|
|
157 }
|
|
158 else
|
|
159 {
|
|
160 openLog(0);
|
|
161 }
|
|
162 // openInfoLogLastDive();
|
|
163 }
|
|
164
|
|
165 /*
|
|
166 void openInfo(void)
|
|
167 {
|
|
168 if((stateUsed->mode == MODE_DIVE) && (!is_stateUsedSetToSim()))
|
|
169 {
|
|
170 return;
|
|
171 }
|
|
172
|
|
173 TIid = 0;
|
|
174 TIidLast = -1;
|
|
175 TIevid = 0;
|
|
176 TIevidLast = -1;
|
|
177
|
|
178 if(tIscreen.FBStartAdress)
|
|
179 releaseFrame(14,tIscreen.FBStartAdress);
|
|
180 tIscreen.FBStartAdress = getFrame(14);
|
|
181
|
|
182 GFX_SetFramesTopBottom(tIscreen.FBStartAdress, tIcursor.FBStartAdress,480);
|
|
183
|
|
184 if(stateUsed->mode == MODE_DIVE)
|
|
185 {
|
|
186 infoColor = CLUT_InfoSurface;
|
|
187 openInfo_Dive();
|
|
188 }
|
|
189 else
|
|
190 {
|
|
191 infoColor = CLUT_InfoDive;
|
|
192 openInfo_Surface();
|
|
193 }
|
|
194 }
|
|
195 */
|
|
196
|
|
197 /*
|
|
198 uint8_t OnAction_ILoglist (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
|
|
199 {
|
|
200 return 255;
|
|
201 }
|
|
202 */
|
|
203
|
|
204 void tInfo_refresh(void)
|
|
205 {
|
|
206 if(!inDebugMode() && (get_globalState() != StICOMPASS))
|
|
207 return;
|
|
208
|
|
209 uint32_t oldIscreen;
|
|
210
|
|
211 oldIscreen = tIscreen.FBStartAdress;
|
|
212 tIscreen.FBStartAdress = getFrame(14);
|
|
213 infoColor = CLUT_InfoCompass;
|
|
214
|
|
215 if(inDebugMode())
|
|
216 tDebug_refresh();
|
|
217 else
|
|
218 refreshInfo_Compass();
|
|
219
|
|
220 if(inDebugMode() || (get_globalState() == StICOMPASS)) /* could be timeout and exitInfo */
|
|
221 GFX_SetFramesTopBottom(tIscreen.FBStartAdress, NULL,480);
|
|
222
|
|
223 if(oldIscreen)
|
|
224 releaseFrame(14,oldIscreen);
|
|
225 }
|
|
226
|
|
227
|
|
228 void exitInfo(void)
|
|
229 {
|
|
230 set_globalState_tHome();
|
|
231 releaseFrame(14,tIscreen.FBStartAdress);
|
|
232 exitDebugMode();
|
|
233 }
|
|
234
|
|
235
|
|
236 void sendActionToInfo(uint8_t sendAction)
|
|
237 {
|
|
238 if(inDebugMode())
|
|
239 {
|
|
240 tDebugControl(sendAction);
|
|
241 return;
|
|
242 }
|
|
243
|
|
244 if(get_globalState() == StICOMPASS)
|
|
245 return;
|
|
246
|
|
247 switch(sendAction)
|
|
248 {
|
|
249 case ACTION_BUTTON_ENTER:
|
|
250 tI_enterInfoField();
|
|
251 break;
|
|
252 case ACTION_BUTTON_NEXT:
|
|
253 tI_nextInfoField();
|
|
254 break;
|
|
255 case ACTION_TIMEOUT:
|
|
256 case ACTION_MODE_CHANGE:
|
|
257 case ACTION_BUTTON_BACK:
|
|
258 exitInfo();
|
|
259 default:
|
|
260 break;
|
|
261 case ACTION_IDLE_TICK:
|
|
262 case ACTION_IDLE_SECOND:
|
|
263 break;
|
|
264 }
|
|
265
|
|
266 }
|
|
267
|
|
268 /* Private functions ---------------------------------------------------------*/
|
|
269
|
|
270 void tInfo_build_page(void)
|
|
271 {
|
|
272 tInfo_write_content_simple( 30, 340, 90, &FontT48, "Logbook", CLUT_Font020);
|
|
273
|
|
274 }
|
|
275
|
|
276 void tInfo_write_content_simple(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color)
|
|
277 {
|
|
278 GFX_DrawCfgWindow hgfx;
|
|
279
|
|
280 if(XrightGimpStyle > 799)
|
|
281 XrightGimpStyle = 799;
|
|
282 if(XleftGimpStyle >= XrightGimpStyle)
|
|
283 XleftGimpStyle = 0;
|
|
284 if(YtopGimpStyle > 479)
|
|
285 YtopGimpStyle = 479;
|
|
286 hgfx.Image = &tIscreen;
|
|
287 hgfx.WindowNumberOfTextLines = 1;
|
|
288 hgfx.WindowLineSpacing = 0;
|
|
289 hgfx.WindowTab = 400;
|
|
290 hgfx.WindowX0 = XleftGimpStyle;
|
|
291 hgfx.WindowX1 = XrightGimpStyle;
|
|
292 hgfx.WindowY1 = 479 - YtopGimpStyle;
|
|
293 if(hgfx.WindowY1 < Font->height)
|
|
294 hgfx.WindowY0 = 0;
|
|
295 else
|
|
296 hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
|
|
297
|
|
298 GFX_write_string_color(Font, &hgfx, text, 0, color);
|
|
299 }
|
|
300
|
|
301 /* Exported functions --------------------------------------------------------*/
|
|
302
|
|
303 void tI_startInfoFieldSelect(void)
|
|
304 {
|
|
305 TIid = 0;
|
|
306 tI_set_cursor(TIid);
|
|
307 }
|
|
308
|
|
309
|
|
310 void tI_nextInfoField(void)
|
|
311 {
|
|
312 if(TIid < TIidLast)
|
|
313 TIid++;
|
|
314 else
|
|
315 TIid = 0;
|
|
316 tI_set_cursor(TIid);
|
|
317 }
|
|
318
|
|
319
|
|
320 void tI_previousInfoField(void)
|
|
321 {
|
|
322 if(TIid > 0)
|
|
323 TIid--;
|
|
324 else
|
|
325 TIid = TIidLast;
|
|
326 tI_set_cursor(TIid);
|
|
327 }
|
|
328
|
|
329
|
|
330 uint8_t tI_get_newContent_of_actual_id_block_and_subBlock(uint8_t action)
|
|
331 {
|
|
332 uint8_t (*onActionFunc)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t);
|
|
333 uint8_t content;
|
|
334
|
|
335 if(TIevent[TIevid].callerID != TIident[TIid].callerID)
|
|
336 return 0;
|
|
337
|
|
338 onActionFunc = (uint8_t (*)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t))(TIevent[TIevid].pEventFunction);
|
|
339
|
|
340 if(TIident[TIid].maintype == FIELD_ON_OFF)
|
|
341 content = TIident[TIid].input;
|
|
342 else
|
|
343 content = 0; /* just a default for protection */
|
|
344
|
|
345 return onActionFunc(TIident[TIid].callerID, 0, 0, content, action);
|
|
346 }
|
|
347
|
|
348
|
|
349 void tI_enterInfoField(void)
|
|
350 {
|
|
351 uint8_t newContent;
|
|
352
|
|
353 TIevid = 0;
|
|
354 while((TIevid < TIevidLast) && (TIevent[TIevid].callerID != TIident[TIid].callerID))
|
|
355 {
|
|
356 TIevid++;
|
|
357 }
|
|
358
|
|
359 if(TIevent[TIevid].callerID != TIident[TIid].callerID)
|
|
360 return;
|
|
361
|
|
362 newContent = tI_get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_ENTER);
|
|
363
|
|
364 if(newContent == 255)
|
|
365 {
|
|
366 exitInfo();
|
|
367 return;
|
|
368 }
|
|
369
|
|
370 switch(TIident[TIid].maintype)
|
|
371 {
|
|
372 case FIELD_BUTTON:
|
|
373 break;
|
|
374 case FIELD_ON_OFF:
|
|
375 break;
|
|
376 case FIELD_SYMBOL:
|
|
377 TIident[TIid].input += 1;
|
|
378 if(TIident[TIid].input >= TIident[TIid].symbolCounter)
|
|
379 TIident[TIid].input = 0;
|
|
380 TIident[TIid].newText[0] = TIident[TIid].orgText[TIident[TIid].input];
|
|
381 tInfo_write_content_of_actual_Id();
|
|
382 break;
|
|
383 }
|
|
384 }
|
|
385
|
|
386
|
|
387 void tI_evaluateNewString(uint32_t editID, uint32_t *pNewValue1, uint32_t *pNewValue2, uint32_t *pNewValue3, uint32_t *pNewValue4)
|
|
388 {
|
|
389 if(editID != TIident[TIid].callerID)
|
|
390 return;
|
|
391
|
|
392 uint8_t i, digitCount, digit;
|
|
393 uint32_t sum[4], multiplier;
|
|
394
|
|
395 for(i=0;i<4;i++)
|
|
396 sum[i] = 0;
|
|
397
|
|
398 i = 0;
|
|
399 while( TIident[TIid].size[i] && (i < 4))
|
|
400 {
|
|
401 multiplier = 1;
|
|
402 for(digitCount = 1; digitCount < TIident[TIid].size[i]; digitCount++)
|
|
403 multiplier *= 10;
|
|
404
|
|
405 for(digitCount = 0; digitCount < TIident[TIid].size[i]; digitCount++)
|
|
406 {
|
|
407 digit = TIident[TIid].newText[TIident[TIid].begin[i] + digitCount];
|
|
408
|
|
409 if(digit > '0')
|
|
410 digit -= '0';
|
|
411 else
|
|
412 digit = 0;
|
|
413
|
|
414 if(digit > 9)
|
|
415 digit = 9;
|
|
416
|
|
417 sum[i] += digit * multiplier;
|
|
418
|
|
419 if(multiplier >= 10)
|
|
420 multiplier /= 10;
|
|
421 else
|
|
422 multiplier = 0;
|
|
423 }
|
|
424 i++;
|
|
425 }
|
|
426
|
|
427 *pNewValue1 = sum[0];
|
|
428 *pNewValue2 = sum[1];
|
|
429 *pNewValue3 = sum[2];
|
|
430 *pNewValue4 = sum[3];
|
|
431 }
|
|
432
|
|
433
|
|
434 uint8_t tI_get_id_of(uint32_t editID)
|
|
435 {
|
|
436 uint8_t temp_id;
|
|
437
|
|
438 if(editID == TIident[TIid].callerID)
|
|
439 return TIid;
|
|
440 else
|
|
441 {
|
|
442 temp_id = 0;
|
|
443 while((temp_id < 9) && (editID != TIident[temp_id].callerID))
|
|
444 temp_id++;
|
|
445 if(editID != TIident[temp_id].callerID)
|
|
446 temp_id = 255;
|
|
447 return temp_id;
|
|
448 }
|
|
449 }
|
|
450
|
|
451
|
|
452 void tI_newButtonText(uint32_t editID, char *text)
|
|
453 {
|
|
454 uint8_t backup_id, temp_id;
|
|
455
|
|
456 temp_id = tI_get_id_of(editID);
|
|
457 if(temp_id == 255)
|
|
458 return;
|
|
459
|
|
460 backup_id = TIid;
|
|
461 TIid = temp_id;
|
|
462
|
|
463 strncpy(TIident[TIid].newText, text, 32);
|
|
464 TIident[TIid].newText[31] = 0;
|
|
465
|
|
466 tI_clean_content_of_actual_Id();
|
|
467 tInfo_write_content_of_actual_Id();
|
|
468
|
|
469 TIid = backup_id;
|
|
470 }
|
|
471
|
|
472
|
|
473 void tInfo_set_on_off(uint32_t editID, uint32_t int1)
|
|
474 {
|
|
475 uint8_t backup_id, temp_id;
|
|
476
|
|
477 temp_id = tI_get_id_of(editID);
|
|
478 if(temp_id == 255)
|
|
479 return;
|
|
480
|
|
481 backup_id = TIid;
|
|
482 TIid = temp_id;
|
|
483
|
|
484 TIident[TIid].input = int1;
|
|
485
|
|
486 if(int1)
|
|
487 change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoActive);
|
|
488 else
|
|
489 change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoInActive);
|
|
490
|
|
491 tInfo_write_content_of_actual_Id();
|
|
492
|
|
493 TIid = backup_id;
|
|
494 }
|
|
495
|
|
496
|
|
497 void tInfo_write_content_without_Id(void)
|
|
498 {
|
|
499 tInfo_write_content( TIident[TIid].coord[0], TIident[TIid].coord[1], TIident[TIid].coord[2], TIident[TIid].fontUsed, TIident[TIid].newText, CLUT_InfoFieldRegular);
|
|
500 }
|
|
501
|
|
502
|
|
503 void tInfo_write_content_of_actual_Id(void)
|
|
504 {
|
|
505 tInfo_write_content( TIident[TIid].coord[0], TIident[TIid].coord[1], TIident[TIid].coord[2], TIident[TIid].fontUsed, TIident[TIid].newText, (CLUT_InfoField0 + TIid));
|
|
506 }
|
|
507
|
|
508
|
|
509 void tI_clean_content_of_actual_Id(void)
|
|
510 {
|
|
511 tI_clean_content( TIident[TIid].coord[0], TIident[TIid].coord[1], TIident[TIid].coord[2], TIident[TIid].fontUsed);
|
|
512 }
|
|
513
|
|
514
|
|
515 void tInfo_write_field_button(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text)
|
|
516 {
|
|
517 if(TIidLast >= 9)
|
|
518 return;
|
|
519
|
|
520 TIident[TIid].maintype = FIELD_BUTTON;
|
|
521 TIident[TIid].subtype = FIELD_BUTTON;
|
|
522
|
|
523 TIident[TIid].coord[0] = XleftGimpStyle;
|
|
524 TIident[TIid].coord[1] = XrightGimpStyle;
|
|
525 TIident[TIid].coord[2] = YtopGimpStyle;
|
|
526 TIident[TIid].fontUsed = (tFont *)Font;
|
|
527 TIident[TIid].callerID = editID;
|
|
528
|
|
529 strncpy(TIident[TIid].orgText, text, 32);
|
|
530 strncpy(TIident[TIid].newText, text, 32);
|
|
531 TIident[TIid].orgText[31] = 0;
|
|
532 TIident[TIid].newText[31] = 0;
|
|
533
|
|
534 change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoButtonColor1);
|
|
535
|
|
536 if(editID == NULL)
|
|
537 tInfo_write_content_without_Id();
|
|
538 else
|
|
539 {
|
|
540 tInfo_write_content_of_actual_Id();
|
|
541 TIidLast = TIid;
|
|
542 TIid++;
|
|
543 }
|
|
544 }
|
|
545
|
|
546
|
|
547 void tInfo_write_field_symbol(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t int1)
|
|
548 {
|
|
549 if(TIidLast >= 9)
|
|
550 return;
|
|
551
|
|
552 TIident[TIid].maintype = FIELD_SYMBOL;
|
|
553 TIident[TIid].subtype = FIELD_SYMBOL;
|
|
554
|
|
555 TIident[TIid].coord[0] = XleftGimpStyle;
|
|
556 TIident[TIid].coord[1] = XrightGimpStyle;
|
|
557 TIident[TIid].coord[2] = YtopGimpStyle;
|
|
558 TIident[TIid].fontUsed = (tFont *)Font;
|
|
559 TIident[TIid].callerID = editID;
|
|
560
|
|
561 strncpy(TIident[TIid].orgText, text, 32);
|
|
562 strncpy(TIident[TIid].newText, text, 32);
|
|
563 TIident[TIid].orgText[31] = 0;
|
|
564
|
|
565 TIident[TIid].newText[0] = text[0];
|
|
566 TIident[TIid].newText[1] = 0;
|
|
567
|
|
568 TIident[TIid].input = int1;
|
|
569 TIident[TIid].symbolCounter = strlen(TIident[TIid].orgText);
|
|
570
|
|
571 change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoButtonColor1);
|
|
572
|
|
573 if(editID == NULL)
|
|
574 tInfo_write_content_without_Id();
|
|
575 else
|
|
576 {
|
|
577 tInfo_write_content_of_actual_Id();
|
|
578 TIidLast = TIid;
|
|
579 TIid++;
|
|
580 }
|
|
581 }
|
|
582
|
|
583
|
|
584 void tInfo_write_field_on_off(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t int1)
|
|
585 {
|
|
586 if(TIidLast >= 9)
|
|
587 return;
|
|
588
|
|
589 TIident[TIid].maintype = FIELD_ON_OFF;
|
|
590 TIident[TIid].subtype = FIELD_ON_OFF;
|
|
591
|
|
592 TIident[TIid].coord[0] = XleftGimpStyle;
|
|
593 TIident[TIid].coord[1] = XrightGimpStyle;
|
|
594 TIident[TIid].coord[2] = YtopGimpStyle;
|
|
595 TIident[TIid].fontUsed = (tFont *)Font;
|
|
596 TIident[TIid].callerID = editID;
|
|
597
|
|
598 strncpy(TIident[TIid].orgText, text, 32);
|
|
599 strncpy(TIident[TIid].newText, text, 32);
|
|
600 TIident[TIid].orgText[31] = 0;
|
|
601 TIident[TIid].newText[31] = 0;
|
|
602
|
|
603
|
|
604 if(int1)
|
|
605 change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoActive);
|
|
606 else
|
|
607 change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoInActive);
|
|
608
|
|
609 if(editID == NULL)
|
|
610 tInfo_write_content_without_Id();
|
|
611 else
|
|
612 {
|
|
613 tInfo_write_content_of_actual_Id();
|
|
614 TIidLast = TIid;
|
|
615 TIid++;
|
|
616 }
|
|
617 }
|
|
618
|
|
619
|
|
620 void tInfo_setEvent(uint32_t inputEventID, uint32_t inputFunctionCall)
|
|
621 {
|
|
622 if(TIevidLast >= 9)
|
|
623 return;
|
|
624
|
|
625 /* set cursor to first field */
|
|
626 if(TIevidLast < 0)
|
|
627 {
|
|
628 tI_startInfoFieldSelect();
|
|
629 }
|
|
630
|
|
631 TIevent[TIevid].callerID = inputEventID;
|
|
632 TIevent[TIevid].pEventFunction = inputFunctionCall;
|
|
633
|
|
634 TIevidLast = TIevid;
|
|
635 TIevid++;
|
|
636 }
|
|
637
|
|
638
|
|
639 void tI_set_cursor(uint8_t forThisIdentID)
|
|
640 {
|
|
641 int16_t x0, x1, y0, y1;
|
|
642
|
|
643 uint32_t xtra_left_right = 10;
|
|
644 uint32_t xtra_top_bottom = 10;
|
|
645
|
|
646 /* y geht von 0 bis 799 */
|
|
647 /* x geht von 0 bis 479 */
|
|
648
|
|
649 x0 = (int16_t)TIident[forThisIdentID].coord[0];
|
|
650 x1 = (int16_t)TIident[forThisIdentID].coord[1];
|
|
651 y0 = (int16_t)TIident[forThisIdentID].coord[2];
|
|
652 y1 = y0 + (int16_t)TIident[forThisIdentID].fontUsed->height;
|
|
653
|
|
654 if(((int16_t)TIident[forThisIdentID].fontUsed->height) > 70)
|
|
655 {
|
|
656 xtra_left_right = 10;
|
|
657 xtra_top_bottom = 10;
|
|
658 }
|
|
659 else
|
|
660 {
|
|
661 xtra_left_right = 10;
|
|
662 xtra_top_bottom = 0;
|
|
663 }
|
|
664
|
|
665 x0 -= xtra_left_right;
|
|
666 x1 += xtra_left_right;
|
|
667 y0 -= xtra_top_bottom;
|
|
668 y1 += xtra_top_bottom;
|
|
669
|
|
670 GFX_SetWindowLayer0(tIcursor.FBStartAdress, x0, x1, y0, y1);
|
|
671 }
|
|
672
|
|
673
|
|
674 void tInfo_write_label_var(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text)
|
|
675 {
|
|
676 GFX_DrawCfgWindow hgfx;
|
|
677
|
|
678 if(XrightGimpStyle > 799)
|
|
679 XrightGimpStyle = 799;
|
|
680 if(XleftGimpStyle >= XrightGimpStyle)
|
|
681 XleftGimpStyle = 0;
|
|
682 if(YtopGimpStyle > 479)
|
|
683 YtopGimpStyle = 479;
|
|
684 hgfx.Image = &tIscreen;
|
|
685 hgfx.WindowNumberOfTextLines = 1;
|
|
686 hgfx.WindowLineSpacing = 0;
|
|
687 hgfx.WindowTab = 0;
|
|
688 hgfx.WindowX0 = XleftGimpStyle;
|
|
689 hgfx.WindowX1 = XrightGimpStyle;
|
|
690 hgfx.WindowY1 = 479 - YtopGimpStyle;
|
|
691 if(hgfx.WindowY1 < Font->height)
|
|
692 hgfx.WindowY0 = 0;
|
|
693 else
|
|
694 hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
|
|
695
|
|
696 GFX_write_label(Font, &hgfx, text, infoColor);
|
|
697 }
|
|
698
|
|
699
|
|
700 void tInfo_write_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color)
|
|
701 {
|
|
702 GFX_DrawCfgWindow hgfx;
|
|
703
|
|
704 if(XrightGimpStyle > 799)
|
|
705 XrightGimpStyle = 799;
|
|
706 if(XleftGimpStyle >= XrightGimpStyle)
|
|
707 XleftGimpStyle = 0;
|
|
708 if(YtopGimpStyle > 479)
|
|
709 YtopGimpStyle = 479;
|
|
710 hgfx.Image = &tIscreen;
|
|
711 hgfx.WindowNumberOfTextLines = 1;
|
|
712 hgfx.WindowLineSpacing = 0;
|
|
713 hgfx.WindowTab = 0;
|
|
714 hgfx.WindowX0 = XleftGimpStyle;
|
|
715 hgfx.WindowX1 = XrightGimpStyle;
|
|
716 hgfx.WindowY1 = 479 - YtopGimpStyle;
|
|
717 if(hgfx.WindowY1 < Font->height)
|
|
718 hgfx.WindowY0 = 0;
|
|
719 else
|
|
720 hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
|
|
721
|
|
722 GFX_write_label(Font, &hgfx, text, color);
|
|
723 }
|
|
724
|
|
725
|
|
726 void tInfo_write_label_fix(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char textId)
|
|
727 {
|
|
728 char text[2];
|
|
729
|
|
730 text[0] = textId;
|
|
731 text[1] = 0;
|
|
732
|
|
733 tInfo_write_label_var(XleftGimpStyle, XrightGimpStyle, YtopGimpStyle, Font, text);
|
|
734 }
|
|
735
|
|
736
|
|
737 void tI_clean_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font)
|
|
738 {
|
|
739 GFX_DrawCfgWindow hgfx;
|
|
740
|
|
741 if(XrightGimpStyle > 799)
|
|
742 XrightGimpStyle = 799;
|
|
743 if(XleftGimpStyle >= XrightGimpStyle)
|
|
744 XleftGimpStyle = 0;
|
|
745 if(YtopGimpStyle > 479)
|
|
746 YtopGimpStyle = 479;
|
|
747 hgfx.Image = &tIscreen;
|
|
748 hgfx.WindowX0 = XleftGimpStyle;
|
|
749 hgfx.WindowX1 = XrightGimpStyle;
|
|
750 hgfx.WindowY1 = 479 - YtopGimpStyle;
|
|
751 if(hgfx.WindowY1 < Font->height)
|
|
752 hgfx.WindowY0 = 0;
|
|
753 else
|
|
754 hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
|
|
755
|
|
756 GFX_clear_window_immediately(&hgfx);
|
|
757 }
|
|
758
|
|
759
|
|
760 void tInfo_write_buttonTextline(GFX_DrawCfgScreen *screenPtr, uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode)
|
|
761 {
|
|
762 GFX_clean_area(&tIscreen, 0, 800, 480-24,480);
|
|
763
|
|
764 char localtext[32];
|
|
765
|
|
766 if(left2ByteCode)
|
|
767 {
|
|
768 localtext[0] = TXT_2BYTE;
|
|
769 localtext[1] = left2ByteCode;
|
|
770 localtext[2] = 0;
|
|
771 write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
|
|
772 }
|
|
773
|
|
774 if(middle2ByteCode)
|
|
775 {
|
|
776 localtext[0] = '\001';
|
|
777 localtext[1] = TXT_2BYTE;
|
|
778 localtext[2] = middle2ByteCode;
|
|
779 localtext[3] = 0;
|
|
780 write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
|
|
781 }
|
|
782
|
|
783 if(right2ByteCode)
|
|
784 {
|
|
785 localtext[0] = '\002';
|
|
786 localtext[1] = TXT_2BYTE;
|
|
787 localtext[2] = right2ByteCode;
|
|
788 localtext[3] = 0;
|
|
789 write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
|
|
790 }
|
|
791 }
|