📄 ieproc.c
字号:
/****************************************************************************
*
* Open Watcom Project
*
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
* ========================================================================
*
* This file contains Original Code and/or Modifications of Original
* Code as defined in and that are subject to the Sybase Open Watcom
* Public License version 1.0 (the 'License'). You may not use this file
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
* provided with the Original Code and Modifications, and is also
* available at www.sybase.com/developer/opensource.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
* NON-INFRINGEMENT. Please see the License for the specific language
* governing rights and limitations under the License.
*
* ========================================================================
*
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
* DESCRIBE IT HERE!
*
****************************************************************************/
#include "imgedit.h"
#include "iconinfo.h"
#include "ieprofil.h"
#include "aboutdlg.h"
#include "iedde.h"
#include "banner.h"
#include "wwinhelp.h"
extern BOOL FusionCalled;
static BOOL ImgEdEnableMenuInput = FALSE;
void IEEnableMenuInput( BOOL enable )
{
ImgEdEnableMenuInput = enable;
}
/*
* enableMainItems - enables menu items.
*/
static void enableMainItems( HMENU hmenu )
{
img_node *node;
if( !hmenu ) return;
node = GetCurrentNode();
if ( !(DoImagesExist()) ) {
_wpi_enablemenuitem( hmenu, IMGED_SAVE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_SAVE_AS, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CLOSE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CLOSEALL, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ARRANGE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_TILE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CASCADE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ROTATECC, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ROTATECL, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_FLIPHORZ, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_FLIPVERT, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_UP, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_DOWN, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_RIGHT, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_LEFT, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_SIZE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_MAXIMIZE, FALSE, FALSE );
} else if ( node ) {
CheckForClipboard( hmenu );
CheckForUndo( node );
_wpi_enablemenuitem( hmenu, IMGED_SAVE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_SAVE_AS, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CLOSE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CLOSEALL, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ARRANGE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_TILE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CASCADE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ROTATECC, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ROTATECL, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_FLIPHORZ, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_FLIPVERT, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_UP, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_DOWN, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_RIGHT, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_LEFT, TRUE, FALSE );
if (node->imgtype != BITMAP_IMG) {
_wpi_enablemenuitem( hmenu, IMGED_SIZE, FALSE, FALSE );
} else {
_wpi_enablemenuitem( hmenu, IMGED_SIZE, TRUE, FALSE );
}
_wpi_enablemenuitem( hmenu, IMGED_MAXIMIZE, TRUE, FALSE );
} else {
_wpi_enablemenuitem( hmenu, IMGED_SAVE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_SAVE_AS, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CLOSE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_SIZE, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CLOSEALL, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_ARRANGE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_TILE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_CASCADE, TRUE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_MAXIMIZE, FALSE, FALSE );
}
if( FusionCalled ) {
_wpi_enablemenuitem( hmenu, IMGED_NEW, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_OPEN, FALSE, FALSE );
}
} /* enableMainItems */
#ifndef __OS2_PM__
/*
* createClientWindow - creates the client window required by mdi.
*/
void createClientWindow( HWND hwnd )
{
CLIENTCREATESTRUCT ccs;
RECT clientrect;
short height;
GetClientRect( hwnd, &clientrect );
height = clientrect.bottom - FUNCTIONBAR_WIDTH - STATUS_WIDTH;
ccs.hWindowMenu = GetSubMenu( GetMenu(hwnd), 5 );
ccs.idFirstChild = IDM_FIRSTCHILD;
ClientWindow = CreateWindow( "mdiclient",
NULL,
WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE |
WS_HSCROLL | WS_VSCROLL |
MDIS_ALLCHILDSTYLES,
0,
FUNCTIONBAR_WIDTH + 1,
clientrect.right,
height,
hwnd,
0,
Instance,
(LPSTR) &ccs );
} /* createClientWindow */
/*
* setClientSize - sets the new size of the client area.
*/
static void setClientSize( HWND hwnd )
{
RECT rcclient;
short height;
GetClientRect( hwnd, &rcclient );
height = rcclient.bottom - FUNCTIONBAR_WIDTH
- STATUS_WIDTH;
MoveWindow(ClientWindow, 0, FUNCTIONBAR_WIDTH+1,
rcclient.right, height, TRUE);
} /* setClientSize */
#else
/*
* resizeClientArea - Resizes the current area of the client
*/
static void resizeClientArea( WPI_PARAM2 mp2 )
{
SHORT width;
SHORT height;
if (!ClientWindow) return;
width = SHORT1FROMMP( mp2 );
height = SHORT2FROMMP( mp2 );
WinSetWindowPos( ClientWindow, HWND_TOP, 0, STATUS_WIDTH, width,
height - STATUS_WIDTH - FUNCTIONBAR_WIDTH,
SWP_SIZE | SWP_MOVE );
} /* resizeClientArea */
#endif
/*
* checkBrushItem - Check the brush size item in the main menu
*/
void checkBrushItem( HMENU hmenu, int newitem )
{
int i;
int brush_size=2;
for(i=IMGED_2x2; i<=IMGED_5x5; ++i) {
_wpi_checkmenuitem( hmenu, i, FALSE, FALSE );
if (i == newitem) {
SetBrushSize( brush_size );
}
++brush_size;
}
_wpi_checkmenuitem( hmenu, newitem, TRUE, FALSE );
} /* checkBrushItem */
static BOOL IEIsMenuIDValid( HMENU menu, WORD id )
{
UINT st;
if( !ImgEdEnableMenuInput ) {
return( FALSE );
}
if( menu == (HMENU) NULL ) {
return( TRUE );
}
// put any menu id's that you would like forced here
switch( id ) {
case IMGED_CLOSEALL:
if( ImgedIsDDE ) {
return( TRUE );
}
break;
}
st = GetMenuState( menu, id, MF_BYCOMMAND );
if ( ( st == -1 ) || ( ( st & MF_GRAYED ) == MF_GRAYED ) ) {
return( FALSE );
}
return( TRUE );
}
/*
* ImgEdFrameProc - handle messages for the image editor appl.
*/
MRESULT CALLBACK ImgEdFrameProc( HWND hwnd, WPI_MSG msg, WPI_PARAM1 wparam,
WPI_PARAM2 lparam )
{
static BOOL window_destroyed = FALSE;
static HMENU hmenu;
WORD cmdid;
img_node *node;
WPI_RECT rcmain;
#ifndef __OS2_PM__
about_info ai;
#endif
WPI_RECTDIM left, top;
if (!window_destroyed) {
enableMainItems( hmenu );
}
switch ( msg ) {
case UM_EXIT:
_wpi_sendmessage( hwnd, WM_COMMAND, IMGED_CLOSEALL, 0L );
// fall thru
case UM_EXIT_NO_SAVE:
if ( _wpi_getfirstchild( _wpi_getclient(ClientWindow) ) != NULL ) {
break;
}
#ifndef __OS2_PM__
_wpi_destroywindow( _wpi_getframe(hwnd) );
#else
_wpi_sendmessage( hwnd, WM_CLOSE, 0, 0 );
#endif
break;
case UM_SAVE_ALL:
SaveAllImages();
break;
case WM_CREATE:
hmenu = _wpi_getmenu( _wpi_getframe(hwnd) );
#ifndef __OS2_PM__
createClientWindow( hwnd );
#endif
if( !InitStatusLine( hwnd ) ) {
return( -1 );
}
InitFunctionBar( hwnd );
InitIconInfo();
InitializeCursors();
/*
* Set values from profile information ...
*/
if (ImgedConfigInfo.brush_size <= 5 && ImgedConfigInfo.brush_size >=2) {
checkBrushItem( hmenu, IMGED_2x2-2+ImgedConfigInfo.brush_size );
}
if (ImgedConfigInfo.grid_on) {
CheckGridItem(hmenu);
}
if (ImgedConfigInfo.square_grid) {
CheckSquareGrid( hmenu );
}
if (ImgedConfigInfo.show_state & SET_SHOW_VIEW) {
CheckViewItem( hmenu );
}
_wpi_enablemenuitem( hmenu, IMGED_CRESET, FALSE, FALSE );
_wpi_enablemenuitem( hmenu, IMGED_RCOLOUR, FALSE, FALSE );
#ifndef __OS2_PM__
// not necessary for PM
InitMenus( hmenu );
#endif
SetHintText( IEAppTitle );
return 0;
#ifdef __NT__
case WM_DROPFILES:
OpenImage((HANDLE)wparam);
break;
#endif
case WM_MOVE:
_wpi_getwindowrect( hwnd, &rcmain );
if( !ImgedConfigInfo.ismaximized ) {
ImgedConfigInfo.last_xpos = ImgedConfigInfo.x_pos;
ImgedConfigInfo.last_ypos = ImgedConfigInfo.y_pos;
_wpi_getrectvalues( rcmain, &left, &top, NULL, NULL );
ImgedConfigInfo.x_pos = (short)left;
ImgedConfigInfo.y_pos = (short)top;
}
return 0;
case WM_SIZE:
#ifndef __OS2_PM__
if (ClientWindow) {
setClientSize( hwnd );
}
#else
resizeClientArea( lparam );
#endif
ResizeFunctionBar(lparam);
ResizeStatusBar(lparam);
if( !_imgwpi_issizeminimized(wparam) &&
!_imgwpi_issizemaximized(wparam) ) {
_wpi_getwindowrect( hwnd, &rcmain );
ImgedConfigInfo.width = (short)_wpi_getwidthrect( rcmain );
ImgedConfigInfo.height = (short)_wpi_getheightrect( rcmain );
ImgedConfigInfo.ismaximized = FALSE;
} else {
ImgedConfigInfo.x_pos = ImgedConfigInfo.last_xpos;
ImgedConfigInfo.y_pos = ImgedConfigInfo.last_ypos;
ImgedConfigInfo.ismaximized = _imgwpi_issizemaximized( wparam );
}
return FALSE;
case WM_MENUSELECT:
#ifndef __OS2_PM__
if( GET_WM_MENUSELECT_FLAGS(wparam, lparam) & MF_SEPARATOR ) {
break;
}
if( GET_WM_MENUSELECT_FLAGS(wparam, lparam) & MF_SYSMENU ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -