~ubuntu-branches/debian/squeeze/stella/squeeze

« back to all changes in this revision

Viewing changes to src/gui/CommandDialog.cxx

  • Committer: Bazaar Package Importer
  • Author(s): Stephen Kitt
  • Date: 2010-07-12 23:49:36 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20100712234936-juawrr3etzhr2qpv
Tags: 3.1.2-1
* New maintainer (closes: #532039).
* New upstream version (closes: #461121):
  - includes launcher (closes: #396058).
* Fix the reference to the X Window System in the description (closes:
  #411815).
* Move to main, DFSG-free ROMs are available (see README.Debian).
* Enhance the package description.
* Drop the libslang2-dev dependency (closes: #560274).
* Remove the Encoding entry from stella.desktop.
* Avoid ignoring errors when cleaning.
* Add ${misc:Depends} to the package dependencies.
* Provide a doc-base file to install the documentation using doc-base.
* Switch to debhelper 7 with a simplified rules file.
* Use autotools-dev to provide updated configuration files.
* Update to Standards-Version 3.9.0:
  - Move to menu section Applications/Emulators.
  - Move the homepage declaration.
* Re-write the manpage.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
//  SS  SS   tt   ee      ll   ll  aa  aa
9
9
//   SSSS     ttt  eeeee llll llll  aaaaa
10
10
//
11
 
// Copyright (c) 1995-2008 by Bradford W. Mott and the Stella team
 
11
// Copyright (c) 1995-2010 by Bradford W. Mott, Stephen Anthony
 
12
// and the Stella Team
12
13
//
13
 
// See the file "license" for information on usage and redistribution of
 
14
// See the file "License.txt" for information on usage and redistribution of
14
15
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
15
16
//
16
 
// $Id: CommandDialog.cxx,v 1.19 2008/05/17 15:16:45 stephena Exp $
 
17
// $Id: CommandDialog.cxx 2001 2010-04-10 21:37:23Z stephena $
17
18
//
18
19
//   Based on code from ScummVM - Scumm Interpreter
19
20
//   Copyright (C) 2002-2004 The ScummVM project
28
29
#include "Widget.hxx"
29
30
#include "CommandDialog.hxx"
30
31
 
 
32
#define addCDButton(label, cmd) \
 
33
  new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, label, cmd); xoffset += buttonWidth + 6
 
34
 
31
35
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
32
36
CommandDialog::CommandDialog(OSystem* osystem, DialogContainer* parent)
33
37
  : Dialog(osystem, parent, 0, 0, 16, 16),
34
38
    mySelectedItem(0)
35
39
{
36
 
  const GUI::Font& font = osystem->font();
37
 
  int buttonWidth  = 65,
38
 
      buttonHeight = 18,
39
 
      xoffset = 5,
40
 
      yoffset = 5,
41
 
      lwidth  = buttonWidth + 5;
 
40
  const GUI::Font& font = instance().font();
 
41
  const int buttonWidth = font.getStringWidth("Right Diff B") + 20,
 
42
            buttonHeight = font.getLineHeight() + 6,
 
43
            rowHeight = font.getLineHeight() + 10;
42
44
 
43
45
  // Set real dimensions
44
 
  _w = 4 * (lwidth) + 5;
45
 
  _h = 4 * (buttonHeight+3) + 7;
 
46
  _w = 3 * (buttonWidth + 5) + 20;
 
47
  _h = 6 * rowHeight + 15;
46
48
 
47
49
  WidgetArray wid;
48
 
  ButtonWidget* b;
49
 
 
50
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
51
 
                       "Select", kSelectCmd);
52
 
  wid.push_back(b);
53
 
  xoffset += lwidth;
54
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
55
 
                       "Reset", kResetCmd);
56
 
  wid.push_back(b);
57
 
  xoffset += lwidth;
58
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
59
 
                       "Color TV", kColorCmd);
60
 
  wid.push_back(b);
61
 
  xoffset += lwidth;
62
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
63
 
                       "B/W TV", kBWCmd);
64
 
  wid.push_back(b);
65
 
 
66
 
  xoffset = 5;  yoffset += buttonHeight + 3;
67
 
 
68
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
69
 
                       "Left Diff A", kLeftDiffACmd);
