FLAT SKIN (Sample)

From SEGGER Knowledge Base [STAGING]
Jump to navigation Jump to search
FLAT_SKIN_Demo.c
File(s) required
  • FLAT_SKIN_Demo.c
Runs in simulation Yes
Runs on target Yes
Download FLAT_SKIN_Demo.c

An interactive demo showing the new FLAT skin in all supported widgets.

Demo

Code

/*********************************************************************
*                    SEGGER Microcontroller GmbH                     *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 1996 - 2020  SEGGER Microcontroller GmbH                *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

** emWin V7.0.0 - Graphical user interface for embedded applications **
emWin is protected by international copyright laws.   Knowledge of the
source code may not be used to write a similar product.  This file may
only  be used  in accordance  with  a license  and should  not be  re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : FLAT_SKIN_Demo.c
Purpose     : An animated demonstration showing the appearance of the
              widgets using the FLAT_SKIN theme.
Requirements: WindowManager - (x)
              MemoryDevices - ( )
              AntiAliasing  - (x)
              VNC-Server    - ( )
              PNG-Library   - ( )
              TrueTypeFonts - ( )
---------------------------END-OF-HEADER------------------------------
*/

#include "FLAT_SKIN.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define CREATE_DEMO 0
#define CLOSE_DEMO  1

#define PERIOD_IN  300
#define PERIOD_OUT 300

#define DO_PID   0
#define DO_KEY   1
#define DO_DELAY 2

#define APP_ANIMATION_END (WM_USER + 0)
#define APP_REMEMBER_HWIN (WM_USER + 1)
#define APP_BUTTON_COLSET (WM_USER + 2)

/*********************************************************************
*
*       Types
*
**********************************************************************
*/
typedef struct {
  U8 Cmd;
  U16 Id;
  int d0, d1, d2;
  U32 Period;
} ANIM_ITEM;

typedef struct {
  const ANIM_ITEM * pData;
  unsigned NumItems;
  unsigned CurrentItem;
  WM_HWIN hWin;
  GUI_TIMER_HANDLE hTimer;
  GUI_ANIM_HANDLE hAnim;
} ANIM_CONTEXT;

