[commit] r2460 - trunk/GME/Search
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Thu Mar 6 18:03:38 CST 2014
Author: ksmyth
Date: Thu Mar 6 18:03:38 2014
New Revision: 2460
Log:
Drag-n-drop to Search: primarily for 'what references this'. Can also drag-n-drop to Name, Role, or Kind boxes
Modified:
trunk/GME/Search/Search.vcxproj
trunk/GME/Search/Search.vcxproj.filters
trunk/GME/Search/SearchDlg.cpp
trunk/GME/Search/SearchDlg.h
trunk/GME/Search/StdAfx.cpp
Modified: trunk/GME/Search/Search.vcxproj
==============================================================================
--- trunk/GME/Search/Search.vcxproj Wed Mar 5 17:18:06 2014 (r2459)
+++ trunk/GME/Search/Search.vcxproj Thu Mar 6 18:03:38 2014 (r2460)
@@ -225,6 +225,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
+ <ClCompile Include="..\Gme\GMEOLEData.cpp" />
<ClCompile Include="Attribute.cpp" />
<ClCompile Include="ComHelp.cpp" />
<ClCompile Include="..\Common\CommonError.cpp" />
Modified: trunk/GME/Search/Search.vcxproj.filters
==============================================================================
--- trunk/GME/Search/Search.vcxproj.filters Wed Mar 5 17:18:06 2014 (r2459)
+++ trunk/GME/Search/Search.vcxproj.filters Thu Mar 6 18:03:38 2014 (r2460)
@@ -45,6 +45,9 @@
<ClCompile Include="StdAfx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\Gme\GMEOLEData.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Search.def">
Modified: trunk/GME/Search/SearchDlg.cpp
==============================================================================
--- trunk/GME/Search/SearchDlg.cpp Wed Mar 5 17:18:06 2014 (r2459)
+++ trunk/GME/Search/SearchDlg.cpp Thu Mar 6 18:03:38 2014 (r2460)
@@ -11,6 +11,8 @@
#include <sstream>
#include <stack>
+#include "..\Gme\GMEOLEData.h"
+
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
@@ -186,6 +188,8 @@
//load search history from registry
LoadSearchHistory();
+ dropTarget.Register(this);
+
return true;
}
@@ -1180,3 +1184,148 @@
m_treeSearchHistory.DeleteAllItems();
SaveSearchHistory();
}
+
+DROPEFFECT CSearchDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
+{
+ CSearchDlg *ctrl = STATIC_DOWNCAST(CSearchDlg, pWnd);
+ CSearchCtrl *TheCtrl = ctrl->GetCtrl();
+ if (CGMEDataSource::IsGmeNativeDataAvailable(pDataObject, TheCtrl->GetProject()))
+ {
+ return DROPEFFECT_LINK;
+ }
+ return DROPEFFECT_NONE;
+}
+
+void CSearchDropTarget::OnDragLeave(CWnd* pWnd)
+{
+}
+
+DROPEFFECT CSearchDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
+{
+ CSearchDlg *ctrl = STATIC_DOWNCAST(CSearchDlg, pWnd);
+ CSearchCtrl *TheCtrl = ctrl->GetCtrl();
+ if (CGMEDataSource::IsGmeNativeDataAvailable(pDataObject, TheCtrl->GetProject()))
+ {
+ return DROPEFFECT_LINK;
+ }
+ return DROPEFFECT_NONE;
+}
+
+BOOL CSearchDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
+{
+ COMTRY {
+ CSearchDlg *ctrl = STATIC_DOWNCAST(CSearchDlg, pWnd);
+ CSearchCtrl *TheCtrl = ctrl->GetCtrl();
+ if (CGMEDataSource::IsGmeNativeDataAvailable(pDataObject, TheCtrl->GetProject()))
+ {
+
+ CComPtr<IDataObject> p = pDataObject->GetIDataObject(FALSE);
+ CComPtr<IMgaDataSource> pt;
+ COMTHROW(p.QueryInterface(&pt));
+
+ CComPtr<IUnknown> unk;
+ COMTHROW(pt->get_Data(&unk));
+
+ CComPtr<IMgaFCOs> fcos;
+ // CComPtr<IMgaMetaRole> metaRole; TODO: put Kind or Role based on partbrowser drag-n-drop
+ if (SUCCEEDED(unk.QueryInterface(&fcos)))
+ {
+ CComPtr<IMgaFCO> fco;
+ long count = 0;
+ if (SUCCEEDED(fcos->get_Count(&count)) && count > 0)
+ {
+ COMTHROW(fcos->get_Item(1, &fco));
+ }
+ if (fco == nullptr)
+ {
+ return FALSE;
+ }
+
+ CWnd *dropTarget = ctrl->ChildWindowFromPoint(point);
+ CWnd *editKind = STATIC_DOWNCAST(CButton, ctrl->GetDlgItem(IDC_EDITKIND));
+ CWnd *editRole = STATIC_DOWNCAST(CButton, ctrl->GetDlgItem(IDC_EDITROLE));
+ CWnd *editName = STATIC_DOWNCAST(CButton, ctrl->GetDlgItem(IDC_EDITNAME));
+ if (dropTarget->GetSafeHwnd() == editKind->GetSafeHwnd())
+ {
+ TheCtrl->BeginTransaction();
+ try
+ {
+ CComPtr<IMgaMetaFCO> meta;
+ COMTHROW(fco->get_Meta(&meta));
+ _bstr_t kind;
+ COMTHROW(meta->get_Name(kind.GetAddress()));
+ editKind->SetWindowTextW(static_cast<const wchar_t*>(kind));
+ TheCtrl->CommitTransaction();
+ }
+ catch (hresult_exception)
+ {
+ TheCtrl->AbortTransaction();
+ throw;
+ }
+ }
+ else if (dropTarget->GetSafeHwnd() == editRole->GetSafeHwnd())
+ {
+ try
+ {
+ TheCtrl->BeginTransaction();
+ CComPtr<IMgaMetaRole> meta;
+ COMTHROW(fco->get_MetaRole(&meta));
+ _bstr_t rolename;
+ COMTHROW(meta->get_Name(rolename.GetAddress()));
+ editRole->SetWindowTextW(static_cast<const wchar_t*>(rolename));
+ TheCtrl->CommitTransaction();
+ }
+ catch (hresult_exception)
+ {
+ TheCtrl->AbortTransaction();
+ throw;
+ }
+ }
+ else if (dropTarget->GetSafeHwnd() == editName->GetSafeHwnd())
+ {
+ TheCtrl->BeginTransaction();
+ try
+ {
+ _bstr_t name;
+ COMTHROW(fco->get_Name(name.GetAddress()));
+ editName->SetWindowTextW(static_cast<const wchar_t*>(name));
+ TheCtrl->CommitTransaction();
+ }
+ catch (hresult_exception)
+ {
+ TheCtrl->AbortTransaction();
+ throw;
+ }
+ }
+ else
+ {
+ ctrl->results = NULL;
+ COMTHROW(ctrl->results.CoCreateInstance(L"Mga.MgaFCOs"));
+ COMTHROW(ctrl->results->Append(fco));
+ TheCtrl->BeginTransaction();
+ try
+ {
+ ctrl->DisplayResults();
+ TheCtrl->CommitTransaction();
+ ctrl->m_lstResults.SetFocus();
+ int ind = ctrl->m_lstResults.GetTopIndex();
+ VERIFY(ctrl->m_lstResults.SetItemState(ind, LVIS_SELECTED, LVIS_SELECTED));
+ ctrl->m_lstResults.SetSelectionMark(ind);
+ ctrl->itemClicked();
+ CButton *special_check = STATIC_DOWNCAST(CButton, ctrl->GetDlgItem(IDC_CHECKSPLSEARCH));
+ special_check->SetCheck(TRUE);
+ ctrl->OnCheckSplSearch();
+ }
+ catch (hresult_exception)
+ {
+ TheCtrl->AbortTransaction();
+ throw;
+ }
+ }
+
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } COMCATCH(return FALSE;)
+}
Modified: trunk/GME/Search/SearchDlg.h
==============================================================================
--- trunk/GME/Search/SearchDlg.h Wed Mar 5 17:18:06 2014 (r2459)
+++ trunk/GME/Search/SearchDlg.h Thu Mar 6 18:03:38 2014 (r2460)
@@ -18,6 +18,15 @@
/////////////////////////////////////////////////////////////////////////////
// CSearchDlg dialog
+class CSearchDropTarget : public COleDropTarget
+{
+public:
+ virtual DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+ virtual void OnDragLeave(CWnd* pWnd);
+ virtual DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+ virtual BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
+};
+
//struct used for sending information to sort function usd by List Control
struct SortParam
@@ -227,6 +236,9 @@
afx_msg void OnKeyDownListResults(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
+
+ friend class CSearchDropTarget;
+ CSearchDropTarget dropTarget;
public:
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnSizing(UINT fwSide, LPRECT pRect);
Modified: trunk/GME/Search/StdAfx.cpp
==============================================================================
--- trunk/GME/Search/StdAfx.cpp Wed Mar 5 17:18:06 2014 (r2459)
+++ trunk/GME/Search/StdAfx.cpp Thu Mar 6 18:03:38 2014 (r2460)
@@ -3,3 +3,5 @@
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
+
+EXTERN_C const IID IID_IMgaDataSource = {0x9FF8F4E0,0xE0C9,0x11d3,{0xB3,0x76,0x00,0x50,0x04,0xD3,0x85,0x90}};
More information about the gme-commit
mailing list