[commit] r2523 - in trunk/GME: Gme Search

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed Sep 3 10:26:36 CDT 2014


Author: ksmyth
Date: Wed Sep  3 10:26:36 2014
New Revision: 2523

Log:
Search: allow multiselect

Modified:
   trunk/GME/Gme/GMESearch.cpp
   trunk/GME/Search/Search.rc
   trunk/GME/Search/SearchCtl.cpp
   trunk/GME/Search/SearchCtl.h
   trunk/GME/Search/SearchDlg.cpp
   trunk/GME/Search/SearchDlg.h

Modified: trunk/GME/Gme/GMESearch.cpp
==============================================================================
--- trunk/GME/Gme/GMESearch.cpp	Wed Sep  3 10:11:36 2014	(r2522)
+++ trunk/GME/Gme/GMESearch.cpp	Wed Sep  3 10:26:36 2014	(r2523)
@@ -179,11 +179,16 @@
 void CGMESearch::SelectObject(LPUNKNOWN mgaObject)
 {
 	CComQIPtr<IMgaObject> ccpmgaObject = mgaObject;
-	if (mgaObject) {
+	if (ccpmgaObject) {
 		CComPtr<IMgaObjects> ccpSelectedObjects;
 		COMTHROW(ccpSelectedObjects.CoCreateInstance(OLESTR("Mga.MgaObjects")));
 		COMTHROW(ccpSelectedObjects->Append(ccpmgaObject));
 		CGMEObjectInspector::theInstance->SetObjects(ccpSelectedObjects);
+	} else {
+		CComQIPtr<IMgaObjects> ccpSelectedObjects = mgaObject;
+		if (ccpSelectedObjects) {
+			CGMEObjectInspector::theInstance->SetObjects(ccpSelectedObjects);
+		}
 	}
 }
 

Modified: trunk/GME/Search/Search.rc
==============================================================================
--- trunk/GME/Search/Search.rc	Wed Sep  3 10:11:36 2014	(r2522)
+++ trunk/GME/Search/Search.rc	Wed Sep  3 10:26:36 2014	(r2523)
@@ -153,7 +153,7 @@
     CONTROL         "Current and below",IDC_CHILDSCOPE2,"Button",BS_AUTORADIOBUTTON | WS_DISABLED | WS_TABSTOP,535,26,71,10
     CONTROL         "Search within results",IDC_CHECK_RESULTS,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,311,62,81,10
     CONTROL         "",IDC_TREE_SEARCH_HISTORY,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_DISABLED | WS_BORDER | WS_HSCROLL | WS_TABSTOP,446,85,165,83
-    CONTROL         "List1",IDC_LISTRESULTS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_DISABLED | WS_BORDER | WS_TABSTOP,2,85,438,83
+    CONTROL         "List1",IDC_LISTRESULTS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | WS_DISABLED | WS_BORDER | WS_TABSTOP,2,85,438,83
     GROUPBOX        "Search Criteria",IDC_STATICCRIT,2,2,134,69,WS_DISABLED
     LTEXT           "Name:",IDC_STATICNAME4,10,15,40,9,WS_DISABLED
     LTEXT           "Role Name:",IDC_STATICROLE,10,28,41,9,WS_DISABLED

Modified: trunk/GME/Search/SearchCtl.cpp
==============================================================================
--- trunk/GME/Search/SearchCtl.cpp	Wed Sep  3 10:11:36 2014	(r2522)
+++ trunk/GME/Search/SearchCtl.cpp	Wed Sep  3 10:26:36 2014	(r2523)
@@ -493,6 +493,13 @@
 	FireClickMgaObject(unk);
 }
 
