1//============================================================================
2//
3// SSSS tt lll lll
4// SS SS tt ll ll
5// SS tttttt eeee ll ll aaaa
6// SSSS tt ee ee ll ll aa
7// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8// SS SS tt ee ll ll aa aa
9// SSSS ttt eeeee llll llll aaaaa
10//
11// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
12// and the Stella Team
13//
14// See the file "License.txt" for information on usage and redistribution of
15// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16//============================================================================
17
18#include "EventHandler.hxx"
19#include "KeyboardWidget.hxx"
20
21// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
22KeyboardWidget::KeyboardWidget(GuiObject* boss, const GUI::Font& font,
23 int x, int y, Controller& controller)
24 : ControllerWidget(boss, font, x, y, controller)
25{
26 bool leftport = isLeftPort();
27 const string& label = leftport ? "Left (Keyboard)" : "Right (Keyboard)";
28
29 const int fontHeight = font.getFontHeight();
30 int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Keyboard)");
31 StaticTextWidget* t;
32
33 t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
34 fontHeight, label, TextAlign::Left);
35
36 xpos += 30; ypos += t->getHeight() + 20;
37
38 for(int i = 0; i < 12; ++i)
39 {
40 myBox[i] = new CheckboxWidget(boss, font, xpos, ypos, "",
41 CheckboxWidget::kCheckActionCmd);
42 myBox[i]->setID(i);
43 myBox[i]->setTarget(this);
44 xpos += myBox[i]->getWidth() + 5;
45 if((i+1) % 3 == 0)
46 {
47 xpos = x + 30;
48 ypos += myBox[i]->getHeight() + 5;
49 }
50 }
51 myEvent = leftport ? ourLeftEvents : ourRightEvents;
52}
53
54// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
55void KeyboardWidget::loadConfig()
56{
57 const Event& event = instance().eventHandler().event();
58 for(int i = 0; i < 12; ++i)
59 myBox[i]->setState(event.get(myEvent[i]));
60}
61
62// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
63void KeyboardWidget::handleCommand(
64 CommandSender* sender, int cmd, int data, int id)
65{
66 if(cmd == CheckboxWidget::kCheckActionCmd)
67 instance().eventHandler().handleEvent(myEvent[id], myBox[id]->getState());
68}
69
70// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
71Event::Type KeyboardWidget::ourLeftEvents[12] = {
72 Event::KeyboardZero1, Event::KeyboardZero2, Event::KeyboardZero3,
73 Event::KeyboardZero4, Event::KeyboardZero5, Event::KeyboardZero6,
74 Event::KeyboardZero7, Event::KeyboardZero8, Event::KeyboardZero9,
75 Event::KeyboardZeroStar, Event::KeyboardZero0, Event::KeyboardZeroPound
76};
77
78// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
79Event::Type KeyboardWidget::ourRightEvents[12] = {
80 Event::KeyboardOne1, Event::KeyboardOne2, Event::KeyboardOne3,
81 Event::KeyboardOne4, Event::KeyboardOne5, Event::KeyboardOne6,
82 Event::KeyboardOne7, Event::KeyboardOne8, Event::KeyboardOne9,
83 Event::KeyboardOneStar, Event::KeyboardOne0, Event::KeyboardOnePound
84};
85