MULTIPAGE - Usage (Sample)

From SEGGER Wiki
Jump to: navigation, search
MULTIPAGE_Usage.c
MULTIPAGE Usage.gif
File(s) required
  • MULTIPAGE_Usage.c
Runs in simulation Yes
Runs on target Yes
Download MULTIPAGE_Usage.c

This sample demonstrates the usage of a MULTIPAGE widget.

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 V6.10 - 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        : MULTIPAGE_Usage.c
Purpose     : Sample that demonstrates the usage of MULTIPAGE widgets
              in emWin.
Requirements: WindowManager - (x)
              MemoryDevices - ( )
              AntiAliasing  - ( )
              VNC-Server    - ( )
              PNG-Library   - ( )
              TrueTypeFonts - ( )
---------------------------END-OF-HEADER------------------------------
*/

#include "DIALOG.h"
#include <stdio.h>

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
/*********************************************************************
*
*       Dialog resource
*
*  These tables contain the information required to create each page
*  of the multipage widget.
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
  { WINDOW_CreateIndirect, "Dialog 1",        0,              0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { BUTTON_CreateIndirect, "Display SysTime", GUI_ID_BUTTON0, 5,  30, 100,  20, 0                    },
  { TEXT_CreateIndirect,   "Dialog 1",        0,              5,  10, 50,   20, TEXT_CF_LEFT         }
};

static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
  { WINDOW_CreateIndirect,   "Dialog 2", 0,              0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { CHECKBOX_CreateIndirect, "",         GUI_ID_CHECK0,  5,  30,   0,   0, 0                    },
  { CHECKBOX_CreateIndirect, "",         GUI_ID_CHECK1,  5,  50,   0,   0, 0                    },
  { TEXT_CreateIndirect,     "Check1",   GUI_ID_TEXT0,  25,  30,  50,  15, TEXT_CF_LEFT         },
  { TEXT_CreateIndirect,     "Check2",   GUI_ID_TEXT1,  25,  50,  50,  15, TEXT_CF_LEFT         },
  { TEXT_CreateIndirect,     "Dialog 2", 0,              5,  10,  50,  20, TEXT_CF_LEFT         }
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _cbDialog1
*/
static void _cbDialog1(WM_MESSAGE * pMsg) {
  char       acBuffer[32];
  int        NCode;
  int        Id;
  static int Time;

  switch (pMsg->MsgId) {
  case WM_PAINT:
    GUI_SetTextMode(GUI_TM_TRANS);
    GUI_SetColor(GUI_BLACK);
    GUI_SetFont(&GUI_Font13B_1);
    if (Time) {
      sprintf(acBuffer, "System time: %d", Time);
      GUI_DispStringAt(acBuffer, 5, 60);
    }
    break;
  case WM_NOTIFY_PARENT:
    NCode = pMsg->Data.v;
    Id = WM_GetId(pMsg->hWinSrc);
    if (NCode == WM_NOTIFICATION_RELEASED) {
      switch (Id) {
      case GUI_ID_BUTTON0:
        Time = GUI_GetTime();
        break;
      }
    }
    WM_InvalidateWindow(pMsg->hWin);
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       _cbDialog2
*/
static void _cbDialog2(WM_MESSAGE * pMsg) {
  char       acBuffer[32];
  int        NCode;
  int        Id;
  static int StateCheck1;
  static int StateCheck2;

  switch (pMsg->MsgId) {
  case WM_PAINT:
    //
    // Draw checkbox states
    //
    GUI_SetTextMode(GUI_TM_TRANS);
    GUI_SetColor(GUI_BLACK);
    GUI_SetFont(&GUI_Font13B_1);
    
    sprintf(acBuffer, "State Check1: %d", StateCheck1);
    GUI_DispStringAt(acBuffer, 5, 80);
    sprintf(acBuffer, "State Check2: %d", StateCheck2);
    GUI_DispStringAt(acBuffer, 120, 80);
    break;
  case WM_NOTIFY_PARENT:
    //
    // React on checkboxes
    //
    NCode = pMsg->Data.v;
    Id = WM_GetId(pMsg->hWinSrc);
    if (NCode == WM_NOTIFICATION_RELEASED) {
      switch (Id) {
      case GUI_ID_CHECK0:
        StateCheck1 = CHECKBOX_GetState(pMsg->hWinSrc);
        break;
      case GUI_ID_CHECK1:
        StateCheck2 = CHECKBOX_GetState(pMsg->hWinSrc);
        break;
      }
    }
    WM_InvalidateWindow(pMsg->hWin);
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       _cbWin
*/
static void _cbWin(WM_MESSAGE * pMsg) {
  WM_HWIN                 hDialog;
  static LISTWHEEL_Handle hMulti;
  
  switch (pMsg->MsgId) {
  case WM_CREATE:
    //
    // Create multipage widget
    //
    hMulti = MULTIPAGE_CreateEx(0, 0, 300, 200, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_MULTIPAGE0);
    //
    // Create dialog windows to add them as pages
    //
    hDialog = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialog1, WM_UNATTACHED, 0, 0);
    MULTIPAGE_AddPage(hMulti, hDialog, "Page 1");
    hDialog = GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2), _cbDialog2, WM_UNATTACHED, 0, 0);
    MULTIPAGE_AddPage(hMulti, hDialog, "Page 2");
    //
    // Set alignment of tabs
    //
    MULTIPAGE_SetAlign(hMulti, MULTIPAGE_ALIGN_LEFT);
    break;
  case WM_PAINT:
    GUI_SetBkColor(GUI_BLACK);
    GUI_Clear();
    break;
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       MainTask
*/
void MainTask(void) {
  //
  // Init GUI
  //
  GUI_Init();
  //
  // Enable multi-buffering
  //
  WM_MULTIBUF_Enable(1);
  //
  // Create a window
  //
  WM_CreateWindowAsChild(0, 0, LCD_GetXSize(), LCD_GetYSize(), WM_HBKWIN, WM_CF_SHOW, _cbWin, 0);

  while (1) {
    GUI_Delay(100);
  }
}

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