int32_t PMenuItemSetShortcut(void *pobject, void *in, void *out, void *extraData) { if (!pobject || !in || !out) return B_ERROR; PMenuItem *parent = static_cast<PMenuItem*>(pobject); if (!parent) return B_BAD_TYPE; BMenuItem *backend = (BMenuItem*)parent->GetBackend(); PArgs *inArgs = static_cast<PArgs*>(in); char shortcut; if (inArgs->FindChar("shortcut", &shortcut) != B_OK) return B_ERROR; int32 modifiers; modifiers = 0; inArgs->FindInt32("modifiers", &modifiers); backend->SetShortcut(shortcut, modifiers); return B_OK; }
BMenu* KlondikeView::GetOptionMenu() { BMenu* mOptions = new BMenu(B_TRANSLATE("Options")); BMenuItem* menuItem; fAutoPlayEnabledItem = new BMenuItem(B_TRANSLATE("Auto-play"), NewSolitareOptionMessage(kAutoPlayEnableMessage)); fAutoPlayEnabledItem->SetMarked(true); mOptions->AddItem(fAutoPlayEnabledItem); fAutoPlayEnabled = true; fQuickAutoPlayItem = new BMenuItem(B_TRANSLATE("Quick auto-play"), NewSolitareOptionMessage(kQuickAutoPlayMessage)); mOptions->AddItem(fQuickAutoPlayItem); mOptions->AddSeparatorItem(); fQuickAutoPlay = false; menuItem = new BMenuItem(B_TRANSLATE("Cheat!"), NewSolitareOptionMessage(kCheatMessage)); menuItem->SetShortcut('C', B_COMMAND_KEY); mOptions->AddItem(menuItem); return mOptions; }
/** * gens_menu_parse(): Parse the menu structs. * @param menu First item of the array of menu structs to parse. * @param container Container to add the menu items to. */ void gens_menu_parse(const GensMenuItem_t* menu, BMenuBar *menuBar, BWindow* win) { // TODO: Parse the menu struct. BMenuItem* item; // File menu BMenu *m = new BMenu("File"); m->AddItem(item = new BMenuItem("Open ROM", NULL)); item->SetShortcut('O', B_COMMAND_KEY); m->AddItem(item = new BMenuItem("Boot CD", NULL)); item->SetShortcut('B', B_COMMAND_KEY); m->AddItem(new BMenuItem("Netplay", NULL)); BMenu *subMenu = new BMenu("ROM History"); subMenu->AddItem(new BMenuItem("DUMMY HISTORY LINE", NULL)); m->AddItem(subMenu); m->AddItem(new BMenuItem("Close ROM", NULL)); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Game Genie", NULL)); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Load State...", NULL)); m->AddItem(new BMenuItem("Save State as...", NULL)); m->AddItem(new BMenuItem("Quick Load", NULL)); m->AddItem(new BMenuItem("Quick Save", NULL)); subMenu = new BMenu("Change State"); subMenu->AddItem(new BMenuItem("DUMMY SAVESTATE LINE", NULL)); m->AddItem(subMenu); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED))); item->SetShortcut('Q', B_COMMAND_KEY); m->SetTargetForItems(win); menuBar->AddItem(m); // Graphics menu m = new BMenu("Graphics"); m->AddItem(new BMenuItem("Full Screen", NULL)); m->AddItem(item = new BMenuItem("VSync", NULL)); if (true) item->SetMarked(true); m->AddItem(item = new BMenuItem("Stretch", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("OpenGL", NULL)); if (true) item->SetMarked(true); subMenu = new BMenu("OpenGL Resolution"); subMenu->AddItem(new BMenuItem("320x240", NULL)); subMenu->AddItem(new BMenuItem("640x480", NULL)); subMenu->AddItem(new BMenuItem("800x600", NULL)); subMenu->AddItem(new BMenuItem("1024x768", NULL)); subMenu->AddItem(new BMenuItem("Custom", NULL)); m->AddItem(subMenu); subMenu = new BMenu("Bits per pixel"); subMenu->AddItem(new BMenuItem("16", NULL)); subMenu->AddItem(new BMenuItem("24", NULL)); subMenu->AddItem(new BMenuItem("32", NULL)); m->AddItem(subMenu); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Color Adjust", NULL)); subMenu = new BMenu("Render"); subMenu->AddItem(new BMenuItem("Normal", NULL)); subMenu->AddItem(new BMenuItem("Double", NULL)); subMenu->AddItem(new BMenuItem("Interpolated", NULL)); subMenu->AddItem(new BMenuItem("Scanline", NULL)); subMenu->AddItem(new BMenuItem("50% Scanline", NULL)); subMenu->AddItem(new BMenuItem("25% Scanline", NULL)); subMenu->AddItem(new BMenuItem("Interpolated Scanline", NULL)); subMenu->AddItem(new BMenuItem("Interpolated 50% Scanline", NULL)); subMenu->AddItem(new BMenuItem("Interpolated 25% Scanline", NULL)); subMenu->AddItem(new BMenuItem("2xSAI (Kreed)", NULL)); subMenu->AddItem(new BMenuItem("Scale2x", NULL)); subMenu->AddItem(new BMenuItem("Hq2x", NULL)); m->AddItem(subMenu); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("Sprite Limit", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); subMenu = new BMenu("Frame Skip"); subMenu->AddItem(new BMenuItem("Auto", NULL)); subMenu->AddItem(new BMenuItem("0", NULL)); subMenu->AddItem(new BMenuItem("1", NULL)); subMenu->AddItem(new BMenuItem("2", NULL)); subMenu->AddItem(new BMenuItem("3", NULL)); subMenu->AddItem(new BMenuItem("4", NULL)); subMenu->AddItem(new BMenuItem("5", NULL)); subMenu->AddItem(new BMenuItem("6", NULL)); subMenu->AddItem(new BMenuItem("7", NULL)); subMenu->AddItem(new BMenuItem("8", NULL)); m->AddItem(subMenu); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Screen Shot", NULL)); menuBar->AddItem(m); // CPU menu m = new BMenu("CPU"); subMenu = new BMenu("Debug"); subMenu->AddItem(item = new BMenuItem("Genesis - 68000", NULL)); if (true) item->SetMarked(true); subMenu->AddItem(item = new BMenuItem("Genesis - Z80", NULL)); if (true) item->SetMarked(true); subMenu->AddItem(item = new BMenuItem("Genesis - VDP", NULL)); if (true) item->SetMarked(true); m->AddItem(subMenu); m->AddSeparatorItem(); subMenu = new BMenu("Country"); subMenu->AddItem(new BMenuItem("Autodetect", NULL)); subMenu->AddItem(new BMenuItem("Japan (NTSC)", NULL)); subMenu->AddItem(new BMenuItem("USA (NTSC)", NULL)); subMenu->AddItem(new BMenuItem("Europe (PAL)", NULL)); subMenu->AddItem(new BMenuItem("Japan (PAL)", NULL)); subMenu->AddSeparatorItem(); BMenu *subMenu2 = new BMenu("Auto detection order"); subMenu->AddItem(subMenu2); subMenu2->AddItem(new BMenuItem("USA (NTSC)", NULL)); subMenu2->AddItem(new BMenuItem("Japan (NTSC)", NULL)); subMenu2->AddItem(new BMenuItem("Europe (PAL)", NULL)); m->AddItem(subMenu); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Hard Reset", NULL)); m->AddItem(new BMenuItem("Reset 68000", NULL)); m->AddItem(new BMenuItem("Reset Z80", NULL)); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("Perfect Synchro (SLOW)", NULL)); if (true) item->SetMarked(true); // Sound menu. menuBar->AddItem(m); m = new BMenu("Sound"); m->AddItem(item = new BMenuItem("Enabled", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); subMenu = new BMenu("Rate"); subMenu->AddItem(new BMenuItem("11025", NULL)); subMenu->AddItem(new BMenuItem("16000", NULL)); subMenu->AddItem(new BMenuItem("22050", NULL)); subMenu->AddItem(new BMenuItem("32000", NULL)); subMenu->AddItem(new BMenuItem("44100", NULL)); subMenu->AddItem(new BMenuItem("48000", NULL)); m->AddItem(subMenu); m->AddItem(item = new BMenuItem("Stereo", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("Z80", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("YM2612", NULL)); if (true) item->SetMarked(true); m->AddItem(item = new BMenuItem("YM2612 Improved", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("DAC", NULL)); if (true) item->SetMarked(true); m->AddItem(item = new BMenuItem("DAC Improved", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("PSG", NULL)); if (true) item->SetMarked(true); m->AddItem(item = new BMenuItem("PSG Improved", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("PCM", NULL)); if (true) item->SetMarked(true); m->AddItem(item = new BMenuItem("PWM", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(item = new BMenuItem("CDDA", NULL)); if (true) item->SetMarked(true); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Start WAV Dump", NULL)); m->AddItem(new BMenuItem("Start GYM Dump", NULL)); menuBar->AddItem(m); // Options menu m = new BMenu("Options"); m->AddItem(new BMenuItem("General Options", NULL)); m->AddItem(new BMenuItem("Joypads...", NULL)); m->AddItem(new BMenuItem("Directories...", NULL)); m->AddItem(new BMenuItem("BIOS/Misc Files...", NULL)); m->AddSeparatorItem(); m->AddItem(new BMenuItem("SDL Sound Test", NULL)); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Current CD Drive", NULL)); subMenu = new BMenu("Sega CD SRAM Size"); subMenu->AddItem(new BMenuItem("None", NULL)); subMenu->AddItem(new BMenuItem("8 kb", NULL)); subMenu->AddItem(new BMenuItem("16 kb", NULL)); subMenu->AddItem(new BMenuItem("32 kb", NULL)); subMenu->AddItem(new BMenuItem("64 kb", NULL)); m->AddItem(subMenu); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Load config", NULL)); m->AddItem(new BMenuItem("Save config as", NULL)); menuBar->AddItem(m); // Help menu m = new BMenu("Help"); m->AddItem(new BMenuItem("About", NULL)); menuBar->AddItem(m); }
SudokuWindow::SudokuWindow() : BWindow(BRect(100, 100, 500, 520), B_TRANSLATE_SYSTEM_NAME("Sudoku"), B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE), fGenerator(NULL), fStoredState(NULL), fExportFormat(kExportAsText) { BMessage settings; _LoadSettings(settings); BRect frame; if (settings.FindRect("window frame", &frame) == B_OK) { MoveTo(frame.LeftTop()); ResizeTo(frame.Width(), frame.Height()); frame.OffsetTo(B_ORIGIN); } else frame = Bounds(); if (settings.HasMessage("stored state")) { fStoredState = new BMessage; if (settings.FindMessage("stored state", fStoredState) != B_OK) { delete fStoredState; fStoredState = NULL; } } int32 level = 0; settings.FindInt32("level", &level); // create GUI BMenuBar* menuBar = new BMenuBar(Bounds(), "menu"); AddChild(menuBar); frame.top = menuBar->Frame().bottom; BView* top = new BView(frame, NULL, B_FOLLOW_ALL, B_WILL_DRAW); top->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(top); fSudokuView = new SudokuView( top->Bounds().InsetByCopy(10, 10).OffsetToSelf(0, 0), "sudoku view", settings, B_FOLLOW_NONE); CenteredViewContainer* container = new CenteredViewContainer(fSudokuView, top->Bounds().InsetByCopy(10, 10), "center", B_FOLLOW_ALL); container->SetHighColor(top->ViewColor()); top->AddChild(container); // add menu // "File" menu BMenu* menu = new BMenu(B_TRANSLATE("File")); fNewMenu = new BMenu(B_TRANSLATE("New")); menu->AddItem(new BMenuItem(fNewMenu, new BMessage(kMsgGenerateSudoku))); fNewMenu->Superitem()->SetShortcut('N', B_COMMAND_KEY); BMessage* message = new BMessage(kMsgGenerateSudoku); message->AddInt32("level", kEasyLevel); fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Easy"), message)); message = new BMessage(kMsgGenerateSudoku); message->AddInt32("level", kAdvancedLevel); fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Advanced"), message)); message = new BMessage(kMsgGenerateSudoku); message->AddInt32("level", kHardLevel); fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Hard"), message)); fNewMenu->AddSeparatorItem(); fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Blank"), new BMessage(kMsgNewBlank))); menu->AddItem(new BMenuItem(B_TRANSLATE("Start again"), new BMessage(kMsgStartAgain))); menu->AddSeparatorItem(); BMenu* recentsMenu = BRecentFilesList::NewFileListMenu( B_TRANSLATE("Open file" B_UTF8_ELLIPSIS), NULL, NULL, this, 10, false, NULL, kSignature); BMenuItem *item; menu->AddItem(item = new BMenuItem(recentsMenu, new BMessage(kMsgOpenFilePanel))); item->SetShortcut('O', B_COMMAND_KEY); menu->AddSeparatorItem(); BMenu* subMenu = new BMenu(B_TRANSLATE("Export as" B_UTF8_ELLIPSIS)); message = new BMessage(kMsgExportAs); message->AddInt32("as", kExportAsText); subMenu->AddItem(new BMenuItem(B_TRANSLATE("Text"), message)); message= new BMessage(kMsgExportAs); message->AddInt32("as", kExportAsHTML); subMenu->AddItem(new BMenuItem(B_TRANSLATE("HTML"), message)); menu->AddItem(subMenu); menu->AddItem(item = new BMenuItem(B_TRANSLATE("Copy"), new BMessage(B_COPY), 'C')); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"), new BMessage(B_QUIT_REQUESTED), 'Q')); menu->SetTargetForItems(this); item->SetTarget(be_app); menuBar->AddItem(menu); // "View" menu menu = new BMenu(B_TRANSLATE("View")); menu->AddItem(item = new BMenuItem(B_TRANSLATE("Mark invalid values"), new BMessage(kMsgMarkInvalid))); if ((fSudokuView->HintFlags() & kMarkInvalid) != 0) item->SetMarked(true); menu->AddItem(item = new BMenuItem(B_TRANSLATE("Mark valid hints"), new BMessage(kMsgMarkValidHints))); if ((fSudokuView->HintFlags() & kMarkValidHints) != 0) item->SetMarked(true); menu->SetTargetForItems(this); menuBar->AddItem(menu); // "Help" menu menu = new BMenu(B_TRANSLATE("Help")); menu->AddItem(fUndoItem = new BMenuItem(B_TRANSLATE("Undo"), new BMessage(B_UNDO), 'Z')); fUndoItem->SetEnabled(false); menu->AddItem(fRedoItem = new BMenuItem(B_TRANSLATE("Redo"), new BMessage(B_REDO), 'Z', B_SHIFT_KEY)); fRedoItem->SetEnabled(false); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Snapshot current"), new BMessage(kMsgStoreState))); menu->AddItem(fRestoreStateItem = new BMenuItem( B_TRANSLATE("Restore snapshot"), new BMessage(kMsgRestoreState))); fRestoreStateItem->SetEnabled(fStoredState != NULL); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Set all hints"), new BMessage(kMsgSetAllHints))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Solve"), new BMessage(kMsgSolveSudoku))); menu->AddItem(new BMenuItem(B_TRANSLATE("Solve single field"), new BMessage(kMsgSolveSingle))); menu->SetTargetForItems(fSudokuView); menuBar->AddItem(menu); fOpenPanel = new BFilePanel(B_OPEN_PANEL); fOpenPanel->SetTarget(this); fSavePanel = new BFilePanel(B_SAVE_PANEL); fSavePanel->SetTarget(this); _SetLevel(level); fSudokuView->StartWatching(this, kUndoRedoChanged); // we like to know whenever the undo/redo state changes fProgressWindow = new ProgressWindow(this, new BMessage(kMsgAbortSudokuGenerator)); if (fSudokuView->Field()->IsEmpty()) PostMessage(kMsgGenerateSudoku); }
FileTypesWindow::FileTypesWindow(const BMessage& settings) : BWindow(_Frame(settings), "FileTypes", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS), fNewTypeWindow(NULL) { bool showIcons; bool showRule; if (settings.FindBool("show_icons", &showIcons) != B_OK) showIcons = true; if (settings.FindBool("show_rule", &showRule) != B_OK) showRule = false; // add the menu BMenuBar* menuBar = new BMenuBar(BRect(0, 0, 0, 0), NULL); AddChild(menuBar); BMenu* menu = new BMenu("File"); BMenuItem* item; menu->AddItem(item = new BMenuItem("New resource file" B_UTF8_ELLIPSIS, NULL, 'N', B_COMMAND_KEY)); item->SetEnabled(false); BMenu* recentsMenu = BRecentFilesList::NewFileListMenu("Open" B_UTF8_ELLIPSIS, NULL, NULL, be_app, 10, false, NULL, kSignature); item = new BMenuItem(recentsMenu, new BMessage(kMsgOpenFilePanel)); item->SetShortcut('O', B_COMMAND_KEY); menu->AddItem(item); menu->AddItem(new BMenuItem("Application types" B_UTF8_ELLIPSIS, new BMessage(kMsgOpenApplicationTypesWindow))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem("About FileTypes" B_UTF8_ELLIPSIS, new BMessage(B_ABOUT_REQUESTED))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q', B_COMMAND_KEY)); menu->SetTargetForItems(be_app); menuBar->AddItem(menu); menu = new BMenu("Settings"); item = new BMenuItem("Show icons in list", new BMessage(kMsgToggleIcons)); item->SetMarked(showIcons); item->SetTarget(this); menu->AddItem(item); item = new BMenuItem("Show recognition rule", new BMessage(kMsgToggleRule)); item->SetMarked(showRule); item->SetTarget(this); menu->AddItem(item); menuBar->AddItem(menu); // MIME Types list BRect rect = Bounds(); rect.top = menuBar->Bounds().Height() + 1.0f; BView* topView = new BView(rect, NULL, B_FOLLOW_ALL, B_WILL_DRAW); topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); AddChild(topView); BButton* button = new BButton(rect, "add", "Add" B_UTF8_ELLIPSIS, new BMessage(kMsgAddType), B_FOLLOW_BOTTOM); button->ResizeToPreferred(); button->MoveTo(8.0f, topView->Bounds().bottom - 8.0f - button->Bounds().Height()); topView->AddChild(button); rect = button->Frame(); rect.OffsetBy(rect.Width() + 8.0f, 0.0f); fRemoveTypeButton = new BButton(rect, "remove", "Remove", new BMessage(kMsgRemoveType), B_FOLLOW_BOTTOM); fRemoveTypeButton->ResizeToPreferred(); topView->AddChild(fRemoveTypeButton); rect.bottom = rect.top - 10.0f; rect.top = 10.0f; rect.left = 10.0f; rect.right -= B_V_SCROLL_BAR_WIDTH + 2.0f; if (rect.right < 180) rect.right = 180; fTypeListView = new MimeTypeListView(rect, "typeview", NULL, showIcons, false, B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM); fTypeListView->SetSelectionMessage(new BMessage(kMsgTypeSelected)); BScrollView* scrollView = new BScrollView("scrollview", fTypeListView, B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM, B_FRAME_EVENTS | B_WILL_DRAW, false, true); topView->AddChild(scrollView); // "Icon" group font_height plainHeight; be_plain_font->GetHeight(&plainHeight); float height = ceilf(plainHeight.ascent + plainHeight.descent + plainHeight.leading) + 2.0f; BFont font(be_bold_font); float labelWidth = font.StringWidth("Icon"); font_height boldHeight; font.GetHeight(&boldHeight); BRect innerRect; fIconView = new TypeIconView(innerRect, "icon", B_FOLLOW_LEFT | B_FOLLOW_V_CENTER); fIconView->ResizeToPreferred(); rect.left = rect.right + 12.0f + B_V_SCROLL_BAR_WIDTH; rect.right = rect.left + max_c(fIconView->Bounds().Width(), labelWidth) + 16.0f; rect.bottom = rect.top + ceilf(boldHeight.ascent) + max_c(fIconView->Bounds().Height(), button->Bounds().Height() * 2.0f + height + 4.0f) + 12.0f; rect.top -= 2.0f; fIconBox = new BBox(rect); fIconBox->SetLabel("Icon"); topView->AddChild(fIconBox); innerRect.left = 8.0f; innerRect.top = plainHeight.ascent + 3.0f + (rect.Height() - boldHeight.ascent - fIconView->Bounds().Height()) / 2.0f; if (innerRect.top + fIconView->Bounds().Height() > fIconBox->Bounds().Height() - 6.0f) innerRect.top = fIconBox->Bounds().Height() - 6.0f - fIconView->Bounds().Height(); fIconView->MoveTo(innerRect.LeftTop()); fIconBox->AddChild(fIconView); // "File Recognition" group BRect rightRect(rect); rightRect.left = rect.right + 8.0f; rightRect.right = topView->Bounds().Width() - 8.0f; fRecognitionBox = new BBox(rightRect, NULL, B_FOLLOW_LEFT_RIGHT); fRecognitionBox->SetLabel("File recognition"); topView->AddChild(fRecognitionBox); innerRect = fRecognitionBox->Bounds().InsetByCopy(8.0f, 4.0f); innerRect.top += ceilf(boldHeight.ascent); fExtensionLabel = new StringView(innerRect, "extension", "Extensions:", NULL); fExtensionLabel->SetAlignment(B_ALIGN_LEFT, B_ALIGN_LEFT); fExtensionLabel->ResizeToPreferred(); fRecognitionBox->AddChild(fExtensionLabel); innerRect.top += fExtensionLabel->Bounds().Height() + 2.0f; innerRect.left = innerRect.right - button->StringWidth("Remove") - 16.0f; innerRect.bottom = innerRect.top + button->Bounds().Height(); fAddExtensionButton = new BButton(innerRect, "add ext", "Add" B_UTF8_ELLIPSIS, new BMessage(kMsgAddExtension), B_FOLLOW_RIGHT); fRecognitionBox->AddChild(fAddExtensionButton); innerRect.OffsetBy(0, innerRect.Height() + 4.0f); fRemoveExtensionButton = new BButton(innerRect, "remove ext", "Remove", new BMessage(kMsgRemoveExtension), B_FOLLOW_RIGHT); fRecognitionBox->AddChild(fRemoveExtensionButton); innerRect.right = innerRect.left - 10.0f - B_V_SCROLL_BAR_WIDTH; innerRect.left = 10.0f; innerRect.top = fAddExtensionButton->Frame().top + 2.0f; innerRect.bottom = innerRect.bottom - 2.0f; // take scrollview border into account fExtensionListView = new ExtensionListView(innerRect, "listview ext", B_SINGLE_SELECTION_LIST, B_FOLLOW_LEFT_RIGHT); fExtensionListView->SetSelectionMessage(new BMessage(kMsgExtensionSelected)); fExtensionListView->SetInvocationMessage(new BMessage(kMsgExtensionInvoked)); scrollView = new BScrollView("scrollview ext", fExtensionListView, B_FOLLOW_LEFT_RIGHT, B_FRAME_EVENTS | B_WILL_DRAW, false, true); fRecognitionBox->AddChild(scrollView); innerRect.left = 8.0f; innerRect.top = innerRect.bottom + 10.0f; innerRect.right = fRecognitionBox->Bounds().right - 8.0f; innerRect.bottom = innerRect.top + 20.0f; fRuleControl = new BTextControl(innerRect, "rule", "Rule:", "", new BMessage(kMsgRuleEntered), B_FOLLOW_LEFT_RIGHT); //fRuleControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); fRuleControl->SetDivider(fRuleControl->StringWidth(fRuleControl->Label()) + 6.0f); fRuleControl->Hide(); fRecognitionBox->AddChild(fRuleControl); // "Description" group rect.top = rect.bottom + 8.0f; rect.bottom = rect.top + ceilf(boldHeight.ascent) + 24.0f; rect.right = rightRect.right; fDescriptionBox = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT); fDescriptionBox->SetLabel("Description"); topView->AddChild(fDescriptionBox); innerRect = fDescriptionBox->Bounds().InsetByCopy(8.0f, 6.0f); innerRect.top += ceilf(boldHeight.ascent); innerRect.bottom = innerRect.top + button->Bounds().Height(); fInternalNameView = new StringView(innerRect, "internal", "Internal name:", "", B_FOLLOW_LEFT_RIGHT); labelWidth = fInternalNameView->StringWidth(fInternalNameView->Label()) + 2.0f; fInternalNameView->SetDivider(labelWidth); fInternalNameView->SetEnabled(false); fInternalNameView->ResizeToPreferred(); fDescriptionBox->AddChild(fInternalNameView); innerRect.OffsetBy(0, fInternalNameView->Bounds().Height() + 5.0f); fTypeNameControl = new BTextControl(innerRect, "type", "Type name:", "", new BMessage(kMsgTypeEntered), B_FOLLOW_LEFT_RIGHT); fTypeNameControl->SetDivider(labelWidth); fTypeNameControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); fDescriptionBox->ResizeBy(0, fInternalNameView->Bounds().Height() + fTypeNameControl->Bounds().Height() * 2.0f); fDescriptionBox->AddChild(fTypeNameControl); innerRect.OffsetBy(0, fTypeNameControl->Bounds().Height() + 5.0f); fDescriptionControl = new BTextControl(innerRect, "description", "Description:", "", new BMessage(kMsgDescriptionEntered), B_FOLLOW_LEFT_RIGHT); fDescriptionControl->SetDivider(labelWidth); fDescriptionControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); fDescriptionBox->AddChild(fDescriptionControl); // "Preferred Application" group rect = fDescriptionBox->Frame(); rect.top = rect.bottom + 8.0f; rect.bottom = rect.top + ceilf(boldHeight.ascent) + button->Bounds().Height() + 14.0f; fPreferredBox = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT); fPreferredBox->SetLabel("Preferred application"); topView->AddChild(fPreferredBox); innerRect = fPreferredBox->Bounds().InsetByCopy(8.0f, 6.0f); innerRect.top += ceilf(boldHeight.ascent); innerRect.left = innerRect.right - button->StringWidth( "Same as" B_UTF8_ELLIPSIS) - 24.0f; innerRect.bottom = innerRect.top + button->Bounds().Height(); fSameAsButton = new BButton(innerRect, "same as", "Same as" B_UTF8_ELLIPSIS, new BMessage(kMsgSamePreferredAppAs), B_FOLLOW_RIGHT); fPreferredBox->AddChild(fSameAsButton); innerRect.OffsetBy(-innerRect.Width() - 6.0f, 0.0f); fSelectButton = new BButton(innerRect, "select", "Select" B_UTF8_ELLIPSIS, new BMessage(kMsgSelectPreferredApp), B_FOLLOW_RIGHT); fPreferredBox->AddChild(fSelectButton); menu = new BPopUpMenu("preferred"); menu->AddItem(item = new BMenuItem("None", new BMessage(kMsgPreferredAppChosen))); item->SetMarked(true); innerRect.right = innerRect.left - 6.0f; innerRect.left = 8.0f; fPreferredField = new BMenuField(innerRect, "preferred", NULL, menu, true, B_FOLLOW_LEFT_RIGHT); float width; fPreferredField->GetPreferredSize(&width, &height); fPreferredField->ResizeTo(innerRect.Width(), height); fPreferredField->MoveBy(0.0f, (innerRect.Height() - height) / 2.0f); fPreferredBox->AddChild(fPreferredField); // "Extra Attributes" group rect.top = rect.bottom + 8.0f; rect.bottom = topView->Bounds().Height() - 8.0f; fAttributeBox = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP_BOTTOM); fAttributeBox->SetLabel("Extra attributes"); topView->AddChild(fAttributeBox); innerRect = fAttributeBox->Bounds().InsetByCopy(8.0f, 6.0f); innerRect.top += ceilf(boldHeight.ascent); innerRect.left = innerRect.right - button->StringWidth("Remove") - 16.0f; innerRect.bottom = innerRect.top + button->Bounds().Height(); fAddAttributeButton = new BButton(innerRect, "add attr", "Add" B_UTF8_ELLIPSIS, new BMessage(kMsgAddAttribute), B_FOLLOW_RIGHT); fAttributeBox->AddChild(fAddAttributeButton); innerRect.OffsetBy(0, innerRect.Height() + 4.0f); fRemoveAttributeButton = new BButton(innerRect, "remove attr", "Remove", new BMessage(kMsgRemoveAttribute), B_FOLLOW_RIGHT); fAttributeBox->AddChild(fRemoveAttributeButton); /* innerRect.OffsetBy(0, innerRect.Height() + 4.0f); button = new BButton(innerRect, "push attr", "Push Up", new BMessage(kMsgRemoveAttribute), B_FOLLOW_RIGHT); fAttributeBox->AddChild(button); */ innerRect.right = innerRect.left - 10.0f - B_V_SCROLL_BAR_WIDTH; innerRect.left = 10.0f; innerRect.top = 8.0f + ceilf(boldHeight.ascent); innerRect.bottom = fAttributeBox->Bounds().bottom - 10.0f; // take scrollview border into account fAttributeListView = new AttributeListView(innerRect, "listview attr", B_FOLLOW_ALL); fAttributeListView->SetSelectionMessage(new BMessage(kMsgAttributeSelected)); fAttributeListView->SetInvocationMessage(new BMessage(kMsgAttributeInvoked)); scrollView = new BScrollView("scrollview attr", fAttributeListView, B_FOLLOW_ALL, B_FRAME_EVENTS | B_WILL_DRAW, false, true); fAttributeBox->AddChild(scrollView); SetSizeLimits(rightRect.left + 72.0f + font.StringWidth("jpg") + font.StringWidth(fRecognitionBox->Label()), 32767.0f, rect.top + 2.0f * button->Bounds().Height() + boldHeight.ascent + 32.0f + menuBar->Bounds().Height(), 32767.0f); _SetType(NULL); _ShowSnifferRule(showRule); BMimeType::StartWatching(this); }
FileTypesWindow::FileTypesWindow(const BMessage& settings) : BWindow(_Frame(settings), B_TRANSLATE_SYSTEM_NAME("FileTypes"), B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS), fNewTypeWindow(NULL) { bool showIcons; bool showRule; if (settings.FindBool("show_icons", &showIcons) != B_OK) showIcons = true; if (settings.FindBool("show_rule", &showRule) != B_OK) showRule = false; float padding = be_control_look->DefaultItemSpacing(); BAlignment labelAlignment = be_control_look->DefaultLabelAlignment(); BAlignment fullAlignment(B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT); // add the menu BMenuBar* menuBar = new BMenuBar(""); BMenu* menu = new BMenu(B_TRANSLATE("File")); BMenuItem* item = new BMenuItem( B_TRANSLATE("New resource file" B_UTF8_ELLIPSIS), NULL, 'N', B_COMMAND_KEY); item->SetEnabled(false); menu->AddItem(item); BMenu* recentsMenu = BRecentFilesList::NewFileListMenu( B_TRANSLATE("Open" B_UTF8_ELLIPSIS), NULL, NULL, be_app, 10, false, NULL, kSignature); item = new BMenuItem(recentsMenu, new BMessage(kMsgOpenFilePanel)); item->SetShortcut('O', B_COMMAND_KEY); menu->AddItem(item); menu->AddItem(new BMenuItem( B_TRANSLATE("Application types" B_UTF8_ELLIPSIS), new BMessage(kMsgOpenApplicationTypesWindow))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"), new BMessage(B_QUIT_REQUESTED), 'Q', B_COMMAND_KEY)); menu->SetTargetForItems(be_app); menuBar->AddItem(menu); menu = new BMenu(B_TRANSLATE("Settings")); item = new BMenuItem(B_TRANSLATE("Show icons in list"), new BMessage(kMsgToggleIcons)); item->SetMarked(showIcons); item->SetTarget(this); menu->AddItem(item); item = new BMenuItem(B_TRANSLATE("Show recognition rule"), new BMessage(kMsgToggleRule)); item->SetMarked(showRule); item->SetTarget(this); menu->AddItem(item); menuBar->AddItem(menu); menuBar->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_TOP)); // MIME Types list BButton* addTypeButton = new BButton("add", B_TRANSLATE("Add" B_UTF8_ELLIPSIS), new BMessage(kMsgAddType)); fRemoveTypeButton = new BButton("remove", B_TRANSLATE("Remove"), new BMessage(kMsgRemoveType) ); fTypeListView = new MimeTypeListView("typeview", NULL, showIcons, false); fTypeListView->SetSelectionMessage(new BMessage(kMsgTypeSelected)); fTypeListView->SetExplicitMinSize(BSize(200, B_SIZE_UNSET)); BScrollView* typeListScrollView = new BScrollView("scrollview", fTypeListView, B_FRAME_EVENTS | B_WILL_DRAW, false, true); // "Icon" group fIconView = new TypeIconView("icon"); fIconBox = new BBox("Icon BBox"); fIconBox->SetLabel(B_TRANSLATE("Icon")); BLayoutBuilder::Group<>(fIconBox, B_VERTICAL, padding) .SetInsets(padding) .AddGlue(1) .Add(fIconView, 3) .AddGlue(1); // "File Recognition" group fRecognitionBox = new BBox("Recognition Box"); fRecognitionBox->SetLabel(B_TRANSLATE("File recognition")); fRecognitionBox->SetExplicitAlignment(fullAlignment); fExtensionLabel = new StringView(B_TRANSLATE("Extensions:"), NULL); fExtensionLabel->LabelView()->SetExplicitAlignment(labelAlignment); fAddExtensionButton = new BButton("add ext", B_TRANSLATE("Add" B_UTF8_ELLIPSIS), new BMessage(kMsgAddExtension)); fAddExtensionButton->SetExplicitMaxSize( BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); fRemoveExtensionButton = new BButton("remove ext", B_TRANSLATE("Remove"), new BMessage(kMsgRemoveExtension)); fExtensionListView = new ExtensionListView("listview ext", B_SINGLE_SELECTION_LIST); fExtensionListView->SetSelectionMessage( new BMessage(kMsgExtensionSelected)); fExtensionListView->SetInvocationMessage( new BMessage(kMsgExtensionInvoked)); BScrollView* scrollView = new BScrollView("scrollview ext", fExtensionListView, B_FRAME_EVENTS | B_WILL_DRAW, false, true); fRuleControl = new BTextControl("rule", B_TRANSLATE("Rule:"), "", new BMessage(kMsgRuleEntered)); fRuleControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); fRuleControl->Hide(); BLayoutBuilder::Grid<>(fRecognitionBox, padding, padding / 2) .SetInsets(padding, padding * 2, padding, padding) .Add(fExtensionLabel->LabelView(), 0, 0) .Add(scrollView, 0, 1, 2, 2) .Add(fAddExtensionButton, 2, 1) .Add(fRemoveExtensionButton, 2, 2) .Add(fRuleControl, 0, 3, 3, 1); // "Description" group fDescriptionBox = new BBox("description BBox"); fDescriptionBox->SetLabel(B_TRANSLATE("Description")); fDescriptionBox->SetExplicitAlignment(fullAlignment); fInternalNameView = new StringView(B_TRANSLATE("Internal name:"), NULL); fInternalNameView->SetEnabled(false); fTypeNameControl = new BTextControl("type", B_TRANSLATE("Type name:"), "", new BMessage(kMsgTypeEntered)); fDescriptionControl = new BTextControl("description", B_TRANSLATE("Description:"), "", new BMessage(kMsgDescriptionEntered)); BLayoutBuilder::Grid<>(fDescriptionBox, padding / 2, padding / 2) .SetInsets(padding, padding * 2, padding, padding) .Add(fInternalNameView->LabelView(), 0, 0) .Add(fInternalNameView->TextView(), 1, 0) .Add(fTypeNameControl->CreateLabelLayoutItem(), 0, 1) .Add(fTypeNameControl->CreateTextViewLayoutItem(), 1, 1, 2) .Add(fDescriptionControl->CreateLabelLayoutItem(), 0, 2) .Add(fDescriptionControl->CreateTextViewLayoutItem(), 1, 2, 2); // "Preferred Application" group fPreferredBox = new BBox("preferred BBox"); fPreferredBox->SetLabel(B_TRANSLATE("Preferred application")); menu = new BPopUpMenu("preferred"); menu->AddItem(item = new BMenuItem(B_TRANSLATE("None"), new BMessage(kMsgPreferredAppChosen))); item->SetMarked(true); fPreferredField = new BMenuField("preferred", (char*)NULL, menu); fSelectButton = new BButton("select", B_TRANSLATE("Select" B_UTF8_ELLIPSIS), new BMessage(kMsgSelectPreferredApp)); fSameAsButton = new BButton("same as", B_TRANSLATE("Same as" B_UTF8_ELLIPSIS), new BMessage(kMsgSamePreferredAppAs)); BLayoutBuilder::Group<>(fPreferredBox, B_HORIZONTAL, padding) .SetInsets(padding, padding * 2, padding, padding) .Add(fPreferredField) .Add(fSelectButton) .Add(fSameAsButton); // "Extra Attributes" group fAttributeBox = new BBox("Attribute Box"); fAttributeBox->SetLabel(B_TRANSLATE("Extra attributes")); fAddAttributeButton = new BButton("add attr", B_TRANSLATE("Add" B_UTF8_ELLIPSIS), new BMessage(kMsgAddAttribute)); fAddAttributeButton->SetExplicitMaxSize( BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); fRemoveAttributeButton = new BButton("remove attr", B_TRANSLATE("Remove"), new BMessage(kMsgRemoveAttribute)); fRemoveAttributeButton->SetExplicitMaxSize( BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); fMoveUpAttributeButton = new BButton("move up attr", B_TRANSLATE("Move up"), new BMessage(kMsgMoveUpAttribute)); fMoveUpAttributeButton->SetExplicitMaxSize( BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); fMoveDownAttributeButton = new BButton("move down attr", B_TRANSLATE("Move down"), new BMessage(kMsgMoveDownAttribute)); fMoveDownAttributeButton->SetExplicitMaxSize( BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); fAttributeListView = new AttributeListView("listview attr"); fAttributeListView->SetSelectionMessage( new BMessage(kMsgAttributeSelected)); fAttributeListView->SetInvocationMessage( new BMessage(kMsgAttributeInvoked)); BScrollView* attributesScroller = new BScrollView("scrollview attr", fAttributeListView, B_FRAME_EVENTS | B_WILL_DRAW, false, true); BLayoutBuilder::Group<>(fAttributeBox, B_HORIZONTAL, padding) .SetInsets(padding, padding * 2, padding, padding) .Add(attributesScroller, 1.0f) .AddGroup(B_VERTICAL, padding / 2, 0.0f) .SetInsets(0) .Add(fAddAttributeButton) .Add(fRemoveAttributeButton) .AddStrut(padding) .Add(fMoveUpAttributeButton) .Add(fMoveDownAttributeButton) .AddGlue(); fMainSplitView = new BSplitView(B_HORIZONTAL, floorf(padding / 2)); BLayoutBuilder::Group<>(this, B_VERTICAL, 0) .SetInsets(0) .Add(menuBar) .AddGroup(B_HORIZONTAL, 0) .SetInsets(padding, padding, padding, padding) .AddSplit(fMainSplitView) .AddGroup(B_VERTICAL, padding) .Add(typeListScrollView) .AddGroup(B_HORIZONTAL, padding) .Add(addTypeButton) .Add(fRemoveTypeButton) .AddGlue() .End() .End() // Right side .AddGroup(B_VERTICAL, padding) .AddGroup(B_HORIZONTAL, padding) .Add(fIconBox, 1) .Add(fRecognitionBox, 3) .End() .Add(fDescriptionBox) .Add(fPreferredBox) .Add(fAttributeBox, 5); _SetType(NULL); _ShowSnifferRule(showRule); float leftWeight; float rightWeight; if (settings.FindFloat("left_split_weight", &leftWeight) != B_OK || settings.FindFloat("right_split_weight", &rightWeight) != B_OK) { leftWeight = 0.2; rightWeight = 1.0 - leftWeight; } fMainSplitView->SetItemWeight(0, leftWeight, false); fMainSplitView->SetItemWeight(1, rightWeight, true); BMimeType::StartWatching(this); }
void ShowImageWindow::_AddMenus(BMenuBar* bar) { BMenu* menu = new BMenu(B_TRANSLATE("File")); // Add recent files to "Open File" entry as sub-menu. BMenuItem* item = new BMenuItem(BRecentFilesList::NewFileListMenu( B_TRANSLATE("Open" B_UTF8_ELLIPSIS), NULL, NULL, be_app, 10, true, NULL, kApplicationSignature), new BMessage(MSG_FILE_OPEN)); item->SetShortcut('O', 0); item->SetTarget(be_app); menu->AddItem(item); menu->AddSeparatorItem(); BMenu* menuSaveAs = new BMenu(B_TRANSLATE("Save as" B_UTF8_ELLIPSIS), B_ITEMS_IN_COLUMN); BTranslationUtils::AddTranslationItems(menuSaveAs, B_TRANSLATOR_BITMAP); // Fill Save As submenu with all types that can be converted // to from the Be bitmap image format menu->AddItem(menuSaveAs); _AddItemMenu(menu, B_TRANSLATE("Close"), B_QUIT_REQUESTED, 'W', 0, this); _AddItemMenu(menu, B_TRANSLATE("Move to Trash"), kMsgDeleteCurrentFile, 'T', 0, this); menu->AddSeparatorItem(); _AddItemMenu(menu, B_TRANSLATE("Page setup" B_UTF8_ELLIPSIS), MSG_PAGE_SETUP, 0, 0, this); _AddItemMenu(menu, B_TRANSLATE("Print" B_UTF8_ELLIPSIS), MSG_PREPARE_PRINT, 'P', 0, this); menu->AddSeparatorItem(); _AddItemMenu(menu, B_TRANSLATE("Quit"), B_QUIT_REQUESTED, 'Q', 0, be_app); bar->AddItem(menu); menu = new BMenu(B_TRANSLATE("Edit")); _AddItemMenu(menu, B_TRANSLATE("Copy"), B_COPY, 'C', 0, this, false); menu->AddSeparatorItem(); _AddItemMenu(menu, B_TRANSLATE("Selection mode"), MSG_SELECTION_MODE, 0, 0, this); _AddItemMenu(menu, B_TRANSLATE("Clear selection"), MSG_CLEAR_SELECT, 0, 0, this, false); _AddItemMenu(menu, B_TRANSLATE("Select all"), MSG_SELECT_ALL, 'A', 0, this); bar->AddItem(menu); menu = fBrowseMenu = new BMenu(B_TRANSLATE("Browse")); _AddItemMenu(menu, B_TRANSLATE("First page"), MSG_PAGE_FIRST, B_LEFT_ARROW, B_SHIFT_KEY, this); _AddItemMenu(menu, B_TRANSLATE("Last page"), MSG_PAGE_LAST, B_RIGHT_ARROW, B_SHIFT_KEY, this); _AddItemMenu(menu, B_TRANSLATE("Previous page"), MSG_PAGE_PREV, B_LEFT_ARROW, 0, this); _AddItemMenu(menu, B_TRANSLATE("Next page"), MSG_PAGE_NEXT, B_RIGHT_ARROW, 0, this); fGoToPageMenu = new BMenu(B_TRANSLATE("Go to page")); fGoToPageMenu->SetRadioMode(true); menu->AddItem(fGoToPageMenu); menu->AddSeparatorItem(); _AddItemMenu(menu, B_TRANSLATE("Previous file"), MSG_FILE_PREV, B_UP_ARROW, 0, this); _AddItemMenu(menu, B_TRANSLATE("Next file"), MSG_FILE_NEXT, B_DOWN_ARROW, 0, this); bar->AddItem(menu); menu = new BMenu(B_TRANSLATE("Image")); _AddItemMenu(menu, B_TRANSLATE("Rotate clockwise"), MSG_ROTATE_90, 'R', 0, this); _AddItemMenu(menu, B_TRANSLATE("Rotate counterclockwise"), MSG_ROTATE_270, 'R', B_SHIFT_KEY, this); menu->AddSeparatorItem(); _AddItemMenu(menu, B_TRANSLATE("Flip left to right"), MSG_FLIP_LEFT_TO_RIGHT, 0, 0, this); _AddItemMenu(menu, B_TRANSLATE("Flip top to bottom"), MSG_FLIP_TOP_TO_BOTTOM, 0, 0, this); menu->AddSeparatorItem(); _AddItemMenu(menu, B_TRANSLATE("Use as background" B_UTF8_ELLIPSIS), MSG_DESKTOP_BACKGROUND, 0, 0, this); bar->AddItem(menu); }
void PairsWindow::_MakeMenuBar() { fMenuBar = new BMenuBar(BRect(0, 0, 0, 0), "menubar"); AddChild(fMenuBar); BMenu* gameMenu = new BMenu(B_TRANSLATE("Game")); fMenuBar->AddItem(gameMenu); BMenuItem* menuItem; BMenu* newMenu = new BMenu(B_TRANSLATE("New")); newMenu->SetRadioMode(true); BMessage* difficultyMessage = new BMessage(MENU_DIFFICULTY); difficultyMessage->AddInt32("rows", 4); difficultyMessage->AddInt32("cols", 4); newMenu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Beginner (4x4)"), difficultyMessage)); menuItem->SetMarked(true); difficultyMessage = new BMessage(MENU_DIFFICULTY); difficultyMessage->AddInt32("rows", 6); difficultyMessage->AddInt32("cols", 6); newMenu->AddItem(menuItem = new BMenuItem( B_TRANSLATE("Intermediate (6x6)"), difficultyMessage)); difficultyMessage = new BMessage(MENU_DIFFICULTY); difficultyMessage->AddInt32("rows", 8); difficultyMessage->AddInt32("cols", 8); newMenu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Expert (8x8)"), difficultyMessage)); menuItem = new BMenuItem(newMenu, new BMessage(MENU_NEW)); menuItem->SetShortcut('N', B_COMMAND_KEY); gameMenu->AddItem(menuItem); gameMenu->AddSeparatorItem(); gameMenu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Quit"), new BMessage(MENU_QUIT), 'Q')); fIconSizeMenu = new BMenu(B_TRANSLATE("Size")); fIconSizeMenu->SetRadioMode(true); fMenuBar->AddItem(fIconSizeMenu); BMessage* iconSizeMessage = new BMessage(MENU_ICON_SIZE); iconSizeMessage->AddInt32("size", kSmallIconSize); fIconSizeMenu->AddItem(menuItem = new BMenuItem( B_TRANSLATE("Small"), iconSizeMessage), 0); iconSizeMessage = new BMessage(MENU_ICON_SIZE); iconSizeMessage->AddInt32("size", kMediumIconSize); fIconSizeMenu->AddItem(menuItem = new BMenuItem( B_TRANSLATE("Medium"), iconSizeMessage), 1); menuItem->SetMarked(true); iconSizeMessage = new BMessage(MENU_ICON_SIZE); iconSizeMessage->AddInt32("size", kLargeIconSize); fIconSizeMenu->AddItem(menuItem = new BMenuItem( B_TRANSLATE("Large"), iconSizeMessage), 2); }