StyledEdit: convert main view to layout api

Change-Id: I913c8f559faf09654b0e249f512858ed24fe1ffe
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3537
Reviewed-by: John Scipione <jscipione@gmail.com>
This commit is contained in:
Pascal Abresch 2020-09-23 18:06:40 +02:00 committed by Adrien Destugues
parent 80a920f65d
commit d6005b727c
2 changed files with 101 additions and 129 deletions

View File

@ -33,6 +33,7 @@
#include <File.h>
#include <FilePanel.h>
#include <fs_attr.h>
#include <LayoutBuilder.h>
#include <Locale.h>
#include <Menu.h>
#include <MenuBar.h>
@ -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);
}

View File

@ -104,7 +104,6 @@ private:
entry_ref* ref = NULL);
private:
BMenuBar* fMenuBar;
BMessage* fPrintSettings;
BMessage* fSaveMessage;