Update DataTranslations to use BGroupLayout and BGridLayout instead of BALMLayout. This works around a regression with some changes I'll be committing soon, although I'd still like to find the source of it... Also do some style cleanup and remove fTranslatorNameView var which was never actually displayed.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38198 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alex Wilson
2010-08-17 16:39:02 +00:00
parent 54123ac0e8
commit 1f1606e745
5 changed files with 51 additions and 91 deletions
@@ -16,13 +16,16 @@
#include "TranslatorListView.h" #include "TranslatorListView.h"
#include <Application.h> #include <Application.h>
#include <Screen.h> #include <Alignment.h>
#include <Alert.h> #include <Alert.h>
#include <Bitmap.h> #include <Bitmap.h>
#include <Box.h> #include <Box.h>
#include <Button.h> #include <Button.h>
#include <ControlLook.h>
#include <LayoutBuilder.h>
#include <ListView.h> #include <ListView.h>
#include <Path.h> #include <Path.h>
#include <Screen.h>
#include <ScrollView.h> #include <ScrollView.h>
#include <String.h> #include <String.h>
#include <StringView.h> #include <StringView.h>
@@ -30,23 +33,18 @@
#include <TranslationDefs.h> #include <TranslationDefs.h>
#include <TranslatorRoster.h> #include <TranslatorRoster.h>
#include "Area.h"
#include "BALMLayout.h"
#include "OperatorType.h"
#include "XTab.h"
#include "YTab.h"
const uint32 kMsgTranslatorInfo = 'trin'; const uint32 kMsgTranslatorInfo = 'trin';
const uint32 kMsgSelectedTranslator = 'trsl'; const uint32 kMsgSelectedTranslator = 'trsl';
DataTranslationsWindow::DataTranslationsWindow() DataTranslationsWindow::DataTranslationsWindow()
: BWindow(BRect(0, 0, 550, 350), "DataTranslations", B_TITLED_WINDOW, :
BWindow(BRect(0, 0, 550, 350), "DataTranslations", B_TITLED_WINDOW,
B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE
| B_AUTO_UPDATE_SIZE_LIMITS) | B_AUTO_UPDATE_SIZE_LIMITS)
{ {
MoveTo(dynamic_cast<DataTranslationsApplication *>(be_app)->WindowCorner()); MoveTo(static_cast<DataTranslationsApplication *>(be_app)->WindowCorner());
_SetupViews(); _SetupViews();
@@ -137,32 +135,12 @@ DataTranslationsWindow::_ShowConfigView(int32 id)
BMessage emptyMsg; BMessage emptyMsg;
BRect rect(0, 0, 200, 233); BRect rect(0, 0, 200, 233);
status_t ret = roster->MakeConfigurationView(id, &emptyMsg, &fConfigView, &rect); status_t ret = roster->MakeConfigurationView(id, &emptyMsg,
if (ret != B_OK) { &fConfigView, &rect);
fRightBox->RemoveChild(fConfigView);
return ret; if (ret != B_OK)
} return ret;
BRect configRect(fRightBox->Bounds());
configRect.InsetBy(3, 3);
configRect.bottom -= 45;
float width = 0, height = 0;
if ((fConfigView->Flags() & B_SUPPORTS_LAYOUT) != 0) {
BSize configSize = fConfigView->ExplicitPreferredSize();
width = configSize.Width();
height = configSize.Height();
} else {
fConfigView->GetPreferredSize(&width, &height);
}
float widen = max_c(0, width - configRect.Width());
float heighten = max_c(0, height - configRect.Height());
if (widen > 0 || heighten > 0) {
ResizeBy(widen, heighten);
configRect.right += widen;
configRect.bottom += heighten;
}
fConfigView->MoveTo(configRect.left, configRect.top);
fConfigView->ResizeTo(configRect.Width(), configRect.Height());
fConfigView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fConfigView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
// force config views to all have the same color // force config views to all have the same color
fRightBox->AddChild(fConfigView); fRightBox->AddChild(fConfigView);
@@ -178,22 +156,19 @@ DataTranslationsWindow::_SetupViews()
// This is NULL until a translator is // This is NULL until a translator is
// selected from the listview // selected from the listview
// Window box
BView* mainView = new BView(Bounds(), "", B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS);
mainView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
AddChild(mainView);
// Add the translators list view // Add the translators list view
fTranslatorListView = new TranslatorListView(BRect(0, 0, 1, 1), "TransList", fTranslatorListView = new TranslatorListView("TransList");
B_SINGLE_SELECTION_LIST); fTranslatorListView->SetSelectionMessage(
fTranslatorListView->SetSelectionMessage(new BMessage(kMsgSelectedTranslator)); new BMessage(kMsgSelectedTranslator));
BScrollView *scrollView = new BScrollView("scroll_trans", fTranslatorListView, BScrollView *scrollView = new BScrollView("scroll_trans",
B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM, B_WILL_DRAW | B_FRAME_EVENTS, fTranslatorListView, B_WILL_DRAW | B_FRAME_EVENTS, false,
false, true, B_FANCY_BORDER); true, B_FANCY_BORDER);
// Box around the config and info panels // Box around the config and info panels
fRightBox = new BBox("Right_Side"); fRightBox = new BBox("Right_Side");
fRightBox->SetExplicitAlignment(BAlignment(B_ALIGN_USE_FULL_WIDTH,
B_ALIGN_USE_FULL_HEIGHT));
// Add the translator icon view // Add the translator icon view
fIconView = new IconView(BRect(0, 0, 31, 31), "Icon", fIconView = new IconView(BRect(0, 0, 31, 31), "Icon",
@@ -203,42 +178,19 @@ DataTranslationsWindow::_SetupViews()
BButton *button = new BButton("STD", "Info" B_UTF8_ELLIPSIS, BButton *button = new BButton("STD", "Info" B_UTF8_ELLIPSIS,
new BMessage(kMsgTranslatorInfo), B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE); new BMessage(kMsgTranslatorInfo), B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE);
// Add the translator name view
fTranslatorNameView = new BStringView("TranName", "None");
// Populate the translators list view // Populate the translators list view
_PopulateListView(); _PopulateListView();
// Build the layout // Build the layout
BALMLayout *layout = new BALMLayout(); float padding = be_control_look->DefaultItemSpacing();
mainView->SetLayout(layout); BLayoutBuilder::Group<>(this, B_HORIZONTAL, padding)
.SetInsets(padding, padding, padding, padding)
XTab *x1 = layout->AddXTab(); .Add(scrollView, 3)
XTab *x2 = layout->AddXTab(); .AddGrid(padding, padding, 6)
XTab *x3 = layout->AddXTab(); .SetInsets(0, 0, 0, 0)
YTab *y1 = layout->AddYTab(); .Add(fRightBox, 0, 0, 3, 1)
.Add(fIconView, 0, 1)
Area *leftArea = layout->AddArea(layout->Left(), layout->Top(), .Add(button, 2, 1);
x1, layout->Bottom(), scrollView);
leftArea->SetLeftInset(10);
leftArea->SetTopInset(10);
leftArea->SetBottomInset(10);
Area *rightArea = layout->AddArea(x1, layout->Top(), layout->Right(), y1, fRightBox);
rightArea->SetLeftInset(10);
rightArea->SetTopInset(10);
rightArea->SetRightInset(10);
rightArea->SetBottomInset(10);
Area *iconArea = layout->AddArea(x1, y1, x2, layout->Bottom(), fIconView);
iconArea->SetLeftInset(10);
iconArea->SetBottomInset(10);
Area *infoButtonArea = layout->AddArea(x3, y1, layout->Right(), layout->Bottom(), button);
infoButtonArea->SetRightInset(10);
infoButtonArea->SetBottomInset(10);
layout->AddConstraint(3.0, x1, -1.0, layout->Right(), OperatorType(EQ), 0.0);
fTranslatorListView->MakeFocus(); fTranslatorListView->MakeFocus();
fTranslatorListView->Select(0); fTranslatorListView->Select(0);
@@ -248,7 +200,7 @@ DataTranslationsWindow::_SetupViews()
bool bool
DataTranslationsWindow::QuitRequested() DataTranslationsWindow::QuitRequested()
{ {
BPoint pt(Frame().left, Frame().top); BPoint pt(Frame().LeftTop());
dynamic_cast<DataTranslationsApplication *>(be_app)->SetWindowCorner(pt); dynamic_cast<DataTranslationsApplication *>(be_app)->SetWindowCorner(pt);
be_app->PostMessage(B_QUIT_REQUESTED); be_app->PostMessage(B_QUIT_REQUESTED);
@@ -275,7 +227,7 @@ DataTranslationsWindow::_ShowInfoAlert(int32 id)
message << "\nInfo: " << info << message << "\nInfo: " << info <<
"\n\nPath:\n" << path.Path() << "\n"; "\n\nPath:\n" << path.Path() << "\n";
BAlert *alert = new BAlert("info", message.String(), "OK"); BAlert* alert = new BAlert("info", message.String(), "OK");
BTextView *view = alert->TextView(); BTextView *view = alert->TextView();
BFont font; BFont font;
@@ -313,7 +265,7 @@ DataTranslationsWindow::MessageReceived(BMessage *message)
break; break;
} }
TranslatorItem* item = dynamic_cast<TranslatorItem*>(fTranslatorListView->ItemAt(selected)); TranslatorItem* item = fTranslatorListView->TranslatorAt(selected);
if (item != NULL) if (item != NULL)
_ShowInfoAlert(item->ID()); _ShowInfoAlert(item->ID());
break; break;
@@ -328,12 +280,11 @@ DataTranslationsWindow::MessageReceived(BMessage *message)
if (selected < 0) { if (selected < 0) {
// If none selected, clear the old one // If none selected, clear the old one
fIconView->DrawIcon(false); fIconView->DrawIcon(false);
fTranslatorNameView->SetText("");
fRightBox->RemoveChild(fConfigView); fRightBox->RemoveChild(fConfigView);
break; break;
} }
TranslatorItem* item = dynamic_cast<TranslatorItem*>(fTranslatorListView->ItemAt(selected)); TranslatorItem* item = fTranslatorListView->TranslatorAt(selected);
if (item == NULL) if (item == NULL)
break; break;
@@ -344,7 +295,6 @@ DataTranslationsWindow::MessageReceived(BMessage *message)
int32 version = 0; int32 version = 0;
BPath path; BPath path;
_GetTranslatorInfo(item->ID(), name, info, version, path); _GetTranslatorInfo(item->ID(), name, info, version, path);
fTranslatorNameView->SetText(path.Leaf());
fIconView->SetIcon(path); fIconView->SetIcon(path);
break; break;
} }
@@ -370,7 +320,8 @@ DataTranslationsWindow::MessageReceived(BMessage *message)
int32 index = 0, id; int32 index = 0, id;
while (message->FindInt32("translator_id", index++, &id) == B_OK) { while (message->FindInt32("translator_id", index++, &id) == B_OK) {
for (int32 i = 0; i < fTranslatorListView->CountItems(); i++) { for (int32 i = 0; i < fTranslatorListView->CountItems(); i++) {
TranslatorItem* item = dynamic_cast<TranslatorItem*>(fTranslatorListView->ItemAt(i)); TranslatorItem* item = fTranslatorListView->TranslatorAt(i);
if (item == NULL) if (item == NULL)
continue; continue;
@@ -49,7 +49,6 @@ class DataTranslationsWindow : public BWindow {
// the translator config view // the translator config view
IconView *fIconView; IconView *fIconView;
BStringView *fTranslatorNameView;
}; };
#endif // DATA_TRANSLATIONS_WINDOW_H #endif // DATA_TRANSLATIONS_WINDOW_H
+1 -1
View File
@@ -9,6 +9,6 @@ Preference DataTranslations :
IconView.cpp IconView.cpp
TranslatorListView.cpp TranslatorListView.cpp
: be translation $(TARGET_LIBSUPC++) liblpsolve55.so liblinprog.so libalm.so : be translation $(TARGET_LIBSUPC++)
: DataTranslations.rdef : DataTranslations.rdef
; ;
@@ -30,7 +30,8 @@ compare_items(const void* a, const void* b)
TranslatorItem::TranslatorItem(translator_id id, const char* name) TranslatorItem::TranslatorItem(translator_id id, const char* name)
: BStringItem(name), :
BStringItem(name),
fID(id) fID(id)
{ {
} }
@@ -44,9 +45,9 @@ TranslatorItem::~TranslatorItem()
// #pragma mark - // #pragma mark -
TranslatorListView::TranslatorListView(BRect rect, const char *name, TranslatorListView::TranslatorListView(const char *name, list_view_type type)
list_view_type type) :
: BListView(rect, name, B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES) BListView(name, B_SINGLE_SELECTION_LIST)
{ {
} }
@@ -56,6 +57,13 @@ TranslatorListView::~TranslatorListView()
} }
TranslatorItem*
TranslatorListView::TranslatorAt(int32 index) const
{
return dynamic_cast<TranslatorItem*>(ItemAt(index));
}
void void
TranslatorListView::MessageReceived(BMessage *message) TranslatorListView::MessageReceived(BMessage *message)
{ {
@@ -28,10 +28,12 @@ class TranslatorItem : public BStringItem {
class TranslatorListView : public BListView { class TranslatorListView : public BListView {
public: public:
TranslatorListView(BRect rect, const char *name, TranslatorListView(const char *name,
list_view_type type = B_SINGLE_SELECTION_LIST); list_view_type type = B_SINGLE_SELECTION_LIST);
virtual ~TranslatorListView(); virtual ~TranslatorListView();
TranslatorItem* TranslatorAt(int32 index) const;
virtual void MessageReceived(BMessage *message); virtual void MessageReceived(BMessage *message);
virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *msg); virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *msg);