Files
FireAlarmCtrlCn/MyCode/Gui/MessageBox.cpp
2026-04-06 19:02:09 +08:00

419 lines
9.7 KiB
C++

#include"MessageBox.h"
#define CH 30 //Caption Height
void TMessageBox::Init(int x1, int y1, int aW, int aH, int OwnerX, int OwnerY, u32 aColor)
{
unsigned short Left,Right, Top, Bottom, Width, Height, i;
Bound.SetBySize(OwnerX + x1, OwnerY + y1, aW, aH);
Left = Bound.Left +3;
Top = Bound.Top+3;
Width = aW - 7;
Height = aH - 7;
Right = Bound.Right -4;
Bottom = Bound.Bottom -4;
Caption.Init(Left,Top,Width, CH, 0, 0, clWhite, clMaroon);
Content.Set(Left, Top+CH, Right, Bottom);
BoxBound.Set(Left+200,Top+CH+50, Right-200, Bottom-180);
SText.Init(60,24,BoxBound.Width - 60 - 7, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
Caption.Border.Color = clGray;
Color = aColor;
TextColor = clNearBlack;
SelectedColor = clBlue;
SelectedTextColor = clNearWhite;
BoxColor = clFrmFace;
sIndex = 2;
DoWhatDone = 0;
ReturnVal[0] = guiMsgReturn;
ReturnVal[1] = guiMsgReturn;
ReturnVal[2] = guiMsgReturn;
ReturnVal[3] = guiMsgReturn;
Btn[0].Init(0,0,90,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[1].Init(200,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[2].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[3].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Caption.TextClear();
SText.TextClear();
Btn[0].Caption.Clear();
Btn[1].Caption.Clear();
Btn[2].Caption.Clear();
Btn[3].Caption.Clear();
}
void TMessageBox::RenderBackGround(void)
{
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, Color);
}
void TMessageBox::RenderBackGround(unsigned int aClr)
{
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, aClr);
}
void TMessageBox::DrawSelf(void)
{
unsigned int x, y, x2, y2, w, h;
VertLineRender(Bound.Left, Bound.Top, Bound.Height -1, 0xFFFFFFFF);
VertLineRender(Bound.Right -1, Bound.Top +1, Bound.Height -2, 0xFF808080);
VertLineRender(Bound.Right, Bound.Top, Bound.Height, 0xFF404040);
HorizLineRender(Bound.Left, Bound.Top, Bound.Width - 1, 0xFFFFFFFF);
HorizLineRender(Bound.Left +1, Bound.Bottom -1, Bound.Width - 2, 0xFF808080);
HorizLineRender(Bound.Left, Bound.Bottom, Bound.Width, 0xFF404040);
x = Bound.Left +2 ;
x2 = Bound.Right -2;
y = Bound.Top +2;
y2 = Bound.Bottom - 2;
w = Bound.Width -4;
h = Bound.Height - 4;
VertLineRender (x, y, h-1, 0xFF808080);
HorizLineRender (x, y, w-1, 0xFF808080);
VertLineRender (x+1, y+1, h-2, 0xFF404040);
HorizLineRender (x+1, y+1, w-2, 0xFF404040);
VertLineRender (x2-1, y+1, h-2, 0xFFD4D0C8);
HorizLineRender (x+1, y2-1, w-2, 0xFFD4D0C8);
VertLineRender (x2, y, h, 0xFFFFFFFF);
HorizLineRender (x, y2, w, 0xFFFFFFFF);
}
void TMessageBox::SetBtnOkCancel()
{
sIndex = 2;
Btn[0].Visible = 0;
Btn[1].Visible = 0;
Btn[2].Visible = 0;
Btn[0].Init(0,0,90,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[1].Init(200,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[2].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[1].Enable = 0;
Btn[1].Visible = 1;
Btn[1].SetCaptionLeftSpacing(6);
Btn[1].SelectedColor = clBlue;
Btn[2].Enable = 1;
Btn[2].Visible = 1;
Btn[2].SetCaptionLeftSpacing(6);
Btn[2].SelectedColor = clBlue;
Btn[1].Caption.FromStr("确定");
Btn[2].Caption.FromStr("返回");
}
void TMessageBox::SetBtnOk1Ok2Cancel()
{
sIndex = 2;
Btn[0].Visible = 0;
Btn[1].Visible = 0;
Btn[2].Visible = 0;
Btn[3].Visible = 0;
Btn[0].Init(90, 90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[1].Init(200,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[2].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[3].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[0].Enable = 0;
Btn[0].Visible = 1;
Btn[0].SetCaptionLeftSpacing(6);
Btn[0].SelectedColor = clBlue;
Btn[1].Enable = 0;
Btn[1].Visible = 1;
Btn[1].SetCaptionLeftSpacing(6);
Btn[1].SelectedColor = clBlue;
Btn[2].Enable = 1;
Btn[2].Visible = 1;
Btn[2].SetCaptionLeftSpacing(6);
Btn[2].SelectedColor = clBlue;
}
void TMessageBox::DrawBox(void)
{
RectFillRender(BoxBound.Left, BoxBound.Top, BoxBound.Right, BoxBound.Bottom, BoxColor);
VertLineRender(BoxBound.Left, BoxBound.Top, BoxBound.Height -1, 0xFFFFFFFF);
VertLineRender(BoxBound.Right -1, BoxBound.Top +1, BoxBound.Height -2, 0xFF808080);
VertLineRender(BoxBound.Right, BoxBound.Top, BoxBound.Height, 0xFF404040);
HorizLineRender(BoxBound.Left, BoxBound.Top, BoxBound.Width - 1, 0xFFFFFFFF);
HorizLineRender(BoxBound.Left +1, BoxBound.Bottom -1, BoxBound.Width - 2, 0xFF808080);
HorizLineRender(BoxBound.Left, BoxBound.Bottom, BoxBound.Width, 0xFF404040);
}
void TMessageBox::DrawBtn()
{
if(Btn[0].Visible){
Btn[0].Show();
}
if(Btn[1].Visible){
Btn[1].Show();
}
if(Btn[2].Visible){
Btn[2].Show();
}
if(Btn[3].Visible){
Btn[3].Show();
}
}
void TMessageBox::SetBoxColor(unsigned int aClr)
{
BoxColor = aClr;
}
void TMessageBox::CheckSelect()
{
Btn[0].Selected=0;
Btn[1].Selected=0;
Btn[2].Selected=0;
Btn[3].Selected=0;
if(sIndex == 0){
Btn[0].Selected = 1;
}else
if(sIndex == 1){
Btn[1].Selected = 1;
}
if(sIndex == 2){
Btn[2].Selected = 1;
}else
if(sIndex == 3){
Btn[3].Selected = 1;
}
}
void TMessageBox::DrawMessage()
{
SText.Show();
}
void TMessageBox::Show(void)
{
RenderBackGround();
DrawSelf();
Caption.Show();
DrawBox();
DrawMessage();
CheckSelect();
DrawBtn();
}
int TMessageBox::FindNextBtn(int aLR)
{
int i, aInx;
aInx = sIndex;
if(DoWhatDone){
if(aLR <0){
for(i=0; i<4; i++){
aInx--;
if(aInx < 0)aInx = 3;
if(Btn[aInx].Enable){
sIndex = aInx;
return 1;
}
}
}else
if(aLR >0){
for(i=0; i<4; i++){
aInx++;
if(aInx >3)aInx = 0;
if(Btn[aInx].Enable){
sIndex = aInx;
return 1;
}
}
}
}
return 0;
}
TGuiMsgReturn TMessageBox::KeyIn(unsigned char aKey)
{
TGuiMsgReturn aMsg = guiMsgNone;
unsigned char aCh;
if(aKey == VK_LEFT){
if(DoWhatDone){
if(FindNextBtn(-1)){
CheckSelect();
DrawBtn();
}
}
}else
if(aKey == VK_RIGHT){
if(FindNextBtn(1)){
CheckSelect();
DrawBtn();
}
}
if(aKey == VK_EXECUTE){
//Save Data Here
if(DoWhatDone){
aMsg = ReturnVal[sIndex];
}
}else
if(aKey == VK_RETURN){
aMsg = guiMsgReturn;
}
return aMsg;
}
void TMessageBox::SetReturnValue(TGuiMsgReturn aV0, TGuiMsgReturn aV1, TGuiMsgReturn aV2, TGuiMsgReturn aV3)
{
ReturnVal[0] = aV0;
ReturnVal[1] = aV1;
ReturnVal[2] = aV2;
ReturnVal[3] = aV3;
}
void TMessageBox::DoWait4ExitLogin()
{
volatile unsigned int i;
SText.Init(100,24,BoxBound.Width - 40 -7, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
SText.SetText("确认退出登录", 24);
SText.TextColor = clRed;
Btn[1].Visible = 1;
Btn[2].Visible = 1;
DrawMessage();
DoWhatDone = 1;
Btn[1].Enable = 1;
DrawBtn();
}
void TMessageBox::DoWait4RunMode()
{
volatile unsigned int i;
Btn[0].Visible = 0;
Btn[1].Visible = 0;
Btn[2].Visible = 0;
Btn[3].Visible = 0;
Btn[0].Init(70, 90,110,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[1].Init(190,90,110,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[2].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[3].Init(310,90,70,36, BoxBound.Left,BoxBound.Top,clNearBlack,clFrmFace);
Btn[0].Enable = 0;
Btn[0].Visible = 1;
Btn[0].SetCaptionLeftSpacing(6);
Btn[0].SelectedColor = clBlue;
Btn[1].Enable = 0;
Btn[1].Visible = 1;
Btn[1].SetCaptionLeftSpacing(6);
Btn[1].SelectedColor = clBlue;
Btn[2].Enable = 1;
Btn[2].Visible = 1;
Btn[2].SetCaptionLeftSpacing(6);
Btn[2].SelectedColor = clBlue;
SText.Init(25,24,300, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
SText.SetText("选择要运行的状态,按确定执行", 24);
SText.TextColor = clRed;
Btn[0].Visible = 1;
Btn[1].Visible = 1;
Btn[2].Visible = 1;
Btn[0].Caption.FromStr("正常运行");
Btn[1].Caption.FromStr("调试运行");
Btn[2].Caption.FromStr("返回");
Btn[0].Enable = 1;
Btn[1].Enable = 1;
SText.TextColor = clNearBlack;
DoWhatDone = 1;
}
void TMessageBox::DoWait4EnterSelfCheck()
{
volatile unsigned int i;
SText.Init(60,24,BoxBound.Width - 60 -7, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
SText.SetText("按确定键开始系统自检", 24);
SText.TextColor = clRed;
Btn[1].Visible = 1;
Btn[2].Visible = 1;
DrawMessage();
for(i=0; i< 40000000; i++);
DoWhatDone = 1;
Btn[1].Enable = 1;
SText.TextColor = clNearBlack;
DrawBtn();
}
void TMessageBox::DoWait4SaveCurrent()
{
volatile unsigned int i;
SText.Init(40,24,BoxBound.Width - 40 -7, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
SText.SetText("按确定键保存,按返回键返回", 24);
SText.TextColor = clRed;
Btn[1].Visible = 1;
Btn[2].Visible = 1;
DrawMessage();
for(i=0; i< 40000000; i++);
DoWhatDone = 1;
Btn[1].Enable = 1;
SText.TextColor = clNearBlack;
DrawBtn();
}
void TMessageBox::DoReadWriteBusPad()
{
volatile unsigned int i;
SText.Init(25,24,BoxBound.Width - 25 -7, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
SText.SetText("选择要运行的状态,按确定执行", 24);
SText.TextColor = clRed;
Btn[0].Visible = 1;
Btn[1].Visible = 1;
Btn[2].Visible = 1;
Btn[0].Caption.FromStr("读取编程");
Btn[1].Caption.FromStr("保存编程");
Btn[2].Caption.FromStr("返回");
DrawMessage();
for(i=0; i< 40; i++);
DoWhatDone = 1;
Btn[0].Enable = 1;
Btn[1].Enable = 1;
SText.TextColor = clNearBlack;
DrawMessage();
DrawBtn();
}
void TMessageBox::ReqAdjMode()
{
volatile unsigned int i;
SText.Init(100,24,200, CH, BoxBound.Left, BoxBound.Top, clNearBlack, clFrmFace);
SText.SetText("进入调试状态", 24);
SText.TextColor = clRed;
Btn[1].Visible = 1;
Btn[2].Visible = 1;
DrawMessage();
DoWhatDone = 1;
Btn[1].Enable = 1;
DrawBtn();
}