Added ability for the debugger to start up in 'fatal error' mode.

This basically shows a messagebox as soon as the debugger starts,
describing the error and offering the choice to continue debugging
or exiting the ROM entirely.

The DPC+ code now catches fatal errors from the Thumb ARM
emulation code and shows it as a fatal error in the debugger.
This means you no longer need to look at the commandline for
this output, and you immediately know that something has
gone wrong.

Added 'exitrom' debugger parser command, which completely exits
from the debugger *and* the ROM, going back to the ROM launcher.

Cleaned up the API a little, rearranging some classes and
adding references instead of pointers.  More work to be done
in this area.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2234 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2011-05-26 16:14:46 +00:00
parent db46773ea1
commit bc7daa397e
17 changed files with 235 additions and 113 deletions

View File

@ -15,9 +15,6 @@
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//
// $Id$
//
// Based on code from ScummVM - Scumm Interpreter
// Copyright (C) 2002-2004 The ScummVM project
//============================================================================
#ifndef STRING_LIST_HXX

View File

@ -0,0 +1,49 @@
//============================================================================
//
// 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-2011 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 STRING_PARSER_HXX
#define STRING_PARSER_HXX
#include "StringList.hxx"
#include "bspf.hxx"
/**
This class converts a string into a StringList by splitting on a delimiter.
By default, the delimiter is a newline.
@author Stephen Anthony
*/
class StringParser
{
public:
StringParser(const string& str, char delim = '\n')
{
stringstream buf(str);
string line;
while(std::getline(buf, line, delim))
myStringList.push_back(line);
}
const StringList& stringList() const { return myStringList; }
private:
StringList myStringList;
};
#endif

View File

@ -22,7 +22,7 @@
#include <cstdlib>
#define STELLA_VERSION "3.4_svn1"
#define STELLA_VERSION "3.4_beta1"
#define STELLA_BUILD atoi("$Rev$" + 6)
#endif

View File

