This commit is contained in:
thrust26 2019-05-05 08:01:08 +02:00
parent 4f9927ae9f
commit ed5f8cb9de
3 changed files with 277 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

210
src/gui/R77HelpDialog.cxx Normal file
View File

@ -0,0 +1,210 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "bspf.hxx"
#include "Dialog.hxx"
#include "Widget.hxx"
#include "Font.hxx"
#include "R77HelpDialog.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
R77HelpDialog::R77HelpDialog(OSystem& osystem, DialogContainer& parent,
const GUI::Font& font)
: Dialog(osystem, parent, font, "Basic Help"),
myPage(1),
myNumPages(4)
{
const int lineHeight = font.getLineHeight(),
fontWidth = font.getMaxCharWidth(),
fontHeight = font.getFontHeight(),
buttonWidth = font.getStringWidth("Defaults") + 20,
buttonHeight = font.getLineHeight() + 4;
const int HBORDER = 10;
int xpos, ypos;
WidgetArray wid;
// Set real dimensions
_w = 47 * fontWidth + HBORDER * 2;
_h = (LINES_PER_PAGE + 2) * lineHeight + 20 + _th;
// Add Previous, Next and Close buttons
xpos = HBORDER; ypos = _h - buttonHeight - 10;
myPrevButton =
new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight,
"Previous", GuiObject::kPrevCmd);
myPrevButton->clearFlags(Widget::FLAG_ENABLED);
wid.push_back(myPrevButton);
xpos += buttonWidth + 8;
myNextButton =
new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight,
"Next", GuiObject::kNextCmd);
wid.push_back(myNextButton);
xpos = _w - buttonWidth - HBORDER;
ButtonWidget* b =
new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight,
"Close", GuiObject::kCloseCmd);
wid.push_back(b);
addCancelWidget(b);
xpos = HBORDER; ypos = 5 + _th;
myTitle = new StaticTextWidget(this, font, xpos, ypos, _w - HBORDER * 2, fontHeight,
"", TextAlign::Center);
int jwidth = 11 * fontWidth;
int bwidth = 11 * fontWidth;
xpos = HBORDER; ypos += lineHeight + 4;
for (uInt8 i = 0; i < LINES_PER_PAGE; ++i)
{
myJoy[i] =
new StaticTextWidget(this, font, xpos, ypos, jwidth,
fontHeight, "", TextAlign::Left);
myBtn[i] =
new StaticTextWidget(this, font, xpos + jwidth, ypos, bwidth,
fontHeight, "", TextAlign::Left);
myDesc[i] =
new StaticTextWidget(this, font, xpos + jwidth + bwidth, ypos, _w - jwidth - bwidth - HBORDER * 2,
fontHeight, "", TextAlign::Left);
ypos += fontHeight;
}
addToFocusList(wid);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void R77HelpDialog::updateStrings(uInt8 page, uInt8 lines, string& title)
{
#ifdef BSPF_MACOS
#define ALT_ "Cmd"
#else
#define ALT_ "Alt"
#endif
int i = 0;
auto ADD_BIND = [&](const string & j = "", const string & b = "", const string & d = "")
{
myJoyStr[i] = j; myBtnStr[i] = b; myDescStr[i] = d; i++;
};
auto ADD_TEXT = [&](const string & d) { ADD_BIND("", d.substr(0, 11), d.substr(11, 40)); };
auto ADD_LINE = [&]() { ADD_BIND("-----------", "-----------", "------------------------"); };
switch (page)
{
case 1:
title = "Emulation commands";
ADD_BIND("The joystic", "ks work nor", "mal and all console");
ADD_BIND("buttons as ", "labeled exc", "ept of the following:");
ADD_BIND();
ADD_BIND("Joystick", "Button", "Command");
ADD_LINE();
ADD_BIND("Button 3", "4:3,16:9", "Open command dialog");
ADD_BIND("Button 4", "-", "Open settings");
ADD_BIND("Button 5", "FRY", "Return to launcher");
break;
case 2:
title = "Launcher commands";
ADD_BIND("Joystick", "Button", "Command");
ADD_LINE();
ADD_BIND("Up", "SAVE", "Previous game");
ADD_BIND("Down", "RESET", "Next game");
ADD_BIND("Left", "LOAD", "Page up");
ADD_BIND("Right", "MODE", "Page down");
ADD_BIND("Button 1", "SKILL P1", "Start selected game");
ADD_BIND("Button 2", "SKILL P2", "Open power-on options");
ADD_BIND("Button 4", "Color,B/W", "Open settings");
break;
case 3:
title = "Dialog commands";
ADD_BIND("Joystick", "Button", "Command");
ADD_LINE();
ADD_BIND("Up", "SAVE", "Increase current setting");
ADD_BIND("Down", "RESET", "Decrease current setting");
ADD_BIND("Left", "LOAD", "Previous dialog element");
ADD_BIND("Right", "MODE", "Next dialog element");
ADD_BIND("Button 1", "SKILL P1", "Select");
ADD_BIND("Button 2", "SKILL P2", "Cancel dialog");
ADD_BIND("Button 3", "4:3,16:9", "Previous tab");
ADD_BIND("Button 4", "FRY", "Next tab");
break;
case 4:
title = "All commands";
ADD_BIND();
ADD_BIND("Remapped Ev", "ents", "");
ADD_BIND();
ADD_TEXT("Most commands can be remapped.");
ADD_BIND();
ADD_TEXT("Please use 'Advanced Settings'");
ADD_TEXT("and consult the 'Options/Input" + ELLIPSIS + "'");
ADD_TEXT("dialog for more information.");
break;
}
while (i < lines)
ADD_BIND();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void R77HelpDialog::displayInfo()
{
string titleStr;
updateStrings(myPage, LINES_PER_PAGE, titleStr);
myTitle->setLabel(titleStr);
for (uInt8 i = 0; i < LINES_PER_PAGE; ++i)
{
myJoy[i]->setLabel(myJoyStr[i]);
myBtn[i]->setLabel(myBtnStr[i]);
myDesc[i]->setLabel(myDescStr[i]);
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void R77HelpDialog::handleCommand(CommandSender * sender, int cmd,
int data, int id)
{
switch (cmd)
{
case GuiObject::kNextCmd:
++myPage;
if (myPage >= myNumPages)
myNextButton->clearFlags(Widget::FLAG_ENABLED);
if (myPage >= 2)
myPrevButton->setFlags(Widget::FLAG_ENABLED);
displayInfo();
break;
case GuiObject::kPrevCmd:
--myPage;
if (myPage <= myNumPages)
myNextButton->setFlags(Widget::FLAG_ENABLED);
if (myPage <= 1)
myPrevButton->clearFlags(Widget::FLAG_ENABLED);
displayInfo();
break;
default:
Dialog::handleCommand(sender, cmd, data, 0);
}
}

67
src/gui/R77HelpDialog.hxx Normal file
View File

@ -0,0 +1,67 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef MIN_UI_HELP_DIALOG_HXX
#define MIN_UI_HELP_DIALOG_HXX
class DialogContainer;
class CommandSender;
class ButtonWidget;
class StaticTextWidget;
class OSystem;
#include "Dialog.hxx"
#include "bspf.hxx"
class R77HelpDialog : public Dialog
{
public:
R77HelpDialog(OSystem& osystem, DialogContainer& parent, const GUI::Font& font);
virtual ~R77HelpDialog() = default;
private:
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void updateStrings(uInt8 page, uInt8 lines, string& title);
void displayInfo();
void loadConfig() override { displayInfo(); }
private:
static constexpr uInt32 LINES_PER_PAGE = 10;
ButtonWidget* myNextButton;
ButtonWidget* myPrevButton;
StaticTextWidget* myTitle;
StaticTextWidget* myJoy[LINES_PER_PAGE];
StaticTextWidget* myBtn[LINES_PER_PAGE];
StaticTextWidget* myDesc[LINES_PER_PAGE];
string myJoyStr[LINES_PER_PAGE];
string myBtnStr[LINES_PER_PAGE];
string myDescStr[LINES_PER_PAGE];
uInt8 myPage;
uInt8 myNumPages;
private:
// Following constructors and assignment operators not supported
R77HelpDialog() = delete;
R77HelpDialog(const R77HelpDialog&) = delete;
R77HelpDialog(R77HelpDialog&&) = delete;
R77HelpDialog& operator=(const R77HelpDialog&) = delete;
R77HelpDialog& operator=(R77HelpDialog&&) = delete;
};
#endif