You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
483 lines
13 KiB
483 lines
13 KiB
/*****************************************************************************
|
|
|
|
D I A L O G S
|
|
|
|
Name: dialogs.c
|
|
Date: 21-Jan-1994
|
|
Creator: Unknown
|
|
|
|
Description:
|
|
Dialog handling routines.
|
|
|
|
*****************************************************************************/
|
|
|
|
#include <windows.h>
|
|
#include <nddeapi.h>
|
|
#include <strsafe.h>
|
|
|
|
#include "common.h"
|
|
#include "clipbook.h"
|
|
#include "clipbrd.h"
|
|
#include "clpbkdlg.h"
|
|
#include "cvutil.h"
|
|
#include "dialogs.h"
|
|
#include "helpids.h"
|
|
#include "debugout.h"
|
|
#include "ismember.h"
|
|
#include "shares.h"
|
|
|
|
|
|
/*
|
|
* ConnectDlgProc
|
|
*/
|
|
|
|
INT_PTR CALLBACK ConnectDlgProc (
|
|
HWND hwnd,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
szConvPartner[0] = '\0';
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (wParam)
|
|
{
|
|
case IDOK:
|
|
GetDlgItemText (hwnd, IDC_CONNECTNAME, szConvPartner, 32);
|
|
EndDialog (hwnd, 1);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
szConvPartner[0] = '\0';
|
|
EndDialog (hwnd, 0);
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ShareDlgProc
|
|
*
|
|
* Note: this routine expectes a PNDDESHAREINFO in lParam!
|
|
*/
|
|
|
|
INT_PTR CALLBACK ShareDlgProc(
|
|
HWND hwnd,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
|
|
static PNDDESHAREINFO lpDdeS;
|
|
DWORD dwTrustOptions;
|
|
DWORD adwTrust[3];
|
|
BOOL bRet = TRUE;
|
|
|
|
// These vars are used for determining if I'm owner of the page
|
|
PSID psidPage;
|
|
BOOL fDump;
|
|
DWORD cbSD;
|
|
UINT uRet;
|
|
PSECURITY_DESCRIPTOR pSD = NULL;
|
|
|
|
LPHELPINFO lphi;
|
|
|
|
const DWORD aHelpIDs[] =
|
|
{
|
|
IDC_STARTAPP, IDH_STARTAPP,
|
|
IDC_MINIMIZED, IDH_MINIMIZED,
|
|
IDC_PERMISSIONS, IDH_PERMISSIONS,
|
|
0, 0
|
|
};
|
|
|
|
UINT iCtrlId;
|
|
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
|
|
lpDdeS = (PNDDESHAREINFO)lParam;
|
|
|
|
// set share, always static
|
|
SetDlgItemText (hwnd, IDC_STATICSHARENAME, lpDdeS->lpszShareName+1 );
|
|
|
|
// If the current user doesn't own the page, we gray out the
|
|
// "start app" and "run minimized" checkboxes
|
|
EnableWindow(GetDlgItem(hwnd, IDC_STARTAPP), FALSE);
|
|
EnableWindow(GetDlgItem(hwnd, IDC_MINIMIZED), FALSE);
|
|
EnableWindow(GetDlgItem(hwnd, 207), FALSE);
|
|
|
|
|
|
|
|
// Figure out who owns the page
|
|
psidPage = NULL;
|
|
if (!(pSD = LocalAlloc(LPTR, 50)))
|
|
{
|
|
PERROR(TEXT("Couldn't alloc 50 bytes\r\n"));
|
|
break;
|
|
}
|
|
|
|
|
|
uRet = NDdeGetShareSecurity (NULL,
|
|
lpDdeS->lpszShareName,
|
|
OWNER_SECURITY_INFORMATION,
|
|
pSD,
|
|
50,
|
|
&cbSD);
|
|
|
|
if (uRet == NDDE_BUF_TOO_SMALL)
|
|
{
|
|
LocalFree (pSD);
|
|
|
|
if (!(pSD = LocalAlloc(LPTR, cbSD)))
|
|
{
|
|
PERROR(TEXT("Couldn't alloc %ld bytes\r\n"), cbSD);
|
|
break;
|
|
}
|
|
|
|
|
|
uRet = NDdeGetShareSecurity (NULL,
|
|
lpDdeS->lpszShareName,
|
|
OWNER_SECURITY_INFORMATION,
|
|
pSD,
|
|
cbSD,
|
|
&cbSD);
|
|
}
|
|
|
|
|
|
if (NDDE_NO_ERROR != uRet)
|
|
{
|
|
PERROR(TEXT("GetSec fail %d"), uRet);
|
|
break;
|
|
}
|
|
|
|
|
|
if (!GetSecurityDescriptorOwner(pSD, &psidPage, &fDump))
|
|
{
|
|
PERROR(TEXT("Couldn't get owner, even tho we asked\r\n"));
|
|
break;
|
|
}
|
|
|
|
if (!psidPage || !IsUserMember(psidPage))
|
|
{
|
|
PINFO(TEXT("User isn't member of owner\r\n"));
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
EnableWindow (GetDlgItem (hwnd, IDC_STARTAPP), TRUE);
|
|
|
|
// 207 is the group box around the checkboxes
|
|
EnableWindow (GetDlgItem (hwnd, 207), TRUE);
|
|
|
|
NDdeGetTrustedShare (NULL,
|
|
lpDdeS->lpszShareName,
|
|
adwTrust,
|
|
adwTrust + 1,
|
|
adwTrust + 2);
|
|
|
|
if (!(adwTrust[0] & NDDE_TRUST_SHARE_START))
|
|
{
|
|
PINFO (TEXT("Buttons shouldn't check\r\n"));
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(hwnd, IDC_STARTAPP, 1);
|
|
|
|
EnableWindow (GetDlgItem (hwnd, IDC_MINIMIZED), TRUE);
|
|
CheckDlgButton (hwnd,
|
|
IDC_MINIMIZED,
|
|
(SW_MINIMIZE == (adwTrust[0] & NDDE_CMD_SHOW_MASK)) ? 1 : 0);
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
dwTrustOptions = NDDE_TRUST_SHARE_INIT;
|
|
|
|
if (IsDlgButtonChecked(hwnd, IDC_STARTAPP))
|
|
{
|
|
dwTrustOptions |= NDDE_TRUST_SHARE_START;
|
|
|
|
if (IsDlgButtonChecked(hwnd, IDC_MINIMIZED))
|
|
{
|
|
dwTrustOptions |= NDDE_TRUST_CMD_SHOW | SW_MINIMIZE;
|
|
}
|
|
}
|
|
|
|
// Update the share start flag.
|
|
if (dwTrustOptions & NDDE_TRUST_SHARE_START)
|
|
lpDdeS->fStartAppFlag = TRUE;
|
|
else
|
|
lpDdeS->fStartAppFlag = FALSE;
|
|
|
|
NDdeSetTrustedShare(NULL, lpDdeS->lpszShareName, dwTrustOptions);
|
|
EndDialog (hwnd, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog (hwnd, FALSE);
|
|
break;
|
|
|
|
case IDC_PERMISSIONS:
|
|
EditPermissions2 (hwnd, lpDdeS->lpszShareName, FALSE);
|
|
break;
|
|
|
|
case IDC_STARTAPP:
|
|
EnableWindow(GetDlgItem(hwnd, IDC_MINIMIZED),
|
|
IsDlgButtonChecked(hwnd, IDC_STARTAPP));
|
|
break;
|
|
|
|
default:
|
|
bRet = FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_HELP:
|
|
lphi = (LPHELPINFO) lParam;
|
|
if (lphi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
if ((lphi->iCtrlId == IDC_STARTAPP) ||
|
|
(lphi->iCtrlId == IDC_MINIMIZED) ||
|
|
(lphi->iCtrlId == IDC_PERMISSIONS) ||
|
|
(lphi->iCtrlId == IDOK) ||
|
|
(lphi->iCtrlId == IDCANCEL) )
|
|
{
|
|
WinHelp ( lphi->hItemHandle,
|
|
szHelpFile,
|
|
HELP_WM_HELP,
|
|
(DWORD_PTR) (LPVOID) aHelpIDs);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bRet = FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
iCtrlId = GetDlgCtrlID( (HWND) wParam );
|
|
if ((iCtrlId == IDC_STATICSHARENAME) ||
|
|
(iCtrlId == IDC_STARTAPP) ||
|
|
(iCtrlId == IDC_MINIMIZED) ||
|
|
(iCtrlId == IDC_PERMISSIONS) ||
|
|
(iCtrlId == IDOK) ||
|
|
(iCtrlId == IDCANCEL) )
|
|
{
|
|
WinHelp( (HWND) wParam,
|
|
szHelpFile,
|
|
HELP_CONTEXTMENU,
|
|
(DWORD_PTR) (LPVOID) aHelpIDs);
|
|
}
|
|
break;
|
|
//
|
|
|
|
default:
|
|
bRet = FALSE;
|
|
}
|
|
|
|
|
|
|
|
if (pSD)
|
|
LocalFree (pSD);
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* IsUniqueName
|
|
*
|
|
* Check to see if the name is unique
|
|
*/
|
|
|
|
static BOOL IsUniqueName (PKEEPASDLG_PARAM pParam)
|
|
{
|
|
PMDIINFO pMDI;
|
|
LISTENTRY ListEntry;
|
|
PLISTENTRY pLE;
|
|
INT i;
|
|
|
|
|
|
if (!(pMDI = GETMDIINFO(hwndLocal)))
|
|
return FALSE;
|
|
|
|
|
|
StringCchCopy (ListEntry.name, MAX_PAGENAME_LENGTH + 1, pParam->ShareName);
|
|
|
|
i = (INT)SendMessage (pMDI->hWndListbox,
|
|
LB_FINDSTRING,
|
|
(WPARAM)-1,
|
|
(LPARAM)(LPCSTR) &ListEntry);
|
|
|
|
|
|
if (LB_ERR != i)
|
|
{
|
|
SendMessage (pMDI->hWndListbox,
|
|
LB_GETTEXT,
|
|
i,
|
|
(LPARAM)&pLE);
|
|
|
|
pParam->bAlreadyShared = IsShared (pLE);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
* KeepAsDlgProc
|
|
*
|
|
* Ask the user for a page name.
|
|
*/
|
|
|
|
INT_PTR CALLBACK KeepAsDlgProc(
|
|
HWND hwnd,
|
|
UINT msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
static PKEEPASDLG_PARAM pParam;
|
|
|
|
LPHELPINFO lphi;
|
|
const DWORD aHelpIDs[] =
|
|
{
|
|
IDC_STATICPAGENAME, IDH_KEEPASEDIT,
|
|
IDC_KEEPASEDIT, IDH_KEEPASEDIT,
|
|
IDC_SHARECHECKBOX, IDH_SHARECHECKBOX,
|
|
0, 0
|
|
};
|
|
|
|
|
|
|
|
switch (msg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
pParam = (PKEEPASDLG_PARAM)lParam;
|
|
|
|
pParam->bAlreadyExist = FALSE;
|
|
pParam->bAlreadyShared = FALSE;
|
|
pParam->ShareName[0] = '\0';
|
|
|
|
SendDlgItemMessage (hwnd, IDC_KEEPASEDIT, EM_LIMITTEXT, MAX_NDDESHARENAME - 15, 0L);
|
|
SendDlgItemMessage (hwnd, IDC_SHARECHECKBOX, BM_SETCHECK, fSharePreference, 0L);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (wParam)
|
|
{
|
|
case IDOK:
|
|
fSharePreference = (BOOL)SendDlgItemMessage (hwnd,
|
|
IDC_SHARECHECKBOX,
|
|
BM_GETCHECK,
|
|
0,
|
|
0L );
|
|
|
|
if (!GetDlgItemText(hwnd, IDC_KEEPASEDIT, pParam->ShareName+1, MAX_PAGENAME_LENGTH))
|
|
{
|
|
SetFocus (GetDlgItem (hwnd, IDC_KEEPASEDIT));
|
|
break;
|
|
}
|
|
|
|
pParam->ShareName[0] = SHR_CHAR;
|
|
|
|
if (!NDdeIsValidShareName(pParam->ShareName + 1))
|
|
{
|
|
MessageBoxID (hInst,
|
|
hwnd,
|
|
IDS_PAGENAMESYNTAX,
|
|
IDS_PASTEDLGTITLE,
|
|
MB_OK|MB_ICONEXCLAMATION);
|
|
break;
|
|
}
|
|
|
|
pParam->ShareName[0] = UNSHR_CHAR;
|
|
|
|
// make sure name is unique
|
|
if ( !IsUniqueName (pParam))
|
|
{
|
|
if (IDOK != MessageBoxID (hInst,
|
|
hwnd,
|
|
IDS_NAMEEXISTS,
|
|
IDS_PASTEDLGTITLE,
|
|
MB_OKCANCEL|MB_ICONEXCLAMATION))
|
|
break;
|
|
|
|
pParam->bAlreadyExist = TRUE;
|
|
|
|
}
|
|
|
|
EndDialog( hwnd, TRUE );
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hwnd, FALSE );
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_HELP:
|
|
lphi = (LPHELPINFO) lParam;
|
|
if (lphi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
WinHelp ( lphi->hItemHandle,
|
|
szHelpFile,
|
|
HELP_WM_HELP,
|
|
(DWORD_PTR) (LPVOID) aHelpIDs);
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
WinHelp( (HWND) wParam,
|
|
szHelpFile,
|
|
HELP_CONTEXTMENU,
|
|
(DWORD_PTR) (LPVOID) aHelpIDs);
|
|
break;
|
|
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|