⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_lgbk.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/***************************************************************************\
	UI_lgbk.cpp
	David Power
	July 14,1997

	Logbook screen for falcon
\***************************************************************************/
#include <windows.h>
#include <targa.h>
#include "falclib.h"
#include "dxutil\ddutil.h"
#include "Graphics\Include\imagebuf.h"
#include "dispcfg.h"
#include "chandler.h"
#include "ui95_ext.h"
#include "entity.h"
#include "feature.h"
#include "vehicle.h"
#include "evtparse.h"
#include "Mesg.h"
#include "MsgInc\DamageMsg.h"
#include "MsgInc\WeaponFireMsg.h"
#include "MsgInc\DeathMessage.h"
#include "MsgInc\MissileEndMsg.h"
#include "MsgInc\LandingMessage.h"
#include "find.h"
#include "flight.h"
#include "falcuser.h"
#include "f4find.h"
#include "falcsess.h"
#include "f4error.h"
#include "ui_ia.h"
#include "ui_dgfgt.h"
#include "playerop.h"
#include "userids.h"
#include "logbook.h"
#include "userids.h"
#include "cstringrc.h"
#include "textids.h"
//#include "ui_lgbk.h"

#define _USE_REGISTRY_ 1

extern C_Handler *gMainHandler;
extern C_Parser *gMainParser;

static void HookupPWControls(long ID);
static void HookupLBControls(long ID);
void CloseWindowCB(long ID,short hittype,C_Base *control);
void CloseLogWindowCB(long ID,short hittype,C_Base *control);
void UI_Help_Guide_CB(long ID,short hittype,C_Base *ctrl);
void Uni_Float(_TCHAR *buffer);
void LBSetupControls(IMAGE_RSC *Picture = NULL, IMAGE_RSC *Patch = NULL);
int SetImage(long ID,_TCHAR *filename ,long ImageID);
int SetResourceImage(long ID,long ImageID);
void MakeVirtualListFromRsc(long ID,long startid);
void LoadAFile(long TitleID,_TCHAR *filespec,_TCHAR *excludelist[],void (*YesCB)(long,short,C_Base*),void (*NoCB)(long,short,C_Base*));
void LoadVirtualFile(long TitleID,_TCHAR *filespec,_TCHAR *excludelist[],void (*YesCB)(long,short,C_Base*),void (*NoCB)(long,short,C_Base*),_TCHAR virtuallist[200][64],void (*VirtualCB)(long,short,C_Base*));
void SaveLogBookCB(long ID,short hittype,C_Base *control);
int CheckCallsign(_TCHAR *filename);
void AwardDevices(C_Window *win,long ID, uchar Medal, uchar Number);
int UpdateKeyMapList( char *fname,int flag );
void GetPilotList( C_Window *win, _TCHAR *fspec, _TCHAR *excludelist[],
					C_ListBox *lbox, BOOL cutext, BOOL exclude_te);
int SetPilot(_TCHAR *callsign,C_ListBox *lbox);
int SaveControlValues(void);
void AreYouSure(long TitleID,long MessageID,void (*OkCB)(long,short,C_Base*),void (*CancelCB)(long,short,C_Base*));
void AreYouSure(long TitleID,_TCHAR *text,void (*OkCB)(long,short,C_Base*),void (*CancelCB)(long,short,C_Base*));


//for testing
void AwardWindow(void);
void CourtMartialWindow(void);
void PromotionWindow(void);
void LoadCommonWindows(void);

_TCHAR *UI_WordWrap(C_Window *win,_TCHAR *str,long fontid,short width,BOOL *status);

extern _TCHAR VirtualFileList[200][64];
extern int LBLoaded;

enum{
	PW_TITLE_BAR			=140002,
};

enum{
	DEV_STAR = 0,
	DEV_OAK = 1,
};

extern C_String *gStringMgr;

long gFullRanksTxt[NUM_RANKS] = {	TXT_SEC_LT,
								TXT_LEIUTENANT,
								TXT_CAPTAIN,			
								TXT_MAJOR,			
								TXT_LT_COL,			
								TXT_COLONEL,			
								TXT_BRIG_GEN,
								};

