mirror of https://github.com/stella-emu/stella.git
117 lines
3.5 KiB
C++
117 lines
3.5 KiB
C++
//============================================================================
|
|
//
|
|
// 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-2016 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 "Widget.hxx"
|
|
#include "Dialog.hxx"
|
|
#include "Debugger.hxx"
|
|
#include "FrameBuffer.hxx"
|
|
#include "ToggleBitWidget.hxx"
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
ToggleBitWidget::ToggleBitWidget(GuiObject* boss, const GUI::Font& font,
|
|
int x, int y, int cols, int rows, int colchars)
|
|
: ToggleWidget(boss, font, x, y, cols, rows)
|
|
{
|
|
_rowHeight = font.getLineHeight();
|
|
_colWidth = colchars * font.getMaxCharWidth() + 8;
|
|
|
|
// Make sure all lists contain some default values
|
|
int size = _rows * _cols;
|
|
while(size--)
|
|
{
|
|
_offList.push_back("0");
|
|
_onList.push_back("1");
|
|
_stateList.push_back(false);
|
|
_changedList.push_back(false);
|
|
}
|
|
|
|
// Calculate real dimensions
|
|
_w = _colWidth * cols + 1;
|
|
_h = _rowHeight * rows + 1;
|
|
}
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
void ToggleBitWidget::setList(const StringList& off, const StringList& on)
|
|
{
|
|
_offList.clear();
|
|
_offList = off;
|
|
_onList.clear();
|
|
_onList = on;
|
|
|
|
assert(int(_offList.size()) == _rows * _cols);
|
|
}
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
void ToggleBitWidget::setState(const BoolArray& state, const BoolArray& changed)
|
|
{
|
|
_stateList.clear();
|
|
_stateList = state;
|
|
_changedList.clear();
|
|
_changedList = changed;
|
|
|
|
setDirty();
|
|
}
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
void ToggleBitWidget::drawWidget(bool hilite)
|
|
{
|
|
//cerr << "ToggleBitWidget::drawWidget\n";
|
|
FBSurface& s = dialog().surface();
|
|
int row, col;
|
|
string buffer;
|
|
|
|
// Draw the internal grid and labels
|
|
int linewidth = _cols * _colWidth;
|
|
for (row = 0; row <= _rows; row++)
|
|
s.hLine(_x, _y + (row * _rowHeight), _x + linewidth, kColor);
|
|
int lineheight = _rows * _rowHeight;
|
|
for (col = 0; col <= _cols; col++)
|
|
s.vLine(_x + (col * _colWidth), _y, _y + lineheight, kColor);
|
|
|
|
// Draw the list items
|
|
for (row = 0; row < _rows; row++)
|
|
{
|
|
for (col = 0; col < _cols; col++)
|
|
{
|
|
int x = _x + 4 + (col * _colWidth);
|
|
int y = _y + 2 + (row * _rowHeight);
|
|
int pos = row*_cols + col;
|
|
|
|
// Draw the selected item inverted, on a highlighted background.
|
|
if (_currentRow == row && _currentCol == col && _hasFocus)
|
|
s.fillRect(x - 4, y - 2, _colWidth+1, _rowHeight+1, kTextColorHi);
|
|
|
|
if(_stateList[pos])
|
|
buffer = _onList[pos];
|
|
else
|
|
buffer = _offList[pos];
|
|
|
|
// Highlight changes
|
|
if(_changedList[pos])
|
|
{
|
|
s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, kDbgChangedColor);
|
|
s.drawString(_font, buffer, x, y, _colWidth, kDbgChangedTextColor);
|
|
}
|
|
else
|
|
s.drawString(_font, buffer, x, y, _colWidth, kTextColor);
|
|
}
|
|
}
|
|
}
|