@ -112,15 +112,12 @@ Debugger::Debugger(OSystem* osystem)
: DialogContainer(osystem),
myConsole(NULL),
mySystem(NULL),
myDialog(NULL),
myParser(NULL),
myCartDebug(NULL),
myCpuDebug(NULL),
myRiotDebug(NULL),
myTiaDebug(NULL),
myTiaInfo(NULL),
myTiaOutput(NULL),
myTiaZoom(NULL),
myRom(NULL),
myBreakPoints(NULL),
myReadTraps(NULL),
myWriteTraps(NULL),
@ -172,19 +169,12 @@ void Debugger::initialize()
const GUI::Rect& r = getDialogBounds();
delete myBaseDialog;
DebuggerDialog *dd = new DebuggerDialog(myOSystem, this,
r.left, r.top, r.width(), r.height());
myBaseDialog = dd;
delete myBaseDialog; myBaseDialog = myDialog = NULL;
myDialog = new DebuggerDialog(myOSystem, this,
r.left, r.top, r.width(), r.height());
myBaseDialog = myDialog;
myPrompt = dd->prompt();
myTiaInfo = dd->tiaInfo();
myTiaOutput = dd->tiaOutput();
myTiaZoom = dd->tiaZoom();
myRom = dd->rom();
myMessage = dd->message();
myRewindManager = new RewindManager(*myOSystem, *dd->rewindButton());
myRewindManager = new RewindManager(*myOSystem, myDialog->rewindButton());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -235,7 +225,7 @@ bool Debugger::start(const string& message, int address)
if(address > -1)
buf << valueToString(address);
myMessage->setEditString(buf.str());
myDialog->message().setEditString(buf.str());
return true;
}
return false;
@ -247,17 +237,20 @@ bool Debugger::startWithFatalError(const string& message)
if(myOSystem->eventHandler().enterDebugMode())
{
// This must be done *after* we enter debug mode,
// so the message isn't erased
myMessage->setEditString(message);
// so the dialog is properly shown
myDialog->showFatalMessage(message);
return true;
}
return false;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::quit()
void Debugger::quit(bool exitrom)
{
myOSystem->eventHandler().leaveDebugMode();
if(exitrom)
myOSystem->eventHandler().handleEvent(Event::LauncherMode, 1);
else
myOSystem->eventHandler().leaveDebugMode();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -630,7 +623,7 @@ void Debugger::setStartState()
saveOldState(false);
// Set the 're-disassemble' flag, but don't do it until the next scheduled time
myRom->invalidate(false);
myDialog->rom().invalidate(false);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -42,6 +42,7 @@ class ButtonWidget;
#include "Array.hxx"
#include "DialogContainer.hxx"
#include "DebuggerDialog.hxx"
#include "DebuggerParser.hxx"
#include "System.hxx"
#include "Rect.hxx"
@ -119,7 +120,7 @@ class Debugger : public DialogContainer
Wrapper method for EventHandler::leaveDebugMode() for those classes
that don't have access to EventHandler.
*/
void quit();
void quit(bool exitrom);
bool addFunction(const string& name, const string& def,
Expression* exp, bool builtin = false);
@ -344,7 +345,8 @@ class Debugger : public DialogContainer
void reset();
void clearAllBreakPoints();
PromptWidget *prompt() { return myPrompt; }
PromptWidget& prompt() { return myDialog->prompt(); }
RomWidget& rom() { return myDialog->rom(); };
void saveState(int state);
void loadState(int state);
@ -353,22 +355,16 @@ class Debugger : public DialogContainer
Console* myConsole;
System* mySystem;
DebuggerDialog* myDialog;
DebuggerParser* myParser;
CartDebug* myCartDebug;
CpuDebug* myCpuDebug;
RiotDebug* myRiotDebug;
TIADebug* myTiaDebug;
TiaInfoWidget* myTiaInfo;
TiaOutputWidget* myTiaOutput;
TiaZoomWidget* myTiaZoom;
RomWidget* myRom;
EditTextWidget* myMessage;
PackedBitArray* myBreakPoints;
PackedBitArray* myReadTraps;
PackedBitArray* myWriteTraps;
PromptWidget* myPrompt;
static Debugger* myStaticDebugger;

View File

@ -699,7 +699,7 @@ void DebuggerParser::executeBreak()
else
bp = args[0];
debugger->toggleBreakPoint(bp);
debugger->myRom->invalidate();
debugger->rom().invalidate();
if(debugger->breakPoint(bp))
commandResult << "Set";
@ -799,7 +799,7 @@ void DebuggerParser::executeClearwatches()
// "cls"
void DebuggerParser::executeCls()
{
debugger->prompt()->clearScreen();
debugger->prompt().clearScreen();
commandResult << "";
}
@ -822,7 +822,7 @@ void DebuggerParser::executeCode()
CartDebug::CODE, args[0], args[1]);
commandResult << (result ? "added" : "removed") << " CODE directive on range $"
<< hex << args[0] << " $" << hex << args[1];
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -863,7 +863,7 @@ void DebuggerParser::executeData()
CartDebug::DATA, args[0], args[1]);
commandResult << (result ? "added" : "removed") << " DATA directive on range $"
<< hex << args[0] << " $" << hex << args[1];
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -872,7 +872,7 @@ void DebuggerParser::executeDefine()
{
// TODO: check if label already defined?
debugger->cartDebug().addLabel(argStrings[0], args[1]);
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -952,6 +952,13 @@ void DebuggerParser::executeExec()
commandResult << exec(file);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// "exitrom"
void DebuggerParser::executeExitRom()
{
debugger->quit(true);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// "frame"
void DebuggerParser::executeFrame()
@ -1002,7 +1009,7 @@ void DebuggerParser::executeGfx()
CartDebug::GFX, args[0], args[1]);
commandResult << (result ? "added" : "removed") << " GFX directive on range $"
<< hex << args[0] << " $" << hex << args[1];
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -1040,7 +1047,7 @@ void DebuggerParser::executeJump()
if(line >= 0 && address >= 0)
{
debugger->myRom->scrollTo(line);
debugger->rom().scrollTo(line);
commandResult << "disassembly scrolled to address $" << HEX4 << address;
}
else
@ -1141,7 +1148,7 @@ void DebuggerParser::executeLoadconfig()
else
commandResult << debugger->cartDebug().loadConfigFile();
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -1159,7 +1166,7 @@ void DebuggerParser::executeLoadstate()
void DebuggerParser::executeLoadsym()
{
commandResult << debugger->cartDebug().loadSymbolFile(argStrings[0]);
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -1198,7 +1205,7 @@ void DebuggerParser::executePGfx()
CartDebug::PGFX, args[0], args[1]);
commandResult << (result ? "added" : "removed") << " PGFX directive on range $"
<< hex << args[0] << " $" << hex << args[1];
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -1223,7 +1230,7 @@ void DebuggerParser::executeRam()
void DebuggerParser::executeReset()
{
debugger->reset();
debugger->myRom->invalidate();
debugger->rom().invalidate();
commandResult << "reset CPU";
}
@ -1233,7 +1240,7 @@ void DebuggerParser::executeRewind()
{
if(debugger->rewindState())
{
debugger->myRom->invalidate();
debugger->rom().invalidate();
commandResult << "rewind by one level";
}
else
@ -1266,7 +1273,7 @@ void DebuggerParser::executeRom()
// The RomWidget is a special case, since we don't want to re-disassemble
// any more than necessary. So we only do it by calling the following
// method ...
debugger->myRom->invalidate();
debugger->rom().invalidate();
commandResult << "changed " << debugger->valueToString( args.size() - 1 )
<< " location(s)";
@ -1291,7 +1298,7 @@ void DebuggerParser::executeRow()
CartDebug::ROW, args[0], args[1]);
commandResult << (result ? "added" : "removed") << " ROW directive on range $"
<< hex << args[0] << " $" << hex << args[1];
debugger->myRom->invalidate();
debugger->rom().invalidate();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -1299,7 +1306,7 @@ void DebuggerParser::executeRow()
void DebuggerParser::executeRun()
{
debugger->saveOldState();
debugger->quit();
debugger->quit(false);
commandResult << "_EXIT_DEBUGGER"; // See PromptWidget for more info
}
@ -1420,7 +1427,7 @@ void DebuggerParser::executeSaverom()
// "saveses"
void DebuggerParser::executeSaveses()
{
if(debugger->prompt()->saveBuffer(argStrings[0]))
if(debugger->prompt().saveBuffer(argStrings[0]))
commandResult << "saved session to file " << argStrings[0];
else
commandResult << red("I/O error");
@ -1563,7 +1570,7 @@ void DebuggerParser::executeUndef()
{
if(debugger->cartDebug().removeLabel(argStrings[0]))
{
debugger->myRom->invalidate();
debugger->rom().invalidate();
commandResult << argStrings[0] + " now undefined";
}
else
@ -1823,6 +1830,15 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = {
&DebuggerParser::executeExec
},
{
"exitrom",
"Exit emulator, return to ROM launcher",
false,
false,
{ kARG_END_ARGS },
&DebuggerParser::executeExitRom
},
{
"frame",
"Advance emulation by xx frames (default=1)",

View File

@ -83,7 +83,7 @@ class DebuggerParser
private:
enum {
kNumCommands = 69,
kNumCommands = 70,
kMAX_ARG_TYPES = 10
};
@ -157,6 +157,7 @@ class DebuggerParser
void executeDisasm();
void executeDump();
void executeExec();
void executeExitRom();
void executeFrame();
void executeFunction();
void executeGfx();

View File

@ -35,26 +35,19 @@
#include "TiaWidget.hxx"
#include "DataGridOpsWidget.hxx"
#include "EditTextWidget.hxx"
#include "MessageBox.hxx"
#include "Rect.hxx"
#include "Debugger.hxx"
#include "DebuggerParser.hxx"
#include "DebuggerDialog.hxx"
enum {
kDDStepCmd = 'DDst',
kDDTraceCmd = 'DDtr',
kDDAdvCmd = 'DDav',
kDDSAdvCmd = 'DDsv',
kDDRewindCmd = 'DDrw',
kDDExitCmd = 'DDex'
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DebuggerDialog::DebuggerDialog(OSystem* osystem, DialogContainer* parent,
int x, int y, int w, int h)
: Dialog(osystem, parent, x, y, w, h, true), // use base surface
myTab(NULL)
myTab(NULL),
myFatalError(NULL)
{
addTiaArea();
addTabArea();
@ -145,7 +138,11 @@ void DebuggerDialog::handleCommand(CommandSender* sender, int cmd,
break;
case kDDExitCmd:
doExit();
doExitDebugger();
break;
case kDDExitFatalCmd:
doExitRom();
break;
default:
@ -153,10 +150,23 @@ void DebuggerDialog::handleCommand(CommandSender* sender, int cmd,
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::showFatalMessage(const string& msg)
{
const GUI::Rect& r = instance().debugger().getDialogBounds();
delete myFatalError;
myFatalError =
new MessageBox(this, instance().consoleFont(), msg,
r.width(), r.height(), kDDExitFatalCmd,
"Exit ROM", "Continue");
myFatalError->show();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::addTiaArea()
{
GUI::Rect r = instance().debugger().getTiaBounds();
const GUI::Rect& r = instance().debugger().getTiaBounds();
myTiaOutput = new TiaOutputWidget(this, instance().consoleFont(),
r.left, r.top, r.width(), r.height());
@ -165,7 +175,7 @@ void DebuggerDialog::addTiaArea()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::addTabArea()
{
GUI::Rect r = instance().debugger().getTabBounds();
const GUI::Rect& r = instance().debugger().getTabBounds();
const int vBorder = 4;
@ -214,7 +224,7 @@ void DebuggerDialog::addStatusArea()
{
const GUI::Font& font = instance().consoleFont();
const int lineHeight = font.getLineHeight();
GUI::Rect r = instance().debugger().getStatusBounds();
const GUI::Rect& r = instance().debugger().getStatusBounds();
int xpos, ypos;
xpos = r.left; ypos = r.top;
@ -237,7 +247,7 @@ void DebuggerDialog::addStatusArea()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::addRomArea()
{
GUI::Rect r = instance().debugger().getRomBounds();
const GUI::Rect& r = instance().debugger().getRomBounds();
int xpos, ypos;
xpos = r.left + 10; ypos = 10;
@ -320,7 +330,13 @@ void DebuggerDialog::doRewind()
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::doExit()
void DebuggerDialog::doExitDebugger()
{
instance().debugger().parser().run("run");
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DebuggerDialog::doExitRom()
{
instance().debugger().parser().run("exitrom");
}

View File

@ -36,6 +36,7 @@ class EditTextWidget;
class TiaInfoWidget;
class TiaOutputWidget;
class TiaZoomWidget;
class MessageBox;
#include "Dialog.hxx"
@ -46,19 +47,31 @@ class DebuggerDialog : public Dialog
int x, int y, int w, int h);
~DebuggerDialog();
PromptWidget* prompt() { return myPrompt; }
TiaInfoWidget* tiaInfo() { return myTiaInfo; }
TiaOutputWidget* tiaOutput() { return myTiaOutput; }
TiaZoomWidget* tiaZoom() { return myTiaZoom; }
RomWidget* rom() { return myRom; }
EditTextWidget* message() { return myMessageBox; }
ButtonWidget* rewindButton() { return myRewindButton; }
PromptWidget& prompt() { return *myPrompt; }
TiaInfoWidget& tiaInfo() { return *myTiaInfo; }
TiaOutputWidget& tiaOutput() { return *myTiaOutput; }
TiaZoomWidget& tiaZoom() { return *myTiaZoom; }
RomWidget& rom() { return *myRom; }
EditTextWidget& message() { return *myMessageBox; }
ButtonWidget& rewindButton() { return *myRewindButton; }
virtual void loadConfig();
virtual void handleKeyDown(int ascii, int keycode, int modifiers);
virtual void handleCommand(CommandSender* sender, int cmd, int data, int id);
void loadConfig();
void handleKeyDown(int ascii, int keycode, int modifiers);
void handleCommand(CommandSender* sender, int cmd, int data, int id);
void showFatalMessage(const string& msg);
private:
enum {
kDDStepCmd = 'DDst',
kDDTraceCmd = 'DDtr',
kDDAdvCmd = 'DDav',
kDDSAdvCmd = 'DDsv',
kDDRewindCmd = 'DDrw',
kDDExitCmd = 'DDex',
kDDExitFatalCmd = 'DDer'
};
TabWidget* myTab;
PromptWidget* myPrompt;
@ -70,6 +83,7 @@ class DebuggerDialog : public Dialog
RomWidget* myRom;
EditTextWidget* myMessageBox;
ButtonWidget* myRewindButton;
MessageBox* myFatalError;
private:
void addTiaArea();
@ -82,7 +96,8 @@ class DebuggerDialog : public Dialog
void doScanlineAdvance();
void doAdvance();
void doRewind();
void doExit();
void doExitDebugger();
void doExitRom();
};
#endif

View File

@ -212,9 +212,10 @@ inline void CartridgeDPCPlus::callFunction(uInt8 value)
catch(const string& error) {
if(!mySystem->autodectMode())
{
cerr << error << endl;
#ifdef DEBUGGER_SUPPORT
Debugger::debugger().startWithFatalError(error);
#else
cout << error << endl;
#endif
}
}

View File

@ -1034,7 +1034,8 @@ void EventHandler::handleEvent(Event::Type event, int state)
return;
case Event::LauncherMode:
if((myState == S_EMULATE || myState == S_CMDMENU) && state)
if((myState == S_EMULATE || myState == S_CMDMENU ||
myState == S_DEBUGGER) && state)
{
myOSystem->settings().saveConfig();

View File

@ -72,7 +72,8 @@ string Thumbulator::run( void ) throw(const string&)
inline int Thumbulator::fatalError(const char* opcode, uInt32 v1, const char* msg)
throw(const string&)
{
statusMsg << opcode << "(" << HEX8 << v1 << "), " << msg << endl;
statusMsg << "Thumb ARM emulation fatal error: " << endl
<< opcode << "(" << HEX8 << v1 << "), " << msg << endl;
dump_regs();
throw statusMsg.str();
}
@ -82,7 +83,8 @@ inline int Thumbulator::fatalError(const char* opcode, uInt32 v1, uInt32 v2,
const char* msg)
throw(const string&)
{
statusMsg << opcode << "(" << HEX8 << v1 << "," << v2 << "), " << msg << endl;
statusMsg << "Thumb ARM emulation fatal error: " << endl
<< opcode << "(" << HEX8 << v1 << "," << v2 << "), " << msg << endl;
dump_regs();
throw statusMsg.str();
}

View File

@ -584,7 +584,10 @@ Widget* Dialog::findWidget(int x, int y)
void Dialog::addOKCancelBGroup(WidgetArray& wid, const GUI::Font& font,
const string& okText, const string& cancelText)
{
int buttonWidth = font.getStringWidth("Cancel") + 15;
int buttonWidth = BSPF_max(font.getStringWidth("Cancel"),
BSPF_max(font.getStringWidth(okText),
font.getStringWidth(okText))) + 15;
int buttonHeight = font.getLineHeight() + 4;
ButtonWidget* b;
#ifndef MAC_OSX

View File

@ -21,28 +21,60 @@
#include "OSystem.hxx"
#include "Version.hxx"
#include "Widget.hxx"
#include "StringParser.hxx"
#include "MessageBox.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MessageBox::MessageBox(GuiObject* boss, const GUI::Font& font,
const StringList& text, int max_w, int max_h, int cmd)
: Dialog(&boss->instance(), &boss->parent(), 0, 0, 16, 16),
const StringList& text, int max_w, int max_h, int cmd,
const string& okText, const string& cancelText)
: Dialog(&boss->instance(), &boss->parent(), 0, 0, max_w, max_h),
CommandSender(boss),
myCmd(cmd)
{
addText(font, text);
WidgetArray wid;
addOKCancelBGroup(wid, font, okText, cancelText);
addToFocusList(wid);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MessageBox::MessageBox(GuiObject* boss, const GUI::Font& font,
const string& text, int max_w, int max_h, int cmd,
const string& okText, const string& cancelText)
: Dialog(&boss->instance(), &boss->parent(), 0, 0, max_w, max_h),
CommandSender(boss),
myCmd(cmd)
{
StringParser p(text);
addText(font, p.stringList());
WidgetArray wid;
addOKCancelBGroup(wid, font, okText, cancelText);
addToFocusList(wid);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MessageBox::~MessageBox()
{
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void MessageBox::addText(const GUI::Font& font, const StringList& text)
{
const int lineHeight = font.getLineHeight(),
fontWidth = font.getMaxCharWidth(),
fontHeight = font.getFontHeight();
int xpos, ypos;
WidgetArray wid;
// Set real dimensions
int str_w = 0;
for(uInt32 i = 0; i < text.size(); ++i)
str_w = BSPF_max((int)text[i].length(), str_w);
_w = BSPF_min(str_w * fontWidth + 20, max_w);
_h = BSPF_min(((text.size() + 2) * lineHeight + 20), (uInt32)max_h);
_w = BSPF_min(str_w * fontWidth + 20, _w);
_h = BSPF_min(((text.size() + 2) * lineHeight + 20), (uInt32)_h);
xpos = 10; ypos = 10;
for(uInt32 i = 0; i < text.size(); ++i)
@ -51,15 +83,6 @@ MessageBox::MessageBox(GuiObject* boss, const GUI::Font& font,
fontHeight, text[i], kTextAlignLeft);
ypos += fontHeight;
}
addOKCancelBGroup(wid, font);
addToFocusList(wid);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MessageBox::~MessageBox()
{
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -36,14 +36,19 @@ class MessageBox : public Dialog, public CommandSender
{
public:
MessageBox(GuiObject* boss, const GUI::Font& font, const StringList& text,
int max_w, int max_h, int cmd = 0);
int max_w, int max_h, int cmd = 0,
const string& okText = "", const string& cancelText = "");
MessageBox(GuiObject* boss, const GUI::Font& font, const string& text,
int max_w, int max_h, int cmd = 0,
const string& okText = "", const string& cancelText = "");
virtual ~MessageBox();
/** Place the input dialog onscreen and center it */
void show() { parent().addDialog(this); }
private:
virtual void handleCommand(CommandSender* sender, int cmd, int data, int id);
void addText(const GUI::Font& font, const StringList& text);
void handleCommand(CommandSender* sender, int cmd, int data, int id);
private:
int myCmd;

View File

@ -69,7 +69,6 @@
2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC7084578BF00812C11 /* PopUpWidget.hxx */; };
2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */; };
2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */; };
2D91741509BA90380026E9FF /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACF084578BF00812C11 /* StringList.hxx */; };
2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */; };
2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD3084578BF00812C11 /* VideoDialog.hxx */; };
2D91741809BA90380026E9FF /* Widget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD5084578BF00812C11 /* Widget.hxx */; };
@ -251,6 +250,8 @@
DC17E80C1361FDB500397A9E /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = DC17E8081361FDB500397A9E /* pngstruct.h */; };
DC1FC18A0DB3B2C7009B3DF7 /* SerialPortMACOSX.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC1FC1880DB3B2C7009B3DF7 /* SerialPortMACOSX.cxx */; };
DC1FC18B0DB3B2C7009B3DF7 /* SerialPortMACOSX.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC1FC1890DB3B2C7009B3DF7 /* SerialPortMACOSX.hxx */; };
DC20D6F3138EB130002A7428 /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC20D6F1138EB130002A7428 /* StringList.hxx */; };
DC20D6F4138EB130002A7428 /* StringParser.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC20D6F2138EB130002A7428 /* StringParser.hxx */; };
DC3FE47C11C7D35600C91C72 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = DC3FE46A11C7D35600C91C72 /* png.c */; };
DC3FE47D11C7D35600C91C72 /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3FE46B11C7D35600C91C72 /* png.h */; };
DC3FE47E11C7D35600C91C72 /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3FE46C11C7D35600C91C72 /* pngconf.h */; };
@ -336,7 +337,6 @@
DCE9CC2B1103812700C86671 /* CartDebug.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE9CC271103812700C86671 /* CartDebug.hxx */; };
DCE9CC2C1103812700C86671 /* DiStella.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE9CC281103812700C86671 /* DiStella.cxx */; };
DCE9CC2D1103812700C86671 /* DiStella.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE9CC291103812700C86671 /* DiStella.hxx */; };
DCECDAFA10B9DBDC00AF4E1B /* Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCECDAF210B9DBDC00AF4E1B /* Device.cxx */; };
DCECDAFB10B9DBDC00AF4E1B /* Device.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCECDAF310B9DBDC00AF4E1B /* Device.hxx */; };
DCECDAFC10B9DBDC00AF4E1B /* M6502.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCECDAF410B9DBDC00AF4E1B /* M6502.cxx */; };
DCECDAFD10B9DBDC00AF4E1B /* M6502.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCECDAF510B9DBDC00AF4E1B /* M6502.hxx */; };
@ -547,7 +547,6 @@
2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ProgressDialog.hxx; path = ../gui/ProgressDialog.hxx; sourceTree = SOURCE_ROOT; };
2DDBEACA084578BF00812C11 /* ScrollBarWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollBarWidget.cxx; path = ../gui/ScrollBarWidget.cxx; sourceTree = SOURCE_ROOT; };
2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ScrollBarWidget.hxx; path = ../gui/ScrollBarWidget.hxx; sourceTree = SOURCE_ROOT; };
2DDBEACF084578BF00812C11 /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../gui/StringList.hxx; sourceTree = SOURCE_ROOT; };
2DDBEAD0084578BF00812C11 /* TabWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TabWidget.cxx; path = ../gui/TabWidget.cxx; sourceTree = SOURCE_ROOT; };
2DDBEAD1084578BF00812C11 /* TabWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = TabWidget.hxx; path = ../gui/TabWidget.hxx; sourceTree = SOURCE_ROOT; };
2DDBEAD2084578BF00812C11 /* VideoDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = VideoDialog.cxx; path = ../gui/VideoDialog.cxx; sourceTree = SOURCE_ROOT; };
@ -658,6 +657,8 @@
DC17E8081361FDB500397A9E /* pngstruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = ../libpng/pngstruct.h; sourceTree = SOURCE_ROOT; };
DC1FC1880DB3B2C7009B3DF7 /* SerialPortMACOSX.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SerialPortMACOSX.cxx; sourceTree = "<group>"; };
DC1FC1890DB3B2C7009B3DF7 /* SerialPortMACOSX.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = SerialPortMACOSX.hxx; sourceTree = "<group>"; };
DC20D6F1138EB130002A7428 /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../common/StringList.hxx; sourceTree = SOURCE_ROOT; };
DC20D6F2138EB130002A7428 /* StringParser.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringParser.hxx; path = ../common/StringParser.hxx; sourceTree = SOURCE_ROOT; };
DC3FE46A11C7D35600C91C72 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = png.c; path = ../libpng/png.c; sourceTree = SOURCE_ROOT; };
DC3FE46B11C7D35600C91C72 /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = png.h; path = ../libpng/png.h; sourceTree = SOURCE_ROOT; };
DC3FE46C11C7D35600C91C72 /* pngconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = ../libpng/pngconf.h; sourceTree = SOURCE_ROOT; };
@ -744,7 +745,6 @@
DCE9CC271103812700C86671 /* CartDebug.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CartDebug.hxx; path = ../debugger/CartDebug.hxx; sourceTree = SOURCE_ROOT; };
DCE9CC281103812700C86671 /* DiStella.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DiStella.cxx; path = ../debugger/DiStella.cxx; sourceTree = SOURCE_ROOT; };
DCE9CC291103812700C86671 /* DiStella.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DiStella.hxx; path = ../debugger/DiStella.hxx; sourceTree = SOURCE_ROOT; };
DCECDAF210B9DBDC00AF4E1B /* Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Device.cxx; path = ../emucore/Device.cxx; sourceTree = SOURCE_ROOT; };
DCECDAF310B9DBDC00AF4E1B /* Device.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Device.hxx; path = ../emucore/Device.hxx; sourceTree = SOURCE_ROOT; };
DCECDAF410B9DBDC00AF4E1B /* M6502.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = M6502.cxx; path = ../emucore/M6502.cxx; sourceTree = SOURCE_ROOT; };
DCECDAF510B9DBDC00AF4E1B /* M6502.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = M6502.hxx; path = ../emucore/M6502.hxx; sourceTree = SOURCE_ROOT; };
@ -946,6 +946,8 @@
2DDA34020665817D00CDD299 /* SoundSDL.cxx */,
2DDA34030665817D00CDD299 /* SoundSDL.hxx */,
DC5D1AA6102C6FC900E59AC1 /* Stack.hxx */,
DC20D6F1138EB130002A7428 /* StringList.hxx */,
DC20D6F2138EB130002A7428 /* StringParser.hxx */,
DCF467BC0F9399F500B25D7A /* Version.hxx */,
);
name = common;
@ -1041,7 +1043,6 @@
2DE2DF3A0627AE07006BEC99 /* Control.cxx */,
2DE2DF3B0627AE07006BEC99 /* Control.hxx */,
DC932D3F0F278A5200FEFEFC /* DefProps.hxx */,
DCECDAF210B9DBDC00AF4E1B /* Device.cxx */,
DCECDAF310B9DBDC00AF4E1B /* Device.hxx */,
2DE2DF3E0627AE07006BEC99 /* Driving.cxx */,
2DE2DF3F0627AE07006BEC99 /* Driving.hxx */,
@ -1189,7 +1190,6 @@
DC5D2C4F0F117CFD004D1660 /* StellaFont.hxx */,
DC5D2C500F117CFD004D1660 /* StellaLargeFont.hxx */,
DC5D2C510F117CFD004D1660 /* StellaMediumFont.hxx */,
2DDBEACF084578BF00812C11 /* StringList.hxx */,
2DEF21FA08BC033500B246B4 /* StringListWidget.cxx */,
2DEF21FB08BC033500B246B4 /* StringListWidget.hxx */,
2DDBEAD0084578BF00812C11 /* TabWidget.cxx */,
@ -1358,7 +1358,6 @@
2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */,
2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */,
2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */,
2D91741509BA90380026E9FF /* StringList.hxx in Headers */,
2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */,
2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */,
2D91741809BA90380026E9FF /* Widget.hxx in Headers */,
@ -1475,6 +1474,8 @@
DC17E80A1361FDB500397A9E /* pnginfo.h in Headers */,
DC17E80B1361FDB500397A9E /* pnglibconf.h in Headers */,
DC17E80C1361FDB500397A9E /* pngstruct.h in Headers */,
DC20D6F3138EB130002A7428 /* StringList.hxx in Headers */,
DC20D6F4138EB130002A7428 /* StringParser.hxx in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1705,7 +1706,6 @@
DCF467C40F939A1400B25D7A /* CartEFSC.cxx in Sources */,
DCF7B0DD10A762FC007A2870 /* CartF0.cxx in Sources */,
DCF7B0DF10A762FC007A2870 /* CartFA.cxx in Sources */,
DCECDAFA10B9DBDC00AF4E1B /* Device.cxx in Sources */,
DCECDAFC10B9DBDC00AF4E1B /* M6502.cxx in Sources */,
DCECDAFE10B9DBDC00AF4E1B /* NullDev.cxx in Sources */,
DCECDB0010B9DBDC00AF4E1B /* System.cxx in Sources */,