typedef struct {
  const char * pName;
  void (* pFuncCreate)(WM_HWIN hWin);
  ANIM_CONTEXT * pContext;
} DEMO_ITEM;

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
/*********************************************************************
*
*       BUTTON image: _bmArrowDown_24x16_b
*/
static GUI_CONST_STORAGE unsigned char _acArrowDown_24x16_b[] = {
  0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB,
  0x0F, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x0F,
  0x00, 0x33, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x33, 0x00,
  0x00, 0x00, 0x6E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00,
  0x00, 0x00, 0x00, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x0F, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x0F, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x33, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x33, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDE, 0xFF, 0xFF, 0xDE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF7, 0xF7, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static GUI_CONST_STORAGE GUI_BITMAP _bmArrowDown_24x16_b = {
  24, // xSize
  16, // ySize
  24, // BytesPerLine
  8, // BitsPerPixel
  (const unsigned char *)_acArrowDown_24x16_b,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_A8
};

/*********************************************************************
*
*       BUTTON image: _bmArrowRight_16x24_b
*/
static GUI_CONST_STORAGE unsigned char _acArrowRight_16x24_b[] = {
  0xAB, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xDE, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xF7, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x6E, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x0F, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x33, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x6E,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x6E,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x33, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x0F, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x6E, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xF7, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xDE, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xAB, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static GUI_CONST_STORAGE GUI_BITMAP _bmArrowRight_16x24_b = {
  16, // xSize
  24, // ySize
  16, // BytesPerLine
  8, // BitsPerPixel
  (const unsigned char *)_acArrowRight_16x24_b,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_A8
};

/*********************************************************************
*
*       BUTTON image: _bmArrowUp_24x16_b
*/
static GUI_CONST_STORAGE unsigned char _acArrowUp_24x16_b[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF7, 0xF7, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDE, 0xFF, 0xFF, 0xDE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x33, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x33, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x0F, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x0F, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x6E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00,
  0x00, 0x33, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x33, 0x00,
  0x0F, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x0F,
  0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB
};

static GUI_CONST_STORAGE GUI_BITMAP _bmArrowUp_24x16_b = {
  24, // xSize
  16, // ySize
  24, // BytesPerLine
  8, // BitsPerPixel
  (const unsigned char *)_acArrowUp_24x16_b,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_A8
};

/*********************************************************************
*
*       BUTTON image: _bmPen_32x32_b
*/
static GUI_CONST_STORAGE unsigned char _acPen_32x32_b[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xBF, 0xFF, 0x8F, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0x9F, 0x00, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x9F, 0xFF, 0xFF, 0xFF, 0xCF, 0x10,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x9F, 0xFF, 0xCF, 0x10, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x80, 0x10, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x10, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x30, 0x30, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x20, 0xEF, 0x30, 0x30, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x40, 0xFF, 0xEF, 0x30, 0x30, 0xEF, 0xFF, 0xFF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x80, 0xFF, 0xFF, 0xEF, 0x30, 0x30, 0xEF, 0xFF, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x9F, 0xFF, 0xFF, 0xFF, 0xEF, 0x30, 0x30, 0xBF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xBF, 0x9F, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static GUI_CONST_STORAGE GUI_BITMAP _bmPen_32x32_b = {
  32, // xSize
  32, // ySize
  32, // BytesPerLine
  8, // BitsPerPixel
  (const unsigned char *)_acPen_32x32_b,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_A8
};

/*********************************************************************
*
*       BUTTON image: _bmZoomMinus_32x32_b
*/
static GUI_CONST_STORAGE unsigned char _acZoomMinus_32x32_b[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x8B, 0xC5, 0xEC, 0xFF, 0xFF, 0xED, 0xC5, 0x8C, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x65, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0x67, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xCE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x46, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x47, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xA6, 0x53, 0x23, 0x00, 0x00, 0x22, 0x52, 0xA4, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x28, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x01, 0xCE, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xFE, 0xFF, 0xFF, 0xFF, 0xD1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x65, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0xDC, 0xFF, 0xFF, 0xFF, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x43, 0xFF, 0xFF, 0xFF, 0xF8, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xF6, 0xFF, 0xFF, 0xFF, 0x47, 0x00, 0x00, 0x00, 0x00,
  0x8B, 0xFF, 0xFF, 0xFF, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
  0xC5, 0xFF, 0xFF, 0xFF, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0xFF, 0xFF, 0xFF, 0xC9, 0x00, 0x00, 0x00, 0x00,
  0xEC, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1D, 0xFF, 0xFF, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
  0xED, 0xFF, 0xFF, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1C, 0xFF, 0xFF, 0xFF, 0xF2, 0x00, 0x00, 0x00, 0x00,
  0xC5, 0xFF, 0xFF, 0xFF, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xFF, 0xFF, 0xFF, 0xC8, 0x00, 0x00, 0x00, 0x00,
  0x8C, 0xFF, 0xFF, 0xFF, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
  0x45, 0xFF, 0xFF, 0xFF, 0xF7, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xF6, 0xFF, 0xFF, 0xFF, 0x47, 0x00, 0x00, 0x00, 0x00,
  0x00, 0xDD, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x67, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x02, 0xD0, 0xFF, 0xFF, 0xFF, 0xFE, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xFD, 0xFF, 0xFF, 0xFF, 0xD1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x2B, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xA9, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xA6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x4B, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xA1, 0x4F, 0x1D, 0x00, 0x00, 0x1C, 0x4E, 0x9F, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x4C, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x69, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x68, 0x03, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x90, 0xC9, 0xF3, 0xFF, 0xFF, 0xF2, 0xC8, 0x8F, 0x47, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xC6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0xBC, 0xFF, 0xC6, 0x21
};

static GUI_CONST_STORAGE GUI_BITMAP _bmZoomMinus_32x32_b = {
  32, // xSize
  32, // ySize
  32, // BytesPerLine
  8, // BitsPerPixel
  (const unsigned char *)_acZoomMinus_32x32_b,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_A8
};

/*********************************************************************
*
*       BUTTON image: _bmZoomPlus_32x32_b
*/
static GUI_CONST_STORAGE unsigned char _acZoomPlus_32x32_b[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x8B, 0xC5, 0xEC, 0xFF, 0xFF, 0xED, 0xC5, 0x8C, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x65, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0x67, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xCE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x46, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x47, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xA6, 0x53, 0x23, 0x00, 0x00, 0x22, 0x52, 0xA4, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x28, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x01, 0xCE, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xFE, 0xFF, 0xFF, 0xFF, 0xD1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x65, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0xDC, 0xFF, 0xFF, 0xFF, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x43, 0xFF, 0xFF, 0xFF, 0xF8, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xF6, 0xFF, 0xFF, 0xFF, 0x47, 0x00, 0x00, 0x00, 0x00,
  0x8B, 0xFF, 0xFF, 0xFF, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
  0xC4, 0xFF, 0xFF, 0xFF, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0xFF, 0xFF, 0xFF, 0xC9, 0x00, 0x00, 0x00, 0x00,
  0xEC, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1D, 0xFF, 0xFF, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
  0xED, 0xFF, 0xFF, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1C, 0xFF, 0xFF, 0xFF, 0xF1, 0x00, 0x00, 0x00, 0x00,
  0xC5, 0xFF, 0xFF, 0xFF, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xFF, 0xFF, 0xFF, 0xC8, 0x00, 0x00, 0x00, 0x00,
  0x8C, 0xFF, 0xFF, 0xFF, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
  0x45, 0xFF, 0xFF, 0xFF, 0xF7, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xF6, 0xFF, 0xFF, 0xFF, 0x47, 0x00, 0x00, 0x00, 0x00,
  0x00, 0xDD, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x67, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x02, 0xD0, 0xFF, 0xFF, 0xFF, 0xFE, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0xFD, 0xFF, 0xFF, 0xFF, 0xD0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x2B, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xA9, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xA6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x4B, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xF6, 0xA1, 0x4F, 0x1D, 0x00, 0x00, 0x1C, 0x4E, 0x9F, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x4C, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x69, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x68, 0x03, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x8F, 0xC9, 0xF3, 0xFF, 0xFF, 0xF2, 0xC8, 0x8F, 0x47, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1E,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBC,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0xFF, 0xFF, 0xFF, 0xC6,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0xBC, 0xFF, 0xC5, 0x21
};

static GUI_CONST_STORAGE GUI_BITMAP _bmZoomPlus_32x32_b = {
  32, // xSize
  32, // ySize
  32, // BytesPerLine
  8, // BitsPerPixel
  (const unsigned char *)_acZoomPlus_32x32_b,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_A8
};

/*********************************************************************
*
*       Animation data: COLSET demo
*/
static const ANIM_ITEM _aData_COLSET[] = {
  { DO_DELAY, 0x1234, 0, 0, 0, 6000 },
  { DO_DELAY, 0x1234, 0, 0, 0,  500 },
};

static ANIM_CONTEXT _Anim_COLSET = { _aData_COLSET,  GUI_COUNTOF(_aData_COLSET) };

/*********************************************************************
*
*       Animation data: BUTTON demo
*/
static const ANIM_ITEM _aData_BUTTON[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,       500 },
  { DO_PID, GUI_ID_BUTTON0, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_BUTTON0, 5, 5, 0, 300 },
  { DO_PID, GUI_ID_BUTTON3, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_BUTTON3, 5, 5, 0, 300 },
  { DO_PID, GUI_ID_BUTTON1, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_BUTTON1, 5, 5, 0, 300 },
  { DO_PID, GUI_ID_BUTTON4, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_BUTTON4, 5, 5, 0, 300 },
  { DO_PID, GUI_ID_BUTTON2, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_BUTTON2, 5, 5, 0, 300 },
  { DO_PID, GUI_ID_BUTTON5, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_BUTTON5, 5, 5, 0, 300 },
  { DO_PID, GUI_ID_BUTTON0, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_BUTTON0, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_BUTTON3, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_BUTTON3, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_BUTTON1, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_BUTTON1, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_BUTTON4, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_BUTTON4, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_BUTTON2, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_BUTTON2, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_BUTTON5, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_BUTTON5, 5, 5, 0, 100 },
};

static ANIM_CONTEXT _Anim_BUTTON = { _aData_BUTTON,  GUI_COUNTOF(_aData_BUTTON) };

/*********************************************************************
*
*       Animation data: CHECKBOX demo
*/
static const ANIM_ITEM _aData_CHECKBOX[] = {
  { DO_PID, GUI_ID_CHECK0, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK0, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK1, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK2, 5, 5, 0, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 1, 100 },
  { DO_PID, GUI_ID_CHECK3, 5, 5, 0, 100 },
};

static ANIM_CONTEXT _Anim_CHECKBOX = { _aData_CHECKBOX,  GUI_COUNTOF(_aData_CHECKBOX) };

/*********************************************************************
*
*       Animation data: DROPDOWN demo
*/
static const ANIM_ITEM _aData_DROPDOWN[] = {
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            1, 500 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            1, 500 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            0, 300 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            1, 500 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_DOWN, 1, 0, 300 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_KEY, GUI_ID_DROPDOWN0, GUI_KEY_UP,   1, 0, 200 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            1, 500 },
  { DO_PID, GUI_ID_DROPDOWN0, 5, 5,            0, 300 },
};

static ANIM_CONTEXT _Anim_DROPDOWN = { _aData_DROPDOWN,  GUI_COUNTOF(_aData_DROPDOWN) };

/*********************************************************************
*
*       Animation data: EDIT demo
*/
static const ANIM_ITEM _aData_EDIT[] = {
  { DO_DELAY, GUI_ID_EDIT0, 0, 0, 0,                500 },
  { DO_PID, GUI_ID_EDIT0, 5, 5,                 1,  500 },
  { DO_PID, GUI_ID_EDIT0, 5, 5,                 0,  500 },
  { DO_KEY, GUI_ID_EDIT0, 'I',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, ' ',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'a',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'm',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, ' ',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'a',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'n',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, ' ',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'E',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'D',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'I',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'T',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, ' ',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'w',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'i',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'd',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'g',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 'e',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, 't',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, '.',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, '.',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, '.',               1, 0,  300 },
  { DO_KEY, GUI_ID_EDIT0, '.',               1, 0, 1000 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
  { DO_KEY, GUI_ID_EDIT0, GUI_KEY_BACKSPACE, 1, 0,  100 },
};

static ANIM_CONTEXT _Anim_EDIT = { _aData_EDIT,  GUI_COUNTOF(_aData_EDIT) };

/*********************************************************************
*
*       Animation data: FRAMEWIN demo
*/
static const ANIM_ITEM _aData_FRAMEWIN[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,           500 },
  { DO_PID, GUI_ID_MAXIMIZE, 5, 5,    1, 300 },
  { DO_PID, GUI_ID_MAXIMIZE, 5, 5,    0, 300 },
  { DO_DELAY, 0x1234, 0, 0, 0,           500 },
  { DO_PID, GUI_ID_MAXIMIZE, 5, 5,    1, 300 },
  { DO_PID, GUI_ID_MAXIMIZE, 5, 5,    0, 300 },
  { DO_DELAY, 0x1234, 0, 0, 0,           500 },
  { DO_PID, GUI_ID_MINIMIZE, 5, 5,    1, 300 },
  { DO_PID, GUI_ID_MINIMIZE, 5, 5,    0, 300 },
  { DO_DELAY, 0x1234, 0, 0, 0,           500 },
  { DO_PID, GUI_ID_MINIMIZE, 5, 5,    1, 300 },
  { DO_PID, GUI_ID_MINIMIZE, 5, 5,    0, 300 },
  { DO_DELAY, 0x1234, 0, 0, 0,           500 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -55, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50,  8, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -52, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -55, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 12, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -48, 10, 1,  30 },
  { DO_PID, GUI_ID_MINIMIZE, -50, 10, 0,  30 },
};

static ANIM_CONTEXT _Anim_FRAMEWIN = { _aData_FRAMEWIN,  GUI_COUNTOF(_aData_FRAMEWIN) };

/*********************************************************************
*
*       Animation data: LISTBOX demo
*/
static const ANIM_ITEM _aData_LISTBOX[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,            500 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 50,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 40,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 30,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 20,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 10,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 10,    0,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  50 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    0,  50 },
  { DO_DELAY, 0x1234, 0, 0, 0,            500 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 50,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 40,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 30,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 20,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 10,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 10,    0,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  50 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    0,  50 },
  { DO_DELAY, 0x1234, 0, 0, 0,            500 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 40,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 50,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 70,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 80,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 90,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 90,    0,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  50 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    0,  50 },
  { DO_DELAY, 0x1234, 0, 0, 0,            500 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 40,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 50,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 70,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 80,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 90,    1,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 90,    0,  25 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    1,  50 },
  { DO_PID, GUI_ID_LISTBOX0, 5, 60,    0,  50 },
  { DO_DELAY, 0x1234, 0, 0, 0,            500 },
};