70
 
  wid.push_back(b);
71
 
  xoffset += lwidth;
72
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
73
 
                       "Left Diff B", kLeftDiffBCmd);
74
 
  wid.push_back(b);
75
 
  xoffset += lwidth;
76
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
77
 
                       "Right Diff A", kRightDiffACmd);
78
 
  wid.push_back(b);
79
 
  xoffset += lwidth;
80
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
81
 
                       "Right Diff B", kRightDiffBCmd);
82
 
  wid.push_back(b);
83
 
 
84
 
  xoffset = 5;  yoffset += buttonHeight + 3;
85
 
 
86
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
87
 
                       "Save State", kSaveStateCmd);
88
 
  wid.push_back(b);
89
 
  xoffset += lwidth;
90
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
91
 
                       "State Slot", kStateSlotCmd);
92
 
  wid.push_back(b);
93
 
  xoffset += lwidth;
94
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
95
 
                       "Load State", kLoadStateCmd);
96
 
  wid.push_back(b);
97
 
  xoffset += lwidth;
98
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
99
 
                       "Snapshot", kSnapshotCmd);
100
 
  wid.push_back(b);
101
 
 
102
 
  xoffset = 5;  yoffset += buttonHeight + 3;
103
 
 
104
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
105
 
                       "NTSC/PAL", kFormatCmd);
106
 
  wid.push_back(b);
107
 
  xoffset += lwidth;
108
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
109
 
                       "Palette", kPaletteCmd);
110
 
  wid.push_back(b);
111
 
  xoffset += lwidth;
112
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
113
 
                       "Reload ROM", kReloadRomCmd);
114
 
  wid.push_back(b);
115
 
  xoffset += lwidth;
116
 
  b = new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight,
117
 
                       "Exit Game", kExitCmd);
118
 
  wid.push_back(b);
 
50
  ButtonWidget* b[16];
 
51
 
 
52
  // Row 1
 
53
  int xoffset = 10, yoffset = 10;
 
54
  b[0] = addCDButton("Select", kSelectCmd);
 
55
  b[4] = addCDButton("Left Diff A", kLeftDiffACmd);
 
56
  b[8] = addCDButton("Save State", kSaveStateCmd);
 
57
 
 
58
  // Row 2
 
59
  xoffset = 10;  yoffset += buttonHeight + 3;
 
60
  b[1] = addCDButton("Reset", kResetCmd);
 
61
  b[5] = addCDButton("Left Diff B", kLeftDiffBCmd);
 
62
  b[9] = addCDButton("State Slot", kStateSlotCmd);
 
63
 
 
64
  // Row 3
 
65
  xoffset = 10;  yoffset += buttonHeight + 3;
 
66
  b[2]  = addCDButton("Color TV", kColorCmd);
 
67
  b[6]  = addCDButton("Right Diff A", kRightDiffACmd);
 
68
  b[10] = addCDButton("Load State", kLoadStateCmd);
 
69
 
 
70
  // Row 4
 
71
  xoffset = 10;  yoffset += buttonHeight + 3;
 
72
  b[3]  = addCDButton("B/W TV", kBWCmd);
 
73
  b[7]  = addCDButton("Right Diff B", kRightDiffBCmd);
 
74
  b[11] = addCDButton("Snapshot", kSnapshotCmd);
 
75
 
 
76
  // Row 5
 
77
  xoffset = 10;  yoffset += buttonHeight + 3;
 
78
  b[12] = addCDButton("NTSC/PAL", kFormatCmd);
 
79
  b[13] = addCDButton("Palette", kPaletteCmd);
 
