// Connects the given accelerator to the given command (identified by the string)
void EventManager::connectAccelerator(IAccelerator& accelerator, const std::string& command) {
	IEventPtr event = findEvent(command);

	if (!event->empty()) {
		// Command found, connect it to the accelerator by passing its pointer
		accelerator.connectEvent(event);
	}
	else {
		// Command NOT found
		rWarning() << "EventManager: Unable to connect command: " << command << std::endl;
	}
}
Beispiel #2
0
	void loadAccelerators() {
		xml::NodeList shortcutSets = GlobalRegistry().findXPath("user/ui/input//shortcuts");

		// If we have two sets of shortcuts, delete the default ones
		if (shortcutSets.size() > 1) {
			GlobalRegistry().deleteXPath("user/ui/input//shortcuts[@name='default']");
		}

		// Find all accelerators
		xml::NodeList shortcutList = GlobalRegistry().findXPath("user/ui/input/shortcuts//shortcut");

		if (!shortcutList.empty()) {
			globalOutputStream() << "EventManager: Shortcuts found in Registry: " << shortcutList.size() << "\n";
			for (unsigned int i = 0; i < shortcutList.size(); i++) {
				const std::string key = shortcutList[i].getAttributeValue("key");
				const std::string command = shortcutList[i].getAttributeValue("command");

				// Try to lookup the command
				IEvent* event = findEvent(command);

				// Check if valid key / command definitions were found
				if (key != "" && event != NULL) {
					// Get the modifier string (e.g. "SHIFT+ALT")
					const std::string modifierStr = shortcutList[i].getAttributeValue("modifiers");

					if (!duplicateAccelerator(key, modifierStr, event)) {
						// Create the accelerator object
						IAccelerator* accelerator = addAccelerator(key, modifierStr);

						// Connect the newly created accelerator to the command
						accelerator->connectEvent(event);
					}
				}
			}
		}
		else {
			// No accelerator definitions found!
			globalOutputStream() << "EventManager: No shortcut definitions found...\n";
		}
	}
Beispiel #3
0
	std::string getAcceleratorStr(const IEvent* event, bool forMenu) {
		std::string returnValue = "";

		IAccelerator* accelerator = findAccelerator(event);

		if (accelerator == NULL)
			return "";

		unsigned int keyVal = accelerator->getKey();
		const std::string keyStr = (keyVal != 0) ? gdk_keyval_name(keyVal) : "";

		if (keyStr != "") {
			// Return a modifier string for a menu
			const std::string modifierStr = getModifierStr(accelerator->getModifiers(), forMenu);

			const std::string connector = (forMenu) ? "-" : "+";

			returnValue = modifierStr;
			returnValue += (modifierStr != "") ? connector : "";
			returnValue += keyStr;
		}

		return returnValue;
	}