[GME-commit] GMESRC/GME/Search Input.cpp, 1.3, 1.4 Input.h, 1.2, 1.3 Search.odl, 1.3, 1.4 Search.rc, 1.12, 1.13 SearchAlg.cpp, 1.11, 1.12 SearchAlg.h, 1.7, 1.8 SearchCtl.cpp, 1.3, 1.4 SearchCtl.h, 1.4, 1.5 SearchDlg.cpp, 1.22, 1.23 SearchDlg.h, 1.11, 1.12 resource.h, 1.9, 1.10

Log messages of CVS commits gme-commit at list.isis.vanderbilt.edu
Fri Apr 18 12:00:45 CDT 2008


Update of /project/gme-repository/GMESRC/GME/Search
In directory escher:/tmp/cvs-serv6401

Modified Files:
	Input.cpp Input.h Search.odl Search.rc SearchAlg.cpp 
	SearchAlg.h SearchCtl.cpp SearchCtl.h SearchDlg.cpp 
	SearchDlg.h resource.h 
Log Message:
Capable of local search, based on the selected object collection in the Browser.
(The selected objects can be any type, not just containers, and will check property matches
also on non-container selections.)


CVS User: Zoltan Molnar, ISIS (zolmol)

Index: Input.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/Input.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Input.h	4 Dec 2006 18:19:23 -0000	1.2
--- Input.h	18 Apr 2008 17:00:43 -0000	1.3
***************
*** 25,29 ****
  	void GetInput(CString name, CString role, CString kind, CString attrname, int attrtype,
  				CString attrval, BOOL spl, BOOL mod, BOOL atom, BOOL ref, BOOL set, BOOL full, 
! 				 IMgaFCO *root, int searchscope, BOOL caseMatch);
  
  	/// The name of the object the user is searching for.
--- 25,29 ----
  	void GetInput(CString name, CString role, CString kind, CString attrname, int attrtype,
  				CString attrval, BOOL spl, BOOL mod, BOOL atom, BOOL ref, BOOL set, BOOL full, 
! 				 IMgaFCO *root, int searchscope, BOOL caseMatch, BOOL bScopedSearch);
  
  	/// The name of the object the user is searching for.
***************
*** 55,66 ****
  
  	/// Where to start the search from.
! 	CComPtr<IMgaFCO> searchroot;
  
  //	int doReferenceSearch;
  	/// The variable used for determining the Search Type - Global(0) or Local(1)
! 	int doGlobalSearch;
  
  	/// Does the user want caseMatching search
  	BOOL getCaseIgnored;
  };
  
--- 55,69 ----
  
  	/// Where to start the search from.
! 	//CComPtr<IMgaFCO> searchroot; // Looks Obsolete to me [Zolmol]
  
  //	int doReferenceSearch;
  	/// The variable used for determining the Search Type - Global(0) or Local(1)
! 	//int doGlobalSearch; // Looks Obsolete to me [Zolmol]
  
  	/// Does the user want caseMatching search
  	BOOL getCaseIgnored;
+ 
+ 	/// Is the search restricted to a scope?
+ 	BOOL doScopedSearch;
  };
  

Index: SearchAlg.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/SearchAlg.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** SearchAlg.cpp	4 Dec 2006 18:19:23 -0000	1.11
--- SearchAlg.cpp	18 Apr 2008 17:00:43 -0000	1.12
***************
*** 35,39 ****
  
  // the main entry point for a search
