From d6005b727c16b381c759f4f74d062a0f9ee0674b Mon Sep 17 00:00:00 2001 From: Pascal Abresch Date: Wed, 23 Sep 2020 18:06:40 +0200 Subject: [PATCH] StyledEdit: convert main view to layout api Change-Id: I913c8f559faf09654b0e249f512858ed24fe1ffe Reviewed-on: https://review.haiku-os.org/c/haiku/+/3537 Reviewed-by: John Scipione --- src/apps/stylededit/StyledEditWindow.cpp | 229 ++++++++++------------- src/apps/stylededit/StyledEditWindow.h | 1 - 2 files changed, 101 insertions(+), 129 deletions(-) diff --git a/src/apps/stylededit/StyledEditWindow.cpp b/src/apps/stylededit/StyledEditWindow.cpp index cdf61190e2..32e883b288 100644 --- a/src/apps/stylededit/StyledEditWindow.cpp +++ b/src/apps/stylededit/StyledEditWindow.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -230,13 +231,10 @@ StyledEditWindow::MessageReceived(BMessage* message) fTextView->Undo(be_clipboard); break; case B_CUT: - fTextView->Cut(be_clipboard); - break; case B_COPY: - fTextView->Copy(be_clipboard); - break; case B_PASTE: - fTextView->Paste(be_clipboard); + case B_SELECT_ALL: + fTextView->MessageReceived(message); break; case MENU_CLEAR: fTextView->Clear(); @@ -1122,18 +1120,10 @@ StyledEditWindow::_InitWindow(uint32 encoding) fNagOnNodeChange = true; - // add menubar - fMenuBar = new BMenuBar(BRect(0, 0, 0, 0), "menubar"); - AddChild(fMenuBar); // add textview and scrollview BRect viewFrame = Bounds(); - viewFrame.top = fMenuBar->Bounds().Height() + 1; - viewFrame.right -= B_V_SCROLL_BAR_WIDTH; - viewFrame.left = 0; - viewFrame.bottom -= B_H_SCROLL_BAR_HEIGHT; - BRect textBounds = viewFrame; textBounds.OffsetTo(B_ORIGIN); textBounds.InsetBy(TEXT_INSET, TEXT_INSET); @@ -1145,106 +1135,51 @@ StyledEditWindow::_InitWindow(uint32 encoding) fScrollView = new BScrollView("scrollview", fTextView, B_FOLLOW_ALL, 0, true, true, B_PLAIN_BORDER); - AddChild(fScrollView); fTextView->MakeFocus(true); fStatusView = new StatusView(fScrollView); fScrollView->AddChild(fStatusView); - // Add "File"-menu: - BMenu* menu = new BMenu(B_TRANSLATE("File")); - fMenuBar->AddItem(menu); - - BMenuItem* menuItem; - menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("New"), - new BMessage(MENU_NEW), 'N')); - menuItem->SetTarget(be_app); - - menu->AddItem(menuItem = new BMenuItem(BRecentFilesList::NewFileListMenu( + BMenuItem* openItem = new BMenuItem(BRecentFilesList::NewFileListMenu( B_TRANSLATE("Open" B_UTF8_ELLIPSIS), NULL, NULL, be_app, 9, true, - NULL, APP_SIGNATURE), new BMessage(MENU_OPEN))); - menuItem->SetShortcut('O', 0); - menuItem->SetTarget(be_app); - menu->AddSeparatorItem(); + NULL, APP_SIGNATURE), new BMessage(MENU_OPEN)); + openItem->SetShortcut('O', 0); + openItem->SetTarget(be_app); - menu->AddItem(fSaveItem = new BMenuItem(B_TRANSLATE("Save"), - new BMessage(MENU_SAVE), 'S')); + fSaveItem = new BMenuItem(B_TRANSLATE("Save"),new BMessage(MENU_SAVE), 'S'); fSaveItem->SetEnabled(false); - menu->AddItem(menuItem = new BMenuItem( - B_TRANSLATE("Save as" B_UTF8_ELLIPSIS), new BMessage(MENU_SAVEAS))); - menuItem->SetShortcut('S', B_SHIFT_KEY); - menuItem->SetEnabled(true); - menu->AddItem(fReloadItem - = new BMenuItem(B_TRANSLATE("Reload" B_UTF8_ELLIPSIS), - new BMessage(MENU_RELOAD), 'L')); + fReloadItem = new BMenuItem(B_TRANSLATE("Reload" B_UTF8_ELLIPSIS), + new BMessage(MENU_RELOAD), 'L'); fReloadItem->SetEnabled(false); - menu->AddItem(new BMenuItem(B_TRANSLATE("Close"), - new BMessage(MENU_CLOSE), 'W')); - - menu->AddSeparatorItem(); - menu->AddItem(new BMenuItem(B_TRANSLATE("Page setup" B_UTF8_ELLIPSIS), - new BMessage(MENU_PAGESETUP))); - menu->AddItem(new BMenuItem(B_TRANSLATE("Print" B_UTF8_ELLIPSIS), - new BMessage(MENU_PRINT), 'P')); - - menu->AddSeparatorItem(); - menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"), - new BMessage(MENU_QUIT), 'Q')); - - // Add the "Edit"-menu: - menu = new BMenu(B_TRANSLATE("Edit")); - fMenuBar->AddItem(menu); - - menu->AddItem(fUndoItem = new BMenuItem(B_TRANSLATE("Can't undo"), - new BMessage(B_UNDO), 'Z')); + fUndoItem = new BMenuItem(B_TRANSLATE("Can't undo"), + new BMessage(B_UNDO), 'Z'); fUndoItem->SetEnabled(false); - menu->AddSeparatorItem(); - menu->AddItem(fCutItem = new BMenuItem(B_TRANSLATE("Cut"), - new BMessage(B_CUT), 'X')); + fCutItem = new BMenuItem(B_TRANSLATE("Cut"), + new BMessage(B_CUT), 'X'); fCutItem->SetEnabled(false); - fCutItem->SetTarget(fTextView); - menu->AddItem(fCopyItem = new BMenuItem(B_TRANSLATE("Copy"), - new BMessage(B_COPY), 'C')); + fCopyItem = new BMenuItem(B_TRANSLATE("Copy"), + new BMessage(B_COPY), 'C'); fCopyItem->SetEnabled(false); - fCopyItem->SetTarget(fTextView); - menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Paste"), - new BMessage(B_PASTE), 'V')); - menuItem->SetTarget(fTextView); - - menu->AddSeparatorItem(); - menu->AddItem(menuItem = new BMenuItem(B_TRANSLATE("Select all"), - new BMessage(B_SELECT_ALL), 'A')); - menuItem->SetTarget(fTextView); - - menu->AddSeparatorItem(); - menu->AddItem(new BMenuItem(B_TRANSLATE("Find" B_UTF8_ELLIPSIS), - new BMessage(MENU_FIND), 'F')); - menu->AddItem(fFindAgainItem= new BMenuItem(B_TRANSLATE("Find again"), - new BMessage(MENU_FIND_AGAIN), 'G')); + fFindAgainItem = new BMenuItem(B_TRANSLATE("Find again"), + new BMessage(MENU_FIND_AGAIN), 'G'); fFindAgainItem->SetEnabled(false); - menu->AddItem(new BMenuItem(B_TRANSLATE("Find selection"), - new BMessage(MENU_FIND_SELECTION), 'H')); - menu->AddItem(fReplaceItem = new BMenuItem(B_TRANSLATE("Replace" B_UTF8_ELLIPSIS), - new BMessage(MENU_REPLACE), 'R')); - menu->AddItem(fReplaceSameItem = new BMenuItem(B_TRANSLATE("Replace next"), - new BMessage(MENU_REPLACE_SAME), 'T')); + fReplaceItem = new BMenuItem(B_TRANSLATE(B_UTF8_ELLIPSIS), + new BMessage(MENU_REPLACE), 'R'); + + fReplaceSameItem = new BMenuItem(B_TRANSLATE("Replace next"), + new BMessage(MENU_REPLACE_SAME), 'T'); fReplaceSameItem->SetEnabled(false); - // Add the "Font"-menu: - fFontMenu = new BMenu(B_TRANSLATE("Font")); - fMenuBar->AddItem(fFontMenu); - - // "Size"-subMenu fFontSizeMenu = new BMenu(B_TRANSLATE("Size")); fFontSizeMenu->SetRadioMode(true); - fFontMenu->AddItem(fFontSizeMenu); + BMenuItem* menuItem; for (uint32 i = 0; i < sizeof(fontSizes) / sizeof(fontSizes[0]); i++) { BMessage* fontMessage = new BMessage(FONT_SIZE); fontMessage->AddFloat("size", fontSizes[i]); @@ -1257,38 +1192,35 @@ StyledEditWindow::_InitWindow(uint32 encoding) menuItem->SetMarked(true); } - // "Color"-subMenu fFontColorMenu = new BMenu(B_TRANSLATE("Color"), 0, 0); fFontColorMenu->SetRadioMode(true); - fFontMenu->AddItem(fFontColorMenu); _BuildFontColorMenu(fFontColorMenu); - fFontMenu->AddSeparatorItem(); - - BMenuItem* fontSizeUpItem = new BMenuItem(B_TRANSLATE("Increase size"), - new BMessage(kMsgSetFontUp)); - BMenuItem* fontSizeDownItem = new BMenuItem(B_TRANSLATE("Decrease size"), - new BMessage(kMsgSetFontDown)); - fFontMenu->AddItem(fontSizeUpItem); - fFontMenu->AddItem(fontSizeDownItem); - fontSizeUpItem->SetShortcut('+', 0); - fontSizeDownItem->SetShortcut('-', 0); - - // "Bold" & "Italic" menu items - fFontMenu->AddItem(fBoldItem = new BMenuItem(B_TRANSLATE("Bold"), - new BMessage(kMsgSetBold))); - fFontMenu->AddItem(fItalicItem = new BMenuItem(B_TRANSLATE("Italic"), - new BMessage(kMsgSetItalic))); + fBoldItem = new BMenuItem(B_TRANSLATE("Bold"), + new BMessage(kMsgSetBold)); fBoldItem->SetShortcut('B', 0); + + fItalicItem = new BMenuItem(B_TRANSLATE("Italic"), + new BMessage(kMsgSetItalic)); fItalicItem->SetShortcut('I', 0); - fFontMenu->AddSeparatorItem(); - - // Available fonts + fFontMenu = new BMenu(B_TRANSLATE("Font")); fCurrentFontItem = 0; fCurrentStyleItem = 0; + // premake font menu since we cant add members dynamically later + BLayoutBuilder::Menu<>(fFontMenu) + .AddItem(fFontSizeMenu) + .AddItem(fFontColorMenu) + .AddSeparator() + .AddItem(B_TRANSLATE("Increase size"), kMsgSetFontUp, '+') + .AddItem(B_TRANSLATE("Decrease size"), kMsgSetFontDown, '-') + .AddItem(fBoldItem) + .AddItem(fItalicItem) + .AddSeparator() + .End(); + BMenu* subMenu; int32 numFamilies = count_font_families(); for (int32 i = 0; i < numFamilies; i++) { @@ -1311,47 +1243,88 @@ StyledEditWindow::_InitWindow(uint32 encoding) } } - // Add the "Document"-menu: - menu = new BMenu(B_TRANSLATE("Document")); - fMenuBar->AddItem(menu); - // "Align"-subMenu: - subMenu = new BMenu(B_TRANSLATE("Align")); - subMenu->SetRadioMode(true); + BMenu* alignMenu = new BMenu(B_TRANSLATE("Align")); + alignMenu->SetRadioMode(true); - subMenu->AddItem(fAlignLeft = new BMenuItem(B_TRANSLATE("Left"), + alignMenu->AddItem(fAlignLeft = new BMenuItem(B_TRANSLATE("Left"), new BMessage(ALIGN_LEFT))); fAlignLeft->SetMarked(true); fAlignLeft->SetShortcut('L', B_OPTION_KEY); - subMenu->AddItem(fAlignCenter = new BMenuItem(B_TRANSLATE("Center"), + alignMenu->AddItem(fAlignCenter = new BMenuItem(B_TRANSLATE("Center"), new BMessage(ALIGN_CENTER))); fAlignCenter->SetShortcut('C', B_OPTION_KEY); - subMenu->AddItem(fAlignRight = new BMenuItem(B_TRANSLATE("Right"), + alignMenu->AddItem(fAlignRight = new BMenuItem(B_TRANSLATE("Right"), new BMessage(ALIGN_RIGHT))); fAlignRight->SetShortcut('R', B_OPTION_KEY); - menu->AddItem(subMenu); - menu->AddItem(fWrapItem = new BMenuItem(B_TRANSLATE("Wrap lines"), - new BMessage(WRAP_LINES))); + fWrapItem = new BMenuItem(B_TRANSLATE("Wrap lines"), + new BMessage(WRAP_LINES)); fWrapItem->SetMarked(true); fWrapItem->SetShortcut('W', B_OPTION_KEY); BMessage *message = new BMessage(MENU_RELOAD); message->AddString("encoding", "auto"); - menu->AddItem(fEncodingItem = new BMenuItem(_PopulateEncodingMenu( + fEncodingItem = new BMenuItem(_PopulateEncodingMenu( new BMenu(B_TRANSLATE("Text encoding")), "UTF-8"), - message)); + message); fEncodingItem->SetEnabled(false); - menu->AddSeparatorItem(); - menu->AddItem(new BMenuItem(B_TRANSLATE("Statistics" B_UTF8_ELLIPSIS), - new BMessage(SHOW_STATISTICS))); + BMenuBar* mainMenu = new BMenuBar("mainMenu"); + + BLayoutBuilder::Menu<>(mainMenu) + .AddMenu(B_TRANSLATE("File")) + .AddItem(B_TRANSLATE("New"), MENU_NEW, 'N') + .AddItem(openItem) + .AddSeparator() + .AddItem(fSaveItem) + .AddItem(B_TRANSLATE("Save as" B_UTF8_ELLIPSIS), + MENU_SAVEAS, 'S', B_SHIFT_KEY) + .AddItem(fReloadItem) + .AddItem(B_TRANSLATE("Close"), MENU_CLOSE, 'W') + .AddSeparator() + .AddItem(B_TRANSLATE("Page setup" B_UTF8_ELLIPSIS), MENU_PAGESETUP) + .AddItem(B_TRANSLATE("Print" B_UTF8_ELLIPSIS), MENU_PRINT, 'P') + .AddSeparator() + .AddItem(B_TRANSLATE("Quit"), MENU_QUIT, 'Q') + .End() + .AddMenu(B_TRANSLATE("Edit")) + .AddItem(fUndoItem) + .AddSeparator() + .AddItem(fCutItem) + .AddItem(fCopyItem) + .AddItem(B_TRANSLATE("Paste"), B_PASTE, 'V') + .AddSeparator() + .AddItem(B_TRANSLATE("Select all"), B_SELECT_ALL, 'A') + .AddSeparator() + .AddItem(B_TRANSLATE("Find" B_UTF8_ELLIPSIS), MENU_FIND, 'F') + .AddItem(fFindAgainItem) + .AddItem(B_TRANSLATE("Find selection"), MENU_FIND_SELECTION, 'H') + .AddItem(B_TRANSLATE("Replace" B_UTF8_ELLIPSIS), MENU_REPLACE, 'R') + .AddItem(fReplaceSameItem) + .End() + .AddItem(fFontMenu) + .AddMenu(B_TRANSLATE("Document")) + .AddItem(alignMenu) + .AddItem(fWrapItem) + .AddItem(fEncodingItem) + .AddSeparator() + .AddItem(B_TRANSLATE("Statistics" B_UTF8_ELLIPSIS), SHOW_STATISTICS) + .End(); + fSavePanel = NULL; fSavePanelEncodingMenu = NULL; - // build lazily + + BGroupLayout* layout = new BGroupLayout(B_VERTICAL, 0); + SetLayout(layout); + layout->AddView(mainMenu); + layout->AddView(fScrollView); + layout->SetInsets(0, 0, -1, -1); + SetKeyMenuBar(mainMenu); + } diff --git a/src/apps/stylededit/StyledEditWindow.h b/src/apps/stylededit/StyledEditWindow.h index a5547e6f9d..e19c26ffc1 100644 --- a/src/apps/stylededit/StyledEditWindow.h +++ b/src/apps/stylededit/StyledEditWindow.h @@ -104,7 +104,6 @@ private: entry_ref* ref = NULL); private: - BMenuBar* fMenuBar; BMessage* fPrintSettings; BMessage* fSaveMessage;