home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BUG 15
/
BUGCD1998_06.ISO
/
aplic
/
recent
/
recent.exe
/
Chooser.cpp
next >
Wrap
C/C++ Source or Header
|
1998-04-16
|
3KB
|
108 lines
#include "stdafx.h"
#include "Recent.h"
#include "Chooser.h"
#include "FilesDlg.h"
#include <ObjModel\appguid.h>
HRESULT Chooser::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwAddInID, VARIANT_BOOL* bOnConnection)
{
HRESULT hr = S_OK;
m_spApplication = pApp;
m_dwAddInID = dwAddInID;
hr = pApp->SetAddInInfo(reinterpret_cast<long>(_Module.GetModuleInstance()),
static_cast<IDispatch*>(this), IDB_TOOLBAR_MEDIUM_CHOOSER, IDB_TOOLBAR_LARGE_CHOOSER, dwAddInID);
if(SUCCEEDED(hr))
{
VARIANT_BOOL bRet;
hr = pApp->AddCommand(CComBSTR(_T("ChooseRecentFile\nRecent File\nChoose recent file\nRecent File")),
CComBSTR(_T("ChooseRecentFile")), 0, dwAddInID, &bRet);
if(bFirstTime && SUCCEEDED(hr))
hr = pApp->AddCommandBarButton(dsGlyph, CComBSTR(_T("ChooseRecentFile")), dwAddInID);
}
if(SUCCEEDED(hr))
{
VARIANT_BOOL bRet;
hr = pApp->AddCommand(CComBSTR(_T("ChooseRecentWorkspace\nRecent Workspace\nChoose recent workspace\nRecent Workspace")),
CComBSTR(_T("ChooseRecentWorkspace")), 1, dwAddInID, &bRet);
if(bFirstTime && SUCCEEDED(hr))
hr = pApp->AddCommandBarButton(dsGlyph, CComBSTR(_T("ChooseRecentWorkspace")), dwAddInID);
}
#pragma warning(disable:4310)
*bOnConnection = SUCCEEDED(hr) ? VARIANT_TRUE : VARIANT_FALSE;
#pragma warning(default:4310)
return hr;
}
HRESULT Chooser::OnDisconnection(VARIANT_BOOL /*bLastTime*/)
{
m_spApplication.Release();
return S_OK;
}
HRESULT Chooser::ChooseRecentFile()
{
return ChooseRecent(_T("Open Recent File"), _T("File"));
}
HRESULT Chooser::ChooseRecentWorkspace()
{
return ChooseRecent(_T("Open Recent Workspace"), _T("Project"), _T(".dsw"));
}
HRESULT Chooser::ChooseRecent(const TCHAR* title, const TCHAR* prefix, const TCHAR* append)
{
m_spApplication->EnableModeless(VARIANT_FALSE);
FilesDlg dlg(title);
if(!FillList(dlg.files, prefix))
return E_FAIL;
HRESULT hr = S_OK;
if(dlg.DoModal() == IDOK)
{
CComPtr<IDispatch> dispDocs;
hr = m_spApplication->get_Documents(&dispDocs);
if(SUCCEEDED(hr))
{
_ASSERT(dispDocs != NULL);
CComQIPtr<IDocuments, &IID_IDocuments> docs(dispDocs);
_ASSERT(docs != NULL);
CComPtr<IDispatch> doc;
tstring name = dlg.selected;
if(append != NULL)
name += append;
hr = docs->Open(CComBSTR(name.data()), CComVariant(_T("Auto")), CComVariant(false), &doc);
}
}
#pragma warning(disable:4310)
m_spApplication->EnableModeless(VARIANT_TRUE);
#pragma warning(default:4310)
return hr;
}
bool Chooser::FillList(list<tstring>& files, const tstring& prefix)
{
files.clear();
CRegKey rk;
if(rk.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\DevStudio\\5.0\\Recent File List"), KEY_QUERY_VALUE) != ERROR_SUCCESS)
return false;
DWORD count;
if(rk.QueryValue(count, (prefix + _T("Count")).data()) != ERROR_SUCCESS)
return false;
for(DWORD i = 1; i <= count; ++i)
{
TCHAR index[32];
_ultot(i, index, 10);
TCHAR value[1024];
DWORD size = sizeof(value)/sizeof(TCHAR);
if(rk.QueryValue(value, (prefix + index).data(), &size) == ERROR_SUCCESS)
files.push_back(value);
}
return true;
}