static ANIM_CONTEXT _Anim_LISTBOX = { _aData_LISTBOX,  GUI_COUNTOF(_aData_LISTBOX) };

/*********************************************************************
*
*       Animation data: LISTVIEW demo
*/
static const ANIM_ITEM _aData_LISTVIEW[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,                500 },
  { DO_PID, GUI_ID_LISTVIEW0,  95,  95,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  90,  90,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  85,  85,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  80,  80,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  75,  75,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  70,  70,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  65,  65,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  60,  60,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  55,  55,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  50,  50,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  45,  45,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  40,  40,    1,  30 },
  { DO_DELAY, 0x1234, 0, 0, 0,                500 },
  { DO_PID, GUI_ID_LISTVIEW0,  40,  40,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  45,  45,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  50,  50,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  55,  55,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  60,  60,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  65,  65,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  70,  70,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  75,  75,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  80,  80,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  85,  85,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  90,  90,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  95,  95,    1,  30 },
  { DO_PID, GUI_ID_LISTVIEW0,  95,  95,    0,  30 },
  { DO_PID, GUI_ID_LISTVIEW0, 120,  80,    1, 200 },
  { DO_PID, GUI_ID_LISTVIEW0, 120,  80,    0, 200 },
  { DO_DELAY, 0x1234, 0, 0, 0,                500 },
  { DO_PID, GUI_ID_LISTVIEW0, 120,  10,    1, 200 },
  { DO_PID, GUI_ID_LISTVIEW0, 120,  10,    0, 200 },
  { DO_DELAY, 0x1234, 0, 0, 0,                500 },
  { DO_PID, GUI_ID_LISTVIEW0, 120,  10,    1, 200 },
  { DO_PID, GUI_ID_LISTVIEW0, 120,  10,    0, 200 },
  { DO_DELAY, 0x1234, 0, 0, 0,                500 },
};

static ANIM_CONTEXT _Anim_LISTVIEW = { _aData_LISTVIEW,  GUI_COUNTOF(_aData_LISTVIEW) };

/*********************************************************************
*
*       Animation data: MULTIEDIT demo
*/
static const ANIM_ITEM _aData_MULTIEDIT[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,                          500 },
  { DO_PID, GUI_ID_MULTIEDIT0, 10, 10, 1,               100 },
  { DO_PID, GUI_ID_MULTIEDIT0, 10, 10, 0,               100 },
  { DO_KEY, GUI_ID_MULTIEDIT0, 'Y',               1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, 'e',               1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, 's',               1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, ',',               1, 0, 500 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_ENTER,     1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_RIGHT,     1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_RIGHT,     1, 0, 500 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_ENTER,     1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_RIGHT,     1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_RIGHT,     1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_RIGHT,     1, 0, 500 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_ENTER,     1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_END,       1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, '!',               1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, '!',               1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, '!',               1, 0, 800 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, '.',               1, 0, 800 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_HOME,      1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 500 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_HOME,      1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 500 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_HOME,      1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 500 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_KEY, GUI_ID_MULTIEDIT0, GUI_KEY_BACKSPACE, 1, 0, 300 },
  { DO_DELAY, 0x1234, 0, 0, 0,                          500 },
};

static ANIM_CONTEXT _Anim_MULTIEDIT = { _aData_MULTIEDIT,  GUI_COUNTOF(_aData_MULTIEDIT) };

/*********************************************************************
*
*       Animation data: PROGBAR demo
*/
static const ANIM_ITEM _aData_PROGBAR[] = {
  { DO_DELAY, 0x1234, 0, 0, 0, 6000 },
  { DO_DELAY, 0x1234, 0, 0, 0,  500 },
};

static ANIM_CONTEXT _Anim_PROGBAR = { _aData_PROGBAR,  GUI_COUNTOF(_aData_PROGBAR) };

/*********************************************************************
*
*       Animation data: RADIO demo
*/
static const ANIM_ITEM _aData_RADIO[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,                 500 },
  { DO_PID, GUI_ID_RADIO0, 5,   5, 1,          200 },
  { DO_PID, GUI_ID_RADIO0, 5,   5, 0,          200 },
  { DO_KEY, GUI_ID_RADIO0, GUI_KEY_DOWN, 1, 0, 500 },
  { DO_KEY, GUI_ID_RADIO0, GUI_KEY_DOWN, 1, 0, 500 },
  { DO_KEY, GUI_ID_RADIO0, GUI_KEY_DOWN, 1, 0, 500 },
  { DO_KEY, GUI_ID_RADIO0, GUI_KEY_DOWN, 1, 0, 500 },
  { DO_PID, GUI_ID_RADIO0, 5,  36, 1,          250 },
  { DO_PID, GUI_ID_RADIO0, 5,  36, 0,          250 },
  { DO_PID, GUI_ID_RADIO0, 5, 108, 1,          250 },
  { DO_PID, GUI_ID_RADIO0, 5, 108, 0,          250 },
  { DO_PID, GUI_ID_RADIO0, 5,  72, 1,          250 },
  { DO_PID, GUI_ID_RADIO0, 5,  72, 0,          250 },
};

static ANIM_CONTEXT _Anim_RADIO = { _aData_RADIO,  GUI_COUNTOF(_aData_RADIO) };

