void commit(InputConfig &config, unsigned line) { if (empty()) return; TCHAR *token; // For each mode token = mode.first_token(_T(" ")); // General errors - these should be true assert(location < 1024); const TCHAR *new_label = NULL; while (token != NULL) { // All modes are valid at this point int mode_id = config.MakeMode(token); assert(mode_id >= 0); // Make label event // TODO code: Consider Reuse existing entries... if (location > 0) { // Only copy this once per object - save string space if (!new_label) { new_label = UnescapeBackslash(label); } config.AppendMenu(mode_id, new_label, location, event_id); } // Make key (Keyboard input) // key - Hardware key or keyboard if (type.equals(_T("key"))) { // Get the int key (eg: APP1 vs 'a') unsigned key = ParseKeyCode(data); if (key > 0) config.Key2Event[mode_id][key] = event_id; else LogStartUp(_T("Invalid key data: %s at %u"), data.c_str(), line); // Make gce (Glide Computer Event) // GCE - Glide Computer Event } else if (type.equals(_T("gce"))) { // Get the int key (eg: APP1 vs 'a') int key = InputEvents::findGCE(data); if (key >= 0) config.GC2Event[key] = event_id; else LogStartUp(_T("Invalid GCE data: %s at %u"), data.c_str(), line); // Make gesture (Gesture Event) // Key - Key Event } else if (type.equals(_T("gesture"))) { // Check data for invalid characters: bool valid = true; for (const TCHAR* c = data; *c; c++) if (*c != _T('U') && *c != _T('D') && *c != _T('R') && *c != _T('L')) valid = false; if (valid) { // One entry per key: delete old, create new config.Gesture2Event.Remove(data.c_str()); config.Gesture2Event.Add(data.c_str(), event_id); } else LogStartUp(_T("Invalid gesture data: %s at %u"), data.c_str(), line); // Make ne (NMEA Event) // NE - NMEA Event } else if (type.equals(_T("ne"))) { // Get the int key (eg: APP1 vs 'a') int key = InputEvents::findNE(data); if (key >= 0) config.N2Event[key] = event_id; else LogStartUp(_T("Invalid GCE data: %s at %u"), data.c_str(), line); // label only - no key associated (label can still be touch screen) } else if (type.equals(_T("label"))) { // Nothing to do here... } else { LogStartUp(_T("Invalid type: %s at %u"), type.c_str(), line); } token = mode.next_token(_T(" ")); } }
bool IsDriver(const TCHAR *name) const { return UsesDriver() && driver_name.equals(name); }