mirror of
https://github.com/fadden/ciderpress.git
synced 2024-11-23 11:33:58 +00:00
4638d03d6c
In the past, CiderPress managed its own file associations. This is the feature that launches CiderPress when you double-click on a ".shk" file. The installer ran "CiderPress -install" and "-uninstall" during installation and removal to give CP a chance to establish and clean up the necessary registry entries. The code built with VS6 works fine. The code built with VS2013 fails with an access denied error. It appears there have been some access policy changes, and the older code is getting "grandfathered in". This is really something that the installer ought to be handling, though, so rather than figure out how to fix CiderPress, I'm removing the file type association code from CiderPress and letting DeployMaster handle it. This may be slightly less convenient for anyone who had reason to change type associations frequently. Modern versions of Windows have relatively easy to use control panel UIs for adjusting types, and the "advanced installation" feature of DeployMaster allows you to un-check the types that you don't want to have associated with CiderPress. (...with one minor hitch: DeployMaster 4.2.2 only shows the first 9 associations, and CiderPress has 18.) This change renders most of the registry-handling code obsolete, as well as the "-install" / "-uninstall" handling. I'm 99% sure I want to go this way, but I'm keeping things #ifdefed rather than deleted for the moment.
123 lines
3.2 KiB
C++
123 lines
3.2 KiB
C++
/*
|
|
* CiderPress
|
|
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
|
|
* See the file LICENSE for distribution terms.
|
|
*/
|
|
#include "stdafx.h"
|
|
#ifdef CAN_UPDATE_FILE_ASSOC
|
|
#include "EditAssocDialog.h"
|
|
#include "MyApp.h"
|
|
#include "Registry.h"
|
|
|
|
BEGIN_MESSAGE_MAP(EditAssocDialog, CDialog)
|
|
ON_WM_HELPINFO()
|
|
ON_COMMAND(IDHELP, OnHelp)
|
|
END_MESSAGE_MAP()
|
|
|
|
/* this comes from VC++6.0 MSDN help */
|
|
#ifndef ListView_SetCheckState
|
|
#define ListView_SetCheckState(hwndLV, i, fCheck) \
|
|
ListView_SetItemState(hwndLV, i, \
|
|
INDEXTOSTATEIMAGEMASK((fCheck)+1), LVIS_STATEIMAGEMASK)
|
|
#endif
|
|
|
|
BOOL EditAssocDialog::OnInitDialog(void)
|
|
{
|
|
CListCtrl* pListView = (CListCtrl*) GetDlgItem(IDC_ASSOCIATION_LIST);
|
|
|
|
ASSERT(pListView != NULL);
|
|
//pListView->ModifyStyleEx(0, LVS_EX_CHECKBOXES);
|
|
ListView_SetExtendedListViewStyleEx(pListView->m_hWnd,
|
|
LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES);
|
|
|
|
/* move it over slightly so we see some overlap */
|
|
CRect rect;
|
|
GetWindowRect(&rect);
|
|
rect.left += 10;
|
|
rect.right += 10;
|
|
MoveWindow(&rect);
|
|
|
|
|
|
/*
|
|
* Initialize this before DDX stuff happens. If the caller didn't
|
|
* provide a set, load our own.
|
|
*/
|
|
if (fOurAssociations == NULL) {
|
|
fOurAssociations = new bool[gMyApp.fRegistry.GetNumFileAssocs()];
|
|
Setup(true);
|
|
} else {
|
|
Setup(false);
|
|
}
|
|
|
|
return CDialog::OnInitDialog();
|
|
}
|
|
|
|
void EditAssocDialog::Setup(bool loadAssoc)
|
|
{
|
|
LOGD("Setup!");
|
|
|
|
CListCtrl* pListView = (CListCtrl*) GetDlgItem(IDC_ASSOCIATION_LIST);
|
|
ASSERT(pListView != NULL);
|
|
|
|
ASSERT(fOurAssociations != NULL);
|
|
|
|
/* two columns */
|
|
CRect rect;
|
|
pListView->GetClientRect(&rect);
|
|
int width;
|
|
|
|
width = pListView->GetStringWidth(L"XXExtensionXX");
|
|
pListView->InsertColumn(0, L"Extension", LVCFMT_LEFT, width);
|
|
pListView->InsertColumn(1, L"Association", LVCFMT_LEFT,
|
|
rect.Width() - width);
|
|
|
|
int num = gMyApp.fRegistry.GetNumFileAssocs();
|
|
int idx = 0;
|
|
while (num--) {
|
|
CString ext, handler;
|
|
CString dispStr;
|
|
bool ours;
|
|
|
|
gMyApp.fRegistry.GetFileAssoc(idx, &ext, &handler, &ours);
|
|
|
|
pListView->InsertItem(idx, ext);
|
|
pListView->SetItemText(idx, 1, handler);
|
|
|
|
if (loadAssoc)
|
|
fOurAssociations[idx] = ours;
|
|
idx++;
|
|
}
|
|
|
|
//DeleteAllItems(); // for Reload case
|
|
}
|
|
|
|
void EditAssocDialog::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CListCtrl* pListView = (CListCtrl*) GetDlgItem(IDC_ASSOCIATION_LIST);
|
|
|
|
ASSERT(fOurAssociations != NULL);
|
|
if (fOurAssociations == NULL)
|
|
return;
|
|
|
|
int num = gMyApp.fRegistry.GetNumFileAssocs();
|
|
|
|
if (!pDX->m_bSaveAndValidate) {
|
|
/* load fixed set of file associations */
|
|
int idx = 0;
|
|
while (num--) {
|
|
ListView_SetCheckState(pListView->m_hWnd, idx,
|
|
fOurAssociations[idx]);
|
|
idx++;
|
|
}
|
|
} else {
|
|
/* copy the checkboxes out */
|
|
int idx = 0;
|
|
while (num--) {
|
|
fOurAssociations[idx] =
|
|
(ListView_GetCheckState(pListView->m_hWnd, idx) != 0);
|
|
idx++;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif |