📄 wderes.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 <windows.h>
#include <win1632.h>
#include <string.h>
#include "wdeglbl.h"
#include "wdemem.h"
#include "wderes.h"
#include "wdeinfo.h"
#include "wdereq.h"
#include "wdeobjid.h"
#include "wdemsgbx.h"
#include "wdemsgs.gh"
#include "wdeldres.h"
#include "wdefinit.h"
#include "wdeedit.h"
#include "wdemain.h"
#include "wdesvres.h"
#include "wdesdlg.h"
#include "wdelist.h"
#include "wdegetfn.h"
#include "wdewait.h"
#include "wdesym.h"
#include "wde_wres.h"
#include "wdesdup.h"
#include "wdefdiag.h"
#include "wdetfile.h"
#include "wdectool.h"
#include "wdeselft.h"
#include "wdefmenu.h"
#include "wdedebug.h"
#include "wdestat.h"
#include "wdefbase.h"
#include "wdedde.h"
#include "wdefont.h"
#include "wde_rc.h"
#include "wrutil.h"
/****************************************************************************/
/* external function prototypes */
/****************************************************************************/
extern LRESULT WINEXPORT WdeResWndProc ( HWND, UINT, WPARAM, LPARAM );
extern void WINEXPORT WdeMouseRtn ( HWND, RECT * );
/****************************************************************************/
/* static function prototypes */
/****************************************************************************/
static void WdeSetCurrentRes ( WdeResInfo * );
static Bool WdeCreateResourceWindow ( WdeResInfo *, int, char * );
static Bool WdeAddDlgItems ( WdeResInfo * );
static Bool WdeRemoveResource ( WdeResInfo * );
static char *WdeGetQueryName ( WdeResInfo * );
static Bool WdeQuerySaveResOnDeleteRes ( WdeResInfo *, Bool );
static Bool WdeQuerySaveSymOnDeleteRes ( WdeResInfo *, Bool );
static int WdeIncNumRes ( void );
static int WdeDecNumRes ( void );
static WdeResInfo *WdeResInfoFromWin ( HWND );
/****************************************************************************/
/* external variables */
/****************************************************************************/
char *WdeResUntitled = NULL;
char *WdeResOpenTitle = NULL;
char *WdeResSaveTitle = NULL;
char *WdeResOpenFilter = NULL;
char *WdeResSaveFilter = NULL;
char *WdeResSaveFilterEXE = NULL;
char *WdeResSaveFilterDLL = NULL;
char *WdeResSaveFilterALL = NULL;
char *WdeSymSaveFilter = NULL;
char *WdeLoadHeaderTitle = NULL;
char *WdeWriteHeaderTitle = NULL;
char *WdeDlgSaveIntoTitle = NULL;
char *WdeDlgSaveAsTitle = NULL;
char *WdeDlgSaveTitle = NULL;
char *WdeNoSym = NULL;
char *WdeCustOpenTitle = NULL;
char *WdeCustFilter = NULL;
/****************************************************************************/
/* static variables */
/****************************************************************************/
static LIST *WdeResList = NULL;
static unsigned WdeResCounter = 0;
static int WdeNumRes = 0;
static WdeResInfo *WdeCurrentRes = NULL;
static Bool WdeOldStickyMode = FALSE;
static void WdeMassageFilter( char *filter )
{
WRMassageFilter( filter );
}
void WdeFiniResStrings( void )
{
if( WdeResUntitled != NULL ) {
WdeFreeRCString( WdeResUntitled );
WdeResUntitled = NULL;
}
if( WdeResOpenTitle != NULL ) {
WdeFreeRCString( WdeResOpenTitle );
WdeResOpenTitle = NULL;
}
if( WdeResSaveTitle != NULL ) {
WdeFreeRCString( WdeResSaveTitle );
WdeResSaveTitle = NULL;
}
if( WdeResOpenFilter != NULL ) {
WdeFreeRCString( WdeResOpenFilter );
WdeResOpenFilter = NULL;
}
if( WdeResSaveFilter != NULL ) {
WdeFreeRCString( WdeResSaveFilter );
WdeResSaveFilter = NULL;
}
if( WdeResSaveFilterEXE != NULL ) {
WdeFreeRCString( WdeResSaveFilterEXE );
WdeResSaveFilterEXE = NULL;
}
if( WdeResSaveFilterDLL != NULL ) {
WdeFreeRCString( WdeResSaveFilterDLL );
WdeResSaveFilterDLL = NULL;
}
if( WdeResSaveFilterALL != NULL ) {
WdeFreeRCString( WdeResSaveFilterALL );
WdeResSaveFilterALL = NULL;
}
if( WdeSymSaveFilter != NULL ) {
WdeFreeRCString( WdeSymSaveFilter );
WdeSymSaveFilter = NULL;
}
if( WdeLoadHeaderTitle != NULL ) {
WdeFreeRCString( WdeLoadHeaderTitle );
WdeLoadHeaderTitle = NULL;
}
if( WdeWriteHeaderTitle != NULL ) {
WdeFreeRCString( WdeWriteHeaderTitle );
WdeWriteHeaderTitle = NULL;
}
if( WdeDlgSaveIntoTitle != NULL ) {
WdeFreeRCString( WdeDlgSaveIntoTitle );
WdeDlgSaveIntoTitle = NULL;
}
if( WdeDlgSaveAsTitle != NULL ) {
WdeFreeRCString( WdeDlgSaveAsTitle );
WdeDlgSaveAsTitle = NULL;
}
if( WdeDlgSaveTitle != NULL ) {
WdeFreeRCString( WdeDlgSaveTitle );
WdeDlgSaveTitle = NULL;
}
if( WdeNoSym != NULL ) {
WdeFreeRCString( WdeNoSym );
WdeNoSym = NULL;
}
if( WdeCustOpenTitle != NULL ) {
WdeFreeRCString( WdeCustOpenTitle );
WdeCustOpenTitle = NULL;
}
if( WdeCustFilter != NULL ) {
WdeFreeRCString( WdeCustFilter );
WdeCustFilter = NULL;
}
}
Bool WdeInitResStrings( void )
{
Bool ok;
WdeResUntitled = WdeAllocRCString( WDE_UNTITLEDPROJECT );
ok = ( WdeResUntitled != NULL );
if( ok ) {
WdeResOpenTitle = WdeAllocRCString( WDE_OPENPROJECT );
ok = ( WdeResOpenTitle != NULL );
}
if( ok ) {
WdeResSaveTitle = WdeAllocRCString( WDE_SAVEPROJECT );
ok = ( WdeResSaveTitle != NULL );
}
if( ok ) {
WdeResOpenFilter = WdeAllocRCString( WDE_OPENFILTER );
ok = ( WdeResOpenFilter != NULL );
if( ok ) {
WdeMassageFilter( WdeResOpenFilter );
}
}
if( ok ) {
WdeResSaveFilter = WdeAllocRCString( WDE_SAVEFILTER );
ok = ( WdeResSaveFilter != NULL );
if( ok ) {
WdeMassageFilter( WdeResSaveFilter );
}
}
if( ok ) {
WdeResSaveFilterEXE = WdeAllocRCString( WDE_SAVEFILTEREXE );
ok = ( WdeResSaveFilterEXE != NULL );
if( ok ) {
WdeMassageFilter( WdeResSaveFilterEXE );
}
}
if( ok ) {
WdeResSaveFilterDLL = WdeAllocRCString( WDE_SAVEFILTERDLL );
ok = ( WdeResSaveFilterDLL != NULL );
if( ok ) {
WdeMassageFilter( WdeResSaveFilterDLL );
}
}
if( ok ) {
WdeResSaveFilterALL = WdeAllocRCString( WDE_SAVEFILTERALL );
ok = ( WdeResSaveFilterALL != NULL );
if( ok ) {
WdeMassageFilter( WdeResSaveFilterALL );
}
}
if( ok ) {
WdeSymSaveFilter = WdeAllocRCString( WDE_SYMFILTER );
ok = ( WdeSymSaveFilter != NULL );
if( ok ) {
WdeMassageFilter( WdeSymSaveFilter );
}
}
if( ok ) {
WdeLoadHeaderTitle = WdeAllocRCString( WDE_LOADSYMTITLE );
ok = ( WdeLoadHeaderTitle != NULL );
}
if( ok ) {
WdeWriteHeaderTitle = WdeAllocRCString( WDE_WRITESYMTITLE );
ok = ( WdeWriteHeaderTitle != NULL );
}
if( ok ) {
WdeDlgSaveIntoTitle = WdeAllocRCString( WDE_SAVEDLGINTOTITLE );
ok = ( WdeDlgSaveIntoTitle != NULL );
}
if( ok ) {
WdeDlgSaveAsTitle = WdeAllocRCString( WDE_SAVEDLGASTITLE );
ok = ( WdeDlgSaveAsTitle != NULL );
}
if( ok ) {
WdeDlgSaveTitle = WdeAllocRCString( WDE_SAVEDLGTITLE );
ok = ( WdeDlgSaveTitle != NULL );
}
if( ok ) {
WdeNoSym = WdeAllocRCString( WDE_NOSYMBOL );
ok = ( WdeNoSym != NULL );
}
if( ok ) {
WdeCustOpenTitle = WdeAllocRCString( WDE_OPENCUSTTITLE );
ok = ( WdeCustOpenTitle != NULL );
}
if( ok ) {
WdeCustFilter = WdeAllocRCString( WDE_OPENCUSTFILTER );
ok = ( WdeCustFilter != NULL );
if( ok ) {
WdeMassageFilter( WdeCustFilter );
}
}
if( !ok ) {
WdeFiniResStrings();
}
return( ok );
}
void WdeSetCurrentRes ( WdeResInfo *res_info )
{
WdeCurrentRes = res_info;
}
WdeResInfo *WdeGetCurrentRes ( void )
{
return ( WdeCurrentRes );
}
Bool WdeRegisterResClass ( HINSTANCE app_inst )
{
WNDCLASS wc;
/* fill in the WINDOW CLASS structure for the edit window */
wc.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = WdeResWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = sizeof (WdeResInfo *);
wc.hInstance = app_inst;
wc.hIcon = LoadIcon ( app_inst, "ResIcon" );
wc.hCursor = NULL;
wc.hbrBackground = GetStockObject ( WHITE_BRUSH );
wc.lpszMenuName = NULL;
wc.lpszClassName = "WdeResClass";
/* register the edit window class */
if( !RegisterClass( &wc ) ) {
WdeDisplayErrorMsg( WDE_REGISTEREDITFAILED );
return( FALSE );
}
return ( TRUE );
}
int WdeIncNumRes ( void )
{
WdeNumRes++;
return ( WdeNumRes );
}
int WdeDecNumRes( void )
{
if( WdeNumRes ) {
WdeNumRes--;
}
return( WdeNumRes );
}
int WdeGetNumRes( void )
{
return( WdeNumRes );
}
void WdeShowResourceWindows( int show )
{
LIST *rlist;
WdeResInfo *res_info;
for( rlist = WdeResList; rlist; rlist = ListNext(rlist) ) {
res_info = (WdeResInfo *) ListElement(rlist);
if( show == SW_HIDE ) {
WdeSetEditMode( res_info, FALSE );
}
ShowWindow( res_info->res_win, show );
EnableWindow( res_info->res_win, show != SW_HIDE );
if( show != SW_HIDE ) {
WdeSetEditMode( res_info, TRUE );
}
}
return;
}
void WdeAddResDlgItemToResInfo( WdeResInfo *info, WdeResDlgItem *item )
{
WdeInsertObject( &info->dlg_item_list, item );
}
WdeResInfo *WdeCreateNewResource( char *title )
{
WdeResInfo *res_info;
Bool ok;
ok = ( ( res_info = WdeAllocResInfo() ) != NULL );
if( ok ) {
ok = ( ( res_info->info = WRAllocWRInfo() ) != NULL );
}
if( ok ) {
res_info->hash_table = WRInitHashTable();
ok = ( res_info->hash_table != NULL );
}
if( ok ) {
if( title ) {
res_info->info->save_name = WdeStrDup( title );
ok = ( res_info->info->save_name != NULL );
}
}
if ( ok ) {
#ifdef __NT__
res_info->is32bit = TRUE;
#else
res_info->is32bit = FALSE;
#endif
ok = WdeCreateResourceWindow( res_info, 0, title );
}
if( ok ) {
ListAddElt( &WdeResList, (void *) res_info );
if( !WdeIsDDE() || title == NULL ) {
ok = ( WdeCreateNewDialog( NULL, res_info->is32bit ) != NULL );
}
}
if( ok ) {
WdeCheckBaseScrollbars( FALSE );
}
if( res_info ) {
if( ok ) {
WdeSetResModified( res_info, FALSE );
} else {
WdeRemoveResource( res_info );
res_info = NULL;
}
}
return( res_info );
}
Bool WdeAddDlgItems( WdeResInfo *res_info )
{
WResResNode *rnode;
WResLangNode *lnode;
WdeResDlgItem *dlg_item;
if( !res_info ) {
return( FALSE );
}
if( res_info->dlg_entry != NULL ) {
rnode = res_info->dlg_entry->Head;
} else {
rnode = NULL;
}
while( rnode ) {
lnode = rnode->Head;
while( lnode ) {
dlg_item = WdeAllocResDlgItem();
if( !dlg_item ) {
return( FALSE );
}
dlg_item->is32bit = res_info->is32bit;
dlg_item->rnode = rnode;
dlg_item->lnode = lnode;
WdeAddResDlgItemToResInfo( res_info, dlg_item );
lnode = lnode->Next;
}
rnode = rnode->Next;
}
return( TRUE );
}
Bool WdeOpenResource ( char *fn )
{
char *name;
WdeResInfo *res_info;
WdeGetFileStruct gf;
Bool ok, got_name;
WdeSetWaitCursor ( TRUE );
res_info = NULL;
name = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -