mirror of https://github.com/stella-emu/stella.git
Added NullControlWidget, for those controllers that won't have
any UI items within the debugger. Added BoosterWidget UI class for changing BoosterGrip data in the debugger I/O tab. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2339 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
3c94923720
commit
d39404f5c9
|
@ -0,0 +1,129 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// 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-2012 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.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#include "OSystem.hxx"
|
||||||
|
#include "EventHandler.hxx"
|
||||||
|
#include "BoosterWidget.hxx"
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
BoosterWidget::BoosterWidget(GuiObject* boss, const GUI::Font& font,
|
||||||
|
int x, int y, Controller& controller)
|
||||||
|
: ControllerWidget(boss, font, x, y, controller)
|
||||||
|
{
|
||||||
|
bool leftport = myController.jack() == Controller::Left;
|
||||||
|
const string& label = leftport ? "Left (Booster):" : "Right (Booster):";
|
||||||
|
|
||||||
|
const int fontHeight = font.getFontHeight();
|
||||||
|
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Booster):");
|
||||||
|
StaticTextWidget* t;
|
||||||
|
|
||||||
|
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
|
||||||
|
fontHeight, label, kTextAlignLeft);
|
||||||
|
xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10;
|
||||||
|
myPins[kJUp] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
|
||||||
|
myPins[kJUp]->setID(kJUp);
|
||||||
|
myPins[kJUp]->setTarget(this);
|
||||||
|
|
||||||
|
ypos += myPins[kJUp]->getHeight() * 2 + 10;
|
||||||
|
myPins[kJDown] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
|
||||||
|
myPins[kJDown]->setID(kJDown);
|
||||||
|
myPins[kJDown]->setTarget(this);
|
||||||
|
|
||||||
|
xpos -= myPins[kJUp]->getWidth() + 5;
|
||||||
|
ypos -= myPins[kJUp]->getHeight() + 5;
|
||||||
|
myPins[kJLeft] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
|
||||||
|
myPins[kJLeft]->setID(kJLeft);
|
||||||
|
myPins[kJLeft]->setTarget(this);
|
||||||
|
|
||||||
|
xpos += (myPins[kJUp]->getWidth() + 5) * 2;
|
||||||
|
myPins[kJRight] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
|
||||||
|
myPins[kJRight]->setID(kJRight);
|
||||||
|
myPins[kJRight]->setTarget(this);
|
||||||
|
|
||||||
|
xpos -= (myPins[kJUp]->getWidth() + 5) * 2;
|
||||||
|
ypos = 20 + (myPins[kJUp]->getHeight() + 10) * 3;
|
||||||
|
myPins[kJFire] = new CheckboxWidget(boss, font, xpos, ypos, "Fire", kCheckActionCmd);
|
||||||
|
myPins[kJFire]->setID(kJFire);
|
||||||
|
myPins[kJFire]->setTarget(this);
|
||||||
|
|
||||||
|
ypos += myPins[kJFire]->getHeight() + 5;
|
||||||
|
myPins[kJBooster] = new CheckboxWidget(boss, font, xpos, ypos, "Booster", kCheckActionCmd);
|
||||||
|
myPins[kJBooster]->setID(kJBooster);
|
||||||
|
myPins[kJBooster]->setTarget(this);
|
||||||
|
|
||||||
|
ypos += myPins[kJBooster]->getHeight() + 5;
|
||||||
|
myPins[kJTrigger] = new CheckboxWidget(boss, font, xpos, ypos, "Trigger", kCheckActionCmd);
|
||||||
|
myPins[kJTrigger]->setID(kJTrigger);
|
||||||
|
myPins[kJTrigger]->setTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
BoosterWidget::~BoosterWidget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void BoosterWidget::loadConfig()
|
||||||
|
{
|
||||||
|
myPins[kJUp]->setState(!myController.read(ourPinNo[kJUp]));
|
||||||
|
myPins[kJDown]->setState(!myController.read(ourPinNo[kJDown]));
|
||||||
|
myPins[kJLeft]->setState(!myController.read(ourPinNo[kJLeft]));
|
||||||
|
myPins[kJRight]->setState(!myController.read(ourPinNo[kJRight]));
|
||||||
|
myPins[kJFire]->setState(!myController.read(ourPinNo[kJFire]));
|
||||||
|
|
||||||
|
myPins[kJBooster]->setState(
|
||||||
|
myController.read(Controller::Five) == Controller::minimumResistance);
|
||||||
|
myPins[kJTrigger]->setState(
|
||||||
|
myController.read(Controller::Nine) == Controller::minimumResistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void BoosterWidget::handleCommand(
|
||||||
|
CommandSender* sender, int cmd, int data, int id)
|
||||||
|
{
|
||||||
|
if(cmd == kCheckActionCmd)
|
||||||
|
{
|
||||||
|
switch(id)
|
||||||
|
{
|
||||||
|
case kJUp:
|
||||||
|
case kJDown:
|
||||||
|
case kJLeft:
|
||||||
|
case kJRight:
|
||||||
|
case kJFire:
|
||||||
|
myController.set(ourPinNo[id], !myPins[id]->getState());
|
||||||
|
break;
|
||||||
|
case kJBooster:
|
||||||
|
myController.set(Controller::Five,
|
||||||
|
myPins[id]->getState() ? Controller::minimumResistance :
|
||||||
|
Controller::maximumResistance);
|
||||||
|
break;
|
||||||
|
case kJTrigger:
|
||||||
|
myController.set(Controller::Nine,
|
||||||
|
myPins[id]->getState() ? Controller::minimumResistance :
|
||||||
|
Controller::maximumResistance);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Controller::DigitalPin BoosterWidget::ourPinNo[5] = {
|
||||||
|
Controller::One, Controller::Two, Controller::Three, Controller::Four,
|
||||||
|
Controller::Six
|
||||||
|
};
|
|
@ -0,0 +1,44 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// 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-2012 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.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#ifndef BOOSTER_WIDGET_HXX
|
||||||
|
#define BOOSTER_WIDGET_HXX
|
||||||
|
|
||||||
|
#include "Control.hxx"
|
||||||
|
#include "Event.hxx"
|
||||||
|
#include "ControllerWidget.hxx"
|
||||||
|
|
||||||
|
class BoosterWidget : public ControllerWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BoosterWidget(GuiObject* boss, const GUI::Font& font, int x, int y,
|
||||||
|
Controller& controller);
|
||||||
|
virtual ~BoosterWidget();
|
||||||
|
|
||||||
|
void loadConfig();
|
||||||
|
void handleCommand(CommandSender* sender, int cmd, int data, int id);
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum { kJUp = 0, kJDown, kJLeft, kJRight, kJFire, kJBooster, kJTrigger };
|
||||||
|
|
||||||
|
CheckboxWidget* myPins[7];
|
||||||
|
static Controller::DigitalPin ourPinNo[5];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -36,21 +36,8 @@ class ControllerWidget : public Widget, public CommandSender
|
||||||
myController(controller)
|
myController(controller)
|
||||||
{
|
{
|
||||||
_type = kControllerWidget;
|
_type = kControllerWidget;
|
||||||
/* FIXME - add this to controllers that won't have their own widget class
|
_w = 18 * font.getMaxCharWidth();
|
||||||
|
_h = 8 * font.getLineHeight();
|
||||||
bool leftport = controller.jack() == Controller::Left;
|
|
||||||
const string& label = leftport ? "Left (Unknown):" : "Right (Unknown):";
|
|
||||||
const int fontHeight = font.getFontHeight(),
|
|
||||||
lineHeight = font.getLineHeight(),
|
|
||||||
lwidth = font.getStringWidth("Controller not implemented");
|
|
||||||
new StaticTextWidget(boss, font, x, y+2, lwidth,
|
|
||||||
fontHeight, label, kTextAlignLeft);
|
|
||||||
new StaticTextWidget(boss, font, x, y+2+2*lineHeight, lwidth,
|
|
||||||
fontHeight, "Controller not implemented",
|
|
||||||
kTextAlignLeft);
|
|
||||||
_w = lwidth + 10;
|
|
||||||
_h = 6 * lineHeight;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~ControllerWidget() { };
|
virtual ~ControllerWidget() { };
|
||||||
|
|
|
@ -29,15 +29,10 @@ JoystickWidget::JoystickWidget(GuiObject* boss, const GUI::Font& font,
|
||||||
bool leftport = myController.jack() == Controller::Left;
|
bool leftport = myController.jack() == Controller::Left;
|
||||||
const string& label = leftport ? "Left (Joystick):" : "Right (Joystick):";
|
const string& label = leftport ? "Left (Joystick):" : "Right (Joystick):";
|
||||||
|
|
||||||
const int /*fontWidth = font.getMaxCharWidth(),*/
|
const int fontHeight = font.getFontHeight();
|
||||||
fontHeight = font.getFontHeight(),
|
|
||||||
lineHeight = font.getLineHeight();
|
|
||||||
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Joystick):");
|
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Joystick):");
|
||||||
StaticTextWidget* t;
|
StaticTextWidget* t;
|
||||||
|
|
||||||
_w = lwidth + 10;
|
|
||||||
_h = 6 * lineHeight;
|
|
||||||
|
|
||||||
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
|
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
|
||||||
fontHeight, label, kTextAlignLeft);
|
fontHeight, label, kTextAlignLeft);
|
||||||
xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10;
|
xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10;
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// 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-2012 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.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#ifndef NULLCONTROL_WIDGET_HXX
|
||||||
|
#define NULLCONTROL_WIDGET_HXX
|
||||||
|
|
||||||
|
class GuiObject;
|
||||||
|
|
||||||
|
#include "ControllerWidget.hxx"
|
||||||
|
|
||||||
|
class NullControlWidget : public ControllerWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NullControlWidget(GuiObject* boss, const GUI::Font& font, int x, int y,
|
||||||
|
Controller& controller)
|
||||||
|
: ControllerWidget(boss, font, x, y, controller)
|
||||||
|
{
|
||||||
|
_type = kControllerWidget;
|
||||||
|
|
||||||
|
bool leftport = controller.jack() == Controller::Left;
|
||||||
|
ostringstream buf;
|
||||||
|
buf << (leftport ? "Left (" : "Right (")
|
||||||
|
<< controller.name() << "):";
|
||||||
|
const int fontHeight = font.getFontHeight(),
|
||||||
|
lineHeight = font.getLineHeight(),
|
||||||
|
lwidth = font.getStringWidth(buf.str());
|
||||||
|
new StaticTextWidget(boss, font, x, y+2, lwidth,
|
||||||
|
fontHeight, buf.str(), kTextAlignLeft);
|
||||||
|
new StaticTextWidget(boss, font, x, y+2+2*lineHeight, lwidth,
|
||||||
|
fontHeight, "Controller", kTextAlignCenter);
|
||||||
|
new StaticTextWidget(boss, font, x, y+2+3*lineHeight, lwidth,
|
||||||
|
fontHeight, "not implemented",
|
||||||
|
kTextAlignCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~NullControlWidget() { };
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -33,16 +33,11 @@ PaddleWidget::PaddleWidget(GuiObject* boss, const GUI::Font& font,
|
||||||
fontHeight = font.getFontHeight(),
|
fontHeight = font.getFontHeight(),
|
||||||
lineHeight = font.getLineHeight();
|
lineHeight = font.getLineHeight();
|
||||||
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Paddles):");
|
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Paddles):");
|
||||||
StaticTextWidget* t;
|
|
||||||
|
|
||||||
_w = lwidth + 10;
|
new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
|
||||||
_h = 6 * lineHeight;
|
|
||||||
|
|
||||||
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
|
|
||||||
fontHeight, label, kTextAlignLeft);
|
fontHeight, label, kTextAlignLeft);
|
||||||
|
|
||||||
xpos = x; ypos += t->getHeight() + 10;
|
ypos += lineHeight + 10;
|
||||||
|
|
||||||
const string& p0string = leftport ? "P0 pot: " : "P2 pot: ";
|
const string& p0string = leftport ? "P0 pot: " : "P2 pot: ";
|
||||||
const string& p1string = leftport ? "P1 pot: " : "P3 pot: ";
|
const string& p1string = leftport ? "P1 pot: " : "P3 pot: ";
|
||||||
lwidth = font.getStringWidth("P3 pot: ");
|
lwidth = font.getStringWidth("P3 pot: ");
|
||||||
|
|
|
@ -30,9 +30,10 @@
|
||||||
#include "ToggleBitWidget.hxx"
|
#include "ToggleBitWidget.hxx"
|
||||||
#include "Widget.hxx"
|
#include "Widget.hxx"
|
||||||
|
|
||||||
#include "ControllerWidget.hxx"
|
#include "NullControlWidget.hxx"
|
||||||
#include "JoystickWidget.hxx"
|
#include "JoystickWidget.hxx"
|
||||||
#include "PaddleWidget.hxx"
|
#include "PaddleWidget.hxx"
|
||||||
|
#include "BoosterWidget.hxx"
|
||||||
|
|
||||||
#include "RiotWidget.hxx"
|
#include "RiotWidget.hxx"
|
||||||
|
|
||||||
|
@ -342,7 +343,9 @@ ControllerWidget* RiotWidget::addControlWidget(GuiObject* boss, const GUI::Font&
|
||||||
return new JoystickWidget(boss, font, x, y, controller);
|
return new JoystickWidget(boss, font, x, y, controller);
|
||||||
case Controller::Paddles:
|
case Controller::Paddles:
|
||||||
return new PaddleWidget(boss, font, x, y, controller);
|
return new PaddleWidget(boss, font, x, y, controller);
|
||||||
|
case Controller::BoosterGrip:
|
||||||
|
return new BoosterWidget(boss, font, x, y, controller);
|
||||||
default:
|
default:
|
||||||
return new ControllerWidget(boss, font, x, y, controller);
|
return new NullControlWidget(boss, font, x, y, controller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,8 @@ MODULE_OBJS := \
|
||||||
src/debugger/gui/TogglePixelWidget.o \
|
src/debugger/gui/TogglePixelWidget.o \
|
||||||
src/debugger/gui/ToggleWidget.o \
|
src/debugger/gui/ToggleWidget.o \
|
||||||
src/debugger/gui/JoystickWidget.o \
|
src/debugger/gui/JoystickWidget.o \
|
||||||
src/debugger/gui/PaddleWidget.o
|
src/debugger/gui/PaddleWidget.o \
|
||||||
|
src/debugger/gui/BoosterWidget.o
|
||||||
|
|
||||||
MODULE_DIRS += \
|
MODULE_DIRS += \
|
||||||
src/debugger/gui
|
src/debugger/gui
|
||||||
|
|
Loading…
Reference in New Issue