/*********************************************************************
*
*       Animation data: SLIDER demo
*/
static const ANIM_ITEM _aData_SLIDER[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,                 500 },
  { DO_PID, GUI_ID_SLIDER0,  16, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0,  48, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0,  80, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 112, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 144, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 176, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 208, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 208, 15, 0,        300 },
  { DO_DELAY, 0x1234, 0, 0, 0,                 500 },
  { DO_PID, GUI_ID_SLIDER0, 208, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 176, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 144, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0, 112, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0,  80, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0,  48, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0,  16, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER0,  16, 15, 0,        300 },
  { DO_DELAY, 0x1234, 0, 0, 0,                 500 },
  { DO_PID, GUI_ID_SLIDER1,  16, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER1,  24, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  32, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  40, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  48, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  56, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  64, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  72, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  80, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  88, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  96, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 104, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 112, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 120, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 128, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 136, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 144, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 152, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 160, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 168, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 176, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 184, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 192, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 200, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 208, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 208, 15, 0,         30 },
  { DO_DELAY, 0x1234, 0, 0, 0,                 500 },
  { DO_PID, GUI_ID_SLIDER1, 208, 15, 1,        300 },
  { DO_PID, GUI_ID_SLIDER1, 200, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 192, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 184, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 176, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 168, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 160, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 152, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 144, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 136, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 128, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 120, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 112, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1, 104, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  96, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  88, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  80, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  72, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  64, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  56, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  48, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  40, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  32, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  24, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  16, 15, 1,         30 },
  { DO_PID, GUI_ID_SLIDER1,  16, 15, 0,         30 },
};

static ANIM_CONTEXT _Anim_SLIDER = { _aData_SLIDER,  GUI_COUNTOF(_aData_SLIDER) };

/*********************************************************************
*
*       Animation data: SWITCH demo
*/
static const ANIM_ITEM _aData_SWITCH[] = {
  { DO_DELAY, 0x1234, 0, 0, 0,       500 },
  { DO_PID, GUI_ID_SWITCH0, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_SWITCH0, 5, 5, 0, 100 },
  { DO_DELAY, 0x1234, 0, 0, 0,       200 },
  { DO_PID, GUI_ID_SWITCH1, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_SWITCH1, 5, 5, 0, 100 },
  { DO_DELAY, 0x1234, 0, 0, 0,       200 },
  { DO_PID, GUI_ID_SWITCH2, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_SWITCH2, 5, 5, 0, 100 },
  { DO_DELAY, 0x1234, 0, 0, 0,       200 },
  { DO_PID, GUI_ID_SWITCH0, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_SWITCH0, 5, 5, 0, 100 },
  { DO_DELAY, 0x1234, 0, 0, 0,       200 },
  { DO_PID, GUI_ID_SWITCH1, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_SWITCH1, 5, 5, 0, 100 },
  { DO_DELAY, 0x1234, 0, 0, 0,       200 },
  { DO_PID, GUI_ID_SWITCH2, 5, 5, 1, 300 },
  { DO_PID, GUI_ID_SWITCH2, 5, 5, 0, 100 },
  { DO_DELAY, 0x1234, 0, 0, 0,       500 },
};

static ANIM_CONTEXT _Anim_SWITCH = { _aData_SWITCH,  GUI_COUNTOF(_aData_SWITCH) };

//
// Arrow polygon
//
static const GUI_POINT _aPointArrow[] = {
  {   0,   0},
  {  50, -50},
  {  50, -20},
  { 100, -20},
  { 100,  20},
  {  50,  20},
  {  50,  50},
};

static GUI_TIMER_HANDLE _hTimerInput;

static int _InputExpected;
static int _TriggerTimer;

static void (* _pPaintHook)(WM_HWIN hWin);

static const GUI_COLOR * _apColors_COLSET[] = {
  FLAT_SKIN_COLORS_DEFAULT,
  FLAT_SKIN_COLORS_NIGHT,
  FLAT_SKIN_COLORS_DAY,
};

static const char * _apNames_COLSET[] = {
  "Default",
  "Night",
  "Day",
};

static GUI_COLOR _aColors_COLSET[9];

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _cbTimerInput
*/
void _cbTimerInput(GUI_TIMER_MESSAGE * pTM) {
  GUI_TIMER_Delete(pTM->hTimer);
  _hTimerInput = 0;
}

/*********************************************************************
*
*       _CreateInputTimer
*/
static void _CreateInputTimer(void) {
  _hTimerInput = GUI_TIMER_Create(_cbTimerInput, GUI_GetTime() + 3500, 0, 0);
  GUI_TIMER_SetPeriod(_hTimerInput, 3500);
}

/*********************************************************************
*
*       _PID_Hook
*/
static void _PID_Hook(GUI_PID_STATE * pState) {
  //
  // Detect 'real' input from keyboard
  //
  if (_InputExpected == 0) {
    if (pState) {
      if (pState->Pressed) {
        _TriggerTimer = 1;  // Timer is triggered in superloop
      }
    }
  }
  _InputExpected = 0;
}

/*********************************************************************
*
*       _cbTimerAnim
*/
void _cbTimerAnim(GUI_TIMER_MESSAGE * pTM) {
  ANIM_CONTEXT * pContext;
  GUI_PID_STATE State;
  const ANIM_ITEM * pItem;
  WM_HWIN hWin;

  pContext = (ANIM_CONTEXT *)pTM->Context;
  if (_hTimerInput == 0) {
    pItem = &pContext->pData[pContext->CurrentItem];
    switch (pItem->Cmd) {
    case DO_PID:
      hWin = WM_GetDialogItem(pContext->hWin, pItem->Id);
      State.x = WM_GetWindowOrgX(hWin) + pItem->d0;
      State.y = WM_GetWindowOrgY(hWin) + pItem->d1;
      State.Pressed = pItem->d2;
      State.Layer = 0;
      _InputExpected = 1;  // Input comes from animation
      GUI_PID_StoreState(&State);
      break;
    case DO_KEY:
      GUI_StoreKeyMsg(pItem->d0, 1);
      if (pItem->d1) {
        GUI_StoreKeyMsg(pItem->d0, 0);
      }
      break;
    case DO_DELAY:
      break;
    }
    GUI_TIMER_SetPeriod(pTM->hTimer, pItem->Period);
    GUI_TIMER_Restart(pTM->hTimer);
    pContext->CurrentItem++;
    if (pContext->CurrentItem == pContext->NumItems) {
      WM_SendMessageNoPara(pContext->hWin, APP_ANIMATION_END);
    }
  } else {
    GUI_TIMER_SetPeriod(pTM->hTimer, 3500);
    GUI_TIMER_Restart(pTM->hTimer);
  }
}

/*********************************************************************
*
*       _cbWinDemo
*/
static void _cbWinDemo(WM_MESSAGE * pMsg) {
  int Id, NCode, Sel;

  switch (pMsg->MsgId) {
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);    // Id of widget
    NCode = pMsg->Data.v;               // Notification code
    switch (Id) {
    case APP_BUTTON_COLSET + 0:
    case APP_BUTTON_COLSET + 1:
    case APP_BUTTON_COLSET + 2:
      if (NCode == WM_NOTIFICATION_RELEASED) {
        Sel = Id - APP_BUTTON_COLSET;
        FLAT_SKIN_SetColors(_apColors_COLSET[Sel]);
        FRAMEWIN_SetDefaultClientColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_DIALOG));
        WM_SendMessageNoPara(WM_GetParent(pMsg->hWin), APP_ANIMATION_END);
      }
      break;
    }
    break;
  case WM_PAINT:
    if (_pPaintHook) {
      _pPaintHook(pMsg->hWin);
    } else {
      GUI_SetBkColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_DIALOG));
      GUI_Clear();
    }
    break;
  case APP_ANIMATION_END:
    WM_SendMessageNoPara(WM_GetParent(pMsg->hWin), APP_ANIMATION_END);
    break;
  }
}

/*********************************************************************
*
*       _AnimIn
*/
void _AnimIn(GUI_ANIM_INFO * pInfo, void * pVoid) {
  ANIM_CONTEXT * pContext;
  int xSizeDisplay, xPos;

  pContext = (ANIM_CONTEXT *)pVoid;
  xSizeDisplay = LCD_GetXSizeDisplay();
  xPos = xSizeDisplay - (((xSizeDisplay / 3) * 2) * pInfo->Pos) / GUI_ANIM_RANGE;
  WM_MoveTo(pContext->hWin, xPos, 0);
}