! void CSearch::Search(IMgaFolder *root, IMgaFCO *selected, CComPtr<IMgaFCOs> disp, CProgressCtrl *Progress)
  {
  	results = disp;
--- 35,39 ----
  
  // the main entry point for a search
! void CSearch::Search(IMgaFolder *root, IMgaObjects* scopeColl, IMgaFCO *selected, CComPtr<IMgaFCOs> disp, CProgressCtrl *Progress)
  {
  	results = disp;
***************
*** 46,50 ****
  		SearchReferences(selected);
  	}
! 	else 
  	{
  		SearchFolderHierarchy(pRoot);	
--- 46,86 ----
  		SearchReferences(selected);
  	}
! 	else if( filter.doScopedSearch && scopeColl)
! 	{
! 		CComPtr<IMgaFCOs> non_container_coll;                  // will store the Atoms, Refs and Sets
! 		non_container_coll.CoCreateInstance( L"Mga.MgaFCOs");  // which are not Fs and Ms
! 		long nExtra = 0;                                       // how many are there in the above collection
! 
! 		MGACOLL_ITERATE(IMgaObject, scopeColl)
! 		{
! 			CComPtr<IMgaObject> iter;
! 			
! 			objtype_enum type;
! 			COMTHROW( MGACOLL_ITER->get_ObjType( &type));
! 
! 			switch( type) {
! 				case OBJTYPE_FOLDER:   SearchFolderHierarchy( CComQIPtr<IMgaFolder>( MGACOLL_ITER));break;
! 				case OBJTYPE_MODEL:    SearchModelHierarchy( CComQIPtr<IMgaModel>( MGACOLL_ITER));break;
! 				case OBJTYPE_SET:
! 				case OBJTYPE_ATOM:
! 				case OBJTYPE_REFERENCE: 
! 					CComQIPtr<IMgaFCO> an_fco( MGACOLL_ITER);
! 					if( an_fco && non_container_coll) 
! 					{
! 						non_container_coll->Append( an_fco);
! 						++nExtra;
! 					}
! 			} // switch
! 		} MGACOLL_ITERATE_END;
! 
! 		if( nExtra && non_container_coll) // if coll is non-zero and has elements inside
! 		{		
! 			CheckAllReferences( non_container_coll);  // deals with refs only
! 			CheckAllAtoms( non_container_coll);       // ... atoms only
! 			CheckAllSets( non_container_coll);        // ... sets only
! 		}
! 		non_container_coll.Release();
! 	}
! 	else
  	{
  		SearchFolderHierarchy(pRoot);	

Index: SearchDlg.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/SearchDlg.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** SearchDlg.cpp	10 Apr 2008 22:32:38 -0000	1.22
--- SearchDlg.cpp	18 Apr 2008 17:00:43 -0000	1.23
***************
*** 21,24 ****
--- 21,25 ----
  
  CSearchDlg::CSearchDlg()
+ : m_scopedCtrlEnabled( FALSE)
  {
  	//{{AFX_DATA_INIT(CSearchDlg)
***************
*** 37,40 ****
--- 38,42 ----
  	m_chkLocate = FALSE;
  	m_chkMatchCase = TRUE;
+ 	m_chkScopedSearch = FALSE;
  	m_stcRef = _T("");
  	//}}AFX_DATA_INIT
***************
*** 52,55 ****
--- 54,58 ----
  	DDX_Control(pDX, IDC_CHECK_LOCATE, m_chkLocateCtrl);
  	DDX_Control(pDX, IDC_CHECK_CASESENS, m_chkMatchCaseCtrl);
+ 	DDX_Control(pDX, IDC_CHECK_SCOPED, m_chkScopedSearchCtrl);
  	DDX_Control(pDX, IDC_CHECKFULLWORD, m_chkFullWordCtrl);
  	DDX_Control(pDX, IDC_EDITNAME, m_edtNameCtrl);
***************
*** 82,85 ****
--- 85,89 ----
  	DDX_Check(pDX, IDC_CHECK_LOCATE, m_chkLocate);
  	DDX_Check(pDX, IDC_CHECK_CASESENS, m_chkMatchCase);
+ 	DDX_Check(pDX, IDC_CHECK_SCOPED, m_chkScopedSearch);
  	DDX_Text(pDX, IDC_STATICREF, m_stcRef);
  	//}}AFX_DATA_MAP
***************
*** 103,110 ****
--- 107,126 ----
  END_MESSAGE_MAP()
  
+ void CSearchDlg::EnableScoped( BOOL enabled)
+ {
+ 	m_scopedCtrlEnabled = enabled;
+ 	if( m_chkScopedSearchCtrl.GetSafeHwnd())
+ 	{
+ 		m_chkScopedSearchCtrl.SetCheck( BST_UNCHECKED);
+ 		m_chkScopedSearchCtrl.EnableWindow( m_scopedCtrlEnabled);
+ 	}
+ }
+ 
  BOOL CSearchDlg::OnInitDialog()
  {
  	CDialog::OnInitDialog();
  	//EnableSplSearch();
+ 	m_chkScopedSearchCtrl.EnableWindow( m_scopedCtrlEnabled);
+ 
  	m_lstResults.InsertColumn(1, "Object", LVCFMT_LEFT, 100, 1);
  	m_lstResults.InsertColumn(2, "Path", LVCFMT_LEFT, 210, 2);
***************
*** 244,247 ****
--- 260,264 ----
  
  		TheCtrl->BeginTransaction();
+ 		CComPtr<IMgaObjects> ccpObjectsInTerr = TheCtrl->PutInMyTerritory( TheCtrl->GetScopedL());
  
  		//the CInput class is a legacy from the Search Add-on
***************
*** 252,261 ****
  		CInput inp;
  		inp.GetInput(m_edtName,m_edtRoleName,m_edtKindName,m_edtAttrName,m_cmbCtrl.GetCurSel(),m_edtAttrValue,
! 						m_chkSplSearch,m_chkMod,m_chkAtom,m_chkRef,m_chkSet,m_chkFullWord,NULL,0,m_chkMatchCase);
  
  		
  		CSearch searchGME(inp);
  
! 		searchGME.Search(rootInput,specialSearchFCO,results,&m_pgsSearch);
  //		AfxMessageBox("Finished Searching");
  		
--- 269,278 ----
  		CInput inp;
  		inp.GetInput(m_edtName,m_edtRoleName,m_edtKindName,m_edtAttrName,m_cmbCtrl.GetCurSel(),m_edtAttrValue,
! 						m_chkSplSearch,m_chkMod,m_chkAtom,m_chkRef,m_chkSet,m_chkFullWord,NULL,0,m_chkMatchCase,m_chkScopedSearch);
  
  		
  		CSearch searchGME(inp);
  
! 		searchGME.Search(rootInput, ccpObjectsInTerr, specialSearchFCO,results,&m_pgsSearch);
  //		AfxMessageBox("Finished Searching");
  		

Index: resource.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/resource.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** resource.h	2 May 2006 22:05:59 -0000	1.9
--- resource.h	18 Apr 2008 17:00:43 -0000	1.10
***************
*** 40,43 ****
--- 40,44 ----
  #define IDC_CHECK_LOCATE                229
  #define IDC_CHECK_CASESENS              230
+ #define IDC_CHECK_SCOPED                231
  
  // Next default values for new objects

Index: SearchCtl.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/SearchCtl.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** SearchCtl.cpp	2 May 2006 22:05:59 -0000	1.3
--- SearchCtl.cpp	18 Apr 2008 17:00:43 -0000	1.4
***************
*** 37,40 ****
--- 37,41 ----
  	//}}AFX_DISPATCH_MAP
  	DISP_FUNCTION_ID(CSearchCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
+ 	DISP_FUNCTION_ID(CSearchCtrl, "SelMgaObjects", dispidSelMgaObjects, SelMgaObjects, VT_EMPTY, VTS_UNKNOWN)
  END_DISPATCH_MAP()
  
***************
*** 448,451 ****
--- 449,482 ----
  }
  
+ CComPtr<IMgaTerritory> CSearchCtrl::Terr()
+ {
+ 	return m_territory;
+ }
+ 
+ // needs to be called in a transaction
+ CComPtr<IMgaObjects> CSearchCtrl::PutInMyTerritory(CComPtr<IMgaObjects> &p_inColl)
+ {
+ 	CComPtr<IMgaObjects> coll_in_active_terr;
+ 	coll_in_active_terr.CoCreateInstance( L"Mga.MgaObjects");
+ 
+ 	long c = 0;
+ 	if( p_inColl) p_inColl->get_Count( &c);
+ 
+ 	// nothing to copy? no territory? failed to create out coll? or no transaction active?
+ 	if( c > 0 && m_territory && coll_in_active_terr && m_transactionCnt > 0) 
+ 	{
+ 		for( long i = 1; i <= c; ++i)                 // for all items in coll
+ 		{
+ 			CComPtr<IMgaObject> obj, item;
+ 			p_inColl->get_Item( i, &item);
+ 
+ 			m_territory->OpenObj( item, &obj);        // puts in our territory
+ 			coll_in_active_terr->Append( obj);
+ 		}
+ 	}
+ 
+ 	return coll_in_active_terr;
+ }
+ 
  void CSearchCtrl::ClickOnObject(CComPtr<IMgaObject> object)
  {
***************
*** 484,486 ****
--- 515,540 ----
  		AbortTransaction();
  	}
+ }
+ 
+ void CSearchCtrl::SelMgaObjects(IUnknown* p_selMgaObjs)
+ {
+ 	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+ 
+ 	if (p_selMgaObjs != NULL) {
+ 		CComQIPtr<IMgaObjects> ccpMgaObjects( p_selMgaObjs);
+ 		if (ccpMgaObjects == NULL) 
+ 		{
+ 			ThrowError(CTL_E_INVALIDPROPERTYVALUE, _T("Unable to cast MgaObjects."));
+ 			m_searchDlg.EnableScoped( FALSE);
+ 			return;
+ 		}
+ 
+ 		m_MgaObjs = ccpMgaObjects;
+ 		m_searchDlg.EnableScoped( TRUE);
+ 	}
+ 	else { // called when Dlg is Hidden, in order to release the Mga ptrs
+ 		m_MgaObjs.Release();
+ 		m_searchDlg.EnableScoped( FALSE);
+ 	}
+ 	//SetModifiedFlag();
  }

Index: SearchCtl.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/SearchCtl.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** SearchCtl.h	2 May 2006 22:05:59 -0000	1.4
--- SearchCtl.h	18 Apr 2008 17:00:43 -0000	1.5
***************
*** 38,44 ****
--- 38,47 ----
  public: //there is a "protected:" in the AFX section above..
  	CComPtr<IMgaProject> GetProject() { return m_project; }
+ 	CComPtr<IMgaObjects> GetScopedL() { return m_MgaObjs; }
  	void BeginTransaction();
  	void CommitTransaction();
  	void AbortTransaction();
+ 	CComPtr<IMgaTerritory> Terr();
+ 	CComPtr<IMgaObjects> PutInMyTerritory(CComPtr<IMgaObjects> &in_coll);
  	void ClickOnObject(CComPtr<IMgaObject> object);
  	void DblClickOnObject(CComPtr<IMgaObject> object);
***************
*** 59,62 ****
--- 62,66 ----
  	CComPtr<IMgaTerritory>	m_territory;
  	CComPtr<IMgaProject>	m_project;
+ 	CComPtr<IMgaObjects>    m_MgaObjs;
  
  // Message maps
***************
*** 109,112 ****
--- 113,117 ----
  	dispidMgaProject = 1L,
  	dispidOpenProject = 2L,
+ 	dispidSelMgaObjects = 3L,
  	eventidClickMgaObject = 1L,
  	eventidDblClickMgaObject = 2L,
***************
*** 120,123 ****
--- 125,130 ----
  	int	m_transactionCnt;
  	bool m_inEventTransactionMode;
+ protected:
+ 	void SelMgaObjects(IUnknown* p_selMgaObjs);
  };
  

Index: Search.rc
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/Search.rc,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** Search.rc	4 Dec 2006 18:19:23 -0000	1.12
--- Search.rc	18 Apr 2008 17:00:43 -0000	1.13
***************
*** 169,172 ****
--- 169,174 ----
      CONTROL         "Progress1",IDC_PROGRESSSEARCH,"msctls_progress32",NOT 
                      WS_VISIBLE | WS_BORDER,16,162,199,20
+     CONTROL         "Scoped Search",IDC_CHECK_SCOPED,"Button",
+                     BS_AUTOCHECKBOX | WS_TABSTOP,161,115,65,10
  END
  

Index: SearchAlg.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/SearchAlg.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** SearchAlg.h	1 Apr 2003 19:26:35 -0000	1.7
--- SearchAlg.h	18 Apr 2008 17:00:43 -0000	1.8
***************
*** 31,34 ****
--- 31,35 ----
  *
  * \param root : The project root folder, for a global search.
+ * \param scope : The collection of containers (if any) where local search should be performed 
  * \param selected : The selected object, for a reference search.
  * \param disp : An empty list that will be used to store the results.
***************
*** 37,41 ****
  *
  */
! 	void Search(IMgaFolder *root, IMgaFCO *selected, CComPtr<IMgaFCOs> disp, CProgressCtrl *Progress);
  
  	
--- 38,42 ----
  *
  */
! 	void Search(IMgaFolder *root, IMgaObjects* scope, IMgaFCO *selected, CComPtr<IMgaFCOs> disp, CProgressCtrl *Progress);
  
  	

Index: Search.odl
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/Search.odl,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Search.odl	2 May 2006 22:05:59 -0000	1.3
--- Search.odl	18 Apr 2008 17:00:43 -0000	1.4
***************
*** 35,38 ****
--- 35,40 ----
  			//{{AFX_ODL_METHOD(CSearchCtrl)
  			[id(2)] void OpenProject(BSTR connStr);
+ 			[id(3), helpstring("method for letting the Search component know, which objects are selected in the Tree Browser")] 
+ 				void SelMgaObjects(IUnknown* p_selMgaObjs);
  			//}}AFX_ODL_METHOD
  

Index: Input.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/Input.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Input.cpp	4 Dec 2006 18:19:23 -0000	1.3
--- Input.cpp	18 Apr 2008 17:00:43 -0000	1.4
***************
*** 32,37 ****
  void CInput::GetInput(CString name, CString role, CString kind, CString attrname, int attrtype, 
  					  CString attrval, BOOL spl, BOOL mod, BOOL atom, BOOL ref, BOOL set, BOOL full, 
! 					  IMgaFCO *root, int searchscope, BOOL bMatchCase)
  {
  	getCaseIgnored = !bMatchCase;
  	if( getCaseIgnored)
--- 32,40 ----
  void CInput::GetInput(CString name, CString role, CString kind, CString attrname, int attrtype, 
  					  CString attrval, BOOL spl, BOOL mod, BOOL atom, BOOL ref, BOOL set, BOOL full, 
! 					  IMgaFCO*, int, //WAS: IMgaFCO *root, int searchscope,
! 					  BOOL bMatchCase, BOOL bScopedSearch)
  {
+ 	doScopedSearch = bScopedSearch;
+ 
  	getCaseIgnored = !bMatchCase;
  	if( getCaseIgnored)
***************
*** 136,143 ****
  	getSets = set;
  
! 	searchroot = root;
  
  //	doReferenceSearch = searchtype;
! 	doGlobalSearch = searchscope;
  
  }
--- 139,146 ----
  	getSets = set;
  
! //	searchroot = root;// looks obsolete to me, replaced by doScopedSearch [zolmol]
  
  //	doReferenceSearch = searchtype;
! //	doGlobalSearch = searchscope; // looks obsolete to me, replaced by doScopedSearch [zolmol]
  
  }

Index: SearchDlg.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Search/SearchDlg.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** SearchDlg.h	4 Dec 2006 18:19:23 -0000	1.11
--- SearchDlg.h	18 Apr 2008 17:00:43 -0000	1.12
***************
*** 32,35 ****
--- 32,36 ----
  	void EnableSearch();					// enable search functions
  	void DisableSearch();					// must disable search functions
+ 	void EnableScoped( BOOL enable);
  
  	inline CSearchCtrl* getMyParent() { return GetCtrl(); }
***************
*** 59,62 ****
--- 60,64 ----
  	BOOL	m_chkLocate;
  	BOOL	m_chkMatchCase;
+ 	BOOL    m_chkScopedSearch;
  	CString	m_stcRef;
  
***************
*** 64,67 ****
--- 66,70 ----
  	CMButton	m_chkLocateCtrl;
  	CMButton	m_chkMatchCaseCtrl;
+ 	CMButton	m_chkScopedSearchCtrl;
  	CMButton	m_chkFullWordCtrl;
  	CMButton	m_chkRefCtrl;
***************
*** 100,103 ****
--- 103,108 ----
  	CComPtr<IMgaFCOs> results;
  	CComPtr<IMgaFCO> specialSearchFCO;
+ 
+ 	BOOL m_scopedCtrlEnabled; // whether to enable scoped search at all
  
  



More information about the GME-commit mailing list