long gRanksTxt[NUM_RANKS]=
{
	TXT_ABBRV_RANK_SEC_LT,
	TXT_ABBRV_RANK_LIEUTENANT,
	TXT_ABBRV_RANK_CAPTAIN,
	TXT_ABBRV_RANK_MAJOR,
	TXT_ABBRV_RANK_LT_COL,
	TXT_ABBRV_RANK_COLONEL,
	TXT_ABBRV_RANK_BRIG_GEN,
};
int LogState = 0;
long CurControl = 0;
int CurPatch = 0;
int CurPic = 0;

LogBookData UI_logbk;
int PWLoaded = 0;
RECT PicArea;



void F4DialogBox( _TCHAR *string, void (*YesCB)(long,short,C_Base*),
					void (*NoCB)(long,short,C_Base*) )
{
	C_Window *win;
	C_Button *btn;
	C_Text	 *text;



	win=gMainHandler->FindWindow(DIALOG_WIN);
	if(win)
	{
		text=(C_Text *)win->FindControl(MESSAGE1);
		if(text)
		{
			text->Refresh();
			text->SetText(string);
			text->Refresh();
		}
#if 0
			fontid = text->GetFont();
			strptr = UI_WordWrap(win,string,fontid,180,&status);
			if(strptr)
			{
				text->SetText(strptr);
				text->Refresh();
			}
		}
		
		strptr = UI_WordWrap(win,NULL,fontid,180,&status);
		if(strptr)
		{
			text=(C_Text *)win->FindControl(MESSAGE2);
			if(text)
			{
				text->SetText(strptr);
				text->Refresh();
			}
		}

 		strptr = UI_WordWrap(win,NULL,fontid,180,&status);
		if(strptr)
		{
			text=(C_Text *)win->FindControl(MESSAGE3);
			if(text)
			{
				text->SetText(strptr);
				text->Refresh();
			}
		}
#endif

		btn=(C_Button *)win->FindControl(OK);
		if(btn)
		{
			if(YesCB)
				btn->SetCallback(YesCB);
			else
				btn->SetCallback(CloseWindowCB);

			if(NoCB)
				btn->SetX(btn->GetUserNumber(0));
			else
				btn->SetX(btn->GetUserNumber(1));
		}
		
		btn=(C_Button *)win->FindControl(CLOSE_WINDOW);
		if(btn)
		{
			if(NoCB)
				btn->SetCallback(NoCB);
			else
				btn->SetCallback(CloseWindowCB);
		}

		btn=(C_Button *)win->FindControl(CANCEL);
		if(btn)
		{
			if(NoCB)
			{
				btn->SetFlagBitOff(C_BIT_INVISIBLE);
				btn->SetCallback(NoCB);
			}
			else
			{
				btn->SetFlagBitOn(C_BIT_INVISIBLE);
				btn->SetCallback(CloseWindowCB);
			}
		}

		gMainHandler->ShowWindow(win);
		gMainHandler->WindowToFront(win);
	}
}

void F4DialogBox( long ID, void (*YesCB)(long,short,C_Base*),
					void (*NoCB)(long,short,C_Base*) )
{
	F4DialogBox( gStringMgr->GetText(ID), YesCB, NoCB );
}

void ChoosePilotCB(long,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_SELECT)
		return;

	_TCHAR Pilot[MAX_PATH];
	_tcscpy(Pilot,((C_ListBox *)control)->GetText());

	//return if current logbook is selected
	if(!_tcscmp(Pilot,UI_logbk.Callsign()))
		return;

	UI_logbk.LoadData(Pilot);
	LBSetupControls();

}

