diff --git a/src/apps/people/PeopleApp.h b/src/apps/people/PeopleApp.h index 8e69ed5416..c5502c1d6b 100644 --- a/src/apps/people/PeopleApp.h +++ b/src/apps/people/PeopleApp.h @@ -31,11 +31,7 @@ extern people_field gFields[]; enum messages{ M_NEW = 128, M_SAVE, M_SAVE_AS, M_REVERT, - M_UNDO, M_SELECT, M_GROUP_MENU, M_DIRTY, - M_NAME, M_NICKNAME, M_COMPANY, M_ADDRESS, - M_CITY, M_STATE, M_ZIP, M_COUNTRY, M_HPHONE, - M_WPHONE, M_FAX, M_EMAIL, M_URL, M_GROUP, - M_WINDOW_QUITS + M_UNDO, M_SELECT, M_GROUP_MENU, M_WINDOW_QUITS }; enum fields { @@ -50,24 +46,24 @@ class TPeopleWindow; class TPeopleApp : public BApplication { public: - TPeopleApp(void); - virtual ~TPeopleApp(void); + TPeopleApp(); + virtual ~TPeopleApp(); - virtual void AboutRequested(void); - virtual void ArgvReceived(int32, char**); - virtual void MessageReceived(BMessage*); - virtual void RefsReceived(BMessage*); - virtual void ReadyToRun(void); - TPeopleWindow *FindWindow(entry_ref); - TPeopleWindow *NewWindow(entry_ref* = NULL); + virtual void AboutRequested(); + virtual void ArgvReceived(int32, char**); + virtual void MessageReceived(BMessage*); + virtual void RefsReceived(BMessage*); + virtual void ReadyToRun(); + TPeopleWindow* FindWindow(entry_ref); + TPeopleWindow* NewWindow(entry_ref* = NULL); - BFile *fPrefs; + BFile* fPrefs; private: - void SavePreferences(BMessage* message); + void SavePreferences(BMessage* message); - uint32 fWindowCount; - BRect fPosition; + uint32 fWindowCount; + BRect fPosition; }; #endif /* PEOPLEAPP_H */ diff --git a/src/apps/people/PeopleView.cpp b/src/apps/people/PeopleView.cpp index c9e598dcda..d25054441d 100644 --- a/src/apps/people/PeopleView.cpp +++ b/src/apps/people/PeopleView.cpp @@ -10,26 +10,31 @@ This file may be used under the terms of the Be Sample Code License. */ +#include "PeopleView.h" + +#include +#include +#include + #include -#include #include +#include +#include #include #include #include #include #include +#include -#include "PeopleView.h" #include "TTextControl.h" -#include -#include -#include - -TPeopleView::TPeopleView(BRect rect, const char *title, entry_ref *ref) - :BView(rect, title, B_FOLLOW_NONE, B_WILL_DRAW) +TPeopleView::TPeopleView(const char* name, entry_ref *ref) + : + BGridView() { + SetName(name); if (ref) fFile = new BFile(ref, O_RDWR); else @@ -46,68 +51,60 @@ TPeopleView::~TPeopleView(void) void TPeopleView::AttachedToWindow(void) { - SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + BGridLayout* layout = GridLayout(); - BRect bounds = Bounds(); - - BFont font = *be_plain_font; - int32 offset = int32(font.StringWidth(gFields[F_HPHONE].name) + 10.5); - font_height fontHeight; - font.GetHeight(&fontHeight); - int32 textHeight = int32(fontHeight.ascent + fontHeight.descent - + fontHeight.leading + 12.5); - BRect rect; int32 row = 0; - for (int32 i = 0; gFields[i].attribute; i++, row++) { const char *name = gFields[i].name; - rect.Set(NAME_H, NAME_V + row * textHeight, - bounds.right - NAME_H, NAME_V + (row + 1) * textHeight); - int32 labelOffset = offset; - if (i == F_NAME) name = "Name"; - else if (i == F_GROUP) { - name = ""; - rect.left += offset; - labelOffset = 0; - } else if (i == F_STATE) { - rect.right = rect.left + STATE_WIDTH; - row--; - } else if (i == F_ZIP) { - rect.left += STATE_WIDTH + 10; - labelOffset = int32(font.StringWidth(gFields[i].name) + 10.5); - } char *text = NULL; attr_info info; if (fFile && fFile->GetAttrInfo(gFields[i].attribute, &info) == B_OK) { text = (char *)calloc(info.size, 1); - fFile->ReadAttr(gFields[i].attribute, B_STRING_TYPE, 0, text, info.size); + fFile->ReadAttr(gFields[i].attribute, B_STRING_TYPE, + 0, text, info.size); } - fField[i] = new TTextControl(rect, name, labelOffset, text, M_DIRTY, M_NAME); - fField[i]->SetTarget(this); - AddChild(fField[i]); - + fField[i] = new TTextControl(name, text); free(text); - } - rect.right = NAME_H + offset; - rect.left = rect.right - font.StringWidth(gFields[F_GROUP].name) - 32; - rect.top -= 1; + int32 labelColumn = 0; + int32 textViewColumn = 1; + int32 textViewWidth = 3; + if (i == F_STATE) + textViewWidth = 1; + else if (i == F_ZIP) { + row--; + labelColumn = 2; + textViewColumn = 3; + textViewWidth = 1; + } + + if (i != F_GROUP) { + layout->AddItem(fField[i]->CreateLabelLayoutItem(), + labelColumn, row, 1, 1); + layout->AddItem(fField[i]->CreateTextViewLayoutItem(), + textViewColumn, row, textViewWidth, 1); + } else { + fField[i]->SetLabel(""); + layout->AddView(fField[i], textViewColumn, row, textViewWidth, 1); + } + } fGroups = new BPopUpMenu(gFields[F_GROUP].name); fGroups->SetRadioMode(false); - BMenuField *field = new BMenuField(rect, "", "", fGroups); - field->SetDivider(0.0); - field->SetFont(&font); + BMenuField *field = new BMenuField("", "", fGroups); field->SetEnabled(true); - AddChild(field); + layout->AddView(field, 0, --row); + float spacing = be_control_look->DefaultItemSpacing(); + layout->SetSpacing(spacing, spacing); + // TODO: remove this after #5614 is fixed + layout->SetInsets(spacing, spacing, spacing, spacing); fField[F_NAME]->MakeFocus(); - ResizeTo(bounds.right, rect.bottom - 5 + NAME_V); } @@ -126,7 +123,7 @@ TPeopleView::MessageReceived(BMessage* msg) case M_SELECT: for (int32 loop = 0; loop < F_END; loop++) { - BTextView* text = (BTextView *)fField[loop]->ChildAt(0); + BTextView* text = fField[loop]->TextView(); if (text->IsFocus()) { text->Select(0, text->TextLength()); break; @@ -279,7 +276,7 @@ TPeopleView::SetField(int32 index, char *data, bool update) fField[index]->SetText(data); fField[index]->Update(); } else { - BTextView* text = (BTextView *)fField[index]->ChildAt(0); + BTextView* text = fField[index]->TextView(); int32 start, end; text->GetSelection(&start, &end); @@ -303,7 +300,7 @@ bool TPeopleView::TextSelected(void) { for (int32 loop = 0; loop < F_END; loop++) { - BTextView* text = (BTextView*)fField[loop]->ChildAt(0); + BTextView* text = fField[loop]->TextView(); int32 start, end; text->GetSelection(&start, &end); diff --git a/src/apps/people/PeopleView.h b/src/apps/people/PeopleView.h index 97d7fb0cc9..8d295dbb8c 100644 --- a/src/apps/people/PeopleView.h +++ b/src/apps/people/PeopleView.h @@ -15,17 +15,16 @@ #include "PeopleApp.h" -#define NAME_H 10 -#define NAME_V 10 -#define STATE_WIDTH 175 +#include + class BPopUpMenu; class TTextControl; -class TPeopleView : public BView { +class TPeopleView : public BGridView { public: - TPeopleView(BRect rect, const char* title, entry_ref* ref); + TPeopleView(const char* name, entry_ref* ref); ~TPeopleView(void); virtual void AttachedToWindow(void); diff --git a/src/apps/people/PeopleWindow.cpp b/src/apps/people/PeopleWindow.cpp index 21d16bb837..fe97af7ae9 100644 --- a/src/apps/people/PeopleWindow.cpp +++ b/src/apps/people/PeopleWindow.cpp @@ -10,46 +10,53 @@ This file may be used under the terms of the Be Sample Code License. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "PeopleApp.h" -#include "PeopleView.h" #include "PeopleWindow.h" #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PeopleApp.h" +#include "PeopleView.h" + TPeopleWindow::TPeopleWindow(BRect frame, const char *title, entry_ref *ref) - : BWindow(frame, title, B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE), + : + BWindow(frame, title, B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE + | B_AUTO_UPDATE_SIZE_LIMITS), fPanel(NULL) { BMenu* menu; BMenuItem* item; - BRect rect(0, 0, 32767, 15); - BMenuBar* menuBar = new BMenuBar(rect, ""); + BMenuBar* menuBar = new BMenuBar(""); menu = new BMenu("File"); - menu->AddItem(item = new BMenuItem("New person" B_UTF8_ELLIPSIS, new BMessage(M_NEW), 'N')); + menu->AddItem(item = new BMenuItem("New person" B_UTF8_ELLIPSIS, + new BMessage(M_NEW), 'N')); item->SetTarget(NULL, be_app); menu->AddItem(new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED), 'W')); menu->AddSeparatorItem(); menu->AddItem(fSave = new BMenuItem("Save", new BMessage(M_SAVE), 'S')); fSave->SetEnabled(FALSE); - menu->AddItem(new BMenuItem("Save as"B_UTF8_ELLIPSIS, new BMessage(M_SAVE_AS))); - menu->AddItem(fRevert = new BMenuItem("Revert", new BMessage(M_REVERT), 'R')); + menu->AddItem(new BMenuItem("Save as"B_UTF8_ELLIPSIS, + new BMessage(M_SAVE_AS))); + menu->AddItem(fRevert = new BMenuItem("Revert", + new BMessage(M_REVERT), 'R')); fRevert->SetEnabled(FALSE); menu->AddSeparatorItem(); item = new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q'); @@ -68,10 +75,10 @@ TPeopleWindow::TPeopleWindow(BRect frame, const char *title, entry_ref *ref) fCopy->SetTarget(NULL, this); menu->AddItem(fPaste = new BMenuItem("Paste", new BMessage(B_PASTE), 'V')); fPaste->SetTarget(NULL, this); - menu->AddItem(item = new BMenuItem("Select all", new BMessage(M_SELECT), 'A')); + menu->AddItem(item = new BMenuItem("Select all", + new BMessage(M_SELECT), 'A')); item->SetTarget(NULL, this); menuBar->AddItem(menu); - AddChild(menuBar); if (ref) { fRef = new entry_ref(*ref); @@ -80,12 +87,12 @@ TPeopleWindow::TPeopleWindow(BRect frame, const char *title, entry_ref *ref) } else fRef = NULL; - rect = Frame(); - rect.OffsetTo(0, menuBar->Bounds().bottom + 1); - fView = new TPeopleView(rect, "PeopleView", fRef); + fView = new TPeopleView("PeopleView", fRef); - AddChild(fView); - ResizeTo(fView->Frame().right, fView->Frame().bottom); + BLayoutBuilder::Group<>(this, B_VERTICAL, 0) + .SetInsets(0, 0, 0, 0) + .Add(menuBar) + .Add(fView); } diff --git a/src/apps/people/TTextControl.cpp b/src/apps/people/TTextControl.cpp index ce5fc9085d..643a1a42dd 100644 --- a/src/apps/people/TTextControl.cpp +++ b/src/apps/people/TTextControl.cpp @@ -17,38 +17,25 @@ #include "TTextControl.h" -TTextControl::TTextControl(BRect r, const char *label, int32 offset, - const char *text, int32 modificationMessage, int32 msg) - : BTextControl(r, "", "", text, new BMessage(msg)) +TTextControl::TTextControl(const char *label, const char *text) + : + BTextControl(NULL, text, NULL) { - SetModificationMessage(new BMessage(modificationMessage)); - if (label[0]) { - char newLabel[B_FILE_NAME_LENGTH]; - int32 length = strlen(label); - memcpy(newLabel, label, length); - newLabel[length] = ':'; - newLabel[length + 1] = '\0'; - - SetLabel(newLabel); - } - SetDivider(offset); + if (label && label[0]) + SetLabel(BString(label).Append(":")); SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); - - if (text == NULL) - text = ""; - fOriginal = strdup(text); + fOriginal = text; } -TTextControl::~TTextControl(void) +TTextControl::~TTextControl() { - free(fOriginal); } void -TTextControl::AttachedToWindow(void) +TTextControl::AttachedToWindow() { BTextControl::AttachedToWindow(); @@ -58,9 +45,9 @@ TTextControl::AttachedToWindow(void) bool -TTextControl::Changed(void) +TTextControl::Changed() { - return strcmp(fOriginal, Text()); + return fOriginal != Text(); } @@ -75,6 +62,5 @@ TTextControl::Revert(void) void TTextControl::Update(void) { - fOriginal = (char *)realloc(fOriginal, strlen(Text()) + 1); - strcpy(fOriginal, Text()); + fOriginal = Text(); } diff --git a/src/apps/people/TTextControl.h b/src/apps/people/TTextControl.h index aa5758c93a..70379be439 100644 --- a/src/apps/people/TTextControl.h +++ b/src/apps/people/TTextControl.h @@ -1,6 +1,6 @@ //-------------------------------------------------------------------- // -// TextControl.h +// TTextControl.h // // Written by: Robert Polic // @@ -13,22 +13,22 @@ #ifndef TEXTCONTROL_H #define TEXTCONTROL_H +#include #include class TTextControl : public BTextControl { public: - TTextControl(BRect rect, const char* label, int32 length, const char* text, - int32 modificationMessage, int32 invokationMessage); - ~TTextControl(); + TTextControl(const char* label, const char* text); + virtual ~TTextControl(); - virtual void AttachedToWindow(void); + virtual void AttachedToWindow(); - bool Changed(void); - void Revert(void); - void Update(void); + bool Changed(); + void Revert(); + void Update(); private: - char *fOriginal; + BString fOriginal; }; #endif /* TEXTCONTROL_H */