Esempio n. 1
0
/*!	Adds a menu populated with the keyboard layouts found in the passed
	in directory to the passed in menu. Each subdirectory in the passed
	in directory is added as a submenu recursively.
*/
void
KeymapWindow::_AddKeyboardLayoutMenu(BMenu* menu, BDirectory directory)
{
	entry_ref ref;

	while (directory.GetNextRef(&ref) == B_OK) {
		if (menu->FindItem(ref.name) != NULL)
			continue;

		BDirectory subdirectory;
		subdirectory.SetTo(&ref);
		if (subdirectory.InitCheck() == B_OK) {
			BMenu* submenu = new BMenu(B_TRANSLATE_NOCOLLECT(ref.name));

			_AddKeyboardLayoutMenu(submenu, subdirectory);
			menu->AddItem(submenu);
		} else {
			BMessage* message = new BMessage(kChangeKeyboardLayout);

			message->AddRef("ref", &ref);
			menu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(ref.name),
				message));
		}
	}
}
Esempio n. 2
0
void
KeymapWindow::_AddKeyboardLayouts(BMenu* menu)
{
    directory_which dataDirectories[] = {
        B_USER_DATA_DIRECTORY,
        B_COMMON_DATA_DIRECTORY,
        B_BEOS_DATA_DIRECTORY
    };

    for (uint32 i = 0;
            i < sizeof(dataDirectories) / sizeof(dataDirectories[0]); i++) {
        BPath path;
        if (find_directory(dataDirectories[i], &path) != B_OK)
            continue;

        path.Append("KeyboardLayouts");

        BDirectory directory;
        if (directory.SetTo(path.Path()) == B_OK)
            _AddKeyboardLayoutMenu(menu, directory);
    }
}