void PasswordWindow(long TitleID,long MessageID,void (*YesCB)(long,short,C_Base*),void (*NoCB)(long,short,C_Base*))
{
	C_Window *win;
	C_Button *btn;
	C_Text *text;
	C_ListBox *lbox;
	C_EditBox *ebox;

	if(!YesCB || !NoCB)
		return;

	if(LogState & LB_CHECKED)
		return;

	win=gMainHandler->FindWindow(PASSWORD_WIN);
	if(win)
	{
		lbox = (C_ListBox *)win->FindControl(LOGBOOK_LIST);
		if(lbox)
		{
			_TCHAR buf[MAX_PATH];
			if(TitleID == TXT_VERIFY_PASSWORD)
			{
				lbox->SetCallback(NULL);
				lbox->SetFlagBitOff(C_BIT_ENABLED);

				lbox->RemoveAllItems();

				C_Window *win = gMainHandler->FindWindow(LOG_WIN);
				if(win)
					ebox=(C_EditBox *)win->FindControl(CALLSIGN_LIST);
				else
					ebox = NULL;

				if(ebox != NULL)
					lbox->AddItem(1,C_TYPE_ITEM,ebox->GetText());
				else
					lbox->AddItem(1,C_TYPE_ITEM,UI_logbk.Callsign());
			}
			else
			{				
				_stprintf(buf,_T("%s\\config\\*.lbk"),FalconDataDirectory);
				GetPilotList( win, buf, NULL, lbox, TRUE, TRUE );
				
				SetPilot(UI_logbk.Callsign(),lbox);
				lbox->SetFlagBitOn(C_BIT_ENABLED);
				lbox->SetCallback(ChoosePilotCB);
			}
		}

		text=(C_Text *)win->FindControl(MESSAGE1);
		if(text)
		{
			text->Refresh();
			text->SetText(MessageID);
			text->Refresh();
		}
#if 0
			fontid = text->GetFont();
			strptr = UI_WordWrap(win,mess,fontid,250,&status);
			if(strptr)
			{
				text->SetText(strptr);
			}
			else
				text->SetText(TXT_SPACE);

			text->Refresh();
		}

		text=(C_Text *)win->FindControl(MESSAGE2);
		if(text)
		{
			text->Refresh();
			strptr = UI_WordWrap(win,NULL,fontid,250,&status);
			if(strptr)
			{
				text->SetText(strptr);
			}
			else
				text->SetText(TXT_SPACE);
			text->Refresh();
		}
#endif
		text =(C_Text*)win->FindControl(PW_TITLE_BAR);
		if(text)
		{
			text->SetText(TitleID);
			text->Refresh();
		}

		btn=(C_Button *)win->FindControl(OK);
		if(btn)
		{
			btn->SetCallback(YesCB);
		}
		
		ebox=(C_EditBox*)win->FindControl(PASSWORD);
		if(ebox)
		{
			win->SetControl(PASSWORD);
		}

		btn=(C_Button *)win->FindControl(CLOSE_WINDOW);
		if(btn)
		{
			btn->SetCallback(NoCB);
		}

		btn=(C_Button *)win->FindControl(LOG_NEW);
		if(btn)
		{
			btn->Refresh();
			btn->SetCallback(NoCB);
			if(TitleID == TXT_VERIFY_PASSWORD)
			{
				btn->SetLabel(0,TXT_CANCEL);
				btn->SetLabel(1,TXT_CANCEL);
			}
			else
			{
				btn->SetLabel(0,TXT_NEW);
				btn->SetLabel(1,TXT_NEW);
			}
			btn->Refresh();
		}

		gMainHandler->ShowWindow(win);
		gMainHandler->WindowToFront(win);
	}
}

void CheckPasswordCB(long,short hittype,C_Base *control)
{
	C_EditBox * ebox;
	_TCHAR pwd[MAX_PATH];

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	ebox=(C_EditBox*)control->Parent_->FindControl(PASSWORD);
	if(ebox)
	{
		_tcscpy(pwd,ebox->GetText());
		ebox->SetText(_T(""));
		ebox->Refresh();
		if(UI_logbk.CheckPassword(pwd))
		{
			LogState |= LB_EDITABLE | LB_CHECKED;			
			gMainHandler->HideWindow(control->Parent_);
			LogBook.LoadData(&UI_logbk.Pilot);
			UpdateKeyMapList(PlayerOptions.keyfile,1);
		}
	}
}

void RealLoadLogbook() // without daves extra garbage
{
	long ID;
	if(LBLoaded)
		return;

	if( _LOAD_ART_RESOURCES_)
		gMainParser->LoadImageList("art\\lb_res.lst");
	else
		gMainParser->LoadImageList("art\\lb_art.lst");
	gMainParser->LoadSoundList("art\\lb_snd.lst");
	gMainParser->LoadWindowList("art\\lb_scf.lst");

	ID=gMainParser->GetFirstWindowLoaded();
	while(ID)
	{
		HookupLBControls(ID);
		ID=gMainParser->GetNextWindowLoaded();
	}
	LBLoaded++;
}

