Unify the Font menu and Font size menu into one.
The Font size menu becomes a submenu of Font so that you can set both the font and font size at once. This fixes #4198
This commit is contained in:
@@ -93,12 +93,7 @@ AppearancePrefView::AppearancePrefView(const char* name,
|
|||||||
BMenu* fontMenu = _MakeFontMenu(MSG_HALF_FONT_CHANGED,
|
BMenu* fontMenu = _MakeFontMenu(MSG_HALF_FONT_CHANGED,
|
||||||
PrefHandler::Default()->getString(PREF_HALF_FONT_FAMILY),
|
PrefHandler::Default()->getString(PREF_HALF_FONT_FAMILY),
|
||||||
PrefHandler::Default()->getString(PREF_HALF_FONT_STYLE));
|
PrefHandler::Default()->getString(PREF_HALF_FONT_STYLE));
|
||||||
|
fFontField = new BMenuField(B_TRANSLATE("Font:"), fontMenu);
|
||||||
BMenu* fontSizeMenu = _MakeFontSizeMenu(MSG_HALF_SIZE_CHANGED,
|
|
||||||
PrefHandler::Default()->getInt32(PREF_HALF_FONT_SIZE));
|
|
||||||
|
|
||||||
fFont = new BMenuField(B_TRANSLATE("Font:"), fontMenu);
|
|
||||||
fFontSize = new BMenuField(B_TRANSLATE("Font size:"), fontSizeMenu);
|
|
||||||
|
|
||||||
BPopUpMenu* schemesPopUp = _MakeColorSchemeMenu(MSG_COLOR_SCHEME_CHANGED,
|
BPopUpMenu* schemesPopUp = _MakeColorSchemeMenu(MSG_COLOR_SCHEME_CHANGED,
|
||||||
gPredefinedColorSchemes, gPredefinedColorSchemes[0]);
|
gPredefinedColorSchemes, gPredefinedColorSchemes[0]);
|
||||||
@@ -134,14 +129,12 @@ AppearancePrefView::AppearancePrefView(const char* name,
|
|||||||
.Add(fTabTitle->CreateTextViewLayoutItem(), 1, 0)
|
.Add(fTabTitle->CreateTextViewLayoutItem(), 1, 0)
|
||||||
.Add(fWindowTitle->CreateLabelLayoutItem(), 0, 1)
|
.Add(fWindowTitle->CreateLabelLayoutItem(), 0, 1)
|
||||||
.Add(fWindowTitle->CreateTextViewLayoutItem(), 1, 1)
|
.Add(fWindowTitle->CreateTextViewLayoutItem(), 1, 1)
|
||||||
.Add(fFont->CreateLabelLayoutItem(), 0, 2)
|
.Add(fFontField->CreateLabelLayoutItem(), 0, 2)
|
||||||
.Add(fFont->CreateMenuBarLayoutItem(), 1, 2)
|
.Add(fFontField->CreateMenuBarLayoutItem(), 1, 2)
|
||||||
.Add(fFontSize->CreateLabelLayoutItem(), 0, 3)
|
.Add(fColorSchemeField->CreateLabelLayoutItem(), 0, 3)
|
||||||
.Add(fFontSize->CreateMenuBarLayoutItem(), 1, 3)
|
.Add(fColorSchemeField->CreateMenuBarLayoutItem(), 1, 3)
|
||||||
.Add(fColorSchemeField->CreateLabelLayoutItem(), 0, 4)
|
.Add(fColorField->CreateLabelLayoutItem(), 0, 4)
|
||||||
.Add(fColorSchemeField->CreateMenuBarLayoutItem(), 1, 4)
|
.Add(fColorField->CreateMenuBarLayoutItem(), 1, 4)
|
||||||
.Add(fColorField->CreateLabelLayoutItem(), 0, 5)
|
|
||||||
.Add(fColorField->CreateMenuBarLayoutItem(), 1, 5)
|
|
||||||
.End()
|
.End()
|
||||||
.AddGlue()
|
.AddGlue()
|
||||||
.Add(fColorControl = new BColorControl(BPoint(10, 10),
|
.Add(fColorControl = new BColorControl(BPoint(10, 10),
|
||||||
@@ -151,8 +144,7 @@ AppearancePrefView::AppearancePrefView(const char* name,
|
|||||||
|
|
||||||
fTabTitle->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
|
fTabTitle->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
|
||||||
fWindowTitle->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
|
fWindowTitle->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
|
||||||
fFont->SetAlignment(B_ALIGN_RIGHT);
|
fFontField->SetAlignment(B_ALIGN_RIGHT);
|
||||||
fFontSize->SetAlignment(B_ALIGN_RIGHT);
|
|
||||||
fColorField->SetAlignment(B_ALIGN_RIGHT);
|
fColorField->SetAlignment(B_ALIGN_RIGHT);
|
||||||
fColorSchemeField->SetAlignment(B_ALIGN_RIGHT);
|
fColorSchemeField->SetAlignment(B_ALIGN_RIGHT);
|
||||||
|
|
||||||
@@ -190,20 +182,23 @@ AppearancePrefView::GetPreferredSize(float* _width, float* _height)
|
|||||||
void
|
void
|
||||||
AppearancePrefView::Revert()
|
AppearancePrefView::Revert()
|
||||||
{
|
{
|
||||||
fTabTitle->SetText(PrefHandler::Default()->getString(PREF_TAB_TITLE));
|
PrefHandler* pref = PrefHandler::Default();
|
||||||
fWindowTitle->SetText(PrefHandler::Default()->getString(PREF_WINDOW_TITLE));
|
|
||||||
|
|
||||||
fWarnOnExit->SetValue(PrefHandler::Default()->getBool(
|
fTabTitle->SetText(pref->getString(PREF_TAB_TITLE));
|
||||||
|
fWindowTitle->SetText(pref->getString(PREF_WINDOW_TITLE));
|
||||||
|
|
||||||
|
fWarnOnExit->SetValue(pref->getBool(
|
||||||
PREF_WARN_ON_EXIT));
|
PREF_WARN_ON_EXIT));
|
||||||
|
|
||||||
fColorSchemeField->Menu()->ItemAt(0)->SetMarked(true);
|
fColorSchemeField->Menu()->ItemAt(0)->SetMarked(true);
|
||||||
fColorControl->SetValue(PrefHandler::Default()->
|
fColorControl->SetValue(pref->
|
||||||
getRGB(PREF_TEXT_FORE_COLOR));
|
getRGB(PREF_TEXT_FORE_COLOR));
|
||||||
|
|
||||||
fFont->Menu()->FindItem(PrefHandler::Default()->getString(
|
const char* family = pref->getString(PREF_HALF_FONT_FAMILY);
|
||||||
PREF_HALF_FONT_FAMILY))->SetMarked(true);
|
const char* style = pref->getString(PREF_HALF_FONT_STYLE);
|
||||||
fFontSize->Menu()->FindItem(PrefHandler::Default()->getString(
|
const char* size = pref->getString(PREF_HALF_FONT_SIZE);
|
||||||
PREF_HALF_FONT_FAMILY))->SetMarked(true);
|
|
||||||
|
_MarkSelectedFont(family, style, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -215,8 +210,14 @@ AppearancePrefView::AttachedToWindow()
|
|||||||
fBlinkCursor->SetTarget(this);
|
fBlinkCursor->SetTarget(this);
|
||||||
fWarnOnExit->SetTarget(this);
|
fWarnOnExit->SetTarget(this);
|
||||||
|
|
||||||
fFontSize->Menu()->SetTargetForItems(this);
|
fFontField->Menu()->SetTargetForItems(this);
|
||||||
fFont->Menu()->SetTargetForItems(this);
|
for (int32 i = 0; i < fFontField->Menu()->CountItems(); i++) {
|
||||||
|
BMenu* fontSizeMenu = fFontField->Menu()->SubmenuAt(i);
|
||||||
|
if (fontSizeMenu == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
fontSizeMenu->SetTargetForItems(this);
|
||||||
|
}
|
||||||
|
|
||||||
fColorControl->SetTarget(this);
|
fColorControl->SetTarget(this);
|
||||||
fColorField->Menu()->SetTargetForItems(this);
|
fColorField->Menu()->SetTargetForItems(this);
|
||||||
@@ -232,6 +233,7 @@ AppearancePrefView::AttachedToWindow()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
||||||
AppearancePrefView::MessageReceived(BMessage* msg)
|
AppearancePrefView::MessageReceived(BMessage* msg)
|
||||||
{
|
{
|
||||||
bool modified = false;
|
bool modified = false;
|
||||||
@@ -241,34 +243,33 @@ AppearancePrefView::MessageReceived(BMessage* msg)
|
|||||||
{
|
{
|
||||||
const char* family = NULL;
|
const char* family = NULL;
|
||||||
const char* style = NULL;
|
const char* style = NULL;
|
||||||
msg->FindString("font_family", &family);
|
const char* size = NULL;
|
||||||
msg->FindString("font_style", &style);
|
if (msg->FindString("font_family", &family) != B_OK
|
||||||
|
|| msg->FindString("font_style", &style) != B_OK
|
||||||
|
|| msg->FindString("font_size", &size) != B_OK) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
PrefHandler* pref = PrefHandler::Default();
|
PrefHandler* pref = PrefHandler::Default();
|
||||||
const char* currentFamily
|
const char* currentFamily
|
||||||
= pref->getString(PREF_HALF_FONT_FAMILY);
|
= pref->getString(PREF_HALF_FONT_FAMILY);
|
||||||
const char* currentStyle
|
const char* currentStyle
|
||||||
= pref->getString(PREF_HALF_FONT_STYLE);
|
= pref->getString(PREF_HALF_FONT_STYLE);
|
||||||
|
const char* currentSize
|
||||||
|
= pref->getString(PREF_HALF_FONT_SIZE);
|
||||||
|
|
||||||
if (currentFamily == NULL || strcmp(currentFamily, family) != 0
|
if (currentFamily == NULL || strcmp(currentFamily, family) != 0
|
||||||
|| currentStyle == NULL || strcmp(currentStyle, style) != 0) {
|
|| currentStyle == NULL || strcmp(currentStyle, style) != 0
|
||||||
|
|| currentSize == NULL || strcmp(currentSize, size) != 0) {
|
||||||
pref->setString(PREF_HALF_FONT_FAMILY, family);
|
pref->setString(PREF_HALF_FONT_FAMILY, family);
|
||||||
pref->setString(PREF_HALF_FONT_STYLE, style);
|
pref->setString(PREF_HALF_FONT_STYLE, style);
|
||||||
|
pref->setString(PREF_HALF_FONT_SIZE, size);
|
||||||
|
_MarkSelectedFont(family, style, size);
|
||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case MSG_HALF_SIZE_CHANGED:
|
|
||||||
if (strcmp(PrefHandler::Default()->getString(PREF_HALF_FONT_SIZE),
|
|
||||||
fFontSize->Menu()->FindMarked()->Label()) != 0) {
|
|
||||||
PrefHandler::Default()->setString(PREF_HALF_FONT_SIZE,
|
|
||||||
fFontSize->Menu()->FindMarked()->Label());
|
|
||||||
msg->AddInt32("font size",
|
|
||||||
atoi(fFontSize->Menu()->FindMarked()->Label()));
|
|
||||||
modified = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MSG_COLOR_CHANGED:
|
case MSG_COLOR_CHANGED:
|
||||||
{
|
{
|
||||||
rgb_color oldColor = PrefHandler::Default()->getRGB(
|
rgb_color oldColor = PrefHandler::Default()->getRGB(
|
||||||
@@ -431,13 +432,17 @@ AppearancePrefView::_MakeFontMenu(uint32 command,
|
|||||||
font.SetFamilyAndStyle(family, style);
|
font.SetFamilyAndStyle(family, style);
|
||||||
if (IsFontUsable(font)) {
|
if (IsFontUsable(font)) {
|
||||||
BMessage* message = new BMessage(command);
|
BMessage* message = new BMessage(command);
|
||||||
|
const char* size
|
||||||
|
= PrefHandler::Default()->getString(PREF_HALF_FONT_SIZE);
|
||||||
message->AddString("font_family", family);
|
message->AddString("font_family", family);
|
||||||
message->AddString("font_style", style);
|
message->AddString("font_style", style);
|
||||||
char itemLabel[134];
|
message->AddString("font_size", size);
|
||||||
snprintf(itemLabel, sizeof(itemLabel),
|
char fontMenuLabel[134];
|
||||||
|
snprintf(fontMenuLabel, sizeof(fontMenuLabel),
|
||||||
"%s - %s", family, style);
|
"%s - %s", family, style);
|
||||||
BMenuItem* item = new BMenuItem(itemLabel,
|
BMenu* fontSizeMenu = _MakeFontSizeMenu(fontMenuLabel,
|
||||||
message);
|
MSG_HALF_FONT_CHANGED, family, style, size);
|
||||||
|
BMenuItem* item = new BMenuItem(fontSizeMenu, message);
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
if (strcmp(defaultFamily, family) == 0
|
if (strcmp(defaultFamily, family) == 0
|
||||||
&& strcmp(defaultStyle, style) == 0)
|
&& strcmp(defaultStyle, style) == 0)
|
||||||
@@ -456,22 +461,27 @@ AppearancePrefView::_MakeFontMenu(uint32 command,
|
|||||||
|
|
||||||
|
|
||||||
/*static*/ BMenu*
|
/*static*/ BMenu*
|
||||||
AppearancePrefView::_MakeFontSizeMenu(uint32 command, uint8 defaultSize)
|
AppearancePrefView::_MakeFontSizeMenu(const char* label, uint32 command,
|
||||||
|
const char* family, const char* style, const char* size)
|
||||||
{
|
{
|
||||||
BPopUpMenu* menu = new BPopUpMenu("size");
|
BMenu* menu = new BMenu(label);
|
||||||
|
menu->SetRadioMode(true);
|
||||||
|
menu->SetLabelFromMarked(false);
|
||||||
|
|
||||||
int32 sizes[] = {9, 10, 11, 12, 14, 16, 18, 0};
|
int32 sizes[] = {9, 10, 11, 12, 14, 16, 18, 0};
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
for (uint32 i = 0; sizes[i]; i++) {
|
for (uint32 i = 0; sizes[i]; i++) {
|
||||||
BString string;
|
BString fontSize;
|
||||||
string << sizes[i];
|
fontSize << sizes[i];
|
||||||
|
BMessage* message = new BMessage(command);
|
||||||
BMenuItem* item = new BMenuItem(string.String(),
|
message->AddString("font_family", family);
|
||||||
new BMessage(command));
|
message->AddString("font_style", style);
|
||||||
|
message->AddString("font_size", fontSize.String());
|
||||||
|
BMenuItem* item = new BMenuItem(fontSize.String(), message);
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
if (sizes[i] == atoi(size)) {
|
||||||
if (sizes[i] == defaultSize) {
|
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
@@ -479,11 +489,12 @@ AppearancePrefView::_MakeFontSizeMenu(uint32 command, uint8 defaultSize)
|
|||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
for (uint32 i = 0; sizes[i]; i++) {
|
for (uint32 i = 0; sizes[i]; i++) {
|
||||||
if (sizes[i] > defaultSize) {
|
if (sizes[i] > atoi(size)) {
|
||||||
BString string;
|
BMessage* message = new BMessage(command);
|
||||||
string << defaultSize;
|
message->AddString("font_family", family);
|
||||||
BMenuItem* item = new BMenuItem(string.String(),
|
message->AddString("font_style", style);
|
||||||
new BMessage(command));
|
message->AddString("font_size", size);
|
||||||
|
BMenuItem* item = new BMenuItem(size, message);
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
menu->AddItem(item, i);
|
menu->AddItem(item, i);
|
||||||
break;
|
break;
|
||||||
@@ -543,3 +554,28 @@ AppearancePrefView::_MakeColorSchemeMenu(uint32 msg, const color_scheme** items,
|
|||||||
}
|
}
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AppearancePrefView::_MarkSelectedFont(const char* family, const char* style,
|
||||||
|
const char* size)
|
||||||
|
{
|
||||||
|
char fontMenuLabel[134];
|
||||||
|
snprintf(fontMenuLabel, sizeof(fontMenuLabel), "%s - %s", family, style);
|
||||||
|
|
||||||
|
// mark the selected font
|
||||||
|
BMenuItem* selectedFont = fFontField->Menu()->FindItem(fontMenuLabel);
|
||||||
|
if (selectedFont != NULL)
|
||||||
|
selectedFont->SetMarked(true);
|
||||||
|
|
||||||
|
// mark the selected font size on all font menus
|
||||||
|
for (int32 i = 0; i < fFontField->Menu()->CountItems(); i++) {
|
||||||
|
BMenu* fontSizeMenu = fFontField->Menu()->SubmenuAt(i);
|
||||||
|
if (fontSizeMenu == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
BMenuItem* item = fontSizeMenu->FindItem(size);
|
||||||
|
if (item != NULL)
|
||||||
|
item->SetMarked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -62,8 +62,11 @@ private:
|
|||||||
static BMenu* _MakeFontMenu(uint32 command,
|
static BMenu* _MakeFontMenu(uint32 command,
|
||||||
const char* defaultFamily,
|
const char* defaultFamily,
|
||||||
const char* defaultStyle);
|
const char* defaultStyle);
|
||||||
static BMenu* _MakeFontSizeMenu(uint32 command,
|
static BMenu* _MakeFontSizeMenu(const char* label,
|
||||||
uint8 defaultSize);
|
uint32 command,
|
||||||
|
const char* family,
|
||||||
|
const char* style,
|
||||||
|
const char* size);
|
||||||
|
|
||||||
static BPopUpMenu* _MakeMenu(uint32 msg, const char** items,
|
static BPopUpMenu* _MakeMenu(uint32 msg, const char** items,
|
||||||
const char* defaultItem);
|
const char* defaultItem);
|
||||||
@@ -72,10 +75,12 @@ private:
|
|||||||
const color_scheme** schemes,
|
const color_scheme** schemes,
|
||||||
const color_scheme* defaultItemName);
|
const color_scheme* defaultItemName);
|
||||||
|
|
||||||
|
void _MarkSelectedFont(const char* family,
|
||||||
|
const char* style, const char* size);
|
||||||
|
|
||||||
BCheckBox* fBlinkCursor;
|
BCheckBox* fBlinkCursor;
|
||||||
BCheckBox* fWarnOnExit;
|
BCheckBox* fWarnOnExit;
|
||||||
BMenuField* fFont;
|
BMenuField* fFontField;
|
||||||
BMenuField* fFontSize;
|
|
||||||
|
|
||||||
BMenuField* fColorSchemeField;
|
BMenuField* fColorSchemeField;
|
||||||
BMenuField* fColorField;
|
BMenuField* fColorField;
|
||||||
|
|||||||
@@ -803,7 +803,7 @@ TermWindow::MessageReceived(BMessage *message)
|
|||||||
view->GetTermFont(&font);
|
view->GetTermFont(&font);
|
||||||
|
|
||||||
int32 size;
|
int32 size;
|
||||||
if (message->FindInt32("font size", &size) != B_OK)
|
if (message->FindInt32("font_size", &size) != B_OK)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// mark the font size menu item
|
// mark the font size menu item
|
||||||
@@ -1639,7 +1639,7 @@ TermWindow::_MakeFontSizeMenu(uint32 command, uint8 defaultSize)
|
|||||||
BString string;
|
BString string;
|
||||||
string << sizes[i];
|
string << sizes[i];
|
||||||
BMessage* message = new BMessage(command);
|
BMessage* message = new BMessage(command);
|
||||||
message->AddInt32("font size", sizes[i]);
|
message->AddInt32("font_size", sizes[i]);
|
||||||
BMenuItem* item = new BMenuItem(string.String(), message);
|
BMenuItem* item = new BMenuItem(string.String(), message);
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
if (sizes[i] == defaultSize) {
|
if (sizes[i] == defaultSize) {
|
||||||
@@ -1654,7 +1654,7 @@ TermWindow::_MakeFontSizeMenu(uint32 command, uint8 defaultSize)
|
|||||||
BString string;
|
BString string;
|
||||||
string << defaultSize;
|
string << defaultSize;
|
||||||
BMessage* message = new BMessage(command);
|
BMessage* message = new BMessage(command);
|
||||||
message->AddInt32("font size", sizes[i]);
|
message->AddInt32("font_size", sizes[i]);
|
||||||
BMenuItem* item = new BMenuItem(string.String(), message);
|
BMenuItem* item = new BMenuItem(string.String(), message);
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
menu->AddItem(item, i);
|
menu->AddItem(item, i);
|
||||||
|
|||||||
Reference in New Issue
Block a user