80
  b[14] = addCDButton("Reload ROM", kReloadRomCmd);
 
81
 
 
82
  // Row 6
 
83
  xoffset = 10 + buttonWidth + 6;  yoffset += buttonHeight + 3;
 
84
  b[15] = addCDButton("Exit Game", kExitCmd);
 
85
 
 
86
  for(uInt8 i = 0; i < 16; ++i)
 
87
    wid.push_back(b[i]);
119
88
 
120
89
  addToFocusList(wid);
121
90
}
129
98
void CommandDialog::handleCommand(CommandSender* sender, int cmd,
130
99
                                  int data, int id)
131
100
{
 
101
  // TODO - fix the logic here; it doesn't seem it needs to be this complex
132
102
  bool consoleCmd = false, stateCmd = false;
133
103
  Event::Type event = Event::NoType;
134
104
 
176
146
 
177
147
    case kSaveStateCmd:
178
148
      event = Event::SaveState;
179
 
      stateCmd = true;
 
149
      consoleCmd = true;
180
150
      break;
181
151
 
182
152
    case kStateSlotCmd:
186
156
 
187
157
    case kLoadStateCmd:
188
158
      event = Event::LoadState;
189
 
      stateCmd = true;
 
159
      consoleCmd = true;
190
160
      break;
191
161
 
192
162
    case kSnapshotCmd:
193
 
      instance()->eventHandler().leaveMenuMode();
194
 
      instance()->eventHandler().refreshDisplay(true);
195
 
      instance()->eventHandler().handleEvent(Event::TakeSnapshot, 1);
 
163
      instance().eventHandler().leaveMenuMode();
 
164
      instance().frameBuffer().refresh();
 
165
      instance().eventHandler().handleEvent(Event::TakeSnapshot, 1);
196
166
      break;
197
167
 
198
168
    case kFormatCmd:
199
 
      instance()->eventHandler().leaveMenuMode();
200
 
      instance()->console().toggleFormat();
 
169
      instance().eventHandler().leaveMenuMode();
 
170
      instance().console().toggleFormat();
201
171
      break;
202
172
 
203
173
    case kPaletteCmd:
204
 
      instance()->eventHandler().leaveMenuMode();
205
 
      instance()->console().togglePalette();
 
174
      instance().eventHandler().leaveMenuMode();
 
175
      instance().console().togglePalette();
206
176
      break;
207
177
 
208
178
    case kReloadRomCmd:
209
 
      instance()->eventHandler().leaveMenuMode();
210
 
      instance()->deleteConsole();
211
 
      instance()->createConsole();
 
179
      instance().eventHandler().leaveMenuMode();
 
180
      instance().deleteConsole();
 
181
      instance().createConsole();
212
182
      break;
213
183
 
214
184
    case kExitCmd:
215
 
      instance()->eventHandler().handleEvent(Event::LauncherMode, 1);
 
185
      instance().eventHandler().handleEvent(Event::LauncherMode, 1);
216
186
      break;
217
187
  }
218
188
 
220
190
  // State commands require you to exit the menu manually
221
191
  if(consoleCmd)
222
192
  {
223
 
    instance()->eventHandler().leaveMenuMode();
224
 
    instance()->eventHandler().handleEvent(event, 1);
225
 
    instance()->console().switches().update();
226
 
    instance()->console().mediaSource().update();
227
 
    instance()->eventHandler().handleEvent(event, 0);
 
193
    instance().eventHandler().leaveMenuMode();
 
194
    instance().eventHandler().handleEvent(event, 1);
 
195
    instance().console().switches().update();
 
196
    instance().console().tia().update();
 
197
    instance().eventHandler().handleEvent(event, 0);
 
198
    instance().frameBuffer().refresh();
228
199
  }
229
200
  else if(stateCmd)
230
201
  {
231
 
    instance()->eventHandler().handleEvent(event, 1);
 
202
    instance().eventHandler().handleEvent(event, 1);
232
203
  }
233
204
}