/*********************************************************************
*
*       _AnimOut
*/
void _AnimOut(GUI_ANIM_INFO * pInfo, void * pVoid) {
  ANIM_CONTEXT * pContext;
  int xSizeDisplay, xPos;

  pContext = (ANIM_CONTEXT *)pVoid;
  xSizeDisplay = LCD_GetXSizeDisplay();
  xPos = xSizeDisplay / 3 + (((xSizeDisplay / 3) * 2) * pInfo->Pos) / GUI_ANIM_RANGE;
  WM_MoveTo(pContext->hWin, xPos, 0);
}

/*********************************************************************
*
*       _AnimOnDeleteIn
*/
void _AnimOnDeleteIn(void * pVoid) {
  ANIM_CONTEXT * pContext;

  pContext = (ANIM_CONTEXT *)pVoid;
  pContext->CurrentItem = 0;
  pContext->hTimer = GUI_TIMER_Create(_cbTimerAnim, 0, (PTR_ADDR)pContext, 0);
  pContext->hAnim = 0;
}

/*********************************************************************
*
*       _AnimOnDeleteOut
*/
void _AnimOnDeleteOut(void * pVoid) {
  ANIM_CONTEXT * pContext;

  pContext = (ANIM_CONTEXT *)pVoid;
  if (pContext->hWin) {
    WM_DeleteWindow(pContext->hWin);
    pContext->hWin = 0;
  }
  pContext->hAnim = 0;
}

/*********************************************************************
*
*       _CreateLabel
*/
static void _CreateLabel(WM_HWIN hDemo, const char * p) {
  const GUI_FONT * pFont;
  int xSize, ySize;
  WM_HWIN hWin;

  pFont = FLAT_SKIN_GetFont();
  xSize = WM_GetWindowSizeX(hDemo);
  ySize = GUI_GetYDistOfFont(pFont) + 10;
  hWin = TEXT_CreateUser(0, 0, xSize, ySize, hDemo, WM_CF_SHOW, 0, GUI_ID_TEXT0, p, 0);
  TEXT_SetTextAlign(hWin, GUI_TA_HCENTER | GUI_TA_VCENTER);
  TEXT_SetTextColor(hWin, GUI_MAKE_COLOR(0x0000E000));
  TEXT_SetBkColor(hWin, GUI_GRAY_60);
}

/*********************************************************************
*
*       _PushColors_COLSET
*/
static void _PushColors_COLSET(void) {
  int i;

  for (i = 0; i < FLAT_SKIN_CI__CNT; i++) {
    _aColors_COLSET[i] = FLAT_SKIN_GetColor(i);
  }
}

/*********************************************************************
*
*       _PopColors_COLSET
*/
static void _PopColors_COLSET(void) {
  int i;

  for (i = 0; i < FLAT_SKIN_CI__CNT; i++) {
    FLAT_SKIN_SetColor(i, _aColors_COLSET[i]);
  }
}

/*********************************************************************
*
*       _PaintHook_COLSET
*/
static void _PaintHook_COLSET(WM_HWIN hWin) {
  int xSize, ySize, i, h, yPos;

  yPos = GUI_GetYDistOfFont(FLAT_SKIN_GetFont()) + 10;
  xSize = WM_GetWindowSizeX(hWin);
  ySize = WM_GetWindowSizeY(hWin) - yPos;
  h = ySize / 3 + 1;
  _PushColors_COLSET();
  for (i = 0; i < GUI_COUNTOF(_apColors_COLSET); i++) {
    FLAT_SKIN_SetColors(_apColors_COLSET[i]);
    GUI_SetBkColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_DIALOG));
    GUI_ClearRect(0, yPos, xSize - 1, yPos + h);
    yPos += h;
  }
  _PopColors_COLSET();
}

/*********************************************************************
*
*       _Create_COLSET
*/
static void _Create_COLSET(WM_HWIN hDemo) {
  WM_HWIN hWin;
  int i, j, yPos, ySize, h;

  yPos = GUI_GetYDistOfFont(FLAT_SKIN_GetFont()) + 10;
  ySize = WM_GetWindowSizeY(hDemo) - yPos;
  h = ySize / 3 + 1;
  _CreateLabel(hDemo, "Select color set");
  _PushColors_COLSET();
  for (i = 0; i < GUI_COUNTOF(_apColors_COLSET); i++) {
    FLAT_SKIN_SetColors(_apColors_COLSET[i]);
    hWin = BUTTON_CreateUser(100,  yPos + (h - 45) / 2, 120, 45, hDemo, WM_CF_SHOW, 0, APP_BUTTON_COLSET + i, 0);
    for (j = 0; j < FLAT_SKIN_CI__CNT; j++) {
      FLAT_SKIN_SetWidgetColor(hWin, j, FLAT_SKIN_GetColor(j));
    }
    BUTTON_SetText(hWin, _apNames_COLSET[i]);
    yPos += h;
  }
  _PopColors_COLSET();
  _pPaintHook = _PaintHook_COLSET;
}

/*********************************************************************
*
*       _Create_BUTTON
*/
static void _Create_BUTTON(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "BUTTON");
  hWin = BUTTON_CreateUser(  30,  60, 120, 45, hDemo, WM_CF_SHOW, 0, GUI_ID_BUTTON0, 0);
  BUTTON_SetText(hWin, "Down");
  BUTTON_SetBitmap(hWin, 0, &_bmArrowDown_24x16_b);
  hWin = BUTTON_CreateUser(  30, 130, 120, 45, hDemo, WM_CF_SHOW, 0, GUI_ID_BUTTON1, 0);
  BUTTON_SetText(hWin, "Right");
  BUTTON_SetBitmap(hWin, 0, &_bmArrowRight_16x24_b);
  hWin = BUTTON_CreateUser(  30, 200, 120, 45, hDemo, WM_CF_SHOW, 0, GUI_ID_BUTTON2, 0);
  BUTTON_SetText(hWin, "Up");
  BUTTON_SetBitmap(hWin, 0, &_bmArrowUp_24x16_b);
  hWin = BUTTON_CreateUser( 170,  60, 120, 45, hDemo, WM_CF_SHOW, 0, GUI_ID_BUTTON3, 0);
  BUTTON_SetText(hWin, "Edit");
  BUTTON_SetBitmap(hWin, 0, &_bmPen_32x32_b);
  hWin = BUTTON_CreateUser( 170, 130, 120, 45, hDemo, WM_CF_SHOW, 0, GUI_ID_BUTTON4, 0);
  BUTTON_SetText(hWin, "Shrink");
  BUTTON_SetBitmap(hWin, 0, &_bmZoomMinus_32x32_b);
  hWin = BUTTON_CreateUser( 170, 200, 120, 45, hDemo, WM_CF_SHOW, 0, GUI_ID_BUTTON5, 0);
  BUTTON_SetText(hWin, "Enlarge");
  BUTTON_SetBitmap(hWin, 0, &_bmZoomPlus_32x32_b);
}

/*********************************************************************
*
*       _Create_CHECKBOX
*/
static void _Create_CHECKBOX(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "CHECKBOX");
  hWin = CHECKBOX_CreateUser(95,  90,  30,  30, hDemo, WM_CF_SHOW, 0, GUI_ID_CHECK0,    0);
  CHECKBOX_SetNumStates(hWin, 3);
  CHECKBOX_SetState(hWin, 1);
  hWin = CHECKBOX_CreateUser(155, 90,  50,  50, hDemo, WM_CF_SHOW, 0, GUI_ID_CHECK1,    0);
  CHECKBOX_SetNumStates(hWin, 3);
  CHECKBOX_SetState(hWin, 1);
  hWin = CHECKBOX_CreateUser(95, 160,  50,  50, hDemo, WM_CF_SHOW, 0, GUI_ID_CHECK2,    0);
  CHECKBOX_SetState(hWin, 1);
  hWin = CHECKBOX_CreateUser(175,180,  30,  30, hDemo, WM_CF_SHOW, 0, GUI_ID_CHECK3,    0);
  CHECKBOX_SetState(hWin, 1);
}

