| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- /*********************************************************************
- * Portions COPYRIGHT 2016 STMicroelectronics *
- * Portions SEGGER Microcontroller GmbH & Co. KG *
- * Solutions for real time microcontroller applications *
- **********************************************************************
- * *
- * (c) 1996 - 2015 SEGGER Microcontroller GmbH & Co. KG *
- * *
- * Internet: www.segger.com Support: support@segger.com *
- * *
- **********************************************************************
- ** emWin V5.28 - Graphical user interface for embedded applications **
- All Intellectual Property rights in the Software belongs to SEGGER.
- 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 the following terms:
- The software has been licensed to STMicroelectronics International
- N.V. a Dutch company with a Swiss branch and its headquarters in Plan-
- les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the
- purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_
- troller products commercialized by Licensee only, sublicensed and dis_
- tributed under the terms and conditions of the End User License Agree_
- ment supplied by STMicroelectronics International N.V.
- Full source code is available at: www.segger.com
- We appreciate your understanding and fairness.
- ----------------------------------------------------------------------
- File : GUIDEMO_Listview.c
- Purpose : Listview demo
- ----------------------------------------------------------------------
- */
- /**
- ******************************************************************************
- * @file GUIDEMO_Listview.c
- * @author MCD Application Team
- * @brief Listview demo
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2017 STMicroelectronics International N.V.
- * All rights reserved.</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted, provided that the following conditions are met:
- *
- * 1. Redistribution of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of other
- * contributors to this software may be used to endorse or promote products
- * derived from this software without specific written permission.
- * 4. This software, including modifications and/or derivative works of this
- * software, must execute solely and exclusively on microcontroller or
- * microprocessor devices manufactured by or for STMicroelectronics.
- * 5. Redistribution and use of this software other than as permitted under
- * this license is void and will automatically terminate your rights under
- * this license.
- *
- * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
- * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
- * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #include "GUIDEMO.h"
- #if (SHOW_GUIDEMO_LISTVIEW && GUI_WINSUPPORT)
- /*********************************************************************
- *
- * Defines
- *
- **********************************************************************
- */
- #define LISTVIEW_SIZE_X 210
- #define MIN_SPACE 5
- /*********************************************************************
- *
- * Types
- *
- **********************************************************************
- */
- enum {
- JOB_ADDROWS = 1,
- JOB_SETSORT,
- JOB_REVERSE,
- JOB_INCSEL,
- JOB_DECSEL,
- JOB_COLOR
- };
- /*********************************************************************
- *
- * COL_PROP
- */
- typedef struct {
- char * pText;
- int Width;
- int Align;
- int (* fpCompare)(const void * p0, const void * p1);
- } COL_PROP;
- /*********************************************************************
- *
- * ACTION_ITEM
- */
- typedef struct {
- int Delay;
- int Job;
- const char * pDescription;
- } ACTION_ITEM;
- /*********************************************************************
- *
- * Static data
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * _pNames
- */
- static const char * _pNames[] = {
- "Adina", "Adis", "Aimee", "Alea", "Alessio", "Aletta", "Alexia", "Alissa", "Amelia",
- "Anakin", "Ania", "Ankea", "Annalies", "Annina", "Annrike", "Arkadius", "Arvin",
- "Aurelia", "Ava", "Beeke", "Benita", "Bennit", "Bent", "Berenike", "Berit", "Birk",
- "Bosse", "Carsta", "Catalina", "Celia", "Charis", "Charlin", "Charlotta", "Cordelia",
- "Corey", "Cornelis", "Corvin", "Cosima", "Crisula", "Darian", "Darina", "Deik", "Derek",
- "Destina", "Devin", "Diane", "Dina", "Dion", "Dorette", "Dorle", "Duncan", "Eddy",
- "Einar", "Elea", "Elin", "Elita", "Elona", "Elouise", "Emilian", "Emina", "Emmeline",
- "Enna", "Estelle", "Etta", "Fabiola", "Fabrice", "Falko", "Felice", "Feline", "Femke",
- "Fiete", "Filippa", "Fine", "Finia", "Finley", "Fleur", "Florentine" "Florenz", "Florin",
- "Floyd", "Fokko", "Fritzi", "Gero", "Gerret", "Gerwin", "Gideon", "Gillian", "Glen",
- "Gunilla", "Hanka", "Heinke", "Helmar", "Henner", "Hennes", "Henrieke", "Immo",
- "India", "Isalie", "Iven", "Jade", "Janice", "Janika", "Janka", "Janneke", "Jannika",
- "Jano", "Jarla", "Jarne", "Jarno", "Jaromir", "Jaron", "Jelana", "Jesper", "Joleen", "Jolie",
- "Jonte", "Joost", "Jördis", "Joris", "Josie", "Josina", "Jula", "Julina", "Jytte", "Kalle",
- "Kennet", "Keno", "Kiana", "Kieran", "Laila", "Laureen", "Laurens", "Laurent",
- "Lauritz", "Leana", "Leandra", "Leandro", "Len", "Lenore", "Leona", "Leonore",
- "Levke", "Lewin", "Lientje", "Lilith", "Line", "Linna", "Linnea", "Lisanne", "Livia",
- "Lorena", "Lorna", "Lovis", "Luana", "Ludger", "Madita", "Mads", "Maiga", "Mailin",
- "Malina", "Manja", "Marieke", "Marielle", "Mariette", "Mariola", "Marla", "Marlena",
- "Marlin", "Marlo", "Marthe", "Martje", "Matz", "Maureen", "Mayra", "Medina",
- "Melda", "Melek", "Melike", "Melinda", "Melis", "Melisa", "Merit", "Mieke", "Mila",
- "Mina", "Mio", "Mirella", "Momke", "Momme", "Morris", "Nantke", "Nelson", "Nika",
- "Norwin", "Oke", "Onno", "Otis", "Ove", "Peer", "Pelle", "Philine", "Philomena",
- "Quentin", "Quint", "Rahel", "Raik", "Riana", "Ricardo", "Rika", "Rixa", "Rolex",
- "Ruwen", "Ryan", "Salma", "Sandrine", "Severin", "Sidonie", "Silas", "Silja", "Simeon",
- "Sinja", "Smilla", "Stig", "Stine", "Talisa", "Tamina", "Tammo", "Tara", "Thyra",
- "Tiana", "Tjalf", "Tjark", "Tjelle", "Tjorben", "Tomma", "Tore", "Vanity", "Violet",
- "Violetta", "Wilko", "Wulf", "Yasmina", "Ylvie", "Younes", "Yves", "Yvette",
- };
- /*********************************************************************
- *
- * _aColProps
- */
- static const COL_PROP _aColProps[] = {
- { "Name", 70, GUI_TA_LEFT, LISTVIEW_CompareText},
- { "Code", 50, GUI_TA_HCENTER, LISTVIEW_CompareText},
- { "Balance", 60, GUI_TA_RIGHT, LISTVIEW_CompareDec }
- };
- /*********************************************************************
- *
- * _aAction
- */
- static const ACTION_ITEM _aAction[] = {
- { 0, JOB_ADDROWS, "Adding some rows" },
- { 900, 0, NULL },
- { 500, 0, "Enable sorting" },
- { 500, 0, NULL },
- { 600, JOB_SETSORT, NULL },
- { 600, JOB_SETSORT, NULL },
- { 600, JOB_SETSORT, NULL },
- { 500, 0, "Using reverse/normal\nsorting order" },
- { 500, 0, NULL },
- { 600, JOB_REVERSE, NULL },
- { 600, JOB_REVERSE, NULL },
- { 600, JOB_REVERSE, NULL },
- { 500, 0, "Changing selection" },
- { 500, 0, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_INCSEL, NULL },
- { 50, JOB_DECSEL, NULL },
- { 50, JOB_DECSEL, NULL },
- { 50, JOB_DECSEL, NULL },
- { 50, JOB_DECSEL, NULL },
- { 50, JOB_DECSEL, NULL },
- { 500, 0, "Setting some individual colors" },
- { 500, 0, NULL },
- { 50, JOB_COLOR, NULL },
- {1800, 0, NULL },
- };
- /*********************************************************************
- *
- * _aColor
- */
- static const GUI_COLOR _aColor[] = {
- GUI_BLUE , GUI_GREEN , GUI_RED , GUI_CYAN ,
- GUI_MAGENTA , GUI_YELLOW , GUI_LIGHTBLUE , GUI_LIGHTGREEN ,
- GUI_LIGHTRED , GUI_LIGHTCYAN , GUI_LIGHTMAGENTA, GUI_LIGHTYELLOW ,
- GUI_DARKBLUE , GUI_DARKGREEN , GUI_DARKRED , GUI_DARKCYAN ,
- GUI_DARKMAGENTA , GUI_DARKYELLOW , GUI_WHITE , GUI_LIGHTGRAY ,
- GUI_GRAY , GUI_DARKGRAY , GUI_BLACK , GUI_BROWN ,
- };
- /*********************************************************************
- *
- * Static code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * _AddRow
- *
- * Purpose:
- * Inserts or adds a new row of data to the given LISTVIEW
- *
- * Parameter:
- * hItem - Handle of LISTVIEW widget
- * Insert - 1 for inserting a row,0 for adding a row
- */
- static int _AddRow(WM_HWIN hItem, int Insert) {
- int i, r;
- char * pText[3];
- char acText[3][20] = {0};
- //
- // Create name field
- //
- i = rand() % GUI_COUNTOF(_pNames);
- strcpy(acText[0], _pNames[i]);
- //
- // Create code field
- //
- for (i = 0; i < 5; i++) {
- acText[1][i] = rand() % 26 + 'A';
- }
- //
- // Create balance field
- //
- i = (rand() % 10000) - 5000;
- sprintf(acText[2], "%i", i);
- //
- // Fill pointer array
- //
- for (i = 0; i < 3; i++) {
- pText[i] = acText[i];
- }
- //
- // Add/Insert row
- //
- if (Insert) {
- r = LISTVIEW_InsertRow(hItem, 0, (const GUI_ConstString *)pText);
- } else {
- r = LISTVIEW_AddRow(hItem, (const GUI_ConstString *)pText);
- }
- return r;
- }
- /*********************************************************************
- *
- * _InitListview
- *
- * Purpose:
- * Adds some data to the listview widget
- */
- static void _InitListview(WM_HWIN hList) {
- int i;
- HEADER_SetDragLimit(LISTVIEW_GetHeader(hList), 1);
- LISTVIEW_SetAutoScrollV(hList, 1);
- LISTVIEW_SetGridVis(hList, 1);
- LISTVIEW_SetRBorder(hList, 5);
- LISTVIEW_SetLBorder(hList, 5);
- for (i = 0; i < 3; i++) {
- LISTVIEW_AddColumn(hList, _aColProps[i].Width, _aColProps[i].pText, _aColProps[i].Align);
- LISTVIEW_SetCompareFunc(hList, i, _aColProps[i].fpCompare);
- }
- LISTVIEW_EnableSort(hList);
- }
- /*********************************************************************
- *
- * _Action
- *
- * Purpose:
- * Does some action with the widget
- */
- static void _Action(WM_HWIN hList) {
- unsigned ColoredCol = 0;
- unsigned ColoredRow = 0;
- unsigned i, NumRows;
- int ColorIndex = 0;
- int Reverse = 0;
- int SortedColumn = -1;
- int Index;
- Index = 0;
- do {
- if (_aAction[Index].pDescription) {
- GUIDEMO_ShowInfo(_aAction[Index].pDescription);
- }
- switch (_aAction[Index].Job) {
- case JOB_COLOR:
- NumRows = LISTVIEW_GetNumRows(hList);
- for (i = 0; i < NumRows; i++) {
- LISTVIEW_SetItemBkColor(hList, ColoredCol, ColoredRow, LISTVIEW_CI_UNSEL, _aColor[ColorIndex]);
- if (++ColorIndex == GUI_COUNTOF(_aColor)) {
- ColorIndex = 0;
- }
- if (++ColoredCol == LISTVIEW_GetNumColumns(hList)) {
- ColoredCol = 0;
- }
- if (++ColoredRow == NumRows) {
- ColoredRow = 0;
- }
- }
- break;
- case JOB_INCSEL:
- LISTVIEW_IncSel(hList);
- break;
- case JOB_DECSEL:
- LISTVIEW_DecSel(hList);
- break;
- case JOB_REVERSE:
- Reverse ^= 1;
- LISTVIEW_SetSort(hList, SortedColumn, Reverse);
- break;
- case JOB_ADDROWS:
- for (i = 0; i < 40; i++) {
- _AddRow(hList, 0);
- }
- break;
- case JOB_SETSORT:
- if (SortedColumn == -1) {
- SortedColumn = 0;
- } else {
- SortedColumn++;
- if (SortedColumn == (int)LISTVIEW_GetNumColumns(hList)) {
- SortedColumn = 0;
- }
- }
- LISTVIEW_SetSort(hList, SortedColumn, Reverse);
- break;
- }
- GUI_Delay(_aAction[Index].Delay);
- } while ((++Index < GUI_COUNTOF(_aAction)) && (GUIDEMO_CheckCancel() == 0));
- }
- /*********************************************************************
- *
- * _DemoListview
- */
- static void _DemoListview(void) {
- WM_HWIN hList;
- int xSize, ySize, xSpace, ySpace;
- xSize = LCD_GetXSize();
- ySize = LCD_GetYSize();
- if ((CONTROL_SIZE_X + MIN_SPACE) < ((xSize - LISTVIEW_SIZE_X) >> 1)) {
- xSpace = (xSize - LISTVIEW_SIZE_X) >> 1;
- } else {
- xSpace = (xSize - LISTVIEW_SIZE_X - CONTROL_SIZE_X) >> 1;
- }
- ySpace = (ySize - INFO_SIZE_Y) >> 3;
- hList = LISTVIEW_CreateEx(xSpace, INFO_SIZE_Y + ySpace, LISTVIEW_SIZE_X, ySize - INFO_SIZE_Y - (ySpace << 1), WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_LISTVIEW0);
- WM_SetFocus(hList);
- _InitListview(hList);
- _Action(hList);
- WM_DeleteWindow(hList);
- }
- /*********************************************************************
- *
- * Public code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * GUIDEMO_Listview
- */
- void GUIDEMO_Listview(void) {
- GUIDEMO_ShowIntro("Listview demo",
- "Shows some features of\n"
- "the LISTVEW widget");
- GUIDEMO_DrawBk(1);
- GUIDEMO_ShowInfoWin();
- _DemoListview();
- }
- #else
- void GUIDEMO_Listview(void) {}
- #endif
- /*************************** End of file ****************************/
|