+void CSearchCtrl::ClickOnObject(CComPtr<IMgaObjects> object)
+{
+	CComPtr<IUnknown> unk;
+	COMTHROW(object.QueryInterface(&unk));
+	FireClickMgaObject(unk);
+}
+
 
 void CSearchCtrl::DblClickOnObject(CComPtr<IMgaObject> object)
 {

Modified: trunk/GME/Search/SearchCtl.h
==============================================================================
--- trunk/GME/Search/SearchCtl.h	Wed Sep  3 10:11:36 2014	(r2522)
+++ trunk/GME/Search/SearchCtl.h	Wed Sep  3 10:26:36 2014	(r2523)
@@ -44,6 +44,7 @@
 	CComPtr<IMgaTerritory> Terr();
 	CComPtr<IMgaObjects> PutInMyTerritory(CComPtr<IMgaObjects> &in_coll);
 	void ClickOnObject(CComPtr<IMgaObject> object);
+	void ClickOnObject(CComPtr<IMgaObjects> object);
 	void DblClickOnObject(CComPtr<IMgaObject> object);
 	void WantToBeClosed();
 	void LocateMgaObject(CComPtr<IMgaObject> object);

Modified: trunk/GME/Search/SearchDlg.cpp
==============================================================================
--- trunk/GME/Search/SearchDlg.cpp	Wed Sep  3 10:11:36 2014	(r2522)
+++ trunk/GME/Search/SearchDlg.cpp	Wed Sep  3 10:26:36 2014	(r2523)
@@ -527,21 +527,9 @@
 		}
         try
         {
-            int selected = m_lstResults.GetSelectionMark() + 1; //IMgaFCOs 1 based, GetSelectionMark 0 based
-            //LVITEM lvItem;
-            long lParam = m_lstResults.GetItemData(selected-1);
-           // m_lstResults.GetItem(&lvItem);
-            CComPtr<IMgaFCO> selectedFCO;
-            // selected might be 0 because GeSelectionMark might have returned -1
-            if( selected >= 1 && selected <= count)
-            {
-                COMTHROW(results->get_Item(lParam+1, &selectedFCO));
-            }
-			VARIANT_BOOL isInstance, isLibObject;
-			COMTHROW(selectedFCO->get_IsInstance(&isInstance));
-			COMTHROW(selectedFCO->get_IsLibObject(&isLibObject));
-            CComQIPtr<IMgaObject> selectedObject(selectedFCO);
-			COMTHROW(selectedObject->DestroyObject());
+			ForEachSelectedFCO([&](CComPtr<IMgaFCO> selectedFCO) {
+				COMTHROW(selectedFCO->DestroyObject());
+			});
             TheCtrl->CommitTransaction();
 			// RemoveZombies
         }
@@ -633,7 +621,7 @@
             int selected = m_lstResults.GetSelectionMark() + 1; //IMgaFCOs 1 based, GetSelectionMark 0 based
             long lParam = m_lstResults.GetItemData(selected-1);
             CComPtr<IMgaFCO> selectedFCO;
-            // selected might be 0 because GeSelectionMark might have returned -1
+            // selected might be 0 because GetSelectionMark might have returned -1
             if( selected >= 1 && selected <= count)
             {
                 COMTHROW(results->get_Item(lParam+1, &selectedFCO)); // crashed probably when called with 0
@@ -648,10 +636,15 @@
                 specialSearchFCO = selectedFCO;
             }
 
-            //CComPtr<IMgaObject> selectedObject = (IMgaObject *)(selectedFCO.p); // WAS this the scapegoat?
-            CComQIPtr<IMgaObject> selectedObject( selectedFCO);
+			CComPtr<IMgaObjects> selectedObjects;
+			COMTHROW(selectedObjects.CoCreateInstance(L"Mga.MgaObjects", 0, CLSCTX_INPROC));
+			ForEachSelectedFCO([&](CComPtr<IMgaFCO> selected) {
+				CComQIPtr<IMgaObject> selectedObject(selected);
+				selectedObjects->Append(selectedObject);
+			});
+			
             TheCtrl->CommitTransaction();
-            if( selectedObject) TheCtrl->ClickOnObject(selectedObject);
+            TheCtrl->ClickOnObject(selectedObjects);
         }
         catch( ...)
         {

Modified: trunk/GME/Search/SearchDlg.h
==============================================================================
--- trunk/GME/Search/SearchDlg.h	Wed Sep  3 10:11:36 2014	(r2522)
+++ trunk/GME/Search/SearchDlg.h	Wed Sep  3 10:26:36 2014	(r2523)
@@ -224,6 +224,20 @@
 		m_edtKindNameCtrlSecond.SetOptions(std::move(kinds));
 	}
 
+	template<typename F>
+	void ForEachSelectedFCO(F f)
+	{
+		POSITION pos = m_lstResults.GetFirstSelectedItemPosition();
+		while (pos)
+		{
+			int nItem = m_lstResults.GetNextSelectedItem(pos);
+			long lParam = m_lstResults.GetItemData(nItem);
+			CComPtr<IMgaFCO> selected;
+			COMTHROW(results->get_Item(lParam + 1, &selected));
+			f(selected);
+		}
+	}
+
 protected:
 	BOOL m_scopedCtrlEnabled; // whether to enable scoped search at all
 


More information about the gme-commit mailing list