[commit] r1130 - trunk/GME/MgaUtil
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Wed Jan 12 16:54:26 CST 2011
Author: ksmyth
Date: Wed Jan 12 16:54:26 2011
New Revision: 1130
Log:
Provide useful error msg when CoCI(MgaRegistrar) fails and elsewhere. Disable bang for running component (If I didnt know what that meant, no regular user did). Enable sorting when clicking on table header (GME-205)
Modified:
trunk/GME/MgaUtil/CompDlg.cpp
trunk/GME/MgaUtil/CompDlg.h
Modified: trunk/GME/MgaUtil/CompDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/CompDlg.cpp Wed Jan 12 16:51:07 2011 (r1129)
+++ trunk/GME/MgaUtil/CompDlg.cpp Wed Jan 12 16:54:26 2011 (r1130)
@@ -65,8 +65,35 @@
ON_BN_CLICKED(IDC_RADIOSYS, &CCompDlg::OnBnClickedRadiosys)
ON_BN_CLICKED(IDC_RADIOUSER, &CCompDlg::OnBnClickedRadiouser)
ON_BN_CLICKED(IDC_RADIOBOTH, &CCompDlg::OnBnClickedRadioboth)
+ ON_NOTIFY(HDN_ITEMCLICK, 0, OnAllCompsHeader)
END_MESSAGE_MAP()
+
+struct SortParam {
+ CCompDlg* dlg;
+ int columnIndex;
+};
+
+int CALLBACK CCompDlg::SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
+ SortParam& param = *(SortParam*)lParamSort;
+
+ CString a = param.dlg->m_list.GetItemText(lParam1, param.columnIndex);
+ CString b = param.dlg->m_list.GetItemText(lParam2, param.columnIndex);
+
+ return _tcscmp(a, b);
+}
+
+
+void CCompDlg::OnAllCompsHeader(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ NMLISTVIEW *pLV = (NMLISTVIEW *) pNMHDR;
+ SortParam s = { this, pLV->iItem };
+ m_list.SortItemsEx(SortFunc, (DWORD)(void*)&s);
+
+ *pResult = 0;
+}
+
+
/////////////////////////////////////////////////////////////////////////////
// CCompDlg message handlers
@@ -220,7 +247,8 @@
WCHAR * f = wcstok(l,L" ");
while(f) {
if(!desc.Compare(CComBSTR(f)) || !progids[i].Compare(CComBSTR(f))) {
- m_list.SetItemState(index, INDEXTOSTATEIMAGEMASK(2), LVIS_STATEIMAGEMASK);
+ // FIXME: this component is running, would be nice to show to the user, but an exclamation mark means nothing
+ // m_list.SetItemState(index, INDEXTOSTATEIMAGEMASK(2), LVIS_STATEIMAGEMASK);
break;
}
f = wcstok(NULL, L" ");
@@ -312,15 +340,16 @@
CString progid = m_list.GetItemText(m_list.GetNextSelectedItem(pos), 2);
CComPtr<IMgaRegistrar> registrar;
+ HRESULT registrarHr;
if (CUACUtils::isVistaOrLater()) {
- CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar, GetSafeHwnd());
+ registrarHr = CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar, GetSafeHwnd());
}
else {
- registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
+ registrarHr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
}
- if( !registrar ) {
- ::AfxMessageBox(_T("Unable to unregister component. Maybe due to insufficient rights."), MB_ICONSTOP | MB_OK);
+ if (!registrar) {
+ DisplayError("Unable to remove component", registrarHr);
return;
}
@@ -329,16 +358,14 @@
componenttype_enum type;
CComBstrObj desc;
- HRESULT hr = registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), regacc_translate(m_accessmode));
- ASSERT(E_NOTFOUND == hr);
switch(regacc_translate(m_accessmode)) {
case REGACCESS_USER:
- if(S_OK == registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), REGACCESS_SYSTEM)) {
+ if (S_OK == registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), REGACCESS_SYSTEM)) {
AfxMessageBox("Warning: Component is still present in system registry");
}
break;
case REGACCESS_SYSTEM:
- if(S_OK == registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), REGACCESS_USER)) {
+ if (S_OK == registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), REGACCESS_USER)) {
AfxMessageBox("Warning: Component is still present in user registry");
}
break;
@@ -362,32 +389,35 @@
VARIANT_BOOL is_ass, can_ass;
CComPtr<IMgaRegistrar> registrar;
+ HRESULT registrarHr;
if (CUACUtils::isVistaOrLater() && (regacc_translate(m_accessmode) != REGACCESS_USER) ) {
- CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar);
+ registrarHr = CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar);
}
else {
- registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
+ registrarHr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
}
- if( !registrar ) {
- ::AfxMessageBox(_T("Unable to disable/enable component. Maybe due to insufficient rights."), MB_ICONSTOP | MB_OK);
+ if (!registrar) {
+ DisplayError("Unable to enable/disable component", registrarHr);
return;
}
HRESULT hr = registrar->IsAssociated(progid, PutInBstr(paradigm), &is_ass, &can_ass, REGACCESS_PRIORITY);
- if(hr != S_OK) AfxMessageBox("Cannot Activate this component");
- if(is_ass) hr = (registrar->Disassociate(progid, PutInBstr(paradigm), regacc_translate(m_accessmode)) );
- else {
+ if (hr != S_OK)
+ DisplayError("Cannot enable/disable this component", hr);
+ CString enable_or_disable;
+ if (is_ass) {
+ enable_or_disable = "disable";
+ hr = registrar->Disassociate(progid, PutInBstr(paradigm), regacc_translate(m_accessmode));
+ } else {
+ enable_or_disable = "enable";
if(!can_ass) {
if(AfxMessageBox("This component reports to be incompatible with the paradigm\nAre you sure you want to proceed?", MB_YESNO) != IDYES) return;
}
hr = (registrar->Associate(progid, PutInBstr(paradigm), regacc_translate(m_accessmode)) );
}
if(hr != S_OK) {
- if(regacc_translate(m_accessmode) == REGACCESS_USER) {
- AfxMessageBox("The toggle operation failed\nCheck if access mode is appropriate");
- }
- else AfxMessageBox("The toggle operation failed");;
+ DisplayError("The " + enable_or_disable + " operation failed", hr);
}
ResetItems();
@@ -432,34 +462,20 @@
void CCompDlg::RegisterDll(const CString &path)
{
CComPtr<IMgaRegistrar> registrar;
- HRESULT hr = E_FAIL;
+ HRESULT hr;
if (CUACUtils::isVistaOrLater()) {
hr = CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar, GetSafeHwnd());
- }
- else {
+ } else {
hr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
}
- if(!registrar) {
- std::string errorMessage = "Unable to create component registrar: ";
- errorMessage += _com_error(hr).ErrorMessage();
- ::AfxMessageBox(errorMessage.c_str());
- } else {
- hr = registrar->RegisterComponentLibrary(PutInBstr(path), regacc_translate(m_accessmode));
- if (FAILED(hr)) {
- std::string errorMessage = "Unable to register component: ";
-
- CComPtr<IErrorInfo> info;
- COMTHROW(GetErrorInfo(0, &info));
- if (info) {
- CComBSTR description;
- COMTHROW(info->GetDescription(&description));
- errorMessage += static_cast<const char*>(_bstr_t(description));
- } else {
- errorMessage += _com_error(hr).ErrorMessage();
- }
- AfxMessageBox(errorMessage.c_str(), MB_ICONSTOP | MB_OK);
- }
+ if (!registrar) {
+ DisplayError("Unable to create component registrar", hr);
+ return;
+ }
+ hr = registrar->RegisterComponentLibrary(PutInBstr(path), regacc_translate(m_accessmode));
+ if (FAILED(hr)) {
+ DisplayError("Unable to register component", hr);
}
}
@@ -479,15 +495,16 @@
regaccessmode_enum acmode = regacc_translate(m_accessmode);
CComPtr<IMgaRegistrar> registrar;
+ HRESULT registrarHr;
if (CUACUtils::isVistaOrLater() && (acmode != REGACCESS_USER) ) {
- CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar);
+ registrarHr = CUACUtils::CreateElevatedInstance(CLSID_MgaRegistrar, ®istrar);
}
else {
- registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
+ registrarHr = registrar.CoCreateInstance(OLESTR("Mga.MgaRegistrar"));
}
- if( !registrar ) {
- ::AfxMessageBox(_T("Unable to register pattern component. Maybe due to insufficient rights."), MB_ICONSTOP | MB_OK);
+ if (!registrar) {
+ DisplayError("Unable to register pattern component", registrarHr);
return;
}
Modified: trunk/GME/MgaUtil/CompDlg.h
==============================================================================
--- trunk/GME/MgaUtil/CompDlg.h Wed Jan 12 16:51:07 2011 (r1129)
+++ trunk/GME/MgaUtil/CompDlg.h Wed Jan 12 16:54:26 2011 (r1130)
@@ -73,6 +73,8 @@
afx_msg void OnBnClickedRadiosys();
afx_msg void OnBnClickedRadiouser();
afx_msg void OnBnClickedRadioboth();
+ afx_msg void OnAllCompsHeader(NMHDR* pNMHDR, LRESULT* pResult);
+ static int CALLBACK CCompDlg::SortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
private:
bool firstResize;
More information about the gme-commit
mailing list