2020-09-30 17:12:29 +02:00

394 lines
10 KiB
C

/***************************************************************************
*
* File Name: rcp.c
*
* Copyright (C) 1993-1996 Hewlett-Packard Company.
* All rights reserved.
*
* 11311 Chinden Blvd.
* Boise, Idaho 83714
*
* This is a part of the HP JetAdmin Printer Utility
*
* This source code is only intended as a supplement for support and
* localization of HP JetAdmin by 3rd party Operating System vendors.
* Modification of source code cannot be made without the express written
* consent of Hewlett-Packard.
*
*
* Description:
*
* Author: Name
*
*
* Modification history:
*
* date initials change description
*
* mm-dd-yy MJB
*
*
*
*
*
*
***************************************************************************/
#include <pch_c.h>
#include <macros.h>
#ifndef WIN32
#include <string.h>
#endif
#include <nolocal.h>
#include ".\help\hpprntr.hh"
#include "resource.h"
#include "rcpsheet.h"
extern HINSTANCE hInstance;
extern HFONT hFontDialog;
extern HPERIPHERAL hPeripheral;
//globals==================================================
HWND hRCP = NULL;
int keywordIDListRCP[] = {IDC_ONLINE, IDH_RC_cp_online,
IDC_ONLINE_TEXT, IDH_RC_cp_online,
IDC_FORM_FEED, IDH_RC_cp_form_feed,
IDC_FORM_FEED_TEXT, IDH_RC_cp_form_feed,
IDC_CONTINUE, IDH_RC_cp_continue,
IDC_CONTINUE_TEXT, IDH_RC_cp_continue,
0, 0};
HPBOOL bOnline = TRUE,
bFormFeed = FALSE;
int cxBorder,
cyBorder;
HBRUSH hOnlineOn = NULL,
hOnlineOff = NULL,
hFormFeedOn = NULL,
hFormFeedOff = NULL;
//==========================================================
// RCP Sheet Dialog Proc
DLL_EXPORT(BOOL) APIENTRY RCPSheetProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
BOOL bProcessed = FALSE;
switch (msg)
{
case WM_DRAWITEM:
HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, Cls_RCPOnDrawItem);
break;
case WM_DESTROY:
if ( hOnlineOn )
DeleteObject(hOnlineOn);
if ( hOnlineOff )
DeleteObject(hOnlineOff);
if ( hFormFeedOn )
DeleteObject(hFormFeedOn);
if ( hFormFeedOff )
DeleteObject(hFormFeedOff);
break;
case WM_COMMAND:
HANDLE_WM_COMMAND(hwnd, wParam, lParam, Cls_OnRCPCommand);
break;
case WM_INITDIALOG:
bProcessed = (BOOL)HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, Cls_OnRCPInitDialog);
break;
#ifdef WIN32
case WM_HELP:
return(OnF1HelpRCP(wParam, lParam));
break;
case WM_CONTEXTMENU:
return(OnContextHelpRCP(wParam, lParam));
break;
#endif //WIN32
}
return (bProcessed);
}
//.........................................................
void Cls_OnRCPCommand(HWND hwnd, int id, HWND hwndCtrl, UINT codeNotify)
{
switch(id)
{
case IDC_HELP:
WinHelp(hwnd, PRINTER_HELP_FILE, HELP_CONTEXT, IDH_PP_control_panel);
break;
case IDOK:
case IDCANCEL:
EndDialog(hwnd, id);
break;
case IDC_ONLINE:
{
TCHAR online[256];
DWORD dwResult,
dWord;
PeripheralFrontPanel panel;
dWord = sizeof(panel);
panel.flags = PANEL_ONLINE;
panel.bOnline = !bOnline;
dwResult = PALSetObject(hPeripheral, OT_PERIPHERAL_FRONT_PANEL, 0, &panel, &dWord);
if ( dwResult IS RC_SUCCESS )
{
bOnline = panel.bOnline;
if ( bOnline )
LoadString(hInstance, IDS_PRESS_TO_TAKE_OFFLINE, online, SIZEOF_IN_CHAR(online));
else
LoadString(hInstance, IDS_PRESS_TO_TAKE_ONLINE, online, SIZEOF_IN_CHAR(online));
SetDlgItemText(hRCP, IDC_ONLINE_TEXT, online);
}
InvalidateRect(GetDlgItem(hRCP, IDC_ONLINE), NULL, TRUE);
}
break;
case IDC_FORM_FEED:
{
TCHAR feed[256];
DWORD dwResult,
dWord;
PeripheralFrontPanel panel;
if ( !bOnline )
{
dWord = sizeof(panel);
panel.flags = PANEL_FORM_FEED;
panel.bFormFeed = !bFormFeed;
dwResult = PALSetObject(hPeripheral, OT_PERIPHERAL_FRONT_PANEL, 0, &panel, &dWord);
if ( dwResult IS RC_SUCCESS )
{
bFormFeed = panel.bFormFeed;
if ( bFormFeed )
LoadString(hInstance, IDS_PRESS_TO_SEND_FORM_FEED, feed, SIZEOF_IN_CHAR(feed));
else
LoadString(hInstance, IDS_FORM_FEED_NOT_NEEDED, feed, SIZEOF_IN_CHAR(feed));
SetDlgItemText(hRCP, IDC_FORM_FEED_TEXT, feed);
EnableWindow(GetDlgItem(hRCP, IDC_FORM_FEED), (UINT)bFormFeed);
}
InvalidateRect(GetDlgItem(hRCP, IDC_FORM_FEED), NULL, TRUE);
}
}
break;
case IDC_CONTINUE:
{
DWORD dwResult,
dWord;
PeripheralFrontPanel panel;
dWord = sizeof(panel);
panel.flags = PANEL_CONTINUE;
panel.bContinue = TRUE;
dwResult = PALSetObject(hPeripheral, OT_PERIPHERAL_FRONT_PANEL, 0, &panel, &dWord);
if ( dwResult IS RC_SUCCESS )
{}
}
break;
}
}
//...................................................................
void Cls_RCPOnDrawItem(HWND hwnd, const DRAWITEMSTRUCT FAR* lpDrawItem)
// handles WM_DRAWITEM
{
HBRUSH hBrush;
switch (lpDrawItem->itemAction)
{
// handle normal drawing of button, but check if its selected or focus
case ODA_SELECT:
case ODA_DRAWENTIRE:
if ( lpDrawItem->CtlID IS IDC_ONLINE )
{
if ( bOnline )
hBrush = hOnlineOn;
else
hBrush = hOnlineOff;
}
else if ( lpDrawItem->CtlID IS IDC_FORM_FEED )
{
if ( bFormFeed )
hBrush = hFormFeedOn;
else
hBrush = hFormFeedOff;
}
else
hBrush = NULL;
// handle button pressed down select state -- button down bitmap
// text is right & down 2 pixels
if (lpDrawItem->itemState & ODS_SELECTED)
DrawButton (lpDrawItem->hDC,lpDrawItem->rcItem, TRUE, hBrush);
else // not selected -- button up; text is in normal position
DrawButton (lpDrawItem->hDC,lpDrawItem->rcItem, FALSE, hBrush);
break;
}
}
//...................................................................
BOOL Cls_OnRCPInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
#ifndef WIN32
HWND hwndChild;
hwndChild = GetFirstChild(hwnd);
while (hwndChild)
{
SetWindowFont(hwndChild, hFontDialog, FALSE);
hwndChild = GetNextSibling(hwndChild);
}
#endif
hRCP = hwnd;
cxBorder = GetSystemMetrics (SM_CXBORDER);
cyBorder = GetSystemMetrics (SM_CYBORDER);
hOnlineOn = CreateSolidBrush(RGB(255, 0, 0));
hOnlineOff = CreateSolidBrush(RGB(255, 255, 255));
hFormFeedOn = CreateSolidBrush(RGB(255, 0, 0));
hFormFeedOff = CreateSolidBrush(RGB(255, 255, 255));
UpdateRCP();
return TRUE;
}
//...................................................................
LRESULT OnContextHelpRCP(WPARAM wParam, LPARAM lParam)
{
#ifdef WIN32
WinHelp((HWND)wParam, PRINTER_HELP_FILE, HELP_CONTEXTMENU, (DWORD)(LPSTR)keywordIDListRCP);
#endif
return(1);
}
//...................................................................
LRESULT OnF1HelpRCP(WPARAM wParam, LPARAM lParam)
{
#ifdef WIN32
WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle, PRINTER_HELP_FILE, HELP_WM_HELP,
(DWORD)(LPSTR)keywordIDListRCP);
#endif
return(1);
}
//...................................................................
void DrawButton (HDC hdc, RECT rect, BOOL bDown, HBRUSH hLightBrush)
{
HBRUSH hBrush, hbrFrame, hbrFace, hbrHilite, hbrShadow;
RECT light,
border;
int i;
hbrFrame = CreateSolidBrush(GetSysColor(COLOR_WINDOWFRAME));
hbrFace = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
hbrHilite = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
hbrShadow = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
FillRect (hdc, &rect, hbrFace);
CopyRect(&light, &rect);
hBrush = hbrFrame;
border = rect; border.bottom = border.top + cyBorder;
FillRect (hdc, &border, hBrush);
border = rect; border.right = border.left + cxBorder;
FillRect (hdc, &border, hBrush);
border = rect; border.top = border.bottom - cyBorder;
FillRect (hdc, &border, hBrush);
border = rect; border.left = border.right - cxBorder;
FillRect (hdc, &border, hBrush);
for (i= 0; i<2; i++)
{
InflateRect (&rect, -cxBorder, -cyBorder);
hBrush = (bDown?hbrShadow:hbrHilite);
border = rect; border.bottom = border.top + cyBorder;
FillRect (hdc, &border, hBrush);
border = rect; border.right = border.left + cxBorder;
FillRect (hdc, &border, hBrush);
if (!bDown)
{
hBrush = hbrShadow;
border = rect; border.top = border.bottom - cyBorder;
FillRect (hdc, &border, hBrush);
border = rect; border.left = border.right - cxBorder;
FillRect (hdc, &border, hBrush);
}
}
if ( hLightBrush )
{
light.top = ( light.bottom - light.top - LIGHT_HEIGHT ) / 2;
light.bottom = light.top + LIGHT_HEIGHT;
light.left = rect.left + cxBorder;
if ( bDown )
light.left -= 2;
light.right = light.left + LIGHT_WIDTH;
if ( bDown )
OffsetRect(&light, 2, 2);
FillRect (hdc, &light, hLightBrush);
}
DeleteObject (hbrFrame);
DeleteObject (hbrFace);
DeleteObject (hbrHilite);
DeleteObject (hbrShadow);
}
void UpdateRCP(void)
{
DWORD dWord,
dwResult;
TCHAR online[256],
feed[256],
cont[256];
PeripheralFrontPanel panel;
dWord = sizeof(panel);
panel.flags = PANEL_ONLINE | PANEL_FORM_FEED;
dwResult = PALGetObject(hPeripheral, OT_PERIPHERAL_FRONT_PANEL, 0, &panel, &dWord);
if ( dwResult IS RC_SUCCESS )
{
bOnline = panel.bOnline;
bFormFeed = panel.bFormFeed;
}
else
{
bOnline = FALSE; // Assume error is because it was offline
bFormFeed = FALSE;
}
if ( bOnline )
LoadString(hInstance, IDS_PRESS_TO_TAKE_OFFLINE, online, SIZEOF_IN_CHAR(online));
else
LoadString(hInstance, IDS_PRESS_TO_TAKE_ONLINE, online, SIZEOF_IN_CHAR(online));
SetDlgItemText(hRCP, IDC_ONLINE_TEXT, online);
EnableWindow(GetDlgItem(hRCP, IDC_FORM_FEED), (UINT)bFormFeed);
if ( bFormFeed )
LoadString(hInstance, IDS_PRESS_TO_SEND_FORM_FEED, feed, SIZEOF_IN_CHAR(feed));
else
LoadString(hInstance, IDS_FORM_FEED_NOT_NEEDED, feed, SIZEOF_IN_CHAR(feed));
SetDlgItemText(hRCP, IDC_FORM_FEED_TEXT, feed);
LoadString(hInstance, IDS_PRESS_TO_CONTINUE, cont, SIZEOF_IN_CHAR(cont));
SetDlgItemText(hRCP, IDC_CONTINUE_TEXT, cont);
}