/*********************************************************************
*
*       _Create_DROPDOWN
*/
static void _Create_DROPDOWN(WM_HWIN hDemo) {
  WM_HWIN hWin;
  int i;
  char acBuffer[] = "Item xx";

  _CreateLabel(hDemo, "DROPDOWN");
  hWin = DROPDOWN_CreateUser(85, 60, 150, 150, hDemo, WM_CF_SHOW, 0, GUI_ID_DROPDOWN0, 0);
  for (i = 0; i < 20; i++) {
    acBuffer[5] = '0' + i / 10;
    acBuffer[6] = '0' + i % 10;
    DROPDOWN_AddString(hWin, acBuffer);
  }
  DROPDOWN_EnableMotion(hWin, 1);
  SCROLLER_CreateAttached(hWin, SCROLLER_CF_TOUCH | SCROLLER_CF_VERTICAL);
}

/*********************************************************************
*
*       _Create_EDIT
*/
static void _Create_EDIT(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "EDIT");
  hWin = EDIT_CreateUser(75, 125, 170, 30, hDemo, WM_CF_SHOW, 0, GUI_ID_EDIT0, 100, 0);
}

/*********************************************************************
*
*       _Create_FRAMEWIN
*/
static void _Create_FRAMEWIN(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "FRAMEWIN");
  hWin = FRAMEWIN_CreateUser(70, 80, 180, 120, hDemo, WM_CF_SHOW | WM_CF_MOTION_X | WM_CF_MOTION_Y, 0, 0x1234, "Title", NULL, 0);
  WM_SetEnableState(FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0), 0);
  FRAMEWIN_AddMaxButton  (hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  FRAMEWIN_AddMinButton  (hWin, FRAMEWIN_BUTTON_RIGHT, 0);
}

/*********************************************************************
*
*       _Create_LISTBOX
*/
static void _Create_LISTBOX(WM_HWIN hDemo) {
  WM_HWIN hWin;
  int i;
  char acBuffer[] = "Item xx";

  _CreateLabel(hDemo, "LISTBOX");
  hWin = LISTBOX_CreateUser(70, 95, 180, 120, hDemo, WM_CF_SHOW, 0, GUI_ID_LISTBOX0, NULL, 0);
  for (i = 0; i < 20; i++) {
    acBuffer[5] = '0' + i / 10;
    acBuffer[6] = '0' + i % 10;
    LISTBOX_AddString(hWin, acBuffer);
  }
  LISTBOX_EnableMotion(hWin, LISTBOX_CF_MOTION_V);
  SCROLLER_CreateAttached(hWin, SCROLLER_CF_TOUCH | SCROLLER_CF_VERTICAL);
}

/*********************************************************************
*
*       _Create_LISTVIEW
*/
static void _Create_LISTVIEW(WM_HWIN hDemo) {
  WM_HWIN hWin;
  unsigned i, j;
  char acBuffer[] = "Item x/yy";
  char acCol[] = "Col x";

  _CreateLabel(hDemo, "LISTVIEW");
  hWin = LISTVIEW_CreateUser(30, 70, 260, 160, hDemo, WM_CF_SHOW, 0, GUI_ID_LISTVIEW0, 0);
  for (i = 0; i < 4; i++) {
    acCol[4] = '0' + i;
    LISTVIEW_AddColumn(hWin, 90, acCol, GUI_ALIGN_CENTER);
  }
  for (i = 0; i < 20; i++) {
    LISTVIEW_AddRow(hWin, NULL);
    for (j = 0; j < LISTVIEW_GetNumColumns(hWin); j++) {
      acBuffer[5] = '0' + j;
      acBuffer[7] = '0' + i / 10;
      acBuffer[8] = '0' + i % 10;
      LISTVIEW_SetItemText(hWin, j, i, acBuffer);
    }
  }
  SCROLLER_CreateAttached(hWin, SCROLLER_CF_TOUCH | SCROLLER_CF_HORIZONTAL);
  SCROLLER_CreateAttached(hWin, SCROLLER_CF_TOUCH | SCROLLER_CF_VERTICAL);
  LISTVIEW_EnableMotion(hWin, LISTVIEW_CF_MOTION_H | LISTVIEW_CF_MOTION_V);
  LISTVIEW_EnableSort(hWin);
  LISTVIEW_SetCompareFunc(hWin, 1, LISTVIEW_CompareText);
  LISTVIEW_SetSort(hWin, 1, 0);
}

/*********************************************************************
*
*       _Create_MULTIEDIT
*/
static void _Create_MULTIEDIT(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "MULTIEDIT");
  hWin = MULTIEDIT_CreateUser(30, 60, 260, 160, hDemo, WM_CF_SHOW, 0, GUI_ID_MULTIEDIT0, 500, "I am able to edit long texts.", 0);
  MULTIEDIT_SetInsertMode(hWin, 1);
  MULTIEDIT_SetWrapWord(hWin);
}

/*********************************************************************
*
*       _Create_PROGBAR
*/
static void _Create_PROGBAR(WM_HWIN hDemo) {
  WM_HWIN hWin;
  unsigned OldValueCirc, OldValueFlat;

  _CreateLabel(hDemo, "PROGBAR");
  hWin = PROGBAR_CreateUser( 55,  95, 180, 30, hDemo, WM_CF_SHOW, PROGBAR_CF_ENDLESS, GUI_ID_PROGBAR0, 0);
  OldValueCirc = PROGBAR_SetDefaultPeriodCircular(5000);
  hWin = PROGBAR_CreateUser( 55, 145,  50, 50, hDemo, WM_CF_SHOW, PROGBAR_CF_CIRCULAR | PROGBAR_CF_ENDLESS, GUI_ID_PROGBAR1, 0);
  PROGBAR_SetDefaultPeriodCircular(4000);
  hWin = PROGBAR_CreateUser(120, 145,  50, 50, hDemo, WM_CF_SHOW, PROGBAR_CF_CIRCULAR | PROGBAR_CF_ENDLESS, GUI_ID_PROGBAR2, 0);
  PROGBAR_SetDefaultPeriodCircular(3000);
  hWin = PROGBAR_CreateUser(185, 145,  50, 50, hDemo, WM_CF_SHOW, PROGBAR_CF_CIRCULAR | PROGBAR_CF_ENDLESS, GUI_ID_PROGBAR3, 0);
  PROGBAR_SetDefaultPeriodCircular(OldValueCirc);
  OldValueFlat = PROGBAR_SetDefaultPeriodLinear(6000);
  hWin = PROGBAR_CreateUser(255,  95,  20, 95, hDemo, WM_CF_SHOW, PROGBAR_CF_VERTICAL | PROGBAR_CF_ENDLESS, GUI_ID_PROGBAR4, 0);
  PROGBAR_SetDefaultPeriodLinear(OldValueFlat);
}

/*********************************************************************
*
*       _Create_RADIO
*/
static void _Create_RADIO(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "RADIO");
  hWin = RADIO_CreateUser( 100, 65, 120, 180, hDemo, WM_CF_SHOW, 0, GUI_ID_RADIO0, 5, 36, 0);
  RADIO_SetText(hWin, "Option 0", 0);
  RADIO_SetText(hWin, "Option 1", 1);
  RADIO_SetText(hWin, "Option 2", 2);
  RADIO_SetText(hWin, "Option 3", 3);
  RADIO_SetText(hWin, "Option 4", 4);
}

