text: /*********************************************************************
  *                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.30 - 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  ARM LIMITED whose registered office
  is situated at  110 Fulbourn Road,  Cambridge CB1 9NJ,  England solely
  for  the  purposes  of  creating  libraries  for  ARM7, ARM9, Cortex-M
  series,  and   Cortex-R4   processor-based  devices,  sublicensed  and
  distributed as part of the  MDK-ARM  Professional  under the terms and
  conditions  of  the   End  User  License  supplied  with  the  MDK-ARM
  Professional. 
  Full source code is available at: www.segger.com
  
  We appreciate your understanding and fairness.
  ----------------------------------------------------------------------
  Licensing information
  
  Licensor:                 SEGGER Software GmbH
  Licensed to:              ARM Ltd
  Licensed SEGGER software: emWin
  License number:           GUI-00181
  License model:            LES-SLA-20007, Agreement, effective since October 1st 2011 
  Licensed product:         MDK-ARM Professional
  Licensed platform:        ARM7/9, Cortex-M/R4
  Licensed number of seats: -
  ----------------------------------------------------------------------
  File        : TREEVIEW.h
  Purpose     : TREEVIEW include
  --------------------END-OF-HEADER-------------------------------------
  */
  
  #ifndef TREEVIEW_H
  #define TREEVIEW_H
  
  #include "WM.h"
  #include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
  #include "WIDGET.h"
  
  #if GUI_WINSUPPORT
  
  #if defined(__cplusplus)
    extern "C" {     /* Make sure we have C-declarations in C++ programs */
  #endif
  
  /*********************************************************************
  *
  *       Defines
  *
  **********************************************************************
  */
  /* Status- and create flags */
  #define TREEVIEW_CF_HIDELINES       (1 << 0)
  #define TREEVIEW_CF_ROWSELECT       (1 << 1)
  #define TREEVIEW_CF_AUTOSCROLLBAR_H (1 << 2)
  #define TREEVIEW_CF_AUTOSCROLLBAR_V (1 << 3)
  #define TREEVIEW_SF_HIDELINES       TREEVIEW_CF_HIDELINES
  #define TREEVIEW_SF_ROWSELECT       TREEVIEW_CF_ROWSELECT
  #define TREEVIEW_SF_AUTOSCROLLBAR_H TREEVIEW_CF_AUTOSCROLLBAR_H
  #define TREEVIEW_SF_AUTOSCROLLBAR_V TREEVIEW_CF_AUTOSCROLLBAR_V
  
  /* Bitmap indices */
  #define TREEVIEW_BI_CLOSED 0
  #define TREEVIEW_BI_OPEN   1
  #define TREEVIEW_BI_LEAF   2
  #define TREEVIEW_BI_PLUS   3
  #define TREEVIEW_BI_MINUS  4
  #define TREEVIEW_BI_PM     5
  
  /* Color indices */
  #define TREEVIEW_CI_UNSEL    0
  #define TREEVIEW_CI_SEL      1
  #define TREEVIEW_CI_DISABLED 2
  
  /* Relative positions (create) */
  #define TREEVIEW_INSERT_ABOVE       0
  #define TREEVIEW_INSERT_BELOW       1
  #define TREEVIEW_INSERT_FIRST_CHILD 2
  
  /* Relative positions (retrieve) */
  #define TREEVIEW_GET_FIRST        0
  #define TREEVIEW_GET_LAST         1
  #define TREEVIEW_GET_NEXT_SIBLING 2
  #define TREEVIEW_GET_PREV_SIBLING 3
  #define TREEVIEW_GET_FIRST_CHILD  4
  #define TREEVIEW_GET_PARENT       5
  
  /* Item flags */
  #define TREEVIEW_ITEM_TYPE_LEAF (0 << 0)
  #define TREEVIEW_ITEM_TYPE_NODE (1 << 0)
  
  /* Selection mode */
  #define TREEVIEW_SELMODE_ROW  1
  #define TREEVIEW_SELMODE_TEXT 0
  
  /************************************************************
  *
  *       Types
  *
  *************************************************************
  */
  typedef WM_HMEM TREEVIEW_Handle;
  typedef WM_HMEM TREEVIEW_ITEM_Handle;
  
  typedef struct {
    int IsNode;
    int IsExpanded;
    int HasLines;
    int HasRowSelect;
    int Level;
  } TREEVIEW_ITEM_INFO;
  
  typedef struct {
    GUI_COLOR ColorBk;
    GUI_COLOR ColorText;
    GUI_COLOR ColorTextBk;
    GUI_COLOR ColorLines;
    GUI_RECT rText;
    TREEVIEW_ITEM_Handle hItem;
    const GUI_FONT * pFont;
    char * pText;
    U8 NumLines;
    I16 ax0[3];
    I16 ay0[3];
    I16 ax1[3];
    I16 ay1[3];
    U8 NumConnectors;
    I16 axc[16];
    const GUI_BITMAP * pBmPM;
    const GUI_BITMAP * pBmOCL;
    I16 xPosPM, xPosOCL;
    U8 IndexPM;
    U8 IndexOCL;
  } TREEVIEW_ITEM_DRAW_INFO;
  
  /*********************************************************************
  *
  *       Create functions
  *
  **********************************************************************
  */
  TREEVIEW_Handle      TREEVIEW_CreateEx      (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
  TREEVIEW_Handle      TREEVIEW_CreateUser    (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
  TREEVIEW_Handle      TREEVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
  
  /*********************************************************************
  *
  *       The callback ...
  *
  * Do not call it directly ! It is only to be used from within an
  * overwritten callback.
  */
  void TREEVIEW_Callback(WM_MESSAGE * pMsg);
  
  /*********************************************************************
  *
  *       Common functions
  *
  **********************************************************************
  */
  int                  TREEVIEW_AttachItem     (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem, TREEVIEW_ITEM_Handle hItemAt, int Position);
  void                 TREEVIEW_DecSel         (TREEVIEW_Handle hObj);
  TREEVIEW_ITEM_Handle TREEVIEW_GetItem        (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem, int Flags);
  TREEVIEW_ITEM_Handle TREEVIEW_GetSel         (TREEVIEW_Handle hObj);
  int                  TREEVIEW_GetUserData    (TREEVIEW_Handle hObj, void * pDest, int NumBytes);
  void                 TREEVIEW_IncSel         (TREEVIEW_Handle hObj);
  TREEVIEW_ITEM_Handle TREEVIEW_InsertItem     (TREEVIEW_Handle hObj, int IsNode, TREEVIEW_ITEM_Handle hItemPrev, int Position, const char * s);
  int                  TREEVIEW_OwnerDraw      (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
  void                 TREEVIEW_ScrollToSel    (TREEVIEW_Handle hObj);
  void                 TREEVIEW_SetAutoScrollH (TREEVIEW_Handle hObj, int State);
  void                 TREEVIEW_SetAutoScrollV (TREEVIEW_Handle hObj, int State);
  void                 TREEVIEW_SetBitmapOffset(TREEVIEW_Handle hObj, int Index, int xOff, int yOff);
  void                 TREEVIEW_SetBkColor     (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
  void                 TREEVIEW_SetFont        (TREEVIEW_Handle hObj, const GUI_FONT * pFont);
  void                 TREEVIEW_SetHasLines    (TREEVIEW_Handle hObj, int State);
  void                 TREEVIEW_SetImage       (TREEVIEW_Handle hObj, int Index, const GUI_BITMAP * pBitmap);
  int                  TREEVIEW_SetIndent      (TREEVIEW_Handle hObj, int Indent);
  void                 TREEVIEW_SetLineColor   (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
  void                 TREEVIEW_SetOwnerDraw   (TREEVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
  void                 TREEVIEW_SetSel         (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_SetSelMode     (TREEVIEW_Handle hObj, int Mode);
  void                 TREEVIEW_SetTextColor   (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
  int                  TREEVIEW_SetTextIndent  (TREEVIEW_Handle hObj, int TextIndent);
  int                  TREEVIEW_SetUserData    (TREEVIEW_Handle hObj, const void * pSrc, int NumBytes);
  
  
  /*********************************************************************
  *
  *       Treeview item related functions
  *
  **********************************************************************
  */
  void                 TREEVIEW_ITEM_Collapse   (TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_ITEM_CollapseAll(TREEVIEW_ITEM_Handle hItem);
  TREEVIEW_ITEM_Handle TREEVIEW_ITEM_Create     (int IsNode, const char * s, U32 UserData);
  void                 TREEVIEW_ITEM_Delete     (TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_ITEM_Detach     (TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_ITEM_Expand     (TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_ITEM_ExpandAll  (TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_ITEM_GetInfo    (TREEVIEW_ITEM_Handle hItem, TREEVIEW_ITEM_INFO * pInfo);
  void                 TREEVIEW_ITEM_GetText    (TREEVIEW_ITEM_Handle hItem, U8 * pBuffer, int MaxNumBytes);
  U32                  TREEVIEW_ITEM_GetUserData(TREEVIEW_ITEM_Handle hItem);
  void                 TREEVIEW_ITEM_SetImage   (TREEVIEW_ITEM_Handle hItem, int Index, const GUI_BITMAP * pBitmap);
  TREEVIEW_ITEM_Handle TREEVIEW_ITEM_SetText    (TREEVIEW_ITEM_Handle hItem, const char * s);
  void                 TREEVIEW_ITEM_SetUserData(TREEVIEW_ITEM_Handle hItem, U32 UserData);
  
  /*********************************************************************
  *
  *       Managing default values
  *
  **********************************************************************
  */
  GUI_COLOR        TREEVIEW_GetDefaultBkColor  (int Index);
  const GUI_FONT * TREEVIEW_GetDefaultFont     (void);
  GUI_COLOR        TREEVIEW_GetDefaultLineColor(int Index);
  GUI_COLOR        TREEVIEW_GetDefaultTextColor(int Index);
  void             TREEVIEW_SetDefaultBkColor  (int Index, GUI_COLOR Color);
  void             TREEVIEW_SetDefaultFont     (const GUI_FONT * pFont);
  void             TREEVIEW_SetDefaultLineColor(int Index, GUI_COLOR Color);
  void             TREEVIEW_SetDefaultTextColor(int Index, GUI_COLOR Color);
  
  #if defined(__cplusplus)
    }
  #endif
  
  #endif  // GUI_WINSUPPORT
  #endif  // TREEVIEW_H
  
  /*************************** End of file ****************************/
  