]> icculus.org git repositories - icculus/iodoom3.git/blob - neo/tools/common/PropertyGrid.h
hello world
[icculus/iodoom3.git] / neo / tools / common / PropertyGrid.h
1 /*
2 ===========================================================================
3
4 Doom 3 GPL Source Code
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company. 
6
7 This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).  
8
9 Doom 3 Source Code is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 Doom 3 Source Code is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with Doom 3 Source Code.  If not, see <http://www.gnu.org/licenses/>.
21
22 In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code.  If not, please request a copy in writing from id Software at the address below.
23
24 If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
25
26 ===========================================================================
27 */
28
29 #ifndef PROPERTYGRID_H_
30 #define PROPERTYGRID_H_
31
32 #define PGN_ITEMCHANGED         100
33
34 #define PGS_HEADERS                     0x00000001
35 #define PGS_ALLOWINSERT         0x00000002
36
37 typedef struct
38 {
39         NMHDR                   hdr;
40         int                             mItem;
41         const char*             mName;
42         const char*             mValue; 
43
44 } NMPROPGRID;
45
46 class rvPropertyGrid
47 {
48 public:
49
50         enum EItemType
51         {
52                 PGIT_STRING,
53                 PGIT_HEADER,
54                 PGIT_MAX
55         };
56
57         rvPropertyGrid ( );
58         
59         bool    Create                  ( HWND parent, int id, int style = 0 );
60
61         void    Move                    ( int x, int y, int w, int h, BOOL redraw = FALSE );
62
63         bool    ReflectMessage  ( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
64
65         int             AddItem                 ( const char* name, const char* value, EItemType type = PGIT_STRING );
66         
67         void    RemoveItem              ( int index );
68         void    RemoveAllItems  ( void );
69         
70         void    SetCurSel               ( int index );
71         int             GetCurSel               ( void );
72
73         HWND                    GetWindow               ( void );
74         const char*             GetItemName             ( int index );
75         const char*             GetItemValue    ( int index );
76
77 protected:
78
79         enum EState
80         {
81                 STATE_FINISHEDIT,
82                 STATE_EDIT,
83                 STATE_NORMAL,
84         };
85
86         void                    StartEdit               ( int item, bool label );
87         void                    FinishEdit              ( void );
88         void                    CancelEdit              ( void );
89
90         int                             HandleDrawItem  ( WPARAM wParam, LPARAM lParam );
91
92         HWND            mWindow;
93         HWND            mEdit;
94         int                     mEditItem;
95         bool            mEditLabel;
96         int                     mSelectedItem;
97         WNDPROC         mListWndProc;
98         int                     mSplitter;
99         int                     mStyle;
100         EState          mState;
101         
102 private:
103
104         static LRESULT CALLBACK WndProc ( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
105 };
106
107 inline HWND rvPropertyGrid::GetWindow ( void )
108 {
109         return mWindow;
110 }
111
112 inline int rvPropertyGrid::GetCurSel ( void )
113 {
114         return SendMessage ( mWindow, LB_GETCURSEL, 0, 0 );
115 }
116
117 inline void rvPropertyGrid::SetCurSel ( int index )
118 {
119         SendMessage ( mWindow, LB_SETCURSEL, index, 0 );
120         mSelectedItem = index;
121 }
122
123 #endif // PROPERTYGRID_H_