/*********************************************************************
*
*       _Create_SLIDER
*/
static void _Create_SLIDER(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "SLIDER");
  hWin = SLIDER_CreateUser( 50, 110, 220, 30, hDemo, WM_CF_SHOW, 0, GUI_ID_SLIDER0, 0);
  SLIDER_SetRange(hWin, 0, 6);
  SLIDER_SetTicksVis(hWin, 1);
  hWin = SLIDER_CreateUser( 50, 160, 220, 30, hDemo, WM_CF_SHOW, 0, GUI_ID_SLIDER1, 0);
  SLIDER_SetRange(hWin, 0, 255);
}

/*********************************************************************
*
*       _Create_SWITCH
*/
static void _Create_SWITCH(WM_HWIN hDemo) {
  WM_HWIN hWin;

  _CreateLabel(hDemo, "SWITCH");
  hWin = TEXT_CreateUser  (  50,  85, 100, 25, hDemo, WM_CF_SHOW, 0, GUI_ID_TEXT0, "Option 1", 0);
  hWin = SWITCH_CreateUser( 150,  85, 100, 30, hDemo, WM_CF_SHOW, 0, GUI_ID_SWITCH0, 0);
  SWITCH_SetText(hWin, 0, "On");
  SWITCH_SetText(hWin, 1, "Off");
  SWITCH_EnableIcons(hWin, 1);
  hWin = TEXT_CreateUser  (  50, 135, 100, 25, hDemo, WM_CF_SHOW, 0, GUI_ID_TEXT1, "Option 2", 0);
  hWin = SWITCH_CreateUser( 150, 135, 100, 30, hDemo, WM_CF_SHOW, 0, GUI_ID_SWITCH1, 0);
  SWITCH_SetText(hWin, 0, "On");
  SWITCH_SetText(hWin, 1, "Off");
  hWin = TEXT_CreateUser  (  50, 185, 100, 25, hDemo, WM_CF_SHOW, 0, GUI_ID_TEXT2, "Option 3", 0);
  hWin = SWITCH_CreateUser( 150, 185, 100, 30, hDemo, WM_CF_SHOW, 0, GUI_ID_SWITCH2, 0);
  SWITCH_SetText(hWin, 0, "On");
  SWITCH_SetText(hWin, 1, "Off");
  SWITCH_EnableIcons(hWin, 1);
}

/*********************************************************************
*
*       _aDemoItems
*/
static DEMO_ITEM _aDemoItems[] = {
  //
  // Text         Creation           Animation
  //
  { "COLORSET" , _Create_COLSET,    &_Anim_COLSET    },
  { "BUTTON"   , _Create_BUTTON,    &_Anim_BUTTON    },
  { "CHECKBOX" , _Create_CHECKBOX,  &_Anim_CHECKBOX  },
  { "DROPDOWN" , _Create_DROPDOWN,  &_Anim_DROPDOWN  },
  { "EDIT"     , _Create_EDIT,      &_Anim_EDIT      },
  { "FRAMEWIN" , _Create_FRAMEWIN,  &_Anim_FRAMEWIN  },
  { "LISTBOX"  , _Create_LISTBOX,   &_Anim_LISTBOX   },
  { "LISTVIEW" , _Create_LISTVIEW,  &_Anim_LISTVIEW  },
  { "MULTIEDIT", _Create_MULTIEDIT, &_Anim_MULTIEDIT },
  { "PROGBAR"  , _Create_PROGBAR,   &_Anim_PROGBAR   },
  { "RADIO"    , _Create_RADIO,     &_Anim_RADIO     },
  { "SLIDER"   , _Create_SLIDER,    &_Anim_SLIDER    },
  { "SWITCH"   , _Create_SWITCH,    &_Anim_SWITCH    },
};

/*********************************************************************
*
*       _Demo
*/
static void _Demo(WM_HWIN hParent, int Cmd, DEMO_ITEM * pItem) {
  int xSizeDisplay, ySizeDisplay;

  switch (Cmd) {
  case CREATE_DEMO:
    //
    // Create shifting in animation to new demo
    //
    xSizeDisplay = LCD_GetXSizeDisplay();
    ySizeDisplay = LCD_GetYSizeDisplay();
    pItem->pContext->hWin =  WM_CreateWindowAsChild(xSizeDisplay, 0, (xSizeDisplay / 3) * 2, ySizeDisplay, WM_HBKWIN, WM_CF_SHOW, _cbWinDemo, sizeof(void *));
    WM_SetUserData(pItem->pContext->hWin, &pItem->pContext, sizeof(void *));
    if (pItem->pFuncCreate) {
      _pPaintHook = NULL;
      pItem->pFuncCreate(pItem->pContext->hWin);
    }
    pItem->pContext->hAnim = GUI_ANIM_Create(PERIOD_IN, 25, (void *)pItem->pContext, NULL);
    GUI_ANIM_AddItem(pItem->pContext->hAnim, 0, PERIOD_IN, ANIM_ACCELDECEL, (void *)pItem->pContext, _AnimIn);
    GUI_ANIM_StartEx(pItem->pContext->hAnim, 1, _AnimOnDeleteIn);
    break;
  case CLOSE_DEMO:
    //
    // Create shifting out animation and remove current demo
    //
    if (pItem->pContext->hTimer) {
      GUI_TIMER_Delete(pItem->pContext->hTimer);
      pItem->pContext->hTimer = 0;
    }
    pItem->pContext->hAnim = GUI_ANIM_Create(PERIOD_OUT, 25, (void *)pItem->pContext, NULL);
    GUI_ANIM_AddItem(pItem->pContext->hAnim, 0, PERIOD_OUT, ANIM_ACCELDECEL, (void *)pItem->pContext, _AnimOut);
    GUI_ANIM_StartEx(pItem->pContext->hAnim, 1, _AnimOnDeleteOut);
    break;
  }
}

