source: trunk/src/WTLx/GenericAddListView.hpp @ 717

Revision 717, 2.5 KB checked in by Eoin, 12 years ago (diff)
Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2009.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#pragma once
8
9#define HAL_GENERIC_ALV_BEGIN           20010
10#define HAL_GENERIC_ALV_NEW             HAL_GENERIC_ALV_BEGIN + 1
11#define HAL_GENERIC_ALV_EDIT            HAL_GENERIC_ALV_BEGIN + 2
12#define HAL_GENERIC_ALV_DELETE          HAL_GENERIC_ALV_BEGIN + 3
13
14#ifndef RC_INVOKED
15
16#include <boost/signals.hpp>
17#include <boost/function.hpp>
18
19#include "stdAfx.hpp"
20
21namespace WTLx
22{
23
24template<typename ListClass, bool supportSingleClickOnEmtpy=false,
25        int listID_NEW=HAL_GENERIC_ALV_NEW, 
26        int listID_EDIT=HAL_GENERIC_ALV_EDIT, 
27        int listID_DELETE=HAL_GENERIC_ALV_DELETE
28        >
29class GenericAddListView
30{
31//      friend class ListClass;
32       
33public:
34        BEGIN_MSG_MAP_EX(GenericAddListView)
35                COMMAND_ID_HANDLER(listID_NEW, OnNew)
36                COMMAND_ID_HANDLER(listID_EDIT, OnEdit)
37                COMMAND_ID_HANDLER(listID_DELETE, OnDelete)
38
39                REFLECTED_NOTIFY_CODE_HANDLER(NM_CLICK, OnSingleClick)
40                REFLECTED_NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDoubleClick)
41        END_MSG_MAP()
42
43        LRESULT OnDoubleClick(int i, LPNMHDR pnmh, BOOL&)
44        {               
45                ListClass* pT = static_cast<ListClass*>(this);
46
47                LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)pnmh;
48                LVHITTESTINFO hit;
49
50                hit.pt = lpnmitem->ptAction;
51                pT->SubItemHitTest(&hit);
52
53                if (hit.iItem == -1)                   
54                        pT->newItem();
55                else
56                        pT->editItem(hit.iItem);
57
58                return 0;
59        }
60
61        LRESULT OnSingleClick(int i, LPNMHDR pnmh, BOOL&)
62        {       
63                if (!supportSingleClickOnEmtpy)
64                {
65                        SetMsgHandled(false);
66                        return 0;
67                }
68
69                ListClass* pT = static_cast<ListClass*>(this);
70
71                LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)pnmh;
72                LVHITTESTINFO hit;
73
74                hit.pt = lpnmitem->ptAction;
75                pT->SubItemHitTest(&hit);
76
77                if (hit.iItem == -1) pT->newItem();
78
79                return 0;
80        }
81
82        LRESULT OnNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
83        {
84                ListClass* pT = static_cast<ListClass*>(this);
85                pT->newItem();
86
87                return 0;
88        }
89
90        LRESULT OnEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
91        {
92                ListClass* pT = static_cast<ListClass*>(this);
93                pT->editItem(pT->is_selected_begin()->index());
94
95                return 0;
96        }
97
98        LRESULT OnDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
99        {
100                ListClass* pT = static_cast<ListClass*>(this);         
101                pT->deleteItem(pT->is_selected_begin()->index());
102
103                return 0;
104        }
105};
106
107} // namespace WTLx
108
109#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.