[commit] r2411 - in trunk/GME: GMEActiveBrowser Search
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Fri Jan 10 16:20:29 CST 2014
Author: ksmyth
Date: Fri Jan 10 16:20:29 2014
New Revision: 2411
Log:
Search: autocomplete Kinds in combobox
Modified:
trunk/GME/GMEActiveBrowser/AutoComboBox.cpp
trunk/GME/Search/SearchCtl.cpp
trunk/GME/Search/SearchDlg.cpp
trunk/GME/Search/SearchDlg.h
Modified: trunk/GME/GMEActiveBrowser/AutoComboBox.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/AutoComboBox.cpp Thu Jan 2 14:51:11 2014 (r2410)
+++ trunk/GME/GMEActiveBrowser/AutoComboBox.cpp Fri Jan 10 16:20:29 2014 (r2411)
@@ -66,9 +66,9 @@
void CAutoComboBox::Fill(CString& strText, BOOL bReload)
{
// Clear combo
- while(GetCount()!=0)
+ for (int i = GetCount() - 1; i >= 0; i--)
{
- DeleteString(0);
+ DeleteString(i);
}
if(strText=="")
Modified: trunk/GME/Search/SearchCtl.cpp
==============================================================================
--- trunk/GME/Search/SearchCtl.cpp Thu Jan 2 14:51:11 2014 (r2410)
+++ trunk/GME/Search/SearchCtl.cpp Fri Jan 10 16:20:29 2014 (r2411)
@@ -327,6 +327,7 @@
m_territory = NULL;
COMTHROW( m_project->CreateTerritory(&m_xEventSink,&m_territory,NULL) );
m_searchDlg.EnableSearch();
+ m_searchDlg.GetKinds(m_project);
}
else {
Modified: trunk/GME/Search/SearchDlg.cpp
==============================================================================
--- trunk/GME/Search/SearchDlg.cpp Thu Jan 2 14:51:11 2014 (r2410)
+++ trunk/GME/Search/SearchDlg.cpp Fri Jan 10 16:20:29 2014 (r2411)
@@ -17,6 +17,53 @@
static char THIS_FILE[] = __FILE__;
#endif
+
+BEGIN_MESSAGE_MAP(AutocompleteComboBox, CComboBox)
+ ON_CONTROL_REFLECT(CBN_EDITCHANGE, OnEditChange)
+END_MESSAGE_MAP()
+
+LRESULT AutocompleteComboBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
+{
+ if (message == WM_KEYDOWN && wParam == VK_DOWN)
+ { // FIXME this doesn't work
+ this->ShowDropDown();
+ return 0;
+ }
+
+ return __super::WindowProc(message, wParam, lParam);
+}
+
+void AutocompleteComboBox::OnEditChange()
+{
+ CString str;
+ GetWindowTextW(str);
+ if (m_previous.GetLength() >= str.GetLength())
+ {
+ m_previous = str;
+ return;
+ }
+ auto substr_eq = [&str](const wchar_t* str2) { return wcsncmp(str, str2, str.GetLength()) == 0; };
+ ResetContent();
+ auto it = std::find_if(m_options.begin(), m_options.end(), substr_eq);
+ auto first = it;
+ for (; it != m_options.end() && substr_eq(*it); ++it)
+ {
+ InsertString(-1, *it);
+ }
+ if (first != m_options.end())
+ {
+ SetWindowTextW(*first);
+ SetEditSel(str.GetLength(), -1);
+ }
+ else
+ {
+ SetWindowTextW(str);
+ SetEditSel(str.GetLength(), -1);
+ }
+ m_previous = str;
+}
+
+
/////////////////////////////////////////////////////////////////////////////
// CSearchDlg dialog
Modified: trunk/GME/Search/SearchDlg.h
==============================================================================
--- trunk/GME/Search/SearchDlg.h Thu Jan 2 14:51:11 2014 (r2410)
+++ trunk/GME/Search/SearchDlg.h Fri Jan 10 16:20:29 2014 (r2411)
@@ -10,6 +10,8 @@
#include "ComHelp.h"
#include "afxwin.h"
#include "afxcmn.h"
+#include <vector>
+#include <algorithm>
// SearchDlg.h : header file
//
@@ -50,6 +52,20 @@
return _tcscmp(strItem2, strItem1);
}
+class AutocompleteComboBox : public CComboBox
+{
+ CString m_previous;
+ std::vector<CString> m_options;
+public:
+ void SetOptions(std::vector<CString>&& options)
+ {
+ m_options = std::move(options);
+ }
+ DECLARE_MESSAGE_MAP()
+ void OnEditChange();
+protected:
+ virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
+};
class CSearchDlg : public CDialog
{
@@ -119,14 +135,14 @@
//first search criteria controls
CComboBox m_edtNameCtrlFirst;
- CComboBox m_edtKindNameCtrlFirst;
+ AutocompleteComboBox m_edtKindNameCtrlFirst;
CComboBox m_edtRoleNameCtrlFirst;
CComboBox m_edtAttributeCtrlFirst;
//second search criteria controls
CComboBox m_edtNameCtrlSecond;
CComboBox m_edtRoleNameCtrlSecond;
- CComboBox m_edtKindNameCtrlSecond;
+ AutocompleteComboBox m_edtKindNameCtrlSecond;
CComboBox m_edtAttributeCtrlSecond;
CButton m_logicalGrp;
@@ -178,7 +194,28 @@
CComPtr<IMgaFCOs> results;
CComPtr<IMgaFCO> specialSearchFCO;
+public:
+ void GetKinds(CComPtr<IMgaProject>& project)
+ {
+ std::vector<CString> kinds;
+ CComPtr<IMgaMetaProject> meta;
+ project->get_RootMeta(&meta);
+ CComPtr<IMgaMetaFolder> root;
+ meta->get_RootFolder(&root);
+ CComPtr<IMgaMetaFCOs> metaFCOs;
+ root->get_DefinedFCOs(&metaFCOs);
+ MGACOLL_ITERATE(IMgaMetaFCO, metaFCOs)
+ {
+ _bstr_t name;
+ MGACOLL_ITER->get_Name(name.GetAddress());
+ kinds.push_back(CString(static_cast<const wchar_t*>(name)));
+ } MGACOLL_ITERATE_END;
+ std::sort(kinds.begin(), kinds.end());
+ m_edtKindNameCtrlFirst.SetOptions(std::vector<CString>(kinds));
+ m_edtKindNameCtrlSecond.SetOptions(std::move(kinds));
+ }
+protected:
BOOL m_scopedCtrlEnabled; // whether to enable scoped search at all
More information about the gme-commit
mailing list