/*********************************************************************
*
*       _cbWinWheel
*/
static void _cbWinWheel(WM_MESSAGE * pMsg) {
  WM_HWIN hWheel;
  int xSizeWindow, ySizeWindow, ySizeFont, ySizeWheel, NumItems, i, Id, NCode, Sel, Released;
  const GUI_FONT * pFont;
  static DEMO_ITEM * pItem;

  switch (pMsg->MsgId) {
  case WM_NOTIFY_PARENT:
    Id = WM_GetId(pMsg->hWinSrc);
    if (Id == GUI_ID_WHEEL0) {
      NCode = pMsg->Data.v;
      switch (NCode) {
      case WM_NOTIFICATION_RELEASED:
        //
        // WHEEL has been released: Move to new selection on demand
        //
        Sel      = WHEEL_GetSel         (pMsg->hWinSrc);
        Released = WHEEL_GetReleasedItem(pMsg->hWinSrc);
        if (Released != Sel) {
          if (WHEEL_IsMoving(pMsg->hWinSrc) == 0) {
            WHEEL_MoveToPosEx(pMsg->hWinSrc, Released, 500);
          }
        }
        break;
      case WM_NOTIFICATION_CLICKED:
        //
        // WHEEL has been clicked: Execute demo which has been clicked
        //
        if (pItem) {
          if (pItem->pContext->hAnim) {
            GUI_ANIM_Stop(pItem->pContext->hAnim);
            GUI_ANIM_Delete(pItem->pContext->hAnim);
            pItem->pContext->hAnim = 0;
          }
          _Demo(pMsg->hWin, CLOSE_DEMO, pItem);
        }
        break;
      case WM_NOTIFICATION_SEL_CHANGED:
        //
        // WHEEL has stopped
        //
        if (pItem) {
          if (pItem->pContext->hTimer) {
            GUI_TIMER_Delete(pItem->pContext->hTimer);
            pItem->pContext->hTimer = 0;
          }
          if (pItem->pContext->hWin) {
            WM_DeleteWindow(pItem->pContext->hWin);
            pItem->pContext->hWin = 0;
          }
        }
        Sel = WHEEL_GetSel(pMsg->hWinSrc);
        pItem = &_aDemoItems[Sel];
        _Demo(pMsg->hWin, CREATE_DEMO, pItem);
        break;
      }
    }
    break;
  case WM_CREATE:
    //
    // Create WHEEL
    //
    pFont = GUI_FONT_16_ASCII_AA4;
    ySizeFont = GUI_GetYDistOfFont(pFont);
    xSizeWindow = WM_GetWindowSizeX(pMsg->hWin);
    ySizeWindow = WM_GetWindowSizeY(pMsg->hWin);
    NumItems = GUI_COUNTOF(_aDemoItems);
    ySizeWheel = ySizeFont * (NumItems + 2);
    hWheel = WHEEL_CreateUser(0, 0, xSizeWindow, ySizeWindow, pMsg->hWin, WM_CF_SHOW, WHEEL_MODE_PLAIN | WIDGET_CF_VERTICAL | WHEEL_MODE_ENDLESS, GUI_ID_WHEEL0, 0);
    WHEEL_SetSizesPlain(hWheel, ySizeFont + 6, ySizeFont * 3);
    WHEEL_SetBkColor(hWheel, 0xFF241C31/*(FLAT_SKIN_CI_ACTIVE)*/);
    WHEEL_SetCenterColorPlain(hWheel, GUI_WHITE);
    WHEEL_AddText(hWheel, &_aDemoItems[0].pName, 1, GUI_ALIGN_CENTER, 0, 0, GUI_WHITE, pFont);
    WHEEL_SetPeriod(hWheel, 180);
    for (i = 1; i < NumItems; i++) {
      WHEEL_AddItemText(hWheel, 0, _aDemoItems[i].pName);
    }
    WHEEL_SetCenterTextAttrPlain(hWheel, 0, GUI_ALIGN_VCENTER | GUI_ALIGN_HCENTER, 0, 0, GUI_DARKGREEN, GUI_FONT_24_ASCII_AA4);
    WHEEL_SetCenterBox(hWheel, 0xFFFDFDFD/*(FLAT_SKIN_CI_DIALOG)*/, 0xFF46D8FB/*(FLAT_SKIN_CI_FOCUS)*/, 0, 4);
    //
    // 'Move' to first item
    //
    WHEEL_MoveToPos(hWheel, GUI_COUNTOF(_aDemoItems));
    break;
  case APP_ANIMATION_END:
    _Demo(pMsg->hWin, CLOSE_DEMO, pItem);
    break;
  }
}

/*********************************************************************
*
*       _CreateDemo
*/
static WM_HWIN _CreateDemo(void) {
  WM_HWIN hWin;
  int xSizeDisplay, ySizeDisplay;

  xSizeDisplay = LCD_GetXSizeDisplay();
  ySizeDisplay = LCD_GetYSizeDisplay();
  hWin = WM_CreateWindowAsChild(0, 0, xSizeDisplay / 3, ySizeDisplay, WM_HBKWIN, WM_CF_SHOW, _cbWinWheel, 0);
  return hWin;
}

/*********************************************************************
*
*       _cbBk
*/
static void _cbBk(WM_MESSAGE * pMsg) {
  int xSizeDisplay, ySizeDisplay;
  GUI_RECT Rect;
  const GUI_FONT * pFont;
  WM_HWIN hWin;
  int Sel, NumItems;
  static WM_HWIN hWinWheel;

  switch (pMsg->MsgId) {
  case APP_REMEMBER_HWIN:
    hWinWheel = pMsg->Data.v;
    break;
  case APP_ANIMATION_END:
    WM_SendMessageNoPara(hWinWheel, APP_ANIMATION_END);
    hWin = WM_GetDialogItem(pMsg->hWin, GUI_ID_WHEEL0);
    if (hWin) {
      NumItems = WHEEL_GetNumTextItems(hWin, 0);
      Sel = WHEEL_GetSel(hWin) + 1;
      if (Sel == NumItems) {
        Sel = 0;
      }
      _CreateInputTimer();
      WHEEL_MoveToPosEx(hWin, Sel, 500);
    }
    break;
  case WM_PAINT:
    pFont = FLAT_SKIN_GetFont();
    xSizeDisplay = LCD_GetXSizeDisplay();
    ySizeDisplay = LCD_GetYSizeDisplay();
    Rect.x0 = xSizeDisplay / 3;
    Rect.y0 = 0;
    Rect.x1 = xSizeDisplay - 1;
    Rect.y1 = GUI_GetYDistOfFont(pFont) + 9;
    GUI_SetColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_ACTIVE));
    GUI_FillRectEx(&Rect);
    Rect.y0 = Rect.y1 + 1;
    Rect.y1 = ySizeDisplay - 1;
    GUI_SetColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_DIALOG));
    GUI_FillRectEx(&Rect);
    GUI_SetColor(0xFF46D8FB/*(FLAT_SKIN_CI_FOCUS)*/);
    GUI_AA_DrawPolygonEx(_aPointArrow, GUI_COUNTOF(_aPointArrow), 4, xSizeDisplay / 3 + 30, ySizeDisplay / 2);
    Rect.x0 = xSizeDisplay / 3 + 150;
    Rect.y0 = 0;
    Rect.x1 = xSizeDisplay - 1;
    Rect.y1 = ySizeDisplay - 1;
    GUI_SetFont(pFont);
    GUI_SetTextMode(GUI_TM_TRANS);
    GUI_SetColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_ACTIVE));
    GUI_DispStringInRect("Turn the wheel...", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       MainTask
*/
void MainTask(void) {
  WM_MESSAGE Msg = {0};
  WM_HWIN hWin;
  static int Cnt;

  GUI_Init();
  //
  // Set client color 
  //
  FRAMEWIN_SetDefaultClientColor(FLAT_SKIN_GetColor(FLAT_SKIN_CI_DIALOG));
  //
  // Set font of skin
  //
  FLAT_SKIN_SetFont(GUI_FONT_24_1_AA4);
  //
  // Choose skin as default
  //
  FLAT_SKIN_SetDefault();
  //
  // The app...
  //
  GUI_PID_SetHook(_PID_Hook);
  _CreateInputTimer();
  WM_SetWindowPos(WM_HBKWIN, 0, 0, LCD_GetXSizeDisplay(), LCD_GetYSizeDisplay());
  WM_MULTIBUF_Enable(1);
  WM_SetCallback(WM_HBKWIN, _cbBk);
  SCROLLER_SetDefaultColor(SCROLLER_CI_ACTIVE, SCROLLER_GetDefaultColor(SCROLLER_CI_INACTIVE));
  TEXT_SetDefaultFont(FLAT_SKIN_GetFont());
  hWin = _CreateDemo();
  Msg.Data.v = hWin;
  Msg.MsgId = APP_REMEMBER_HWIN;
  WM_SendMessage(WM_HBKWIN, &Msg);
  while (1) {
    GUI_Delay(5);
    if (_TriggerTimer) {
      if (_hTimerInput == 0) {
        _CreateInputTimer();
      } else {
        GUI_TIMER_Restart(_hTimerInput);
      }
      _TriggerTimer = 0;
    }
  }
}

/*************************** End of file ****************************/