00001
00002
00003
00004 #include "stdafx.h"
00005 #include "resource.h"
00006 #include "NmspSpec.h"
00007 #include ".\nmspspec.h"
00008 #include <list>
00009
00010
00011
00012 IMPLEMENT_DYNAMIC(NmspSpec, CDialog)
00013 NmspSpec::NmspSpec(CWnd* pParent )
00014 : CDialog(NmspSpec::IDD, pParent)
00015 , m_edChanged( false)
00016 {
00017 }
00018
00019 NmspSpec::~NmspSpec()
00020 {
00021 }
00022
00023 void NmspSpec::DoDataExchange(CDataExchange* pDX)
00024 {
00025 CDialog::DoDataExchange(pDX);
00026 DDX_Control(pDX, IDC_EDIT1, m_edName);
00027 DDX_Control(pDX, IDC_TREE1, m_tree);
00028 DDX_Control(pDX, IDC_CHECK1, m_bEnabled);
00029 DDX_Control(pDX, IDC_SAVE, m_bSave);
00030 }
00031
00032
00033 BEGIN_MESSAGE_MAP(NmspSpec, CDialog)
00034 ON_EN_KILLFOCUS(IDC_EDIT1, OnEnKillfocusEdit1)
00035 ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
00036 ON_NOTIFY(NM_CLICK, IDC_TREE1, OnNMClickTree1)
00037 ON_NOTIFY(NM_SETFOCUS, IDC_TREE1, OnNMSetfocusTree1)
00038 ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnTvnSelchangedTree1)
00039 ON_BN_CLICKED(IDC_SAVE, OnBnClickedSave)
00040 ON_EN_SETFOCUS(IDC_EDIT1, OnEnSetfocusEdit1)
00041 END_MESSAGE_MAP()
00042
00043
00044
00045
00046 void NmspSpec::updateItemInfo( int pIdx, CString pTxt)
00047 {
00048 int idx = 0;
00049 for( MetaBON::MetaGMEVisitor::VectorOfPairs::iterator it = m_data.begin()
00050 ; it != m_data.end()
00051 ; ++it, ++idx)
00052 {
00053 if( idx == pIdx && !it->first->isInLibrary())
00054 {
00055 it->second = (LPCTSTR) pTxt;
00056 }
00057 }
00058 m_bSave.EnableWindow( m_edChanged = false);
00059 }
00060
00061 bool NmspSpec::loadItemInfo( int pIdx, CString& pTxt)
00062 {
00063 bool editable = false;
00064 int idx = 0;
00065 for( MetaBON::MetaGMEVisitor::VectorOfPairs::iterator it = m_data.begin()
00066 ; it != m_data.end()
00067 ; ++it, ++idx)
00068 {
00069 if( idx == pIdx)
00070 {
00071 pTxt = it->second.c_str();
00072 editable = !it->first->isInLibrary();
00073 }
00074 }
00075 return editable;
00076 }
00077
00078 void NmspSpec::setData( MetaBON::MetaGMEVisitor::VectorOfPairs& pData)
00079 {
00080 m_data = pData;
00081 }
00082
00083 void NmspSpec::getData( MetaBON::MetaGMEVisitor::VectorOfPairs& pResu)
00084 {
00085 pResu = m_data;
00086 }
00087
00088 void NmspSpec::initElems()
00089 {
00090 int p = 0;
00091 for( MetaBON::MetaGMEVisitor::VectorOfPairs::const_iterator it = m_data.begin()
00092 ; it != m_data.end()
00093 ; ++it, ++p)
00094 {
00095 insert( p, it);
00096 }
00097 }
00098
00099 void NmspSpec::insert( int pIdx, MetaBON::MetaGMEVisitor::VectorOfPairs::const_iterator it)
00100 {
00101 std::string pr = it->first->getName();
00102 std::string nm = it->second;
00103
00104 HTREEITEM ele = m_tree.InsertItem( LVIF_TEXT|TVIF_PARAM, pr.c_str(), 0, 0, 0, 0, pIdx, pIdx?m_rootElem:TVI_ROOT, TVI_LAST);
00105
00106 if( pIdx == 0) m_rootElem = ele;
00107 }
00108
00109 void NmspSpec::updateEditField( int pSel )
00110 {
00111 int hm = pSel;
00112 if( hm < 0)
00113 {
00114
00115 TVITEM tv;
00116 tv.mask = TVIF_PARAM | TVIF_HANDLE;
00117 tv.hItem = m_tree.GetNextItem( TVI_ROOT, TVGN_CARET);
00118 if( tv.hItem && m_tree.GetItem( &tv))
00119 {
00120 hm = tv.lParam;
00121 }
00122 }
00123
00124 if( hm >= 0)
00125 {
00126 CString itm;
00127 bool editable = loadItemInfo( hm, itm);
00128 m_edName.EnableWindow( editable);
00129 m_edName.SetWindowText( (LPCTSTR) itm);
00130 }
00131 else
00132 m_edName.SetWindowText( "");
00133 }
00134
00135 BOOL NmspSpec::OnInitDialog()
00136 {
00137 CDialog::OnInitDialog();
00138
00139 initElems();
00140 m_tree.Expand( m_rootElem, TVE_EXPAND);
00141 m_bSave.EnableWindow( m_edChanged = false);
00142
00143 return TRUE;
00144
00145 }
00146
00147 void NmspSpec::OnEnKillfocusEdit1()
00148 {
00149 m_bSave.EnableWindow( m_edChanged);
00150 return;
00151 }
00152
00153 void NmspSpec::OnEnChangeEdit1()
00154 {
00155
00156
00157
00158
00159 m_bSave.EnableWindow( m_edChanged = true);
00160
00161 }
00162
00163 void NmspSpec::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
00164 {
00165 updateEditField();
00166 *pResult = 0;
00167 }
00168
00169 void NmspSpec::OnNMSetfocusTree1(NMHDR *pNMHDR, LRESULT *pResult)
00170 {
00171 LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
00172 updateEditField();
00173 m_bSave.EnableWindow( m_edChanged = false);
00174 *pResult = 0;
00175 }
00176
00177 void NmspSpec::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
00178 {
00179 LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
00180 updateEditField( pNMTreeView ? pNMTreeView->itemNew.lParam : 0);
00181 m_bSave.EnableWindow( m_edChanged = false);
00182 *pResult = 0;
00183 }
00184
00185 void NmspSpec::OnBnClickedSave()
00186 {
00187 CString txt;
00188 m_edName.GetWindowText( txt);
00189
00190
00191 TVITEM tv;
00192 tv.mask = TVIF_PARAM | TVIF_HANDLE;
00193 tv.hItem = m_tree.GetNextItem( TVI_ROOT, TVGN_CARET);
00194 if( tv.hItem && m_tree.GetItem( &tv))
00195 {
00196 updateItemInfo( tv.lParam, txt);
00197
00198 m_bSave.EnableWindow( m_edChanged = false);
00199 m_tree.SetFocus();
00200 }
00201 }
00202
00203 void NmspSpec::OnEnSetfocusEdit1()
00204 {
00205 m_bSave.EnableWindow( m_edChanged);
00206 }