#include "Global.h"
#include "DialogReplySetup.h"
#include "Dialog.h"
DialogReplyGauge::DialogReplyGauge()
: mGaugeWidth(0)
, mGaugeHeight(0)
, mCanvas(0)
, mBackground(0)
, mPortraitRampie(0)
, mPortraitMechanicD0(0)
, mPortraitMechanicD1(0)
, mPortraitMechanicD2(0)
, mPortraitMechanicD3(0)
, mPelements(0)
, mMachineFont(0)
, mHandFont(0)
, PENWIDTH(3)
, mcbDest(MAX_PATH * sizeof(WCHAR))
{
mPaperBrush = new SolidBrush(Color(255, 191, 191, 191));
mHandBrush = new SolidBrush(Color(210, 90, 60, 150)); //light blue
mFormBrush = new SolidBrush(Color(210, 70, 67, 58)); //blackish
mStringFormat.SetAlignment(StringAlignmentCenter);
mStringFormat.SetLineAlignment(StringAlignmentCenter);
}
DialogReplyGauge::~DialogReplyGauge() {
if (mPaperBrush)
delete mPaperBrush;
if (mHandBrush)
delete mHandBrush;
if (mFormBrush)
delete mFormBrush;
if (mBackground)
delete mBackground;
if (mPortraitRampie)
delete mPortraitRampie;
if (mPortraitMechanicD0)
delete mPortraitMechanicD0;
if (mPortraitMechanicD1)
delete mPortraitMechanicD1;
if (mPortraitMechanicD2)
delete mPortraitMechanicD2;
if (mPortraitMechanicD3)
delete mPortraitMechanicD3;
if (mMachineFont)
delete mMachineFont;
if (mHandFont)
delete mHandFont;
}
void DialogReplyGauge::DoCallback(GAUGEHDR * gauge, const int serviceID) {
using namespace Gdiplus;
std::wstring tmp_wstr;
int count;
switch (serviceID) {
case PANEL_SERVICE_POST_INITIALIZE:
//load fonts from font folder
tmp_wstr = path_sim.wstring() + L"\\fonts\\Om Telolet Om.ttf";
privateFontCollection.AddFontFile(tmp_wstr.c_str());
tmp_wstr = path_sim.wstring() + L"\\fonts\\veteran typewriter.ttf";
privateFontCollection.AddFontFile(tmp_wstr.c_str());
count = privateFontCollection.GetFamilyCount();
if (count == 0)
debug_log("Could not load custom fonts.");
mMachineFont = new Font(L"Veteran Typewriter", 18.0f, FontStyleRegular, UnitPixel, &privateFontCollection);
mHandFont = new Font(L"Om Telolet Om", 18.0f, FontStyleRegular, UnitPixel, &privateFontCollection);
break;
case PANEL_SERVICE_PRE_UPDATE:
break;
case PANEL_SERVICE_PRE_DRAW:
if (mCanvas) {
PELEMENT_STATIC_IMAGE pelement = (PELEMENT_STATIC_IMAGE)gauge->elements_list[0];
if (pelement) {
//mGraphics->Clear(Color(0, 0, 0, 0));
std::wstring msg_name = L"";
std::wstring msg = L"";
mGraphics->SetTextRenderingHint(TextRenderingHintAntiAlias);
mGraphics->SetSmoothingMode(SmoothingModeAntiAlias);
///////////////////////////////////////////////////////
// BACKGROUND
///////////////////////////////////////////////////////
/*mLayoutRect = RectF(
(REAL)(0.2225 * mGaugeWidth), (REAL)(0.3671875 * mGaugeHeight),
(REAL)(0.7775 * mGaugeWidth), (REAL)(0.6328125 * mGaugeHeight));
mGraphics->DrawImage(mBackground, mLayoutRect);*/
mGraphics->FillRectangle(mPaperBrush,
(REAL)(0.2862500*mGaugeWidth), (REAL)(0.41796875*mGaugeHeight),
(REAL)(0.6850000*mGaugeWidth), (REAL)(0.50781250*mGaugeHeight));
///////////////////////////////////////////////////////
// Text
///////////////////////////////////////////////////////
if (dialogManager.showMessage()) {
switch (dialogManager.getCurrentMessage().portrait) {
case PORTRAIT_RAMPIE:
msg_name = L"Heinrich A., Ramp Agent:";
break;
case PORTRAIT_MECHANIC:
case PORTRAIT_MECHANIC_S1:
case PORTRAIT_MECHANIC_S2:
case PORTRAIT_MECHANIC_S3:
msg_name = L"Jack N., Mechanic:";
break;
default:
msg_name = L"";
}
msg = s2ws(dialogManager.getCurrentMessage().message);
}
else {
msg_name = L"";
msg = L"";
}
mLayoutRect = RectF(
(REAL)(0.2962500 * mGaugeWidth), (REAL)(0.4296875 * mGaugeHeight),
(REAL)(0.6750000 * mGaugeWidth), (REAL)(0.1250000 * mGaugeHeight));
StringCbPrintf(mpszDest, mcbDest, msg_name.c_str());
mGraphics->DrawString(mpszDest, lstrlen(mpszDest), mMachineFont, mLayoutRect, &mStringFormat, mFormBrush);
mLayoutRect = RectF(
(REAL)(0.2962500 * mGaugeWidth), (REAL)(0.5351562 * mGaugeHeight),
(REAL)(0.6750000 * mGaugeWidth), (REAL)(0.3906250 * mGaugeHeight));
StringCbPrintf(mpszDest, mcbDest, msg.c_str());
mGraphics->DrawString(mpszDest, lstrlen(mpszDest), mHandFont, mLayoutRect, &mStringFormat, mHandBrush);
SET_OFF_SCREEN(pelement);
}
}
break;
case PANEL_SERVICE_POST_INSTALL:
int tempX = 0;
int tempY = 0;
mPelements.clear();
mCanvas = 0;
PELEMENT_STATIC_IMAGE element = reinterpret_cast<PELEMENT_STATIC_IMAGE>(gauge->elements_list[0]);
do {
if (mPelements.size() == 0) {
tempX = element->image_data.final->dim.x;
tempY = element->image_data.final->dim.y;
if (element->hdc) {
mStringFormat.SetAlignment(StringAlignmentNear);
mCanvas = element;
mGraphics.reset(new Graphics(element->hdc));
mGraphics->SetTextRenderingHint(TextRenderingHintAntiAlias);
mGraphics->SetCompositingMode(CompositingModeSourceOver);
mGraphics->SetInterpolationMode(InterpolationModeHighQualityBicubic);
}
}
else {
element = reinterpret_cast<PELEMENT_STATIC_IMAGE>(element->next_element[0]);
}
mPelements.push_back(element);
} while (element->next_element);
if (tempX && tempY) {
mGaugeWidth = tempX;
mGaugeHeight = tempY;
mMachineFont = new Font(L"Veteran Typewriter", (REAL)(0.0198895028*mGaugeHeight), FontStyleRegular, UnitPixel, &privateFontCollection);
mHandFont = new Font(L"Om Telolet Om", (REAL)(0.0198895028*mGaugeHeight), FontStyleRegular, UnitPixel, &privateFontCollection);
}
//load the bitmaps
//path_aircraft_folder.append
std::wstring tmp_wstr = s2ws(path_aircraft_folder.string());
tmp_wstr.append(L"\\..\\Wing42 Lockheed Vega shared\\res\\dialog_bubble.bmp");
mBackground = new Gdiplus::Bitmap(tmp_wstr.c_str());
//mBackground = new Gdiplus::Image(tmp_wstr.c_str());
//mBackground = Bitmap::FromResource((HINSTANCE)GetModuleHandle(NULL), MAKEINTRESOURCE(BMP_DIALOG_BG_BUBBLE));
break;
}
}
static const GUID gauge_guid_dialog_reply = { 0x7fdf9d98, 0x28ba, 0x417a,{ 0xa8, 0xf8, 0x4d, 0xb9, 0x4c, 0x0e, 0x80, 0xee } };
/////////////////////////////////////////////////////////////////////////////
// Dialog Gauge Declarations
/////////////////////////////////////////////////////////////////////////////
// Main system simulation gauge:
#define GAUGE_NAME "dialog_reply"
#define GAUGEHDR_VAR_NAME gaugehdr_dialog_reply
#define GAUGE_H 256
#define GAUGE_W 800
#define GAUGE_FONT_DEFAULT "Om Telolet Om"
#define GAUGE_FONT_FORMAL "Veteran Typewriter"
#define GAUGE_CHARSET DEFAULT_CHARSET
#define GAUGE_WEIGHT_DEFAULT FW_NORMAL
// Set up gauge header
char dialog_reply_gauge_name[] = GAUGE_NAME;
extern PELEMENT_HEADER dialog_reply_element_list;
extern MOUSERECT dialog_reply_mouse_rect[];
/////////////////////////////////////////////////////////////////////////////
// Dialogs Gauge macros
/////////////////////////////////////////////////////////////////////////////
GAUGE_HEADER_FS1000(
GAUGEHDR_VAR_NAME,
GAUGE_W,
dialog_reply_gauge_name,
&dialog_reply_element_list,
dialog_reply_mouse_rect,
(PGAUGE_CALLBACK)DialogReplyGauge::Callback<DialogReplyGauge>,
0L, 0L,
gauge_guid_dialog_reply,
0,
0,
0,
0,
0
);
FLOAT64 FSAPI reply_portrait_cb(PELEMENT_ICON pelement) {
int i = 0;
if (dialogManager.showMessage()) i = (int)dialogManager.getCurrentMessage().portrait;
return i;
};
MAKE_ICON
(
dialog_portrait,
BMP_DIALOG_PORTRAIT_NONE,
NULL,
NULL,
IMAGE_USE_ERASE | IMAGE_ERASE_ALWAYS | IMAGE_USE_BRIGHT | IMAGE_USE_TRANSPARENCY,
0,
10, 10,
MODULE_VAR_NONE, reply_portrait_cb,
ICON_SWITCH_TYPE_SET_CUR_ICON,
6,
0,
0
);
MAKE_ICON
(
dialog_bubble,
BMP_DIALOG_BG_BUBBLE,
&dialog_portrait.header,
NULL,
IMAGE_USE_ERASE | IMAGE_ERASE_ALWAYS | IMAGE_USE_BRIGHT | IMAGE_USE_TRANSPARENCY,
0,
178, 94,
MODULE_VAR_NONE, NULL,
ICON_SWITCH_TYPE_SET_CUR_ICON,
6,
0,
0
);
MAKE_STATIC
(
gaugeDialogReply_image,
BMP_DIALOG_NONE,
NULL,//&dialog_bubble.header,
NULL,
IMAGE_CREATE_DIBSECTION | IMAGE_USE_TRANSPARENCY | IMAGE_USE_ALPHA | IMAGE_USE_ERASE,// | IMAGE_ERASE_ALWAYS,
0,
0, 0
)
PELEMENT_HEADER dialog_reply_element_list = &gaugeDialogReply_image.header;
MOUSE_BEGIN(dialog_reply_mouse_rect, HELP_NONE, 0, 0)
MOUSE_END
#undef GAUGE_NAME
#undef GAUGEHDR_VAR_NAME
#undef GAUGE_H
#undef GAUGE_W
#undef GAUGE_FONT_DEFAULT
#undef GAUGE_FONT_FORMAL
#undef GAUGE_CHARSET
#undef GAUGE_WEIGHT_DEFAULT