mirror of https://github.com/stella-emu/stella.git
Event remapping/erasing now works! I just have to make the
EventMappingDialog interface a little more user friendly by enabling PageUp/Down and Up/Down keys to scroll the list. Then, it's on to the MiscDialog stuff. And later, after a little more code cleanup, some serious work ROM launcher. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@393 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
04261c129d
commit
98ff3f1d8e
|
@ -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: EventHandler.cxx,v 1.42 2005-04-05 00:40:54 stephena Exp $
|
||||
// $Id: EventHandler.cxx,v 1.43 2005-04-06 23:47:06 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -587,21 +587,6 @@ void EventHandler::setActionMappings()
|
|||
if(key != "")
|
||||
ourActionList[i].key = key;
|
||||
}
|
||||
|
||||
/* FIXME - add this to addXXXBinding and deleteBinding ...
|
||||
// Save the new bindings
|
||||
ostringstream keybuf, joybuf;
|
||||
|
||||
// Iterate through the keymap table and create a colon-separated list
|
||||
for(uInt32 i = 0; i < StellaEvent::LastKCODE; ++i)
|
||||
keybuf << myKeyTable[i] << ":";
|
||||
myOSystem->settings().setString("keymap", keybuf.str());
|
||||
|
||||
// Iterate through the joymap table and create a colon-separated list
|
||||
for(uInt32 i = 0; i < StellaEvent::LastJSTICK*StellaEvent::LastJCODE; ++i)
|
||||
joybuf << myJoyTable[i] << ":";
|
||||
myOSystem->settings().setString("joymap", joybuf.str());
|
||||
*/
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -655,9 +640,61 @@ void EventHandler::setJoymap()
|
|||
*/
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::addKeyMapping(Event::Type event, uInt16 key)
|
||||
{
|
||||
myKeyTable[key] = event;
|
||||
|
||||
setActionMappings();
|
||||
saveMappings();
|
||||
}
|
||||
|
||||
/* FIXME
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::addJoyMapping(Event::Type event,
|
||||
StellaEvent::JoyStick stick, StellaEvent::JoyCode code)
|
||||
{
|
||||
myJoyTable[stick * StellaEvent::LastJCODE + code] = event;
|
||||
|
||||
setActionMappings();
|
||||
saveMappings();
|
||||
}
|
||||
*/
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::eraseMapping(Event::Type event)
|
||||
{
|
||||
// Erase the KeyEvent arrays
|
||||
for(Int32 i = 0; i < SDLK_LAST; ++i)
|
||||
if(myKeyTable[i] == event)
|
||||
myKeyTable[i] = Event::NoType;
|
||||
|
||||
// Erase the JoyEvent array
|
||||
for(Int32 i = 0; i < StellaEvent::LastJSTICK*StellaEvent::LastJCODE; ++i)
|
||||
if(myJoyTable[i] == event)
|
||||
myJoyTable[i] = Event::NoType;
|
||||
|
||||
setActionMappings();
|
||||
saveMappings();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::setDefaultMapping()
|
||||
{
|
||||
setDefaultKeymap();
|
||||
setDefaultJoymap();
|
||||
|
||||
setActionMappings();
|
||||
saveMappings();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::setDefaultKeymap()
|
||||
{
|
||||
// Erase all mappings
|
||||
for(Int32 i = 0; i < SDLK_LAST; ++i)
|
||||
myKeyTable[i] = Event::NoType;
|
||||
|
||||
myKeyTable[ SDLK_1 ] = Event::KeyboardZero1;
|
||||
myKeyTable[ SDLK_2 ] = Event::KeyboardZero2;
|
||||
myKeyTable[ SDLK_3 ] = Event::KeyboardZero3;
|
||||
|
@ -725,16 +762,16 @@ void EventHandler::setDefaultKeymap()
|
|||
myKeyTable[ SDLK_ESCAPE ] = Event::ExitGame;
|
||||
#endif
|
||||
|
||||
// Iterate through the keymap table and create a colon-separated list
|
||||
ostringstream keybuf;
|
||||
for(uInt32 i = 0; i < SDLK_LAST; ++i)
|
||||
keybuf << myKeyTable[i] << ":";
|
||||
myOSystem->settings().setString("keymap", keybuf.str());
|
||||
saveMappings();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::setDefaultJoymap()
|
||||
{
|
||||
// Erase all mappings
|
||||
for(Int32 i = 0; i < StellaEvent::LastJSTICK*StellaEvent::LastJCODE; ++i)
|
||||
myJoyTable[i] = Event::NoType;
|
||||
|
||||
// Left joystick
|
||||
uInt32 i = StellaEvent::JSTICK_0 * StellaEvent::LastJCODE;
|
||||
myJoyTable[i + StellaEvent::JAXIS_UP] = Event::JoystickZeroUp;
|
||||
|
@ -750,6 +787,24 @@ void EventHandler::setDefaultJoymap()
|
|||
myJoyTable[i + StellaEvent::JAXIS_LEFT] = Event::JoystickOneLeft;
|
||||
myJoyTable[i + StellaEvent::JAXIS_RIGHT] = Event::JoystickOneRight;
|
||||
myJoyTable[i + StellaEvent::JBUTTON_0] = Event::JoystickOneFire;
|
||||
|
||||
saveMappings();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::saveMappings()
|
||||
{
|
||||
// Iterate through the keymap table and create a colon-separated list
|
||||
ostringstream keybuf;
|
||||
for(uInt32 i = 0; i < SDLK_LAST; ++i)
|
||||
keybuf << myKeyTable[i] << ":";
|
||||
myOSystem->settings().setString("keymap", keybuf.str());
|
||||
|
||||
// Iterate through the joymap table and create a colon-separated list
|
||||
ostringstream joybuf;
|
||||
for(Int32 i = 0; i < StellaEvent::LastJSTICK*StellaEvent::LastJCODE; ++i)
|
||||
joybuf << myJoyTable[i] << ":";
|
||||
myOSystem->settings().setString("joymap", joybuf.str());
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -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: EventHandler.hxx,v 1.22 2005-04-05 00:40:54 stephena Exp $
|
||||
// $Id: EventHandler.hxx,v 1.23 2005-04-06 23:47:07 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef EVENTHANDLER_HXX
|
||||
|
@ -57,7 +57,7 @@ struct ActionList {
|
|||
mapping can take place.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: EventHandler.hxx,v 1.22 2005-04-05 00:40:54 stephena Exp $
|
||||
@version $Id: EventHandler.hxx,v 1.23 2005-04-06 23:47:07 stephena Exp $
|
||||
*/
|
||||
class EventHandler
|
||||
{
|
||||
|
@ -88,6 +88,26 @@ class EventHandler
|
|||
*/
|
||||
void poll();
|
||||
|
||||
/**
|
||||
Bind a key to an event/action
|
||||
|
||||
@event The event we are remapping
|
||||
@key The key to bind to this event
|
||||
*/
|
||||
void addKeyMapping(Event::Type event, uInt16 key);
|
||||
|
||||
/**
|
||||
Erase the specified mapping
|
||||
|
||||
@event The event for which we erase all mappings
|
||||
*/
|
||||
void eraseMapping(Event::Type event);
|
||||
|
||||
/**
|
||||
Resets the event mappings to default values
|
||||
*/
|
||||
void setDefaultMapping();
|
||||
|
||||
/**
|
||||
Returns the current state of the EventHandler
|
||||
|
||||
|
@ -102,7 +122,6 @@ class EventHandler
|
|||
*/
|
||||
void reset(State state);
|
||||
|
||||
|
||||
/**
|
||||
This method indicates whether a pause event has been received.
|
||||
*/
|
||||
|
@ -180,6 +199,7 @@ class EventHandler
|
|||
void setJoymap();
|
||||
void setDefaultKeymap();
|
||||
void setDefaultJoymap();
|
||||
void saveMappings();
|
||||
|
||||
bool isValidList(string list, uInt32 length);
|
||||
|
||||
|
|
|
@ -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: FrameBuffer.cxx,v 1.25 2005-04-05 00:40:54 stephena Exp $
|
||||
// $Id: FrameBuffer.cxx,v 1.26 2005-04-06 23:47:07 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <sstream>
|
||||
|
@ -650,71 +650,3 @@ void FrameBuffer::sendJoyEvent(StellaEvent::JoyStick stick,
|
|||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBuffer::addKeyBinding(Event::Type event, StellaEvent::KeyCode key)
|
||||
{
|
||||
myKeyTable[key] = event;
|
||||
|
||||
loadRemapMenu();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBuffer::addJoyBinding(Event::Type event,
|
||||
StellaEvent::JoyStick stick, StellaEvent::JoyCode code)
|
||||
{
|
||||
myJoyTable[stick * StellaEvent::LastJCODE + code] = event;
|
||||
|
||||
loadRemapMenu();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBuffer::deleteBinding(Event::Type event)
|
||||
{
|
||||
for(uInt32 i = 0; i < myKeyTableSize; ++i)
|
||||
if(myKeyTable[i] == event)
|
||||
myKeyTable[i] = Event::NoType;
|
||||
|
||||
for(uInt32 j = 0; j < myJoyTableSize; ++j)
|
||||
if(myJoyTable[j] == event)
|
||||
myJoyTable[j] = Event::NoType;
|
||||
|
||||
loadRemapMenu();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
#if 0
|
||||
/**
|
||||
This array must be initialized in a specific order, matching
|
||||
their initialization in StellaEvent::KeyCode.
|
||||
|
||||
The other option would be to create an array of structures
|
||||
(in StellaEvent.hxx) containing event/string pairs.
|
||||
This would eliminate the use of enumerations and slow down
|
||||
lookups. So I do it this way instead.
|
||||
*/
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
const char* FrameBuffer::ourEventName[StellaEvent::LastKCODE] = {
|
||||
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
|
||||
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
|
||||
|
||||
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
|
||||
|
||||
"KP 0", "KP 1", "KP 2", "KP 3", "KP 4", "KP 5", "KP 6", "KP 7", "KP 8",
|
||||
"KP 9", "KP .", "KP /", "KP *", "KP -", "KP +", "KP ENTER", "KP =",
|
||||
|
||||
"BACKSP", "TAB", "CLEAR", "ENTER", "ESC", "SPACE", ",", "-", ".",
|
||||
"/", "\\", ";", "=", "\"", "`", "[", "]",
|
||||
|
||||
"PRT SCRN", "SCR LOCK", "PAUSE", "INS", "HOME", "PGUP",
|
||||
"DEL", "END", "PGDN",
|
||||
|
||||
"LCTRL", "RCTRL", "LALT", "RALT", "LWIN", "RWIN", "MENU",
|
||||
"UP", "DOWN", "LEFT", "RIGHT",
|
||||
|
||||
"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",
|
||||
"F11", "F12", "F13", "F14", "F15",
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -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: EventMappingDialog.cxx,v 1.3 2005-04-06 19:50:12 stephena Exp $
|
||||
// $Id: EventMappingDialog.cxx,v 1.4 2005-04-06 23:47:07 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -97,11 +97,7 @@ void EventMappingDialog::startRemapping()
|
|||
myCancelMapButton->setEnabled(true);
|
||||
|
||||
// And show a message indicating which key is being remapped
|
||||
ostringstream buf;
|
||||
buf << "Select a new event for the '"
|
||||
<< EventHandler::ourActionList[ myActionSelected ].action
|
||||
<< "' action";
|
||||
myKeyMapping->setLabel(buf.str());
|
||||
drawKeyMapping();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -109,8 +105,11 @@ void EventMappingDialog::eraseRemapping()
|
|||
{
|
||||
if(myActionSelected < 0)
|
||||
return;
|
||||
else
|
||||
cerr << "Erase item: " << myActionSelected << endl;
|
||||
|
||||
Event::Type event = EventHandler::ourActionList[ myActionSelected ].event;
|
||||
instance()->eventHandler().eraseMapping(event);
|
||||
|
||||
drawKeyMapping();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -130,20 +129,37 @@ void EventMappingDialog::stopRemapping()
|
|||
// Make sure the list widget is in a known state
|
||||
if(myActionSelected >= 0)
|
||||
{
|
||||
ostringstream buf;
|
||||
buf << "Key(s) : "
|
||||
<< EventHandler::ourActionList[ myActionSelected ].key;
|
||||
myKeyMapping->setLabel(buf.str());
|
||||
|
||||
drawKeyMapping();
|
||||
myMapButton->setEnabled(true);
|
||||
myEraseButton->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventMappingDialog::drawKeyMapping()
|
||||
{
|
||||
if(myActionSelected >= 0)
|
||||
{
|
||||
ostringstream buf;
|
||||
buf << "Key(s) : "
|
||||
<< EventHandler::ourActionList[ myActionSelected ].key;
|
||||
myKeyMapping->setLabel(buf.str());
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventMappingDialog::handleKeyDown(uInt16 ascii, Int32 keycode, Int32 modifiers)
|
||||
{
|
||||
// cerr << "EventMappingDialog::handleKeyDown received: " << ascii << endl;
|
||||
// Remap keys in remap mode, otherwise pass to listwidget
|
||||
if(myRemapStatus && myActionSelected >= 0)
|
||||
{
|
||||
Event::Type event = EventHandler::ourActionList[ myActionSelected ].event;
|
||||
instance()->eventHandler().addKeyMapping(event, ascii);
|
||||
|
||||
stopRemapping();
|
||||
}
|
||||
else
|
||||
myActionsList->handleKeyDown(ascii, keycode, modifiers);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -155,11 +171,7 @@ void EventMappingDialog::handleCommand(CommandSender* sender, uInt32 cmd, uInt32
|
|||
if(myActionsList->getSelected() >= 0)
|
||||
{
|
||||
myActionSelected = myActionsList->getSelected();
|
||||
ostringstream buf;
|
||||
buf << "Key(s) : "
|
||||
<< EventHandler::ourActionList[ myActionSelected ].key;
|
||||
|
||||
myKeyMapping->setLabel(buf.str());
|
||||
drawKeyMapping();
|
||||
myMapButton->setEnabled(true);
|
||||
myEraseButton->setEnabled(true);
|
||||
myCancelMapButton->setEnabled(false);
|
||||
|
@ -179,7 +191,9 @@ void EventMappingDialog::handleCommand(CommandSender* sender, uInt32 cmd, uInt32
|
|||
break;
|
||||
|
||||
case kDefaultsCmd:
|
||||
cerr << "Set default mapping\n";
|
||||
instance()->eventHandler().setDefaultMapping();
|
||||
drawKeyMapping();
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -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: EventMappingDialog.hxx,v 1.3 2005-04-06 19:50:12 stephena Exp $
|
||||
// $Id: EventMappingDialog.hxx,v 1.4 2005-04-06 23:47:08 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -61,6 +61,8 @@ class EventMappingDialog : public Dialog
|
|||
void stopRemapping();
|
||||
void loadConfig();
|
||||
|
||||
void drawKeyMapping();
|
||||
|
||||
private:
|
||||
// Indicates the event that is currently selected
|
||||
Int32 myActionSelected;
|
||||
|
|
Loading…
Reference in New Issue