First pass at adding controller-specific UI items to the

I/O tab in the debugger.  For now, only joystick is 
partly implemented.  Eventually, all Stella controllers
will have UI items (where it makes sense), allowing to
completely control input devices from within the
debugger.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2334 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2012-01-05 18:28:24 +00:00
parent 0138086583
commit b10720321a
12 changed files with 259 additions and 103 deletions

View File

@ -207,25 +207,9 @@ Int32 RiotDebug::timClocks()
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RiotDebug::setP0Pins(bool Pin1, bool Pin2, bool Pin3, bool Pin4, bool Pin6)
Controller& RiotDebug::controller(Controller::Jack jack) const
{
Controller& port0 = myConsole.controller(Controller::Left);
port0.myDigitalPinState[Controller::One] = Pin1;
port0.myDigitalPinState[Controller::Two] = Pin2;
port0.myDigitalPinState[Controller::Three] = Pin3;
port0.myDigitalPinState[Controller::Four] = Pin4;
port0.myDigitalPinState[Controller::Six] = Pin6;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RiotDebug::setP1Pins(bool Pin1, bool Pin2, bool Pin3, bool Pin4, bool Pin6)
{
Controller& port1 = myConsole.controller(Controller::Right);
port1.myDigitalPinState[Controller::One] = Pin1;
port1.myDigitalPinState[Controller::Two] = Pin2;
port1.myDigitalPinState[Controller::Three] = Pin3;
port1.myDigitalPinState[Controller::Four] = Pin4;
port1.myDigitalPinState[Controller::Six] = Pin6;
return myConsole.controller(jack);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -70,13 +70,8 @@ class RiotDebug : public DebuggerSystem
uInt8 timint();
Int32 timClocks();
/* Controller pins, from the POV of 'outside' the system
(ie, state is determined by what the controller sends to the RIOT)
Setting a pin to false is the same as if the external controller
pulled the pin low
*/
void setP0Pins(bool Pin1, bool Pin2, bool Pin3, bool Pin4, bool Pin6);
void setP1Pins(bool Pin1, bool Pin2, bool Pin3, bool Pin4, bool Pin6);
/* Controller ports */
Controller& controller(Controller::Jack jack) const;
/* Console switches */
bool diffP0(int newVal = -1);

View File

@ -0,0 +1,50 @@
//============================================================================
//
// 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 CONTROLLER_WIDGET_HXX
#define CONTROLLER_WIDGET_HXX
class GuiObject;
class ButtonWidget;
#include "Widget.hxx"
#include "Command.hxx"
class ControllerWidget : public Widget, public CommandSender
{
public:
ControllerWidget(GuiObject* boss, const GUI::Font& font, int x, int y,
Controller& controller)
: Widget(boss, font, x, y, 16, 16),
CommandSender(boss),
_controller(controller)
{
_type = kControllerWidget;
}
virtual ~ControllerWidget() { };
virtual void loadConfig() { };
virtual void handleCommand(CommandSender* sender, int cmd, int data, int id) { };
protected:
Controller& _controller;
};
#endif

View File

@ -0,0 +1,107 @@
//============================================================================
//
// 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 "JoystickWidget.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JoystickWidget::JoystickWidget(GuiObject* boss, const GUI::Font& font,
int x, int y, Controller& controller)
: ControllerWidget(boss, font, x, y, controller)
{
bool leftport = _controller.jack() == Controller::Left;
if(leftport)
{
myPinEvent[kJUp] = Event::JoystickZeroUp;
myPinEvent[kJDown] = Event::JoystickZeroDown;
myPinEvent[kJLeft] = Event::JoystickZeroLeft;
myPinEvent[kJRight] = Event::JoystickZeroRight;
myPinEvent[kJFire] = Event::JoystickZeroFire1;
}
else
{
myPinEvent[kJUp] = Event::JoystickOneUp;
myPinEvent[kJDown] = Event::JoystickOneDown;
myPinEvent[kJLeft] = Event::JoystickOneLeft;
myPinEvent[kJRight] = Event::JoystickOneRight;
myPinEvent[kJFire] = Event::JoystickOneFire1;
}
const string& label = leftport ? "Left (Joystick):" : "Right (Joystick):";
const int fontWidth = font.getMaxCharWidth(),
fontHeight = font.getFontHeight(),
lineHeight = font.getLineHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Joystick):");
StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
fontHeight, label, kTextAlignLeft);
xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 5;
myPins[kJUp] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
myPins[kJUp]->setID(kJUp);
myPins[kJUp]->setTarget(this);
addFocusWidget(myPins[kJUp]);
ypos += myPins[kJUp]->getHeight() * 2 + 10;
myPins[kJDown] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
myPins[kJDown]->setID(kJDown);
myPins[kJDown]->setTarget(this);
addFocusWidget(myPins[kJDown]);
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);
addFocusWidget(myPins[kJLeft]);
_w = xpos;
xpos += (myPins[kJUp]->getWidth() + 5) * 2;
myPins[kJRight] = new CheckboxWidget(boss, font, xpos, ypos, "", kCheckActionCmd);
myPins[kJRight]->setID(kJRight);
myPins[kJRight]->setTarget(this);
addFocusWidget(myPins[kJRight]);
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);
addFocusWidget(myPins[kJFire]);
_h = ypos;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JoystickWidget::~JoystickWidget()
{
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void JoystickWidget::loadConfig()
{
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void JoystickWidget::handleCommand(
CommandSender* sender, int cmd, int data, int id)
{
}

View File

@ -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 JOYSTICK_WIDGET_HXX
#define JOYSTICK_WIDGET_HXX
#include "Control.hxx"
#include "Event.hxx"
#include "ControllerWidget.hxx"
class JoystickWidget : public ControllerWidget
{
public:
JoystickWidget(GuiObject* boss, const GUI::Font& font, int x, int y,
Controller& controller);
virtual ~JoystickWidget();
void loadConfig();
void handleCommand(CommandSender* sender, int cmd, int data, int id);
private:
enum { kJUp = 0, kJDown, kJLeft, kJRight, kJFire };
CheckboxWidget* myPins[5];
Event::Type myPinEvent[5];
};
#endif

View File

@ -30,6 +30,9 @@
#include "ToggleBitWidget.hxx"
#include "Widget.hxx"
#include "ControllerWidget.hxx"
#include "JoystickWidget.hxx"
#include "RiotWidget.hxx"
#define CREATE_IO_REGS(desc, bits, bitsID) \
@ -43,42 +46,6 @@
xpos += bits->getWidth() + 5; \
bits->setList(off, on);
#define CREATE_PORT_PINS(label, pins, pinsID) \
t = new StaticTextWidget(boss, font, xpos, ypos+2, 14*fontWidth, \
fontHeight, label, kTextAlignLeft); \
xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 5; \
pins[0] = new CheckboxWidget(boss, font, xpos, ypos, "", \
kCheckActionCmd); \
pins[0]->setID(pinsID); \
pins[0]->setTarget(this); \
addFocusWidget(pins[0]); \
ypos += pins[0]->getHeight() * 2 + 10; \
pins[1] = new CheckboxWidget(boss, font, xpos, ypos, "", \
kCheckActionCmd); \
pins[1]->setID(pinsID); \
pins[1]->setTarget(this); \
addFocusWidget(pins[1]); \
xpos -= pins[0]->getWidth() + 5; \
ypos -= pins[0]->getHeight() + 5; \
pins[2] = new CheckboxWidget(boss, font, xpos, ypos, "", \
kCheckActionCmd); \
pins[2]->setID(pinsID); \
pins[2]->setTarget(this); \
addFocusWidget(pins[2]); \
xpos += (pins[0]->getWidth() + 5) * 2; \
pins[3] = new CheckboxWidget(boss, font, xpos, ypos, "", \
kCheckActionCmd); \
pins[3]->setID(pinsID); \
pins[3]->setTarget(this); \
addFocusWidget(pins[3]); \
xpos -= (pins[0]->getWidth() + 5) * 2; \
ypos = 20 + (pins[0]->getHeight() + 10) * 3; \
pins[4] = new CheckboxWidget(boss, font, xpos, ypos, "Fire", \
kCheckActionCmd); \
pins[4]->setID(pinsID); \
pins[4]->setTarget(this); \
addFocusWidget(pins[4]);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& font,
int x, int y, int w, int h)
@ -157,16 +124,20 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& font,
myTimRead->setEditable(false);
addFocusWidget(myTimRead);
// Controller port pins (for now, only the latched pins)
// Controller ports
const RiotDebug& riot = instance().debugger().riotDebug();
xpos = col; ypos = 10;
CREATE_PORT_PINS("P0 Controller:", myP0Pins, kP0PinsID);
xpos = col + font.getStringWidth("P0 Controller:") + 20; ypos = 10;
CREATE_PORT_PINS("P1 Controller:", myP1Pins, kP1PinsID);
myLeftControl = addControlWidget(boss, font, xpos, ypos,
riot.controller(Controller::Left));
xpos += col + myLeftControl->getWidth() + 15;
myRightControl = addControlWidget(boss, font, xpos, ypos,
riot.controller(Controller::Right));
//FIXME - add focus to these widget??
// PO & P1 difficulty switches
int pwidth = font.getStringWidth("B/easy");
lwidth = font.getStringWidth("P0 Diff: ");
xpos = col; ypos += 3 * lineHeight;
xpos = col; ypos += myLeftControl->getHeight() + 2 * lineHeight;
items.clear();
items.push_back("B/easy", "b");
items.push_back("A/hard", "a");
@ -270,21 +241,8 @@ void RiotWidget::loadConfig()
changed.push_back(state.TIMCLKS != oldstate.TIMCLKS);
myTimRead->setList(alist, vlist, changed);
// Update port pins
// We invert the booleans, since in the UI it makes more sense that
// if, for example, the 'up' checkbox is set, it means 'go up'
myP0Pins[0]->setState(!state.P0_PIN1);
myP0Pins[1]->setState(!state.P0_PIN2);
myP0Pins[2]->setState(!state.P0_PIN3);
myP0Pins[3]->setState(!state.P0_PIN4);
myP0Pins[4]->setState(!state.P0_PIN6);
myP1Pins[0]->setState(!state.P1_PIN1);
myP1Pins[1]->setState(!state.P1_PIN2);
myP1Pins[2]->setState(!state.P1_PIN3);
myP1Pins[3]->setState(!state.P1_PIN4);
myP1Pins[4]->setState(!state.P1_PIN6);
// Console switches (invert reset/select for same reason as the pins)
// Console switches (inverted, since 'selected' in the UI
// means 'grounded' in the system)
myP0Diff->setSelected((int)riot.diffP0());
myP1Diff->setSelected((int)riot.diffP1());
myTVType->setSelected((int)riot.tvType());
@ -348,16 +306,6 @@ void RiotWidget::handleCommand(CommandSender* sender, int cmd, int data, int id)
case kCheckActionCmd:
switch(id)
{
case kP0PinsID:
riot.setP0Pins(!myP0Pins[0]->getState(), !myP0Pins[1]->getState(),
!myP0Pins[2]->getState(), !myP0Pins[3]->getState(),
!myP0Pins[4]->getState());
break;
case kP1PinsID:
riot.setP1Pins(!myP1Pins[0]->getState(), !myP1Pins[1]->getState(),
!myP1Pins[2]->getState(), !myP1Pins[3]->getState(),
!myP1Pins[4]->getState());
break;
case kSelectID:
riot.select(!mySelect->getState());
break;
@ -380,3 +328,16 @@ void RiotWidget::handleCommand(CommandSender* sender, int cmd, int data, int id)
break;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ControllerWidget* RiotWidget::addControlWidget(GuiObject* boss, const GUI::Font& font,
int x, int y, Controller& controller)
{
switch(controller.type())
{
case Controller::Joystick:
return new JoystickWidget(boss, font, x, y, controller);
default:
return new ControllerWidget(boss, font, x, y, controller);
}
}

View File

@ -28,8 +28,10 @@ class ButtonWidget;
class DataGridWidget;
class PopUpWidget;
class ToggleBitWidget;
class ControllerWidget;
#include "Array.hxx"
#include "Control.hxx"
#include "Command.hxx"
class RiotWidget : public Widget, public CommandSender
@ -43,6 +45,8 @@ class RiotWidget : public Widget, public CommandSender
void loadConfig();
private:
ControllerWidget* addControlWidget(GuiObject* boss, const GUI::Font& font,
int x, int y, Controller& controller);
private:
ToggleBitWidget* mySWCHAReadBits;
@ -55,8 +59,7 @@ class RiotWidget : public Widget, public CommandSender
DataGridWidget* myTimWrite;
DataGridWidget* myTimRead;
CheckboxWidget* myP0Pins[5], *myP1Pins[5];
ControllerWidget *myLeftControl, *myRightControl;
PopUpWidget *myP0Diff, *myP1Diff;
PopUpWidget *myTVType;
CheckboxWidget* mySelect;
@ -67,7 +70,6 @@ class RiotWidget : public Widget, public CommandSender
enum {
kTim1TID, kTim8TID, kTim64TID, kTim1024TID, kTimWriteID,
kSWCHABitsID, kSWACNTBitsID, kSWCHBBitsID, kSWBCNTBitsID,
kP0PinsID, kP1PinsID,
kP0DiffChanged, kP1DiffChanged, kTVTypeChanged, kSelectID, kResetID
};
};

View File

@ -18,7 +18,8 @@ MODULE_OBJS := \
src/debugger/gui/DebuggerDialog.o \
src/debugger/gui/ToggleBitWidget.o \
src/debugger/gui/TogglePixelWidget.o \
src/debugger/gui/ToggleWidget.o
src/debugger/gui/ToggleWidget.o \
src/debugger/gui/JoystickWidget.o
MODULE_DIRS += \
src/debugger/gui

View File

@ -91,12 +91,6 @@ Controller::~Controller()
{
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const Controller::Type Controller::type() const
{
return myType;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt8 Controller::read()
{

View File

@ -119,10 +119,15 @@ class Controller : public Serializable
*/
virtual ~Controller();
/**
Returns the jack that this controller is plugged into.
*/
const Jack jack() const { return myJack; }
/**
Returns the type of this controller.
*/
const Type type() const;
const Type type() const { return myType; }
/**
Read the entire state of all digital pins for this controller.

View File

@ -77,7 +77,8 @@ enum {
kTiaZoomWidget = 'TIAZ',
kToggleBitWidget = 'TGLB',
kTogglePixelWidget = 'TGLP',
kToggleWidget = 'TOGL'
kToggleWidget = 'TOGL',
kControllerWidget = 'CTRL'
};
/**

View File

@ -323,6 +323,9 @@
DCC527DB10B9DA6A005E1287 /* bspf.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCC527D810B9DA6A005E1287 /* bspf.hxx */; };
DCC527DC10B9DA6A005E1287 /* Snapshot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCC527D910B9DA6A005E1287 /* Snapshot.cxx */; };
DCC527DD10B9DA6A005E1287 /* Snapshot.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCC527DA10B9DA6A005E1287 /* Snapshot.hxx */; };
DCCF47DE14B60DEE00814FAB /* ControllerWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCCF47DB14B60DEE00814FAB /* ControllerWidget.hxx */; };
DCCF47DF14B60DEE00814FAB /* JoystickWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCCF47DC14B60DEE00814FAB /* JoystickWidget.cxx */; };
DCCF47E014B60DEE00814FAB /* JoystickWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCCF47DD14B60DEE00814FAB /* JoystickWidget.hxx */; };
DCD2839812E39F1200A808DC /* Thumbulator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCD2839612E39F1200A808DC /* Thumbulator.cxx */; };
DCD2839912E39F1200A808DC /* Thumbulator.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCD2839712E39F1200A808DC /* Thumbulator.hxx */; };
DCD3F7C511340AAF00DBA3AE /* Genesis.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCD3F7C311340AAF00DBA3AE /* Genesis.cxx */; };
@ -741,6 +744,9 @@
DCC527D810B9DA6A005E1287 /* bspf.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bspf.hxx; path = ../common/bspf.hxx; sourceTree = SOURCE_ROOT; };
DCC527D910B9DA6A005E1287 /* Snapshot.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Snapshot.cxx; path = ../common/Snapshot.cxx; sourceTree = SOURCE_ROOT; };
DCC527DA10B9DA6A005E1287 /* Snapshot.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Snapshot.hxx; path = ../common/Snapshot.hxx; sourceTree = SOURCE_ROOT; };
DCCF47DB14B60DEE00814FAB /* ControllerWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControllerWidget.hxx; path = ../debugger/gui/ControllerWidget.hxx; sourceTree = SOURCE_ROOT; };
DCCF47DC14B60DEE00814FAB /* JoystickWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JoystickWidget.cxx; path = ../debugger/gui/JoystickWidget.cxx; sourceTree = SOURCE_ROOT; };
DCCF47DD14B60DEE00814FAB /* JoystickWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = JoystickWidget.hxx; path = ../debugger/gui/JoystickWidget.hxx; sourceTree = SOURCE_ROOT; };
DCD2839612E39F1200A808DC /* Thumbulator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Thumbulator.cxx; path = ../emucore/Thumbulator.cxx; sourceTree = SOURCE_ROOT; };
DCD2839712E39F1200A808DC /* Thumbulator.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Thumbulator.hxx; path = ../emucore/Thumbulator.hxx; sourceTree = SOURCE_ROOT; };
DCD3F7C311340AAF00DBA3AE /* Genesis.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Genesis.cxx; path = ../emucore/Genesis.cxx; sourceTree = SOURCE_ROOT; };
@ -908,6 +914,7 @@
2D2331900900B5EF00613B1F /* AudioWidget.hxx */,
2D20F9E408C603EC00A73076 /* ColorWidget.cxx */,
2D20F9E508C603EC00A73076 /* ColorWidget.hxx */,
DCCF47DB14B60DEE00814FAB /* ControllerWidget.hxx */,
2D20F9E608C603EC00A73076 /* CpuWidget.cxx */,
2D20F9E708C603EC00A73076 /* CpuWidget.hxx */,
2D20F9E808C603EC00A73076 /* DataGridOpsWidget.cxx */,
@ -916,6 +923,8 @@
2D20F9EB08C603EC00A73076 /* DataGridWidget.hxx */,
2D20F9EC08C603EC00A73076 /* DebuggerDialog.cxx */,
2D20F9ED08C603EC00A73076 /* DebuggerDialog.hxx */,
DCCF47DC14B60DEE00814FAB /* JoystickWidget.cxx */,
DCCF47DD14B60DEE00814FAB /* JoystickWidget.hxx */,
2D20F9EE08C603EC00A73076 /* PromptWidget.cxx */,
2D20F9EF08C603EC00A73076 /* PromptWidget.hxx */,
2D20F9F008C603EC00A73076 /* RamWidget.cxx */,
@ -1511,6 +1520,8 @@
DC8C1BAE14B25DE7006440EE /* CartCM.hxx in Headers */,
DC8C1BB014B25DE7006440EE /* CompuMate.hxx in Headers */,
DC8C1BB214B25DE7006440EE /* MindLink.hxx in Headers */,
DCCF47DE14B60DEE00814FAB /* ControllerWidget.hxx in Headers */,
DCCF47E014B60DEE00814FAB /* JoystickWidget.hxx in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1776,6 +1787,7 @@
DC8C1BAD14B25DE7006440EE /* CartCM.cxx in Sources */,
DC8C1BAF14B25DE7006440EE /* CompuMate.cxx in Sources */,
DC8C1BB114B25DE7006440EE /* MindLink.cxx in Sources */,
DCCF47DF14B60DEE00814FAB /* JoystickWidget.cxx in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};