mirror of https://github.com/stella-emu/stella.git
Some more optimizations for dirty widgets. The progress dialog now
only redraws itself when updating, instead of requiring the dialog below it to redraw as well. Related to this, adding a dialog box on top of another no longer requires a restack and redraw of other dialog boxes beneath it. Fixed some dirty update problems with dialog boxes; they weren't setting dirty rects, hence in some cases weren't being redrawn. Updated debugger to be 1024x7xx pixels, and partitions the debugger into separate 'areas'. The next step is to fill these areas, starting with moving the CpuWidget and RamWidget onto the main area (so they're always visible). git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@711 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
a18ea23d86
commit
9f58ffb471
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: FrameBufferSoft.cxx,v 1.32 2005-08-03 13:26:01 stephena Exp $
|
||||
// $Id: FrameBufferSoft.cxx,v 1.33 2005-08-04 22:59:38 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <SDL.h>
|
||||
|
@ -276,6 +276,7 @@ void FrameBufferSoft::postFrameUpdate()
|
|||
{
|
||||
// Now update all the rectangles at once
|
||||
SDL_UpdateRects(myScreen, myRectList->numRects(), myRectList->rects());
|
||||
// SDL_UpdateRect(myScreen, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Debugger.cxx,v 1.79 2005-07-30 22:08:24 urchlay Exp $
|
||||
// $Id: Debugger.cxx,v 1.80 2005-08-04 22:59:38 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "bspf.hxx"
|
||||
|
@ -893,10 +893,6 @@ void Debugger::setStartState()
|
|||
{
|
||||
// Lock the bus each time the debugger is entered, so we don't disturb anything
|
||||
mySystem->lockDataBus();
|
||||
|
||||
// FIXME - do we want this to print each time?
|
||||
// I think it was needed before because of some bugs I've fixed
|
||||
// myPrompt->printPrompt();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -936,16 +932,35 @@ GUI::Rect Debugger::getTiaBounds() const
|
|||
return r;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
GUI::Rect Debugger::getRomBounds() const
|
||||
{
|
||||
// The ROM area is the full area to the right of the tabs
|
||||
GUI::Rect dialog = getDialogBounds();
|
||||
|
||||
int x1 = dialog.right - myOSystem->consoleFont().getMaxCharWidth() * 60;
|
||||
int y1 = 0;
|
||||
int x2 = dialog.right;
|
||||
int y2 = dialog.bottom;
|
||||
GUI::Rect r(x1, y1, x2, y2);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
GUI::Rect Debugger::getStatusBounds() const
|
||||
{
|
||||
// The status area is the full area to the right of the TIA image
|
||||
GUI::Rect dialog = getDialogBounds();
|
||||
// and left of the ROM area
|
||||
GUI::Rect tia = getTiaBounds();
|
||||
GUI::Rect rom = getRomBounds();
|
||||
|
||||
int x1 = tia.right + 1;
|
||||
int y1 = 0;
|
||||
int x2 = rom.left - 1;
|
||||
int y2 = tia.bottom;
|
||||
GUI::Rect r(x1, y1, x2, y2);
|
||||
|
||||
GUI::Rect r(tia.width() + 1, 0,
|
||||
dialog.width(),
|
||||
tia.height());
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -955,10 +970,14 @@ GUI::Rect Debugger::getTabBounds() const
|
|||
// The tab area is the full area below the TIA image
|
||||
GUI::Rect dialog = getDialogBounds();
|
||||
GUI::Rect tia = getTiaBounds();
|
||||
GUI::Rect rom = getRomBounds();
|
||||
|
||||
int x1 = 0;
|
||||
int y1 = tia.bottom + 1;
|
||||
int x2 = rom.left - 1;
|
||||
int y2 = dialog.bottom;
|
||||
GUI::Rect r(x1, y1, x2, y2);
|
||||
|
||||
GUI::Rect r(0, tia.height() + 1,
|
||||
dialog.width(),
|
||||
dialog.height());
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Debugger.hxx,v 1.64 2005-08-01 22:33:12 stephena Exp $
|
||||
// $Id: Debugger.hxx,v 1.65 2005-08-04 22:59:38 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef DEBUGGER_HXX
|
||||
|
@ -46,16 +46,16 @@ typedef ListFile::const_iterator ListIter;
|
|||
|
||||
typedef map<string,Expression*> FunctionMap;
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
enum {
|
||||
kDebuggerWidth = 1023,
|
||||
kDebuggerLineHeight = 12, // based on the height of the console font
|
||||
kDebuggerLineHeight = 15, // based on the height of the console font
|
||||
kDebuggerLines = 35,
|
||||
};
|
||||
#else
|
||||
enum {
|
||||
kDebuggerWidth = 639,
|
||||
kDebuggerLineHeight = 12, // based on the height of the console font
|
||||
kDebuggerLineHeight = 15, // based on the height of the console font
|
||||
kDebuggerLines = 20,
|
||||
};
|
||||
#endif
|
||||
|
@ -82,7 +82,7 @@ typedef uInt16 (Debugger::*DEBUGGER_WORD_METHOD)();
|
|||
for all debugging operations in Stella (parser, 6502 debugger, etc).
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: Debugger.hxx,v 1.64 2005-08-01 22:33:12 stephena Exp $
|
||||
@version $Id: Debugger.hxx,v 1.65 2005-08-04 22:59:38 stephena Exp $
|
||||
*/
|
||||
class Debugger : public DialogContainer
|
||||
{
|
||||
|
@ -286,8 +286,9 @@ class Debugger : public DialogContainer
|
|||
(takes mediasource into account)
|
||||
*/
|
||||
GUI::Rect getDialogBounds() const;
|
||||
GUI::Rect getStatusBounds() const;
|
||||
GUI::Rect getTiaBounds() const;
|
||||
GUI::Rect getRomBounds() const;
|
||||
GUI::Rect getStatusBounds() const;
|
||||
GUI::Rect getTabBounds() const;
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: DebuggerDialog.cxx,v 1.29 2005-08-03 13:26:02 stephena Exp $
|
||||
// $Id: DebuggerDialog.cxx,v 1.30 2005-08-04 22:59:38 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -51,6 +51,7 @@ DebuggerDialog::DebuggerDialog(OSystem* osystem, DialogContainer* parent,
|
|||
addTiaArea();
|
||||
addTabArea();
|
||||
addStatusArea();
|
||||
addRomArea();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -61,7 +62,6 @@ DebuggerDialog::~DebuggerDialog()
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void DebuggerDialog::loadConfig()
|
||||
{
|
||||
cerr << "DebuggerDialog::loadConfig()\n";
|
||||
myTab->loadConfig();
|
||||
myTiaInfo->loadConfig();
|
||||
myTiaOutput->loadConfig();
|
||||
|
@ -130,31 +130,29 @@ void DebuggerDialog::addTiaArea()
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void DebuggerDialog::addTabArea()
|
||||
{
|
||||
const int vBorder = 4;
|
||||
const int vWidth = _w - kButtonWidth - 20;
|
||||
|
||||
GUI::Rect r = instance()->debugger().getTabBounds();
|
||||
|
||||
const int vBorder = 4;
|
||||
const int widWidth = r.width() - vBorder;
|
||||
const int widHeight = r.height() - 25; // FIXME - magic number/font height
|
||||
|
||||
// The tab widget
|
||||
myTab = new TabWidget(this, r.left, r.top + vBorder, vWidth,
|
||||
r.height() - vBorder);
|
||||
myTab = new TabWidget(this, r.left, r.top + vBorder,
|
||||
r.width(), r.height() - vBorder);
|
||||
|
||||
// 1) The Prompt/console tab
|
||||
myTab->addTab("Prompt");
|
||||
myPrompt = new PromptWidget(myTab, 2, 2, vWidth - vBorder,
|
||||
r.height() - 25);
|
||||
myPrompt = new PromptWidget(myTab, 2, 2, widWidth, widHeight);
|
||||
myTab->setParentWidget(0, myPrompt, myPrompt);
|
||||
|
||||
// 2) The CPU tab
|
||||
myTab->addTab("CPU");
|
||||
CpuWidget* cpu = new CpuWidget(myTab, 2, 2, vWidth - vBorder,
|
||||
r.height() - 25);
|
||||
CpuWidget* cpu = new CpuWidget(myTab, 2, 2, widWidth, widHeight);
|
||||
myTab->setParentWidget(1, cpu, cpu->activeWidget());
|
||||
|
||||
// 3) The RAM tab (part of RIOT)
|
||||
myTab->addTab("RAM");
|
||||
RamWidget* ram = new RamWidget(myTab, 2, 2, vWidth - vBorder,
|
||||
r.height() - 25);
|
||||
RamWidget* ram = new RamWidget(myTab, 2, 2, widWidth, widHeight);
|
||||
myTab->setParentWidget(2, ram, ram->activeWidget());
|
||||
|
||||
// 4) The input/output tab (part of RIOT)
|
||||
|
@ -163,8 +161,7 @@ void DebuggerDialog::addTabArea()
|
|||
|
||||
// 5) The TIA tab
|
||||
myTab->addTab("TIA");
|
||||
TiaWidget* tia = new TiaWidget(myTab, 2, 2, vWidth - vBorder,
|
||||
r.height() - 25);
|
||||
TiaWidget* tia = new TiaWidget(myTab, 2, 2, widWidth, widHeight);
|
||||
myTab->setParentWidget(4, tia, tia->activeWidget());
|
||||
|
||||
|
||||
|
@ -174,24 +171,11 @@ void DebuggerDialog::addTabArea()
|
|||
|
||||
// 7) The Cheat tab
|
||||
myTab->addTab("Cheat");
|
||||
CheatWidget* cheat = new CheatWidget(myTab, 2, 2,
|
||||
vWidth - vBorder, r.height() - 25);
|
||||
CheatWidget* cheat = new CheatWidget(myTab, 2, 2, widWidth, widHeight);
|
||||
myTab->setParentWidget(6, cheat, cheat->activeWidget());
|
||||
|
||||
// Set active tab to prompt
|
||||
myTab->setActiveTab(0);
|
||||
|
||||
// Add some buttons that are always shown, no matter which tab we're in
|
||||
int yoff = r.top + vBorder + kTabHeight + 5;
|
||||
addButton(vWidth + 10, yoff, "Step", kDDStepCmd, 0);
|
||||
yoff += 22;
|
||||
addButton(vWidth + 10, yoff, "Trace", kDDTraceCmd, 0);
|
||||
yoff += 22;
|
||||
addButton(vWidth + 10, yoff, "Scan +1", kDDSAdvCmd, 0);
|
||||
yoff += 22;
|
||||
addButton(vWidth + 10, yoff, "Frame +1", kDDAdvCmd, 0);
|
||||
|
||||
addButton(vWidth + 10, r.bottom - 22 - 10, "Exit", kDDExitCmd, 0);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -201,6 +185,26 @@ void DebuggerDialog::addStatusArea()
|
|||
myTiaInfo = new TiaInfoWidget(this, r.left, r.top, r.width(), r.height());
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void DebuggerDialog::addRomArea()
|
||||
{
|
||||
GUI::Rect r = instance()->debugger().getRomBounds();
|
||||
|
||||
// Add some buttons that are always shown, no matter which tab we're in
|
||||
// FIXME - these positions will definitely change
|
||||
int xoff = r.right - 100;
|
||||
int yoff = r.bottom - 150;
|
||||
addButton(xoff, yoff, "Step", kDDStepCmd, 0);
|
||||
yoff += 22;
|
||||
addButton(xoff, yoff, "Trace", kDDTraceCmd, 0);
|
||||
yoff += 22;
|
||||
addButton(xoff, yoff, "Scan +1", kDDSAdvCmd, 0);
|
||||
yoff += 22;
|
||||
addButton(xoff, yoff, "Frame +1", kDDAdvCmd, 0);
|
||||
|
||||
addButton(xoff, r.bottom - 22 - 10, "Exit", kDDExitCmd, 0);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void DebuggerDialog::doStep()
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: DebuggerDialog.hxx,v 1.14 2005-07-21 19:30:16 stephena Exp $
|
||||
// $Id: DebuggerDialog.hxx,v 1.15 2005-08-04 22:59:54 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -58,6 +58,7 @@ class DebuggerDialog : public Dialog
|
|||
void addTiaArea();
|
||||
void addTabArea();
|
||||
void addStatusArea();
|
||||
void addRomArea();
|
||||
|
||||
void doStep();
|
||||
void doTrace();
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Dialog.cxx,v 1.23 2005-08-03 13:26:02 stephena Exp $
|
||||
// $Id: Dialog.cxx,v 1.24 2005-08-04 22:59:54 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -135,6 +135,9 @@ void Dialog::drawDialog()
|
|||
Widget* w = _firstWidget;
|
||||
Widget::setDirtyInChain(w);
|
||||
|
||||
// Tell the framebuffer this area is dirty
|
||||
fb.addDirtyRect(_x, _y, _w, _h);
|
||||
|
||||
_dirty = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: DialogContainer.cxx,v 1.13 2005-08-01 22:33:15 stephena Exp $
|
||||
// $Id: DialogContainer.cxx,v 1.14 2005-08-04 22:59:54 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "OSystem.hxx"
|
||||
|
@ -93,8 +93,8 @@ void DialogContainer::draw(bool fullrefresh)
|
|||
void DialogContainer::addDialog(Dialog* d)
|
||||
{
|
||||
myDialogStack.push(d);
|
||||
myOSystem->frameBuffer().refreshTIA();
|
||||
myOSystem->frameBuffer().refreshOverlay();
|
||||
d->open();
|
||||
d->setDirty(); // Next update() will take care of drawing
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -103,6 +103,9 @@ void DialogContainer::removeDialog()
|
|||
if(!myDialogStack.empty())
|
||||
{
|
||||
myDialogStack.pop();
|
||||
|
||||
// We need to redraw all underlying dialogs, since we don't know
|
||||
// which ones were obscured
|
||||
myOSystem->frameBuffer().refreshTIA();
|
||||
myOSystem->frameBuffer().refreshOverlay();
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: InputTextDialog.cxx,v 1.1 2005-08-04 16:31:24 stephena Exp $
|
||||
// $Id: InputTextDialog.cxx,v 1.2 2005-08-04 22:59:54 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -46,9 +46,8 @@ InputTextDialog::InputTextDialog(GuiObject* boss, const GUI::Font& font)
|
|||
// Calculate real dimensions
|
||||
_w = fontWidth * 30;
|
||||
_h = lineHeight * 6;
|
||||
// FIXME
|
||||
_x = 100;//(boss->getAbsX() - _w) / 2;
|
||||
_y = 400;//(boss->getAbsY() - _h) / 2;
|
||||
_x = (boss->getWidth() - _w) / 2;
|
||||
_y = (boss->getHeight() - _h) / 2;
|
||||
|
||||
xpos = 10; ypos = lineHeight;
|
||||
int lwidth = font.getStringWidth("Enter Data:");
|
||||
|
@ -63,6 +62,7 @@ InputTextDialog::InputTextDialog(GuiObject* boss, const GUI::Font& font)
|
|||
_w - xpos - 10, lineHeight, "");
|
||||
_input->setFont(font);
|
||||
_input->clearFlags(WIDGET_TAB_NAVIGATE);
|
||||
_input->receivedFocus();
|
||||
|
||||
xpos = 10; ypos = 2*lineHeight;
|
||||
_title = new StaticTextWidget(this, xpos, ypos, _w - 2*xpos, fontHeight,
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: LauncherDialog.cxx,v 1.25 2005-07-05 15:25:44 stephena Exp $
|
||||
// $Id: LauncherDialog.cxx,v 1.26 2005-08-04 22:59:54 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -52,11 +52,16 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
|
|||
myGameList(NULL),
|
||||
myProgressBar(NULL)
|
||||
{
|
||||
const GUI::Font& font = instance()->font();
|
||||
const int fontWidth = font.getMaxCharWidth(),
|
||||
fontHeight = font.getFontHeight(),
|
||||
lineHeight = font.getLineHeight();
|
||||
|
||||
// Show game name
|
||||
new StaticTextWidget(this, 10, 8, 200, kLineHeight,
|
||||
new StaticTextWidget(this, 10, 8, 200, fontHeight,
|
||||
"Select a game from the list ...", kTextAlignLeft);
|
||||
|
||||
myRomCount = new StaticTextWidget(this, _w - 100, 8, 90, kLineHeight,
|
||||
myRomCount = new StaticTextWidget(this, _w - 100, 8, 90, fontHeight,
|
||||
"", kTextAlignRight);
|
||||
|
||||
// Add four buttons at the bottom
|
||||
|
@ -93,8 +98,8 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
|
|||
myList->clearFlags(WIDGET_TAB_NAVIGATE);
|
||||
|
||||
// Add note textwidget to show any notes for the currently selected ROM
|
||||
new StaticTextWidget(this, 20, _h - 43, 30, 16, "Note:", kTextAlignLeft);
|
||||
myNote = new StaticTextWidget(this, 50, _h - 43, w - 70, 16,
|
||||
new StaticTextWidget(this, 20, _h - 43, 30, fontHeight, "Note:", kTextAlignLeft);
|
||||
myNote = new StaticTextWidget(this, 50, _h - 43, w - 70, fontHeight,
|
||||
"", kTextAlignLeft);
|
||||
|
||||
// Create the launcher options dialog, where you can change ROM
|
||||
|
@ -224,13 +229,8 @@ void LauncherDialog::loadListFromDisk()
|
|||
|
||||
// Create a progress dialog box to show the progress of processing
|
||||
// the ROMs, since this is usually a time-consuming operation
|
||||
string message = "Loading ROM's from disk ...";
|
||||
int w = instance()->font().getStringWidth(message) + 20,
|
||||
h = kLineHeight * 4;
|
||||
int x = (_w - w) / 2,
|
||||
y = (_h - h) / 2;
|
||||
ProgressDialog progress(instance(), parent(), x, y, w, h);
|
||||
progress.setMessage(message);
|
||||
ProgressDialog progress(this, instance()->font(),
|
||||
"Loading ROM's from disk ...");
|
||||
progress.setRange(0, files.size() - 1, 10);
|
||||
|
||||
// Create a entry for the GameList for each file
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: ProgressDialog.cxx,v 1.4 2005-08-01 22:33:15 stephena Exp $
|
||||
// $Id: ProgressDialog.cxx,v 1.5 2005-08-04 22:59:54 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -29,24 +29,41 @@
|
|||
#include "bspf.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
ProgressDialog::ProgressDialog(OSystem* osystem, DialogContainer* parent,
|
||||
int x, int y, int w, int h)
|
||||
: Dialog(osystem, parent, x, y, w, h),
|
||||
ProgressDialog::ProgressDialog(GuiObject* boss, const GUI::Font& font,
|
||||
const string& message)
|
||||
: Dialog(boss->instance(), boss->parent(), 0, 0, 16, 16),
|
||||
myMessage(NULL),
|
||||
mySlider(NULL),
|
||||
myStart(0),
|
||||
myFinish(0),
|
||||
myStep(0)
|
||||
{
|
||||
myMessage = new StaticTextWidget(this, 0, 10, w, kLineHeight, "", kTextAlignCenter);
|
||||
const int fontWidth = font.getMaxCharWidth(),
|
||||
fontHeight = font.getFontHeight(),
|
||||
lineHeight = font.getLineHeight();
|
||||
int xpos, ypos, lwidth;
|
||||
|
||||
// Calculate real dimensions
|
||||
lwidth = font.getStringWidth(message);
|
||||
_w = lwidth + 2 * fontWidth;
|
||||
_h = lineHeight * 5;
|
||||
_x = (boss->getWidth() - _w) / 2;
|
||||
_y = (boss->getHeight() - _h) / 2;
|
||||
|
||||
xpos = fontWidth; ypos = lineHeight;
|
||||
myMessage = new StaticTextWidget(this, xpos, ypos, lwidth, fontHeight,
|
||||
message, kTextAlignCenter);
|
||||
myMessage->setColor(kTextColorEm);
|
||||
mySlider = new SliderWidget(this, 10, 15 + kLineHeight, w - 20, kLineHeight, "", 0, 0);
|
||||
|
||||
xpos = fontWidth; ypos += 2 * lineHeight;
|
||||
mySlider = new SliderWidget(this, xpos, ypos, lwidth, lineHeight, "", 0, 0);
|
||||
mySlider->setMinValue(100);
|
||||
mySlider->setMaxValue(200);
|
||||
mySlider->setValue(100); // Prevents the slider from initially drawing
|
||||
// across the entire screen for a split-second
|
||||
|
||||
parent->addDialog(this);
|
||||
parent()->addDialog(this);
|
||||
instance()->frameBuffer().update();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -85,6 +102,6 @@ void ProgressDialog::setProgress(int progress)
|
|||
{
|
||||
myCurrentStep += myStep;
|
||||
mySlider->setValue(p);
|
||||
instance()->frameBuffer().refreshOverlay(true);
|
||||
instance()->frameBuffer().update();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: ProgressDialog.hxx,v 1.1 2005-05-17 18:42:23 stephena Exp $
|
||||
// $Id: ProgressDialog.hxx,v 1.2 2005-08-04 22:59:54 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -22,19 +22,18 @@
|
|||
#ifndef PROGRESS_DIALOG_HXX
|
||||
#define PROGRESS_DIALOG_HXX
|
||||
|
||||
class DialogContainer;
|
||||
class StaticTextWidget;
|
||||
class SliderWidget;
|
||||
|
||||
#include "OSystem.hxx"
|
||||
#include "GuiObject.hxx"
|
||||
#include "bspf.hxx"
|
||||
|
||||
class ProgressDialog : public Dialog
|
||||
{
|
||||
public:
|
||||
ProgressDialog(OSystem* osystem, DialogContainer* parent,
|
||||
int x, int y, int w, int h);
|
||||
~ProgressDialog();
|
||||
ProgressDialog(GuiObject* boss, const GUI::Font& font,
|
||||
const string& message);
|
||||
virtual ~ProgressDialog();
|
||||
|
||||
void setMessage(const string& message);
|
||||
void setRange(int begin, int end, int step);
|
||||
|
|
Loading…
Reference in New Issue