MULTIPAGE - Usage (Sample)
MULTIPAGE_Usage.c | |
---|---|
File(s) required |
|
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 ****************************/