MCE - Marching Cube ELD SVN
Crystallographic software for displaying voxel maps - electron density
Brought to you by:
janrohlicek
--- a/FragmentDBWindow.cpp +++ b/FragmentDBWindow.cpp @@ -3,8 +3,10 @@ #include "stdafx.h" #include "MCE.h" +#include "afxdialogex.h" +#include "IO.h" #include "FragmentDBWindow.h" -#include "afxdialogex.h" + // FragmentDBWindow – dialog @@ -23,13 +25,20 @@ void FragmentDBWindow::DoDataExchange(CDataExchange* pDX) { - CDialog::DoDataExchange(pDX); + CDialog::DoDataExchange(pDX); + DDX_Text(pDX, IDC_EDIT_SEARCH_DB, m_search_key); + DDX_Control(pDX, IDC_LIST1, m_listBox); + DDX_Control(pDX, IDC_EDIT_NAME, m_selected_name); + DDX_Control(pDX, IDC_EDIT_SHELX, m_shelx_restr); + DDX_Control(pDX, IDC_EDIT_ATOMS, m_atom_list); } BEGIN_MESSAGE_MAP(FragmentDBWindow, CDialog) ON_BN_CLICKED(IDOK, &FragmentDBWindow::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &FragmentDBWindow::OnBnClickedCancel) + ON_LBN_SELCHANGE(IDC_LIST1, &FragmentDBWindow::OnLbnSelchangeList1) + ON_EN_CHANGE(IDC_EDIT_SEARCH_DB, &FragmentDBWindow::OnEnChangeEditSearchDb) END_MESSAGE_MAP() BOOL FragmentDBWindow::OnInitDialog() @@ -49,8 +58,9 @@ ScreenToClient(rect); openGLControl.Create(rect,this); + openGLControl.m_atom_list = &m_atom_list; - + readFragmentDB(); return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten } // FragmentDBWindow – obslužné rutiny zpráv @@ -68,3 +78,115 @@ // TODO: Sem přidejte obslužnou rutinu oznámení ovládacích prvků. CDialog::OnCancel(); } +void FragmentDBWindow::refreshDBList(CString key) +{ + m_listBox.ResetContent(); + for (int i = 0; i<m_fragment_db.size(); i++) { + if(key.Compare("")==0) { + m_listBox.AddString(m_fragment_db[i].tag_name + ": " + m_fragment_db[i].alt_names); + } else { + CString tmp = m_fragment_db[i].tag_name; + tmp += ": " + m_fragment_db[i].alt_names; + tmp.MakeLower(); + if(tmp.Find(key.MakeLower())!=-1) { + m_listBox.AddString(m_fragment_db[i].tag_name + ": " + m_fragment_db[i].alt_names); + } + } + } + //UpdateData(FALSE); +} +void FragmentDBWindow::readFragmentDB() +{ + //get application directory + char szString[255]; + VERIFY(::GetModuleFileName(AfxGetInstanceHandle(), szString, _MAX_PATH)); + CString sPath = (CString)szString; + sPath = sPath.Left(sPath.ReverseFind('\\')); + sPath=sPath+"\\dsr_db.txt"; + + //AfxMessageBox(sPath); + IO::ReadFragmentDBFile("dsr_db.txt", m_fragment_db); + refreshDBList(""); +} + +void FragmentDBWindow::loadFromDB(CString name) +{ + m_selected_name.SetWindowTextA(name); + for (int i = 0; i<m_fragment_db.size(); i++) { + if(m_fragment_db[i].tag_name.CompareNoCase(name)==0) { + CString tmp = m_fragment_db[i].shelx_restr; + tmp.Replace("\n", "\r\n"); + m_shelx_restr.SetWindowTextA(tmp); + CString t; + for(int j=0;j<m_fragment_db[i].atoms.size();j++) { + CString q; + q.Format("%s %d %3.4f %3.4f %3.4f\r\n", m_fragment_db[i].atoms[j].AtomLabel, m_fragment_db[i].atoms[j].AtomicNumber, m_fragment_db[i].atoms[j].X, m_fragment_db[i].atoms[j].Y, m_fragment_db[i].atoms[j].Z); + t+=q; + } + m_atom_list.SetWindowTextA(t); + openGLControl.setMolecule(m_fragment_db[i].mol); + + } + } +} +void FragmentDBWindow::OnLbnSelchangeList1() +{ + CString selection; + + int nSel = m_listBox.GetCurSel(); + if (nSel != LB_ERR) + { + CString ItemSelected; + m_listBox.GetText(nSel, ItemSelected); + int p = ItemSelected.Find(":"); + if(p!=-1) { + ItemSelected = ItemSelected.Mid(0, p); + } + loadFromDB(ItemSelected); + } + +} + +void FragmentDBWindow::OnEnChangeEditSearchDb() +{ + UpdateData(TRUE); + refreshDBList(m_search_key); + // TODO: Pokud jde o ovládací prvek RICHEDIT, ovládací prvek + // nepošle toto oznámení, pokud nepřepisujete funkci CDialog::OnInitDialog() + // a nevoláte metodu CRichEditCtrl().SetEventMask() + // s příznakem ENM_CHANGE použitým pro masku s operátorem OR. + + // TODO: Sem přidejte obslužnou rutinu oznámení ovládacích prvků. +} +/* +void FragmentDBWindow::OnMouseMove(UINT nFlags, CPoint point) +{ + // TODO: Add your message handler code here and/or call default + + + CDialog::OnMouseMove(nFlags, point); + + //m_atom_list.SetWindowTextA("f"); + openGLControl.m_atom_list = &m_atom_list; + openGLControl.OnMouseMove( nFlags, point); + +} +*/ +/* +void FragmentDBWindow::OnLButtonDown(UINT nFlags, CPoint point) +{ + FragmentDBWindow::OnLButtonDown(nFlags, point); + // redirect mouse messages to this pint from outside window + openGLControl.OnLButtonDown(nFlags, point); + +} + +void FragmentDBWindow::OnLButtonUp(UINT nFlags, CPoint point) +{ + FragmentDBWindow::OnLButtonUp(nFlags, point); + // stop the outside window mouse tracing + openGLControl.OnLButtonUp(nFlags, point); + + +} +*/ \ No newline at end of file