View File

@ -69,7 +69,6 @@
2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC7084578BF00812C11 /* PopUpWidget.hxx */; };
2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */; };
2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */; };
2D91741509BA90380026E9FF /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEACF084578BF00812C11 /* StringList.hxx */; };
2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */; };
2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD3084578BF00812C11 /* VideoDialog.hxx */; };
2D91741809BA90380026E9FF /* Widget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 2DDBEAD5084578BF00812C11 /* Widget.hxx */; };
@ -280,6 +279,8 @@
DC6B2BA511037FF200F199A7 /* CartDebug.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6B2BA111037FF200F199A7 /* CartDebug.hxx */; };
DC6B2BA611037FF200F199A7 /* DiStella.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC6B2BA211037FF200F199A7 /* DiStella.cxx */; };
DC6B2BA711037FF200F199A7 /* DiStella.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6B2BA311037FF200F199A7 /* DiStella.hxx */; };
DC74D6A1138D4D7E00F05C5C /* StringList.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC74D69F138D4D7E00F05C5C /* StringList.hxx */; };
DC74D6A2138D4D7E00F05C5C /* StringParser.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC74D6A0138D4D7E00F05C5C /* StringParser.hxx */; };
DC8078DB0B4BD5F3005E9305 /* DebuggerExpressions.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC8078DA0B4BD5F3005E9305 /* DebuggerExpressions.hxx */; };
DC8078E80B4BD697005E9305 /* FileSnapDialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC8078E40B4BD697005E9305 /* FileSnapDialog.cxx */; };
DC8078E90B4BD697005E9305 /* FileSnapDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC8078E50B4BD697005E9305 /* FileSnapDialog.hxx */; };
@ -543,7 +544,6 @@
2DDBEAC9084578BF00812C11 /* ProgressDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ProgressDialog.hxx; path = ../gui/ProgressDialog.hxx; sourceTree = SOURCE_ROOT; };
2DDBEACA084578BF00812C11 /* ScrollBarWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollBarWidget.cxx; path = ../gui/ScrollBarWidget.cxx; sourceTree = SOURCE_ROOT; };
2DDBEACB084578BF00812C11 /* ScrollBarWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = ScrollBarWidget.hxx; path = ../gui/ScrollBarWidget.hxx; sourceTree = SOURCE_ROOT; };
2DDBEACF084578BF00812C11 /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../gui/StringList.hxx; sourceTree = SOURCE_ROOT; };
2DDBEAD0084578BF00812C11 /* TabWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TabWidget.cxx; path = ../gui/TabWidget.cxx; sourceTree = SOURCE_ROOT; };
2DDBEAD1084578BF00812C11 /* TabWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = TabWidget.hxx; path = ../gui/TabWidget.hxx; sourceTree = SOURCE_ROOT; };
2DDBEAD2084578BF00812C11 /* VideoDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = VideoDialog.cxx; path = ../gui/VideoDialog.cxx; sourceTree = SOURCE_ROOT; };
@ -684,6 +684,8 @@
DC6B2BA111037FF200F199A7 /* CartDebug.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CartDebug.hxx; path = ../debugger/CartDebug.hxx; sourceTree = SOURCE_ROOT; };
DC6B2BA211037FF200F199A7 /* DiStella.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DiStella.cxx; path = ../debugger/DiStella.cxx; sourceTree = SOURCE_ROOT; };
DC6B2BA311037FF200F199A7 /* DiStella.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DiStella.hxx; path = ../debugger/DiStella.hxx; sourceTree = SOURCE_ROOT; };
DC74D69F138D4D7E00F05C5C /* StringList.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringList.hxx; path = ../common/StringList.hxx; sourceTree = SOURCE_ROOT; };
DC74D6A0138D4D7E00F05C5C /* StringParser.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StringParser.hxx; path = ../common/StringParser.hxx; sourceTree = SOURCE_ROOT; };
DC8078DA0B4BD5F3005E9305 /* DebuggerExpressions.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = DebuggerExpressions.hxx; path = ../debugger/DebuggerExpressions.hxx; sourceTree = SOURCE_ROOT; };
DC8078E40B4BD697005E9305 /* FileSnapDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FileSnapDialog.cxx; path = ../gui/FileSnapDialog.cxx; sourceTree = SOURCE_ROOT; };
DC8078E50B4BD697005E9305 /* FileSnapDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = FileSnapDialog.hxx; path = ../gui/FileSnapDialog.hxx; sourceTree = SOURCE_ROOT; };
@ -941,6 +943,8 @@
2DDA34020665817D00CDD299 /* SoundSDL.cxx */,
2DDA34030665817D00CDD299 /* SoundSDL.hxx */,
DC5D1AA6102C6FC900E59AC1 /* Stack.hxx */,
DC74D69F138D4D7E00F05C5C /* StringList.hxx */,
DC74D6A0138D4D7E00F05C5C /* StringParser.hxx */,
DCF467BC0F9399F500B25D7A /* Version.hxx */,
);
name = common;
@ -1183,7 +1187,6 @@
DC5D2C4F0F117CFD004D1660 /* StellaFont.hxx */,
DC5D2C500F117CFD004D1660 /* StellaLargeFont.hxx */,
DC5D2C510F117CFD004D1660 /* StellaMediumFont.hxx */,
2DDBEACF084578BF00812C11 /* StringList.hxx */,
2DEF21FA08BC033500B246B4 /* StringListWidget.cxx */,
2DEF21FB08BC033500B246B4 /* StringListWidget.hxx */,
2DDBEAD0084578BF00812C11 /* TabWidget.cxx */,
@ -1352,7 +1355,6 @@
2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */,
2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */,
2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */,
2D91741509BA90380026E9FF /* StringList.hxx in Headers */,
2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */,
2D91741709BA90380026E9FF /* VideoDialog.hxx in Headers */,
2D91741809BA90380026E9FF /* Widget.hxx in Headers */,
@ -1469,6 +1471,8 @@
DC69670C1361FD0A0036499D /* pnginfo.h in Headers */,
DC69670D1361FD0A0036499D /* pnglibconf.h in Headers */,
DC69670E1361FD0A0036499D /* pngstruct.h in Headers */,
DC74D6A1138D4D7E00F05C5C /* StringList.hxx in Headers */,
DC74D6A2138D4D7E00F05C5C /* StringParser.hxx in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};