void LoadLogBookWindows(LB_PILOT *Pilot = &LogBook.Pilot,int flag = LB_EDITABLE, 
						IMAGE_RSC *Picture = NULL, IMAGE_RSC *Patch = NULL)
{
	UI_logbk.LoadData(Pilot);
	
	LogState |= flag|LB_REFRESH_PILOT;

	
	if(LBLoaded) 
	{
		LBSetupControls(Patch,Picture);
		return;
	}

	C_Window *win = gMainHandler->FindWindow(LOG_WIN);
	if(win)
	{
		C_Box *box = (C_Box *)win->FindControl(50096);//PIC_BOX
		if(box)
		{
			PicArea.left = box->GetX();
			PicArea.right = box->GetX() + box->GetW();
			PicArea.top = box->GetY();
			PicArea.bottom = box->GetY() + box->GetH();
		}
	}

	LBSetupControls(Patch,Picture);
}

void NoPasswordCB(long,short hittype,C_Base *control)
{
	if(hittype != C_TYPE_LMOUSEUP)
		return;

	LogBook.Initialize();
	UI_logbk.Initialize();
	
	UpdateKeyMapList(PlayerOptions.keyfile,0);
	LoadLogBookWindows();

	gMainHandler->HideWindow(control->Parent_);
}


int SetPilot(_TCHAR *callsign,C_ListBox *lbox)
{
	int i=1;
	_TCHAR *CurCallsign;

	lbox->SetValue(i);
	while(i == lbox->GetTextID())
	{
		CurCallsign = lbox->GetText();
		if(CurCallsign)
		{
			if(!_tcsicmp(CurCallsign,callsign) )
			{
				return TRUE;
			}
		}
		lbox->SetValue(++i);
	}
	return FALSE;
}

void GetPilotList( C_Window *win, _TCHAR *fspec, _TCHAR *excludelist[],
					C_ListBox *lbox, BOOL cutext, BOOL exclude_te)
{
	char path[100];
	WIN32_FIND_DATA filedata;
	HANDLE ffhnd;
	BOOL last,ignore;
	long i; //,y=0;
	int items =0;
	_TCHAR	*dst, *ptr, *extension;

	if(!win || !lbox) return;

	ffhnd=FindFirstFile(fspec,&filedata);
	last=(ffhnd != INVALID_HANDLE_VALUE);
	
	lbox->RemoveAllItems();

	if (exclude_te)
	{
		ptr = fspec;
		dst = path;
		extension = NULL;

		while (*ptr)
		{
			if (*ptr == '\\')
				extension = dst;

			*dst = *ptr;
			dst ++;
			ptr ++;
		}
		*dst = '\0';

		if (extension)
			*extension = '\0';
	}

	while(last)
	{
		if(cutext)
		{
			ptr = filedata.cFileName;
			extension = NULL;

			while (*ptr)
			{
				if (*ptr == '.')
					extension = ptr;

				ptr ++;
			}

			if (extension)
				*extension = 0;
		}

		ignore=FALSE;
		if(excludelist)
		{
			i=0;
			while(excludelist[i] && !ignore)
			{
				if(stricmp(excludelist[i],filedata.cFileName) == 0)
					ignore=TRUE;

				i++;
			}
		}

		if(!ignore)
		{
			items++;
			lbox->AddItem(items,C_TYPE_ITEM,filedata.cFileName);
		}
		last= FindNextFile(ffhnd,&filedata);
	}
	lbox->Refresh();
}

void LBSetupControls(IMAGE_RSC *Picture, IMAGE_RSC *Patch)
{
	C_EditBox *ebox;
	C_Window *win;
	C_Button *button;
	C_Text *text;
	C_ListBox *lbox;
	long imageID;

	win=gMainHandler->FindWindow(LOG_WIN);
	if(win)
	{
		button=(C_Button *)win->FindControl(LOG_OK);
		if(button != NULL)
		{
			if(LogState & LB_OPPONENT)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -