Menu

Diff of /FragmentDBWindow.cpp [r68] .. [r69]  Maximize  Restore

Switch to side-by-side view

--- 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