From c7c02e79c9574c86846f461eaeda3cd68d0e6f69 Mon Sep 17 00:00:00 2001 From: Jaidyn Ann Date: Sat, 24 Jul 2021 13:25:44 -0500 Subject: [PATCH] Preferences window-sizing, BBoxes for settings --- .../preferences/PreferencesAccounts.cpp | 5 +- .../preferences/PreferencesBehavior.cpp | 95 ++++++++----------- application/preferences/PreferencesBehavior.h | 6 +- .../preferences/PreferencesChatWindow.cpp | 50 ++++------ .../preferences/PreferencesChatWindow.h | 4 - .../preferences/PreferencesReplicant.cpp | 49 ++++------ .../preferences/PreferencesReplicant.h | 2 - application/windows/PreferencesWindow.cpp | 26 ++++- 8 files changed, 108 insertions(+), 129 deletions(-) diff --git a/application/preferences/PreferencesAccounts.cpp b/application/preferences/PreferencesAccounts.cpp index 5a6e994..ae0a560 100644 --- a/application/preferences/PreferencesAccounts.cpp +++ b/application/preferences/PreferencesAccounts.cpp @@ -1,9 +1,11 @@ /* * Copyright 2009-2010, Pier Luigi Fiorini. All rights reserved. + * Copyright 2021, Jaidyn Levesque. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: * Pier Luigi Fiorini, pierluigi.fiorini@gmail.com + * Jaidyn Levesque, jadedctrl@teknik.io */ #include @@ -92,10 +94,9 @@ PreferencesAccounts::PreferencesAccounts() fToggleButton->SetEnabled(false); BLayoutBuilder::Group<>(this, B_VERTICAL) - .SetInsets(B_USE_DEFAULT_SPACING) .Add(scrollView) .AddGroup(B_HORIZONTAL) - .SetInsets(0, 0, 0, 15) + .SetInsets(B_USE_HALF_ITEM_SPACING) .Add(proto) .Add(fDelButton) .AddGlue() diff --git a/application/preferences/PreferencesBehavior.cpp b/application/preferences/PreferencesBehavior.cpp index 07e76fa..63fda6e 100644 --- a/application/preferences/PreferencesBehavior.cpp +++ b/application/preferences/PreferencesBehavior.cpp @@ -1,28 +1,20 @@ /* * Copyright 2010, Oliver Ruiz Dorantes. All rights reserved. * Copyright 2012, Dario Casalinuovo. All rights reserved. + * Copyright 2021, Jaidyn Levesque. All rights reserved. * Distributed under the terms of the MIT License. */ -#include +#include "PreferencesBehavior.h" + +#include #include #include #include -#include -#include -#include -#include -#include +#include #include "AccountManager.h" -#include "ChatProtocol.h" -#include "PreferencesBehavior.h" #include "AppPreferences.h" -#include "ProtocolManager.h" -#include "ProtocolSettings.h" -#include "MainWindow.h" -#include "ReplicantStatusView.h" -#include "TheApp.h" #undef B_TRANSLATION_CONTEXT @@ -43,11 +35,8 @@ const uint32 kDisablePrompt = 'DiPr'; PreferencesBehavior::PreferencesBehavior() : BView(B_TRANSLATE("Behavior"), B_WILL_DRAW) { - - fOnIncoming = new BStringView("onIncoming", B_TRANSLATE("On incoming " - "message" B_UTF8_ELLIPSIS)); - fOnIncoming->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); - fOnIncoming->SetFont(be_bold_font); + BBox* incomingBox = new BBox("incoming"); + incomingBox->SetLabel(B_TRANSLATE("On incoming" B_UTF8_ELLIPSIS)); fHideOffline = new BCheckBox("HideOfflineContacts", B_TRANSLATE("Hide offline contacts"), @@ -79,11 +68,8 @@ PreferencesBehavior::PreferencesBehavior() fMarkUnreadReplicant->SetEnabled(false); // not implemented - fNotifications = new BStringView("notifications", - B_TRANSLATE("Deskbar Notifications (experimental)")); - - fNotifications->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); - fNotifications->SetFont(be_bold_font); + BBox* notificationBox = new BBox("notificationBox"); + notificationBox->SetLabel(B_TRANSLATE("Deskbar notifications")); fNotifyProtocols = new BCheckBox("EnableProtocolNotify", B_TRANSLATE("Enable protocol status notifications"), @@ -97,44 +83,45 @@ PreferencesBehavior::PreferencesBehavior() B_TRANSLATE("Enable message notifications"), new BMessage(kNotifyNewMessage)); - fGeneral = new BStringView("onGeneral", B_TRANSLATE("General")); - fGeneral->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); - fGeneral->SetFont(be_bold_font); + BBox* generalBox = new BBox("general"); + generalBox->SetLabel(B_TRANSLATE("General")); fDisableQuitConfirm = new BCheckBox("DisableQuitConfirm", B_TRANSLATE("Don't ask confirmation at Quit"), new BMessage(kDisablePrompt)); const float spacing = be_control_look->DefaultItemSpacing(); - SetLayout(new BGroupLayout(B_HORIZONTAL, spacing)); - AddChild(BGroupLayoutBuilder(B_VERTICAL) - .Add(fOnIncoming) - .AddGroup(B_VERTICAL, spacing) - .Add(fHideOffline) - .Add(fToCurrentWorkspace) - .Add(fRaiseOnMessageReceived) - .Add(fRaiseUserIsTyping) - .Add(fMarkUnreadWindow) - .Add(fMarkUnreadReplicant) - .Add(fPlaySoundOnMessageReceived) - . SetInsets(spacing * 2, spacing, spacing, spacing) - .End() - .Add(fGeneral) - .AddGroup(B_VERTICAL, spacing) - .Add(fDisableQuitConfirm) - . SetInsets(spacing * 2, spacing, spacing, spacing) - .End() - .Add(fNotifications) - .AddGroup(B_VERTICAL, spacing) - .Add(fNotifyProtocols) - .Add(fNotifyContactStatus) - .Add(fNotifyNewMessage) - . SetInsets(spacing * 2, spacing, spacing, spacing) - .End() + + BLayoutBuilder::Group<>(generalBox, B_VERTICAL) + .SetInsets(spacing, spacing * 2, spacing, spacing) + .Add(fDisableQuitConfirm) + .End(); + + BLayoutBuilder::Group<>(incomingBox, B_VERTICAL) + .SetInsets(spacing, spacing * 2, spacing, spacing) + .Add(fHideOffline) + .Add(fToCurrentWorkspace) + .Add(fRaiseOnMessageReceived) + .Add(fRaiseUserIsTyping) + .Add(fMarkUnreadWindow) + .Add(fMarkUnreadReplicant) + .Add(fPlaySoundOnMessageReceived) + .End(); + + BLayoutBuilder::Group<>(notificationBox, B_VERTICAL) + .SetInsets(spacing, spacing * 2, spacing, spacing) + .Add(fNotifyProtocols) + .Add(fNotifyContactStatus) + .Add(fNotifyNewMessage) + .End(); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .SetInsets(B_USE_DEFAULT_SPACING) + .Add(generalBox) + .Add(incomingBox) + .Add(notificationBox) .AddGlue() - .SetInsets(spacing, spacing, spacing, spacing) - .TopView() - ); + .End(); } diff --git a/application/preferences/PreferencesBehavior.h b/application/preferences/PreferencesBehavior.h index f2c7631..b056ea3 100644 --- a/application/preferences/PreferencesBehavior.h +++ b/application/preferences/PreferencesBehavior.h @@ -9,7 +9,6 @@ #include class BCheckBox; -class BStringView; class PreferencesBehavior : public BView { public: @@ -20,7 +19,6 @@ public: private: - BStringView* fOnIncoming; BCheckBox* fHideOffline; BCheckBox* fToCurrentWorkspace; BCheckBox* fRaiseOnMessageReceived; @@ -28,14 +26,12 @@ private: BCheckBox* fPlaySoundOnMessageReceived; BCheckBox* fMarkUnreadWindow; BCheckBox* fMarkUnreadReplicant; - BStringView* fGeneral; + BCheckBox* fDisableQuitConfirm; - BStringView* fNotifications; BCheckBox* fNotifyProtocols; BCheckBox* fNotifyContactStatus; BCheckBox* fNotifyNewMessage; - }; #endif // _PREFERENCES_BEHAVIOR_H diff --git a/application/preferences/PreferencesChatWindow.cpp b/application/preferences/PreferencesChatWindow.cpp index 364b294..0233736 100644 --- a/application/preferences/PreferencesChatWindow.cpp +++ b/application/preferences/PreferencesChatWindow.cpp @@ -1,23 +1,19 @@ /* * Copyright 2010, Oliver Ruiz Dorantes. All rights reserved. * Copyright 2012, Dario Casalinuovo. All rights reserved. + * Copyright 2021, Jaidyn Levesque. All rights reserved. * Distributed under the terms of the MIT License. */ +#include "PreferencesChatWindow.h" + +#include #include #include #include -#include -#include -#include +#include -#include "ChatProtocol.h" -#include "PreferencesChatWindow.h" #include "AppPreferences.h" -#include "ProtocolManager.h" -#include "ProtocolSettings.h" -#include "MainWindow.h" -#include "TheApp.h" #undef B_TRANSLATION_CONTEXT @@ -28,32 +24,28 @@ const uint32 kIgnoreEmoticons = 'CBhe'; PreferencesChatWindow::PreferencesChatWindow() - : BView(B_TRANSLATE("Chat display"), B_WILL_DRAW) + : BView(B_TRANSLATE("Chat view"), B_WILL_DRAW) { - - fChatWindowString = new BStringView("ChatWindowString", - B_TRANSLATE("Chat settings")); - fChatWindowString->SetExplicitAlignment(BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); - fChatWindowString->SetFont(be_bold_font); + BBox* chatBox = new BBox("chatBox"); + chatBox->SetLabel(B_TRANSLATE("Chat settings")); fIgnoreEmoticons = new BCheckBox("IgnoreEmoticons", - B_TRANSLATE("Ignore emoticons"), - new BMessage(kIgnoreEmoticons)); + B_TRANSLATE("Ignore emoticons"), new BMessage(kIgnoreEmoticons)); fIgnoreEmoticons->SetEnabled(true); const float spacing = be_control_look->DefaultItemSpacing(); - SetLayout(new BGroupLayout(B_HORIZONTAL, spacing)); - AddChild(BGroupLayoutBuilder(B_VERTICAL) - .Add(fChatWindowString) - .AddGroup(B_VERTICAL, spacing) - .Add(fIgnoreEmoticons) - .SetInsets(spacing * 2, spacing, spacing, spacing) - .End() + + BLayoutBuilder::Group<>(chatBox, B_VERTICAL) + .SetInsets(spacing, spacing * 2, spacing, spacing) + .Add(fIgnoreEmoticons) + .End(); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .SetInsets(B_USE_DEFAULT_SPACING) + .Add(chatBox) .AddGlue() - .SetInsets(spacing, spacing, spacing, spacing) - .TopView() - ); + .End(); } @@ -61,9 +53,7 @@ void PreferencesChatWindow::AttachedToWindow() { fIgnoreEmoticons->SetTarget(this); - fIgnoreEmoticons->SetValue( - AppPreferences::Item()->IgnoreEmoticons); - + fIgnoreEmoticons->SetValue(AppPreferences::Item()->IgnoreEmoticons); } diff --git a/application/preferences/PreferencesChatWindow.h b/application/preferences/PreferencesChatWindow.h index aff4b97..2ad1c98 100644 --- a/application/preferences/PreferencesChatWindow.h +++ b/application/preferences/PreferencesChatWindow.h @@ -9,7 +9,6 @@ #include class BCheckBox; -class BStringView; class PreferencesChatWindow : public BView { public: @@ -19,9 +18,6 @@ public: virtual void MessageReceived(BMessage* msg); private: - - BStringView* fChatWindowString; - BCheckBox* fIgnoreEmoticons; }; diff --git a/application/preferences/PreferencesReplicant.cpp b/application/preferences/PreferencesReplicant.cpp index ef59062..e1f96c3 100644 --- a/application/preferences/PreferencesReplicant.cpp +++ b/application/preferences/PreferencesReplicant.cpp @@ -1,26 +1,20 @@ /* * Copyright 2010, Oliver Ruiz Dorantes. All rights reserved. * Copyright 2012, Dario Casalinuovo. All rights reserved. + * Copyright 2021, Jaidyn Levesque. All rights reserved. * Distributed under the terms of the MIT License. */ +#include "PreferencesReplicant.h" + +#include #include #include #include -#include -#include -#include -#include +#include -#include "AccountManager.h" -#include "ChatProtocol.h" -#include "PreferencesReplicant.h" #include "AppPreferences.h" -#include "ProtocolManager.h" -#include "ProtocolSettings.h" -#include "MainWindow.h" #include "ReplicantStatusView.h" -#include "TheApp.h" #undef B_TRANSLATION_CONTEXT @@ -35,13 +29,8 @@ const uint32 kHideDeskbar = 'HCtk'; PreferencesReplicant::PreferencesReplicant() : BView(B_TRANSLATE("Replicant"), B_WILL_DRAW) { - fReplicantString = new BStringView("ReplicantString", - B_TRANSLATE("Deskbar replicant")); - - fReplicantString->SetExplicitAlignment( - BAlignment(B_ALIGN_LEFT, B_ALIGN_MIDDLE)); - - fReplicantString->SetFont(be_bold_font); + BBox* replicantBox = new BBox("replicantBox"); + replicantBox->SetLabel(B_TRANSLATE("Deskbar replicant")); fDisableReplicant = new BCheckBox("DisableReplicant", B_TRANSLATE("Disable deskbar replicant"), @@ -58,21 +47,21 @@ PreferencesReplicant::PreferencesReplicant() B_TRANSLATE("Hide field in Deskbar"), new BMessage(kHideDeskbar)); fHideDeskbar->SetEnabled(false); + const float spacing = be_control_look->DefaultItemSpacing(); - SetLayout(new BGroupLayout(B_HORIZONTAL, spacing)); - AddChild(BGroupLayoutBuilder(B_VERTICAL) - .Add(fReplicantString) - .AddGroup(B_VERTICAL, spacing) - .Add(fDisableReplicant) - .Add(fPermanentReplicant) - .Add(fHideDeskbar) - .SetInsets(spacing * 2, spacing, spacing, spacing) - .End() + BLayoutBuilder::Group<>(replicantBox, B_VERTICAL) + .SetInsets(spacing, spacing * 2, spacing, spacing) + .Add(fDisableReplicant) + .Add(fPermanentReplicant) + .Add(fHideDeskbar) + .End(); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .SetInsets(B_USE_DEFAULT_SPACING) + .Add(replicantBox) .AddGlue() - .SetInsets(spacing, spacing, spacing, spacing) - .TopView() - ); + .End(); } diff --git a/application/preferences/PreferencesReplicant.h b/application/preferences/PreferencesReplicant.h index fb0a43b..ced99be 100644 --- a/application/preferences/PreferencesReplicant.h +++ b/application/preferences/PreferencesReplicant.h @@ -9,7 +9,6 @@ #include class BCheckBox; -class BStringView; class PreferencesReplicant : public BView { public: @@ -19,7 +18,6 @@ public: virtual void MessageReceived(BMessage* msg); private: - BStringView* fReplicantString; BCheckBox* fDisableReplicant; BCheckBox* fPermanentReplicant; BCheckBox* fHideDeskbar; diff --git a/application/windows/PreferencesWindow.cpp b/application/windows/PreferencesWindow.cpp index 7660325..34e8135 100644 --- a/application/windows/PreferencesWindow.cpp +++ b/application/windows/PreferencesWindow.cpp @@ -29,7 +29,8 @@ const uint32 kApply = 'SAVE'; PreferencesWindow::PreferencesWindow() : BWindow(BRect(0, 0, 500, 615), B_TRANSLATE("Preferences"), - B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_CLOSE_ON_ESCAPE) + B_TITLED_WINDOW, B_AUTO_UPDATE_SIZE_LIMITS | B_NOT_RESIZABLE + | B_NOT_ZOOMABLE | B_CLOSE_ON_ESCAPE) { BTabView* tabView = new BTabView("tabView", B_WIDTH_AS_USUAL); tabView->AddTab(new PreferencesAccounts()); @@ -37,14 +38,35 @@ PreferencesWindow::PreferencesWindow() tabView->AddTab(new PreferencesChatWindow()); tabView->AddTab(new PreferencesReplicant()); + // Tab resizing here is a bit wonky. We want each tab to be visible, + // but we don't want the tab-view to be too wide… + float charCount = 0; + for (int i = 0; i < tabView->CountTabs(); i++) + charCount += strlen(tabView->TabAt(i)->Label()); + + // These values account for the decreasing amount of padding within tabs, + // Ignucius forgive me. + float textWidth = be_plain_font->Size(); + switch ((int)textWidth) { + case 8: case 9: charCount += 14; break; + case 10: case 11: charCount += 5; break; + case 12: break; + case 13: case 14: case 15: + charCount -= 4; break; + default: charCount -= 10; + } + tabView->SetExplicitMinSize(BSize(charCount * textWidth, B_SIZE_UNSET)); + BButton* ok = new BButton(B_TRANSLATE("OK"), new BMessage(kApply)); BLayoutBuilder::Group<>(this, B_VERTICAL) .Add(tabView) .AddGroup(B_HORIZONTAL) + .SetInsets(0, 0, B_USE_HALF_ITEM_SPACING, B_USE_HALF_ITEM_SPACING) .AddGlue() .Add(ok) - .End(); + .End() + .End(); CenterOnScreen(); }