summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c476
1 files changed, 476 insertions, 0 deletions
diff --git a/setup.c b/setup.c
new file mode 100644
index 0000000..d67d658
--- /dev/null
+++ b/setup.c
@@ -0,0 +1,476 @@
+/*
+ * mousemate plugin for VDR
+ *
+ * setup.c - settings and setup menu
+ *
+ *
+ * This code is distributed under the terms and conditions of the
+ * GNU GENERAL PUBLIC LICENSE. See the file COPYING for details.
+ */
+
+#include <linux/input.h>
+#include <vdr/plugin.h>
+#include <vdr/keys.h>
+#include <vdr/interface.h>
+
+
+#include "setup.h"
+#include "MouseMate.h"
+
+cMouseMateSetup MouseMateSetup;
+
+const char * strContexts[kContexts] =
+{
+ "Normal",
+ "Menu",
+ "Replay",
+ "Replay DVD",
+ "Replay MP3",
+ "Replay CDDA",
+ "Replay IMAGE",
+ "Normal alternative",
+ "Menu alternative",
+ "Replay alternative",
+ "Replay DVD alternative",
+ "Replay MP3 alternative",
+ "Replay CDDA alternative",
+ "Replay IMAGE alternative"
+};
+
+const char * strEvents[kEvents] =
+{
+ "TurnWheelLeft",
+ "TurnWheelRight",
+ "TurnXLeft",
+ "TurnXRight",
+ "TurnYLeft",
+ "TurnYRight",
+ "LeftClick",
+ "LeftDoubleClick",
+ "LeftPushedTurnLeft",
+ "LeftPushedTurnRight",
+ "MiddleClick",
+ "MiddleDoubleClick",
+ "MiddlePushedTurnLeft",
+ "MiddlePushedTurnRight",
+ "RightClick",
+ "RightDoubleClick",
+ "RightPushedTurnLeft",
+ "RightPushedTurnRight",
+ "SidePushedTurnLeft",
+ "SidePushedTurnRight",
+ "SideClick",
+ "SideDoubleClick",
+ "ExtraClick",
+ "ExtraDoubleClick",
+ "ExtraPushedTurnLeft",
+ "ExtraPushedTurnRight",
+ "ForwardClick",
+ "ForwardDoubleClick",
+ "ForwardPushedTurnLeft",
+ "ForwardPushedTurnRight",
+ "BackClick",
+ "BackDoubleClick",
+ "BackPushedTurnLeft",
+ "BackPushedTurnRight",
+ "TaskClick",
+ "TaskDoubleClick"
+ "TaskPushedTurnLeft",
+ "TaskPushedTurnRight"
+};
+
+cMouseMateSetup::cMouseMateSetup()
+:sensitivity(1),
+doubleClickTime(300),
+toggleClickTime(1000),
+led(0),
+autotoggleoff(0),
+extrapushedturn(0),
+alternative(0),
+dvdsensitive(0),
+mp3sensitive(0),
+cddasensitive(0),
+imagesensitive(0),
+extraturns(0),
+toggleOffTime(3000)
+{
+ for (int c = 0; c < kContexts; c++)
+ for (int e = 0; e < kEvents; e++)
+ keys[c][e] = kNone;
+}
+
+
+bool cMouseMateSetup::Parse(const char *Name, const char *Value)
+{
+ // Parse your own setup parameters and store their values.
+
+ if (!strcasecmp(Name, "Sensitivity")) sensitivity = atoi(Value);
+ else if (!strcasecmp(Name, "SensitivityX")) sensitivityX = atoi(Value);
+ else if (!strcasecmp(Name, "SensitivityY")) sensitivityY = atoi(Value);
+ else if (!strcasecmp(Name, "DoubleClickTime")) doubleClickTime = atoi(Value);
+ else if (!strcasecmp(Name, "ToggleClickTime")) toggleClickTime = atoi(Value);
+ else if (!strcasecmp(Name, "LED")) led = atoi(Value);
+ else if (!strcasecmp(Name, "AutoToggleOff")) autotoggleoff = atoi(Value);
+ else if (!strcasecmp(Name, "ExtraPushedTurn")) extrapushedturn = atoi(Value);
+ else if (!strcasecmp(Name, "ExtraTurns")) extraturns = atoi(Value);
+ else if (!strcasecmp(Name, "DvdSensitive")) dvdsensitive = atoi(Value);
+ else if (!strcasecmp(Name, "Mp3Sensitive")) mp3sensitive = atoi(Value);
+ else if (!strcasecmp(Name, "CddaSensitive")) cddasensitive = atoi(Value);
+ else if (!strcasecmp(Name, "ImageSensitive")) imagesensitive = atoi(Value);
+ else if (!strcasecmp(Name, "Alternative")) alternative= atoi(Value);
+ else if (!strcasecmp(Name, "ToggleOffTime")) toggleOffTime = atoi(Value);
+ else if (strstr(Name, "Key") == Name)
+ {
+ for (int c = 0; c < kContexts; c++)
+ {
+ for (int e = 0; e < kEvents; e++)
+ {
+ char str[256];
+ sprintf(str, "Key%s%s", strContexts[c], strEvents[e]);
+ if (!strcasecmp(Name, str))
+ {
+ keys[c][e] = eKeys(atoi(Value));
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ else
+ return false;
+
+ return true;
+}
+
+
+static tKey keyTable[] =
+{
+ { kNone, "None" },
+ { kUp, "Up" },
+ { kDown, "Down" },
+ { kMenu, "Menu" },
+ { kOk, "Ok" },
+ { kBack, "Back" },
+ { kLeft, "Left" },
+ { kRight, "Right" },
+ { kRed, "Red" },
+ { kGreen, "Green" },
+ { kYellow, "Yellow" },
+ { kBlue, "Blue" },
+ { k0, "0" },
+ { k1, "1" },
+ { k2, "2" },
+ { k3, "3" },
+ { k4, "4" },
+ { k5, "5" },
+ { k6, "6" },
+ { k7, "7" },
+ { k8, "8" },
+ { k9, "9" },
+ { kInfo, "Info" },
+ { kPlay, "Play" },
+ { kPause, "Pause" },
+ { kStop, "Stop" },
+ { kRecord, "Record" },
+ { kFastFwd, "FastFwd" },
+ { kFastRew, "FastRew" },
+ { kNext, "Next" },
+ { kPrev, "Prev" },
+ { kPower, "Power" },
+ { kChanUp, "Channel+" },
+ { kChanDn, "Channel-" },
+ { kChanPrev, "PrevChannel"},
+ { kVolUp, "Volume+" },
+ { kVolDn, "Volume-" },
+ { kMute, "Mute" },
+ { kAudio, "Audio" },
+ { kSubtitles, "Subtitles" },
+ { kSchedule, "Schedule" },
+ { kChannels, "Channels" },
+ { kTimers, "Timers" },
+ { kRecordings, "Recordings" },
+ { kSetup, "Setup" },
+ { kCommands, "Commands" },
+ { kUser1, "User1" },
+ { kUser2, "User2" },
+ { kUser3, "User3" },
+ { kUser4, "User4" },
+ { kUser5, "User5" },
+ { kUser6, "User6" },
+ { kUser7, "User7" },
+ { kUser8, "User8" },
+ { kUser9, "User9" },
+ { kNone, NULL },
+};
+
+cMouseMateSetupPage::cMouseMateSetupPage()
+{
+ context = kContextNormal;
+ contextOld = kContextNormal;
+ sensitivity = MouseMateSetup.sensitivity;
+ sensitivityX = MouseMateSetup.sensitivityX;
+ sensitivityY = MouseMateSetup.sensitivityY;
+ doubleClickTime = MouseMateSetup.doubleClickTime;
+ toggleClickTime = MouseMateSetup.toggleClickTime;
+ led=MouseMateSetup.led;
+ autotoggleoff=MouseMateSetup.autotoggleoff;
+ extrapushedturn=MouseMateSetup.extrapushedturn;
+ extraturns=MouseMateSetup.extraturns;
+ dvdsensitive=MouseMateSetup.dvdsensitive;
+ mp3sensitive=MouseMateSetup.mp3sensitive;
+ cddasensitive=MouseMateSetup.cddasensitive;
+ imagesensitive=MouseMateSetup.imagesensitive;
+ alternative=MouseMateSetup.alternative;
+ toggleOffTime = MouseMateSetup.toggleOffTime;
+
+ for (numKeys = 0; keyTable[numKeys].name; numKeys++)
+ {
+ for (int c = 0; c < kContexts; c++)
+ for (int e = 0; e < kEvents; e++)
+ if (keyTable[numKeys].type == MouseMateSetup.keys[c][e])
+ keys[c][e] = numKeys;
+ strKeys[numKeys] = new char[strlen(keyTable[numKeys].name) + 1];
+ strcpy(strKeys[numKeys], keyTable[numKeys].name);
+ }
+ for (int e = 0; e < kEvents; e++)
+ setKeys[e] = keys[context][e];
+ Setup();
+}
+
+
+void cMouseMateSetupPage::Setup()
+{
+ int current = Current();
+ Clear();
+ SetHelp("One4all",NULL,NULL,NULL);
+
+ Add(new cMenuEditIntItem(tr("Sensitivity wheel"), &sensitivity, 1, 10));
+ Add(new cMenuEditIntItem(tr("Double click time (ms)"), &doubleClickTime, 100, 1000));
+
+ Add(new cMenuEditBoolItem(tr("Alternative key binding"), &alternative,tr("no"), tr("yes")));
+ int nContexts;
+ if (alternative)
+ {
+ nContexts=kContexts;
+ Add(new cMenuEditIntItem(tr("Toggle click time (ms)"), &toggleClickTime, 100, 5000));
+ Add(new cMenuEditBoolItem(tr("Show toggle with scroll lock led"), &led,tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(tr("Toggle automatic off"), &autotoggleoff,tr("no"), tr("yes")));
+ if (autotoggleoff)
+ {
+ Add(new cMenuEditIntItem(tr("Toggle off time (ms)"), &toggleOffTime, 1000, 30000));
+ }
+ }
+ else
+ {
+ nContexts=kContexts/2;
+ if (context>nContexts) context=nContexts;
+ }
+
+ Add(new cMenuEditBoolItem(tr("Extra pushed turn events"), &extrapushedturn,tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(tr("Extra x,y turn events"), &extraturns, tr("no"), tr("yes")));
+
+ if (extraturns)
+ {
+ Add(new cMenuEditIntItem(tr("Sensitivity x"), &sensitivityX, 1, 1000));
+ Add(new cMenuEditIntItem(tr("Sensitivity y"), &sensitivityY, 1, 1000));
+ }
+
+ Add(new cMenuEditBoolItem(tr("DVD sensitive replay context"), &dvdsensitive,tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(tr("MP3 sensitive replay context"), &mp3sensitive,tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(tr("CDDA sensitive replay context"), &cddasensitive,tr("no"), tr("yes")));
+ Add(new cMenuEditBoolItem(tr("IMAGE sensitive replay context"), &imagesensitive,tr("no"), tr("yes")));
+
+ Add(itemContext = new cMenuEditStraItem(tr("Set keys for context"), &context, nContexts, strContexts));
+ Add(new cMenuEditStraItem(tr("Turn wheel left"), &setKeys[kEventTurnWheelLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Turn wheel right"), &setKeys[kEventTurnWheelRight], numKeys, strKeys));
+
+ if (extraturns)
+ {
+ Add(new cMenuEditStraItem(tr("Turn x axis left"), &setKeys[kEventTurnXLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Turn x axis right"), &setKeys[kEventTurnXRight], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Turn y axis left"), &setKeys[kEventTurnYLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Turn y axis right"), &setKeys[kEventTurnYRight], numKeys, strKeys));
+ }
+
+ Add(new cMenuEditStraItem(tr("Left click"), &setKeys[kEventLeftClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Left double-click"), &setKeys[kEventLeftDoubleClick], numKeys, strKeys));
+
+ Add(new cMenuEditStraItem(tr("Middle click"), &setKeys[kEventMiddleClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Middle double-click"), &setKeys[kEventMiddleDoubleClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Middle pushed turn left"), &setKeys[kEventMiddlePushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Middle pushed turn right"), &setKeys[kEventMiddlePushedTurnRight], numKeys, strKeys));
+
+ Add(new cMenuEditStraItem(tr("Right click"), &setKeys[kEventRightClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Right double-click"), &setKeys[kEventRightDoubleClick], numKeys, strKeys));
+
+ if (MouseMate->IsButtonUsed(BTN_SIDE))
+ {
+ Add(new cMenuEditStraItem(tr("Side click"), &setKeys[kEventSideClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Side double-click"), &setKeys[kEventSideDoubleClick], numKeys, strKeys));
+
+ }
+ if (MouseMate->IsButtonUsed(BTN_EXTRA))
+ {
+ Add(new cMenuEditStraItem(tr("Extra click"), &setKeys[kEventExtraClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Extra double-click"), &setKeys[kEventExtraDoubleClick], numKeys, strKeys));
+
+ }
+ if (MouseMate->IsButtonUsed(BTN_FORWARD))
+ {
+ Add(new cMenuEditStraItem(tr("Forward click"), &setKeys[kEventForwardClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Forward double-click"), &setKeys[kEventForwardDoubleClick], numKeys, strKeys));
+ }
+ if (MouseMate->IsButtonUsed(BTN_BACK))
+ {
+ Add(new cMenuEditStraItem(tr("Back click"), &setKeys[kEventBackClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Back double-click"), &setKeys[kEventBackDoubleClick], numKeys, strKeys));
+ }
+ if (MouseMate->IsButtonUsed(BTN_TASK))
+ {
+ Add(new cMenuEditStraItem(tr("Task click"), &setKeys[kEventTaskClick], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Task double-click"), &setKeys[kEventTaskDoubleClick], numKeys, strKeys));
+ }
+
+ if (extrapushedturn)
+ {
+ Add(new cMenuEditStraItem(tr("Left pushed turn left"), &setKeys[kEventLeftPushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Left pushed turn right"), &setKeys[kEventLeftPushedTurnRight], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Right pushed turn left"), &setKeys[kEventRightPushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Right pushed turn right"), &setKeys[kEventRightPushedTurnRight], numKeys, strKeys));
+ if (MouseMate->IsButtonUsed(BTN_SIDE))
+ {
+ Add(new cMenuEditStraItem(tr("Side pushed turn left"), &setKeys[kEventSidePushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Side pushed turn right"), &setKeys[kEventSidePushedTurnRight], numKeys, strKeys));
+ }
+ if (MouseMate->IsButtonUsed(BTN_EXTRA))
+ {
+ Add(new cMenuEditStraItem(tr("Extra pushed turn left"), &setKeys[kEventExtraPushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Extra pushed turn right"), &setKeys[kEventExtraPushedTurnRight], numKeys, strKeys));
+ }
+ if (MouseMate->IsButtonUsed(BTN_FORWARD))
+ {
+ Add(new cMenuEditStraItem(tr("Forward pushed turn left"), &setKeys[kEventForwardPushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Forward pushed turn right"), &setKeys[kEventForwardPushedTurnRight], numKeys, strKeys));
+ }
+
+ if (MouseMate->IsButtonUsed(BTN_BACK))
+ {
+ Add(new cMenuEditStraItem(tr("Back pushed turn left"), &setKeys[kEventBackPushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Back pushed turn right"), &setKeys[kEventBackPushedTurnRight], numKeys, strKeys));
+ }
+ if (MouseMate->IsButtonUsed(BTN_TASK))
+ {
+ Add(new cMenuEditStraItem(tr("Task pushed turn left"), &setKeys[kEventTaskPushedTurnLeft], numKeys, strKeys));
+ Add(new cMenuEditStraItem(tr("Task pushed turn right"), &setKeys[kEventTaskPushedTurnRight], numKeys, strKeys));
+ }
+ }
+
+ SetCurrent(Get(current));
+ Display();
+}
+
+
+cMouseMateSetupPage::~cMouseMateSetupPage()
+{
+ for (int i = 0; i < numKeys; i++)
+ {
+ delete[] strKeys[i];
+ }
+}
+
+
+void cMouseMateSetupPage::Store()
+{
+ SetupStore("Sensitivity", MouseMateSetup.sensitivity = sensitivity);
+ SetupStore("SensitivityX", MouseMateSetup.sensitivityX = sensitivityX);
+ SetupStore("SensitivityY", MouseMateSetup.sensitivityY = sensitivityY);
+ SetupStore("DoubleClickTime", MouseMateSetup.doubleClickTime = doubleClickTime);
+ SetupStore("ToggleClickTime", MouseMateSetup.toggleClickTime = toggleClickTime);
+ SetupStore("LED", MouseMateSetup.led = led);
+ SetupStore("AutoToggleOff", MouseMateSetup.autotoggleoff = autotoggleoff);
+ SetupStore("ExtraPushedTurn", MouseMateSetup.extrapushedturn = extrapushedturn);
+ SetupStore("ExtraTurns", MouseMateSetup.extraturns = extraturns);
+ SetupStore("DvdSensitive", MouseMateSetup.dvdsensitive = dvdsensitive);
+ SetupStore("Mp3Sensitive", MouseMateSetup.mp3sensitive = mp3sensitive);
+ SetupStore("CddaSensitive", MouseMateSetup.cddasensitive = cddasensitive);
+ SetupStore("ImageSensitive", MouseMateSetup.imagesensitive = imagesensitive);
+ SetupStore("Alternative", MouseMateSetup.alternative = alternative);
+ SetupStore("ToggleOffTime", MouseMateSetup.toggleOffTime = toggleOffTime);
+ for (int e = 0; e < kEvents; e++)
+ keys[contextOld][e] = setKeys[e];
+ for (int c = 0; c < kContexts; c++)
+ {
+ for (int e = 0; e < kEvents; e++)
+ {
+ char str[256];
+ MouseMateSetup.keys[c][e] = keyTable[keys[c][e]].type;
+ sprintf(str, "Key%s%s", strContexts[c], strEvents[e]);
+ SetupStore(str, MouseMateSetup.keys[c][e]);
+ }
+ }
+
+}
+
+
+eOSState cMouseMateSetupPage::ProcessKey(eKeys key)
+{
+ int oldautotoggleoff = autotoggleoff;
+ int oldextrapushedturn = extrapushedturn;
+ int oldalternative = alternative;
+ int oldextraturns = extraturns;
+
+ eOSState state = cMenuSetupPage::ProcessKey(key);
+
+ //calculating number of used events
+ // 4 = turn left, turn right, middle pushed turv left, middle pushed turn right
+ // extraturns*4 = turn x left, turn x right, turn y left, turn y right
+ // Get_btnCount() * 2 = click & doubleclick for each used button
+ // extrapushedturn *2* (MouseMate->Get_btnCount()-1) = extra pushed turns (0,1) left & right (2)
+ // for each used button except middle (-1)
+ short int eventCount=4 + extraturns * 4
+ + MouseMate->Get_btnCount() * 2
+ + extrapushedturn *2* (MouseMate->Get_btnCount()-1);
+
+ if (state == osContinue)
+ {
+ if (key == kLeft || key == kRight)
+ {
+ cOsdItem * item = Get(Current());
+ if (item == itemContext)
+ {
+ for (int e = 0; e < kEvents; e++)
+ {
+ keys[contextOld][e] = setKeys[e];
+ setKeys[e] = keys[context][e];
+ }
+ for (int e = 0; e < eventCount; e++)
+ {
+ item = Get(Current() + e + 1);
+ item->Set();
+ }
+
+ contextOld = context;
+ Display();
+ }
+ }
+ }
+
+ // One4All
+ if (key == kRed)
+ if (!Interface->Confirm(tr("Set current key binding for all contexts?"), 5, true))
+ {
+ for (int i=0 ;i < kContexts;i++)
+ for (int e = 0; e < kEvents; e++)
+ keys[i][e]=setKeys[e];
+ }
+
+ if (key != kNone && ( (autotoggleoff != oldautotoggleoff)
+ | (oldextrapushedturn != extrapushedturn)
+ | (oldalternative != alternative)
+ | (oldextraturns != extraturns) ))
+ {
+ Setup();
+ }
+
+ return state;
+}