From e2339980052673d16a2457483ff7b92e8c4fd179 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Sun, 15 Jul 2012 11:58:19 -0500 Subject: [PATCH 01/15] radeon_hd: Skip 9DIN connector. * Since we really don't support multiple heads well, skip 9DIN for the moment as it is a luxury. --- src/add-ons/accelerants/radeon_hd/display.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/add-ons/accelerants/radeon_hd/display.cpp b/src/add-ons/accelerants/radeon_hd/display.cpp index ecd15a444c..47e8a32fed 100644 --- a/src/add-ons/accelerants/radeon_hd/display.cpp +++ b/src/add-ons/accelerants/radeon_hd/display.cpp @@ -257,6 +257,12 @@ detect_displays() if (displayIndex >= MAX_DISPLAY) continue; + if (gConnector[id]->type == VIDEO_CONNECTOR_9DIN) { + TRACE("%s: Skipping 9DIN connector (not yet supported)\n", + __func__); + continue; + } + // TODO: As DP aux transactions don't work yet, just use LVDS as a hack #if 0 if (gConnector[id]->encoderExternal.isDPBridge == true) { @@ -310,9 +316,11 @@ detect_displays() TRACE("%s: connector %" B_PRIu32 " has digital EDID " "and is not a analog encoder.\n", __func__, id); } else { - // ???, shouldn't happen... I think. - TRACE("%s: Warning: connector %" B_PRIu32 " has neither " - "digital EDID nor is an analog encoder?\n", + // This generally means the monitor is of poor design + // Since we *know* there is no load on the analog encoder + // we assume that it is a digital display. + TRACE("%s: Warning: monitor on connector %" B_PRIu32 " has " + "false digital EDID flag and unloaded analog encoder!\n", __func__, id); } } From 82931998313bba85fa6e41705e55f6e15502810a Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 15 Jul 2012 11:25:35 -0400 Subject: [PATCH 02/15] Add definition for a general-purpose action menu item. --- src/apps/debugger/Jamfile | 1 + .../gui/util/ActionMenuItem.cpp | 55 +++++++++++++++++++ .../user_interface/gui/util/ActionMenuItem.h | 31 +++++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp create mode 100644 src/apps/debugger/user_interface/gui/util/ActionMenuItem.h diff --git a/src/apps/debugger/Jamfile b/src/apps/debugger/Jamfile index 9d04f5baa3..193bc20961 100644 --- a/src/apps/debugger/Jamfile +++ b/src/apps/debugger/Jamfile @@ -200,6 +200,7 @@ Application Debugger : VariablesView.cpp # user_interface/gui/util + ActionMenuItem.cpp GUISettingsUtils.cpp SettingsMenu.cpp TargetAddressTableColumn.cpp diff --git a/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp new file mode 100644 index 0000000000..4ef80d57e0 --- /dev/null +++ b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp @@ -0,0 +1,55 @@ +/* + * Copyright 2012, Rene Gollent, rene@gollent.com. + * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ + + +#include "ActionMenuItem.h" + +#include + +#include + + +// #pragma mark - ActionMenuItem + + +ActionMenuItem::ActionMenuItem(const char* label, BMessage* message, + char shortcut, uint32 modifiers) + : + BMenuItem(label, message, shortcut, modifiers) +{ +} + + +ActionMenuItem::ActionMenuItem(BMenu* menu, BMessage* message) + : + BMenuItem(menu, message) +{ +} + + +ActionMenuItem::~ActionMenuItem() +{ +} + + +void +ActionMenuItem::PrepareToShow(BLooper* parentLooper, BHandler* targetHandler) +{ +} + + +bool +ActionMenuItem::Finish(BLooper* parentLooper, BHandler* targetHandler, + bool force) +{ + return false; +} + + +void +ActionMenuItem::ItemSelected() +{ +} diff --git a/src/apps/debugger/user_interface/gui/util/ActionMenuItem.h b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.h new file mode 100644 index 0000000000..074f88d564 --- /dev/null +++ b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.h @@ -0,0 +1,31 @@ +/* + * Copyright 2012, Rene Gollent, rene@gollent.com. + * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ +#ifndef ACTION_MENU_ITEM_H +#define ACTION_MENU_ITEM_H + + +#include + + +class ActionMenuItem : public BMenuItem { +public: + ActionMenuItem(const char* label, + BMessage* message, char shortcut = 0, + uint32 modifiers = 0); + ActionMenuItem(BMenu* menu, + BMessage* message = NULL); + virtual ~ActionMenuItem(); + + virtual void PrepareToShow(BLooper* parentLooper, + BHandler* targetHandler); + virtual bool Finish(BLooper* parentLooper, + BHandler* targetHandler, bool force); + + virtual void ItemSelected(); +}; + + +#endif // ACTION_MENU_ITEM_H From 0712121cdb6b4dfe51d183615944a0f116447d1d Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 15 Jul 2012 11:40:16 -0400 Subject: [PATCH 03/15] Add support for actions to TableCellContextMenuTracker. - VariablesView's context menu tracker now optionally accepts contextual actions to add to the menu in addition to the current renderer settings. --- .../gui/team_window/VariablesView.cpp | 56 ++++++++++++++++++- .../gui/team_window/VariablesView.h | 2 + 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp index 922d8d49b7..85a26a291e 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp @@ -1,6 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. - * Copyright 2011, Rene Gollent, rene@gollent.com. + * Copyright 2011-2012, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ @@ -19,6 +19,7 @@ #include "table/TableColumns.h" +#include "ActionMenuItem.h" #include "Architecture.h" #include "FunctionID.h" #include "FunctionInstance.h" @@ -487,7 +488,9 @@ public: } status_t Init(Settings* rendererSettings, - SettingsMenu* rendererSettingsMenu) + SettingsMenu* rendererSettingsMenu, + ContextActionList* preSettingsActions = NULL, + ContextActionList* postSettingsActions = NULL) { fRendererSettings = rendererSettings; fRendererSettings->AcquireReference(); @@ -500,10 +503,23 @@ public: if (fContextMenu == NULL) return B_NO_MEMORY; - status_t error = fRendererSettingsMenu->AddToMenu(fContextMenu, 0); + status_t error = B_OK; + if (preSettingsActions != NULL) { + error = _AddActionItems(preSettingsActions); + if (error != B_OK) + return error; + } + + error = fRendererSettingsMenu->AddToMenu(fContextMenu, 0); if (error != B_OK) return error; + if (postSettingsActions != NULL) { + error = _AddActionItems(postSettingsActions); + if (error != B_OK) + return error; + } + AutoLocker settingsLocker(fRendererSettings); fRendererSettings->AddListener(this); @@ -516,6 +532,13 @@ public: { fRendererSettingsMenu->PrepareToShow(fParentLooper); + for (int32 i = 0; i < fContextMenu->CountItems(); i++) { + ActionMenuItem* item = dynamic_cast( + fContextMenu->ItemAt(i)); + if (item != NULL) + item->PrepareToShow(fParentLooper, fContextMenu); + } + fMenuPreparedToShow = true; BRect mouseRect(screenWhere, screenWhere); @@ -529,6 +552,15 @@ public: if (fMenuPreparedToShow) { stillActive = fRendererSettingsMenu->Finish(fParentLooper, force); + for (int32 i = 0; i < fContextMenu->CountItems(); i++) { + ActionMenuItem* item = dynamic_cast( + fContextMenu->ItemAt(i)); + if (item != NULL) { + stillActive |= item->Finish(fParentLooper, fContextMenu, + force); + } + } + fMenuPreparedToShow = stillActive; } @@ -559,6 +591,24 @@ private: } } + status_t _AddActionItems(ContextActionList* actions) + { + if (fContextMenu == NULL) + return B_BAD_VALUE; + + int32 index = fContextMenu->CountItems(); + for (int32 i = 0; ActionMenuItem* item = actions->ItemAt(i); i++) { + if (!fContextMenu->AddItem(item, index + i)) { + for (i--; i >= 0; i--) + fContextMenu->RemoveItem(fContextMenu->ItemAt(index + i)); + + return B_NO_MEMORY; + } + } + + return B_OK; + } + private: ModelNode* fNode; BLooper* fParentLooper; diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h index 0310dbd4de..d1fa54b55b 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h @@ -11,6 +11,7 @@ #include "table/TreeTable.h" +class ActionMenuItem; class CpuState; class SettingsMenu; class StackFrame; @@ -61,6 +62,7 @@ private: class VariableTableModel; class ContextMenu; class TableCellContextMenuTracker; + typedef BObjectList ContextActionList; private: void _Init(); From 544a66de684d83002ae308114d3e71f519418b38 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 15 Jul 2012 14:26:18 -0400 Subject: [PATCH 04/15] Extend MSG_SHOW_INSPECTOR_WINDOW to allow specifying an initial address. --- .../gui/team_window/TeamWindow.cpp | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp index 61636f8531..e4363313d2 100644 --- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp @@ -218,20 +218,26 @@ TeamWindow::MessageReceived(BMessage* message) { if (fInspectorWindow) { fInspectorWindow->Activate(true); - break; + } else { + try { + fInspectorWindow = InspectorWindow::Create(fTeam, + fListener, this); + if (fInspectorWindow != NULL) { + BMessage settings; + fInspectorWindow->LoadSettings(fUISettings); + fInspectorWindow->Show(); + } + } catch (...) { + // TODO: notify user + } } - try { - fInspectorWindow = InspectorWindow::Create(fTeam, fListener, - this); - if (fInspectorWindow != NULL) { - BMessage settings; - fInspectorWindow->LoadSettings(fUISettings); - fInspectorWindow->Show(); - } - } catch (...) { - // TODO: notify user - } + target_addr_t address; + if (message->FindUInt64("address", &address) == B_OK) { + BMessage addressMessage(MSG_INSPECT_ADDRESS); + addressMessage.AddUInt64("address", address); + fInspectorWindow->PostMessage(&addressMessage); + } break; } case MSG_INSPECTOR_WINDOW_CLOSED: From ae8018310aab267db14e6bac1495522e3731d5d3 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 15 Jul 2012 14:27:11 -0400 Subject: [PATCH 05/15] Set default target in PrepareToShow(). --- src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp index 4ef80d57e0..27ca732de4 100644 --- a/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp +++ b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp @@ -38,6 +38,7 @@ ActionMenuItem::~ActionMenuItem() void ActionMenuItem::PrepareToShow(BLooper* parentLooper, BHandler* targetHandler) { + SetTarget(targetHandler); } From 17ef26a9f8319415aa24e54aae6cfdbea1624071 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 15 Jul 2012 14:28:20 -0400 Subject: [PATCH 06/15] Add inspection context menu action. - TableCellContextMenuTracker now supports menus that don't have a settings submenu, since some variables won't have renderer settings but will still have context actions. - Add _GetContextActionsForNode() to retrieve the list of contextual actions available for a given model node. Currently this is only adds an action to inspect the memory address of the highlighted value, but will be extended for other actions later. --- .../gui/team_window/VariablesView.cpp | 142 ++++++++++++++---- .../gui/team_window/VariablesView.h | 3 +- 2 files changed, 113 insertions(+), 32 deletions(-) diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp index 85a26a291e..04ad5d457b 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp @@ -37,6 +37,7 @@ #include "Value.h" #include "ValueHandler.h" #include "ValueHandlerRoster.h" +#include "ValueLocation.h" #include "ValueNode.h" #include "ValueNodeContainer.h" #include "Variable.h" @@ -492,11 +493,19 @@ public: ContextActionList* preSettingsActions = NULL, ContextActionList* postSettingsActions = NULL) { - fRendererSettings = rendererSettings; - fRendererSettings->AcquireReference(); + if (rendererSettings == NULL && preSettingsActions == NULL + && postSettingsActions == NULL) { + return B_BAD_VALUE; + } - fRendererSettingsMenu = rendererSettingsMenu; - fRendererSettingsMenu->AcquireReference(); + if (rendererSettings != NULL) { + fRendererSettings = rendererSettings; + fRendererSettings->AcquireReference(); + + + fRendererSettingsMenu = rendererSettingsMenu; + fRendererSettingsMenu->AcquireReference(); + } fContextMenu = new(std::nothrow) ContextMenu(fParent, "table cell settings popup"); @@ -504,39 +513,52 @@ public: return B_NO_MEMORY; status_t error = B_OK; - if (preSettingsActions != NULL) { + if (preSettingsActions != NULL + && preSettingsActions->CountItems() > 0) { error = _AddActionItems(preSettingsActions); if (error != B_OK) return error; + + if (fRendererSettingsMenu != NULL || postSettingsActions != NULL) + fContextMenu->AddSeparatorItem(); } - error = fRendererSettingsMenu->AddToMenu(fContextMenu, 0); - if (error != B_OK) - return error; + if (fRendererSettingsMenu != NULL) { + error = fRendererSettingsMenu->AddToMenu(fContextMenu, + fContextMenu->CountItems()); + if (error != B_OK) + return error; + + if (postSettingsActions != NULL) + fContextMenu->AddSeparatorItem(); + } if (postSettingsActions != NULL) { error = _AddActionItems(postSettingsActions); if (error != B_OK) return error; + } - AutoLocker settingsLocker(fRendererSettings); - fRendererSettings->AddListener(this); - - fRendererMenuAdded = true; + if (fRendererSettings != NULL) { + AutoLocker settingsLocker(fRendererSettings); + fRendererSettings->AddListener(this); + fRendererMenuAdded = true; + } return B_OK; } void ShowMenu(BPoint screenWhere) { - fRendererSettingsMenu->PrepareToShow(fParentLooper); + if (fRendererMenuAdded) + fRendererSettingsMenu->PrepareToShow(fParentLooper); for (int32 i = 0; i < fContextMenu->CountItems(); i++) { ActionMenuItem* item = dynamic_cast( fContextMenu->ItemAt(i)); if (item != NULL) - item->PrepareToShow(fParentLooper, fContextMenu); + item->PrepareToShow(fParentLooper, fParent.Target(NULL)); } fMenuPreparedToShow = true; @@ -551,13 +573,15 @@ public: bool stillActive = false; if (fMenuPreparedToShow) { - stillActive = fRendererSettingsMenu->Finish(fParentLooper, force); + if (fRendererMenuAdded) + stillActive = fRendererSettingsMenu->Finish(fParentLooper, + force); for (int32 i = 0; i < fContextMenu->CountItems(); i++) { ActionMenuItem* item = dynamic_cast( fContextMenu->ItemAt(i)); if (item != NULL) { - stillActive |= item->Finish(fParentLooper, fContextMenu, - force); + stillActive |= item->Finish(fParentLooper, + fParent.Target(NULL), force); } } @@ -1462,6 +1486,15 @@ void VariablesView::MessageReceived(BMessage* message) { switch (message->what) { + case MSG_SHOW_INSPECTOR_WINDOW: + { + // TODO: it'd probably be more ideal to extend the context + // action mechanism to allow one to specify an explicit + // target for each action rather than them all defaulting + // to targetting here. + Looper()->PostMessage(message); + break; + } case MSG_VALUE_NODE_CHANGED: { ValueNodeChild* nodeChild; @@ -1644,25 +1677,39 @@ VariablesView::TreeTableCellMouseDown(TreeTable* table, if (node == NULL) return; + Settings* settings = NULL; + SettingsMenu* settingsMenu = NULL; + BReference settingsMenuReference; + status_t error = B_OK; TableCellValueRenderer* cellRenderer = node->TableCellRenderer(); - if (cellRenderer == NULL) - return; - - Settings* settings = cellRenderer->GetSettings(); - if (settings == NULL) - return; - - SettingsMenu* settingsMenu; - status_t error = node->GetValueHandler()->CreateTableCellValueSettingsMenu( - node->GetValue(), settings, settingsMenu); - BReference settingsMenuReference(settingsMenu, true); - if (error != B_OK) - return; + if (cellRenderer != NULL) { + settings = cellRenderer->GetSettings(); + if (settings != NULL) { + error = node->GetValueHandler() + ->CreateTableCellValueSettingsMenu(node->GetValue(), settings, + settingsMenu); + settingsMenuReference.SetTo(settingsMenu, true); + if (error != B_OK) + return; + } + } TableCellContextMenuTracker* tracker = new(std::nothrow) TableCellContextMenuTracker(node, Looper(), this); BReference trackerReference(tracker); - if (tracker == NULL || tracker->Init(settings, settingsMenu) != B_OK) + + ContextActionList* preActionList = new(std::nothrow) ContextActionList; + if (preActionList == NULL) + return; + + BPrivate::ObjectDeleter preActionListDeleter( + preActionList); + + error = _GetContextActionsForNode(node, preActionList); + if (error != B_OK) + return; + + if (tracker == NULL || tracker->Init(settings, settingsMenu, preActionList) != B_OK) return; fTableCellContextMenuTracker = trackerReference.Detach(); @@ -1729,6 +1776,39 @@ VariablesView::_RequestNodeValue(ModelNode* node) } +status_t +VariablesView::_GetContextActionsForNode(ModelNode* node, + ContextActionList* actions) +{ + ValueLocation* location = node->NodeChild()->Location(); + + // if the location's stored somewhere other than in memory, + // then we won't be able to inspect it this way. + if (location->PieceAt(0).type != VALUE_PIECE_LOCATION_MEMORY) + return B_OK; + + BMessage* message = new BMessage(MSG_SHOW_INSPECTOR_WINDOW); + if (message == NULL) + return B_NO_MEMORY; + + ObjectDeleter messageDeleter(message); + message->AddUInt64("address", location->PieceAt(0).address); + + ActionMenuItem* item = new(std::nothrow) ActionMenuItem("Inspect", + message); + if (item == NULL) + return B_NO_MEMORY; + + messageDeleter.Detach(); + ObjectDeleter actionDeleter(item); + if (!actions->AddItem(item)) + return B_NO_MEMORY; + + actionDeleter.Detach(); + return B_OK; +} + + void VariablesView::_FinishContextMenu(bool force) { diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h index d1fa54b55b..30f3149fa9 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h @@ -68,8 +68,9 @@ private: void _Init(); void _RequestNodeValue(ModelNode* node); + status_t _GetContextActionsForNode(ModelNode* node, + ContextActionList* actions); void _FinishContextMenu(bool force); - void _SaveViewState() const; void _RestoreViewState(); status_t _AddViewStateDescendentNodeInfos( From 4bb5af765fc7c9e4daf911d5ad8db763403fdd21 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Sun, 15 Jul 2012 15:05:59 -0400 Subject: [PATCH 07/15] Add control mark color setting. #8054 An enhancement adding a setting to Colors under Appearance to set the mark color of radio button and check box controls. --- headers/os/interface/InterfaceDefs.h | 1 + headers/private/app/ServerReadOnlyMemory.h | 9 +++++---- src/bin/WindowShade.cpp | 1 + src/kits/interface/ControlLook.cpp | 5 +---- src/kits/interface/InterfaceDefs.cpp | 1 + src/preferences/appearance/ColorSet.cpp | 1 + 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/headers/os/interface/InterfaceDefs.h b/headers/os/interface/InterfaceDefs.h index 0f85a486de..82c4bb72ce 100644 --- a/headers/os/interface/InterfaceDefs.h +++ b/headers/os/interface/InterfaceDefs.h @@ -294,6 +294,7 @@ enum color_which { B_CONTROL_TEXT_COLOR = 14, B_CONTROL_BORDER_COLOR = 15, B_CONTROL_HIGHLIGHT_COLOR = 16, + B_CONTROL_MARK_COLOR = 27, B_NAVIGATION_BASE_COLOR = 4, B_NAVIGATION_PULSE_COLOR = 17, B_SHINE_COLOR = 18, diff --git a/headers/private/app/ServerReadOnlyMemory.h b/headers/private/app/ServerReadOnlyMemory.h index 6ceadfde25..821de0372d 100644 --- a/headers/private/app/ServerReadOnlyMemory.h +++ b/headers/private/app/ServerReadOnlyMemory.h @@ -26,23 +26,24 @@ static inline int32 color_which_to_index(color_which which) { // NOTE: this must be kept in sync with InterfaceDefs.h color_which! - if (which <= B_WINDOW_INACTIVE_BORDER_COLOR) + if (which <= B_CONTROL_MARK_COLOR) return which - 1; if (which >= B_SUCCESS_COLOR && which <= B_FAILURE_COLOR) - return which - B_SUCCESS_COLOR + B_WINDOW_INACTIVE_BORDER_COLOR; + return which - B_SUCCESS_COLOR + B_CONTROL_MARK_COLOR; return -1; } + static inline color_which index_to_color_which(int32 index) { if (index >= 0 && index < kNumColors) { - if ((color_which)index < B_WINDOW_INACTIVE_BORDER_COLOR) + if ((color_which)index < B_CONTROL_MARK_COLOR) return (color_which)(index + 1); else { return (color_which)(index + B_SUCCESS_COLOR - - B_WINDOW_INACTIVE_BORDER_COLOR); + - B_CONTROL_MARK_COLOR); } } diff --git a/src/bin/WindowShade.cpp b/src/bin/WindowShade.cpp index dcca8d2978..d8e29a64b1 100644 --- a/src/bin/WindowShade.cpp +++ b/src/bin/WindowShade.cpp @@ -43,6 +43,7 @@ static struct option const kLongOptions[] = { I(control_text_color, B_CONTROL_TEXT_COLOR), I(control_border_color, B_CONTROL_BORDER_COLOR), I(control_highlight_color, B_CONTROL_HIGHLIGHT_COLOR), + I(control_mark_color, B_CONTROL_MARK_COLOR) I(navigation_base_color, B_NAVIGATION_BASE_COLOR), I(navigation_pulse_color, B_NAVIGATION_PULSE_COLOR), I(shine_color, B_SHINE_COLOR), diff --git a/src/kits/interface/ControlLook.cpp b/src/kits/interface/ControlLook.cpp index cc3e6869c1..a0d8a11ec8 100644 --- a/src/kits/interface/ControlLook.cpp +++ b/src/kits/interface/ControlLook.cpp @@ -3197,10 +3197,7 @@ BControlLook::_RadioButtonAndCheckBoxMarkColor(const rgb_color& base, return false; } - // TODO: Get from UI settings - color.red = 27; - color.green = 82; - color.blue = 140; + color = ui_color(B_CONTROL_MARK_COLOR); float mix = 1.0; diff --git a/src/kits/interface/InterfaceDefs.cpp b/src/kits/interface/InterfaceDefs.cpp index 1c53538c44..2a397a93a4 100644 --- a/src/kits/interface/InterfaceDefs.cpp +++ b/src/kits/interface/InterfaceDefs.cpp @@ -96,6 +96,7 @@ static const rgb_color _kDefaultColors[kNumColors] = { {80, 80, 80, 255}, // B_WINDOW_INACTIVE_TEXT_COLOR {224, 224, 224, 255}, // B_WINDOW_BORDER_COLOR {232, 232, 232, 255}, // B_WINDOW_INACTIVE_BORDER_COLOR + {27, 82, 140, 255}, // B_CONTROL_MARK_COLOR // 100... {0, 255, 0, 255}, // B_SUCCESS_COLOR {255, 0, 0, 255}, // B_FAILURE_COLOR diff --git a/src/preferences/appearance/ColorSet.cpp b/src/preferences/appearance/ColorSet.cpp index 757f711d8a..ccd6728f18 100644 --- a/src/preferences/appearance/ColorSet.cpp +++ b/src/preferences/appearance/ColorSet.cpp @@ -34,6 +34,7 @@ static ColorDescription sColorDescriptionTable[] = { B_CONTROL_TEXT_COLOR, B_TRANSLATE_MARK("Control text") }, { B_CONTROL_BORDER_COLOR, B_TRANSLATE_MARK("Control border") }, { B_CONTROL_HIGHLIGHT_COLOR, B_TRANSLATE_MARK("Control highlight") }, + { B_CONTROL_MARK_COLOR, B_TRANSLATE_MARK("Control mark") }, { B_NAVIGATION_BASE_COLOR, B_TRANSLATE_MARK("Navigation base") }, { B_NAVIGATION_PULSE_COLOR, B_TRANSLATE_MARK("Navigation pulse") }, { B_SHINE_COLOR, B_TRANSLATE_MARK("Shine") }, From 8c4773f75b06851586209f810ac1f8c759bf072f Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 15 Jul 2012 15:45:39 -0400 Subject: [PATCH 08/15] Adjust address semantics of CStringValueNode. - When resolving its value, CStringValueNode now sets its node child's address to the address of the string buffer rather than the location of the originating pointer, which allows things like Inspect to pick that up. --- .../value/value_nodes/CStringValueNode.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/apps/debugger/value/value_nodes/CStringValueNode.cpp b/src/apps/debugger/value/value_nodes/CStringValueNode.cpp index dc967113b4..3b5f90ce9d 100644 --- a/src/apps/debugger/value/value_nodes/CStringValueNode.cpp +++ b/src/apps/debugger/value/value_nodes/CStringValueNode.cpp @@ -73,14 +73,24 @@ CStringValueNode::ResolvedLocationAndValue(ValueLoader* valueLoader, if (dynamic_cast(fType) != NULL) { error = valueLoader->LoadValue(location, valueType, false, addressData); + if (error != B_OK) + return error; } else { addressData.SetTo(location->PieceAt(0).address); maxSize = dynamic_cast(fType) ->DimensionAt(0)->CountElements(); } - if (error != B_OK) - return error; + ValuePieceLocation piece; + piece.SetToMemory(addressData.ToUInt64()); + + ValueLocation* stringLocation = new(std::nothrow) ValueLocation( + valueLoader->GetArchitecture()->IsBigEndian(), piece); + + if (stringLocation == NULL) + return B_NO_MEMORY; + + BReference locationReference(stringLocation, true); error = valueLoader->LoadStringValue(addressData, maxSize, valueData); if (error != B_OK) @@ -91,8 +101,8 @@ CStringValueNode::ResolvedLocationAndValue(ValueLoader* valueLoader, if (value == NULL) return B_NO_MEMORY; - location->AcquireReference(); - _location = location; + NodeChild()->SetLocation(stringLocation, B_OK); + _location = locationReference.Detach(); _value = value; return B_OK; } From c3c5b8e8ae931ac99282a2cd84fbb2f563b60d7c Mon Sep 17 00:00:00 2001 From: John Scipione Date: Sun, 15 Jul 2012 17:36:03 -0400 Subject: [PATCH 09/15] Update the Color Box border color in Appearance and put a TODO in. --- src/preferences/appearance/ColorWhichItem.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/preferences/appearance/ColorWhichItem.cpp b/src/preferences/appearance/ColorWhichItem.cpp index 23edda4f6d..7da8529d67 100644 --- a/src/preferences/appearance/ColorWhichItem.cpp +++ b/src/preferences/appearance/ColorWhichItem.cpp @@ -40,19 +40,23 @@ ColorWhichItem::DrawItem(BView *owner, BRect frame, bool complete) owner->FillRect(frame); } - rgb_color black = {0, 0, 0, 255}; + rgb_color border = (rgb_color){ 184, 184, 184, 255 }; BRect colorRect(frame); colorRect.InsetBy(2, 2); colorRect.right = colorRect.left + colorRect.Height(); owner->SetHighColor(fColor); owner->FillRect(colorRect); - owner->SetHighColor(black); + owner->SetHighColor(border); owner->StrokeRect(colorRect); owner->MovePenTo(frame.left + colorRect.Width() + 8, frame.top + BaselineOffset()); + // TODO: Don't hardcode black here, calculate based on background + // color or use B_CONTROL_TEXT_COLOR constant. + rgb_color black = (rgb_color){ 0, 0, 0, 255 }; + if (!IsEnabled()) owner->SetHighColor(tint_color(black, B_LIGHTEN_2_TINT)); else From 2d4288086f2b04e6b1bbe9e8374f7903958669fe Mon Sep 17 00:00:00 2001 From: Alex Wilson Date: Sat, 14 Jul 2012 12:27:04 +1200 Subject: [PATCH 10/15] Make SpaceLayoutItem compose spacing using BControlLook. This allows for passing spacing/inset flags to BSpaceLayoutItem. Eg. in a builder, you could AddStrut(B_USE_ITEM_SPACING) --- src/kits/interface/SpaceLayoutItem.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/kits/interface/SpaceLayoutItem.cpp b/src/kits/interface/SpaceLayoutItem.cpp index ceadb8cf6e..a863780fe9 100644 --- a/src/kits/interface/SpaceLayoutItem.cpp +++ b/src/kits/interface/SpaceLayoutItem.cpp @@ -9,6 +9,7 @@ #include +#include #include @@ -18,6 +19,13 @@ namespace { const char* const kAlignmentField = "BSpaceLayoutItem:alignment"; const char* const kFrameField = "BSpaceLayoutItem:frame"; const char* const kVisibleField = "BSpaceLayoutItem:visible"; + + BSize& ComposeSpacingInPlace(BSize& size) + { + size.width = BControlLook::ComposeSpacing(size.width); + size.height = BControlLook::ComposeSpacing(size.height); + return size; + } } @@ -25,9 +33,9 @@ BSpaceLayoutItem::BSpaceLayoutItem(BSize minSize, BSize maxSize, BSize preferredSize, BAlignment alignment) : fFrame(), - fMinSize(minSize), - fMaxSize(maxSize), - fPreferredSize(preferredSize), + fMinSize(ComposeSpacingInPlace(minSize)), + fMaxSize(ComposeSpacingInPlace(maxSize)), + fPreferredSize(ComposeSpacingInPlace(preferredSize)), fAlignment(alignment), fVisible(true) { From a1ae8022797c710ead4307573ea988f92393ba11 Mon Sep 17 00:00:00 2001 From: Alex Wilson Date: Sat, 14 Jul 2012 15:35:45 +1200 Subject: [PATCH 11/15] Convert Poorman to use the Layout API. Also includes many style fixes. This patch was done by tokyo6pm, and then updated by mks after changes to Poorman broke the patch. ticket: #3787 --- src/apps/poorman/PoorManAdvancedView.cpp | 50 +- src/apps/poorman/PoorManAdvancedView.h | 15 +- src/apps/poorman/PoorManLoggingView.cpp | 88 +-- src/apps/poorman/PoorManLoggingView.h | 42 +- src/apps/poorman/PoorManPreferencesWindow.cpp | 195 +++--- src/apps/poorman/PoorManPreferencesWindow.h | 97 ++- src/apps/poorman/PoorManSiteView.cpp | 90 +-- src/apps/poorman/PoorManSiteView.h | 36 +- src/apps/poorman/PoorManView.cpp | 2 +- src/apps/poorman/PoorManView.h | 8 +- src/apps/poorman/PoorManWindow.cpp | 626 ++++++++---------- src/apps/poorman/PoorManWindow.h | 151 +++-- src/apps/poorman/StatusSlider.cpp | 30 +- src/apps/poorman/StatusSlider.h | 26 +- 14 files changed, 654 insertions(+), 802 deletions(-) diff --git a/src/apps/poorman/PoorManAdvancedView.cpp b/src/apps/poorman/PoorManAdvancedView.cpp index 10ef09a8ca..e817428698 100644 --- a/src/apps/poorman/PoorManAdvancedView.cpp +++ b/src/apps/poorman/PoorManAdvancedView.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include "constants.h" @@ -19,46 +20,41 @@ #define B_TRANSLATION_CONTEXT "PoorMan" -PoorManAdvancedView::PoorManAdvancedView(BRect rect, const char *name) - : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) +PoorManAdvancedView::PoorManAdvancedView(const char* name) + : + BView(name, B_WILL_DRAW, NULL) { - PoorManWindow * win; - win = ((PoorManApplication *)be_app)->GetPoorManWindow(); + PoorManWindow* win; + win = ((PoorManApplication*)be_app)->GetPoorManWindow(); - SetViewColor(BACKGROUND_COLOR); + SetLayout(new BGroupLayout(B_VERTICAL)); - // Console Logging BBox - BRect maxRect; - maxRect = rect; - maxRect.top -= 5.0; - maxRect.left -= 5.0; - maxRect.right -= 7.0; - maxRect.bottom -= 118.0; - - BBox * connectionOptions = new BBox(maxRect, B_TRANSLATE("Connections")); + BBox* connectionOptions = new BBox(B_TRANSLATE("Connections")); connectionOptions->SetLabel(STR_BBX_CONNECTION); - AddChild(connectionOptions); - BRect sliderRect; - sliderRect = connectionOptions->Bounds(); - sliderRect.InsetBy(10.0f, 10.0f); - sliderRect.top += 10; - sliderRect.bottom = sliderRect.top + 50.0; - - maxConnections = new StatusSlider(sliderRect, "Max Slider", STR_SLD_LABEL, - STR_SLD_STATUS_LABEL, new BMessage(MSG_PREF_ADV_SLD_MAX_CONNECTION), 1, 200); + fMaxConnections = new StatusSlider("Max Slider", STR_SLD_LABEL, + STR_SLD_STATUS_LABEL, + new BMessage(MSG_PREF_ADV_SLD_MAX_CONNECTION), 1, 200); // labels below the slider 1 and 200 - maxConnections->SetLimitLabels("1", "200"); + fMaxConnections->SetLimitLabels("1", "200"); SetMaxSimutaneousConnections(win->MaxConnections()); - connectionOptions->AddChild(maxConnections); + + connectionOptions->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(fMaxConnections) + .SetInsets(5, 5, 5, 5)); + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(connectionOptions) + .AddGlue() + .SetInsets(5, 5, 5, 5)); } void PoorManAdvancedView::SetMaxSimutaneousConnections(int32 num) { if (num <= 0 || num > 200) - maxConnections->SetValue(32); + fMaxConnections->SetValue(32); else - maxConnections->SetValue(num); + fMaxConnections->SetValue(num); } diff --git a/src/apps/poorman/PoorManAdvancedView.h b/src/apps/poorman/PoorManAdvancedView.h index fd693a77f1..9b6dc58a0e 100644 --- a/src/apps/poorman/PoorManAdvancedView.h +++ b/src/apps/poorman/PoorManAdvancedView.h @@ -13,16 +13,17 @@ #include "StatusSlider.h" -class PoorManAdvancedView: public BView -{ +class PoorManAdvancedView: public BView { public: - PoorManAdvancedView(BRect, const char *name); - int32 MaxSimultaneousConnections() { return maxConnections->Value(); } - void SetMaxSimutaneousConnections(int32 num); + PoorManAdvancedView(const char *name); + + int32 MaxSimultaneousConnections() + { return fMaxConnections->Value(); } + void SetMaxSimutaneousConnections(int32 num); private: - // Advanced Tab + // Advanced Tab // Connections Options - StatusSlider * maxConnections; + StatusSlider* fMaxConnections; }; #endif diff --git a/src/apps/poorman/PoorManLoggingView.cpp b/src/apps/poorman/PoorManLoggingView.cpp index 2f52c40a39..2d06194a1c 100644 --- a/src/apps/poorman/PoorManLoggingView.cpp +++ b/src/apps/poorman/PoorManLoggingView.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include "constants.h" @@ -19,80 +20,61 @@ #define B_TRANSLATION_CONTEXT "PoorMan" -PoorManLoggingView::PoorManLoggingView(BRect rect, const char *name) - : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) +PoorManLoggingView::PoorManLoggingView(const char* name) + : + BView(name, B_WILL_DRAW, NULL) { - PoorManWindow * win; - win = ((PoorManApplication *)be_app)->GetPoorManWindow(); + PoorManWindow* win; + win = ((PoorManApplication*)be_app)->GetPoorManWindow(); - SetViewColor(BACKGROUND_COLOR); + SetLayout(new BGroupLayout(B_VERTICAL)); - // Console Logging BBox - BRect consoleLoggingRect; - consoleLoggingRect = rect; - consoleLoggingRect.top -= 5.0; - consoleLoggingRect.left -= 5.0; - consoleLoggingRect.right -= 7.0; - consoleLoggingRect.bottom -= 118.0; - - BBox * consoleLogging = new BBox(consoleLoggingRect, - B_TRANSLATE("Console Logging")); + BBox* consoleLogging = new BBox(B_TRANSLATE("Console Logging")); consoleLogging->SetLabel(STR_BBX_CONSOLE_LOGGING); - AddChild(consoleLogging); - // File Logging BBox - BRect fileLoggingRect; - fileLoggingRect = consoleLoggingRect; - fileLoggingRect.top = consoleLoggingRect.bottom + 10.0; - fileLoggingRect.bottom = fileLoggingRect.top + 100.0; - - BBox * fileLogging = new BBox(fileLoggingRect, - B_TRANSLATE("File Logging")); + BBox* fileLogging = new BBox(B_TRANSLATE("File Logging")); fileLogging->SetLabel(STR_BBX_FILE_LOGGING); - AddChild(fileLogging); - - float left = 10.0; - float top = 20.0; - float box_size = 13.0; - BRect tempRect(left, top, consoleLoggingRect.Width() - 5.0, top + box_size); - + // Console Logging - logConsole = new BCheckBox(tempRect, B_TRANSLATE("Log To Console"), + fLogConsole = new BCheckBox(B_TRANSLATE("Log To Console"), STR_CBX_LOG_CONSOLE, new BMessage(MSG_PREF_LOG_CBX_CONSOLE)); // set the checkbox to the value the program has SetLogConsoleValue(win->LogConsoleFlag()); - consoleLogging->AddChild(logConsole); // File Logging - logFile = new BCheckBox(tempRect, B_TRANSLATE("Log To File"), - STR_CBX_LOG_FILE, new BMessage(MSG_PREF_LOG_CBX_FILE)); + fLogFile = new BCheckBox(B_TRANSLATE("Log To File"), STR_CBX_LOG_FILE, + new BMessage(MSG_PREF_LOG_CBX_FILE)); // set the checkbox to the value the program has SetLogFileValue(win->LogFileFlag()); - fileLogging->AddChild(logFile); // File Name - tempRect.top = tempRect.bottom + 10.0; - tempRect.bottom = tempRect.top + box_size; - tempRect.right -= 5.0; - - logFileName = new BTextControl(tempRect, B_TRANSLATE("File Name"), + fLogFileName = new BTextControl(B_TRANSLATE("File Name"), STR_TXT_LOG_FILE_NAME, NULL, NULL); - logFileName->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); - logFileName->SetDivider(fileLogging->StringWidth(STR_TXT_LOG_FILE_NAME) + 8.0f); SetLogFileName(win->LogPath()); - fileLogging->AddChild(logFileName); // Create Log File - BRect createLogFileRect; - createLogFileRect.top = tempRect.bottom + 13.0; - createLogFileRect.right = tempRect.right + 2.0; - createLogFileRect.left = createLogFileRect.right - - fileLogging->StringWidth(B_TRANSLATE("Create Log File")) - 24.0; - createLogFileRect.bottom = createLogFileRect.top + 19.0; - - createLogFile = new BButton(createLogFileRect, B_TRANSLATE("Create Log File"), + fCreateLogFile = new BButton(B_TRANSLATE("Create Log File"), STR_BTN_CREATE_LOG_FILE, new BMessage(MSG_PREF_LOG_BTN_CREATE_FILE)); - fileLogging->AddChild(createLogFile); + consoleLogging->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .Add(fLogConsole) + .AddGlue()) + .SetInsets(5, 5, 5, 5)); + + fileLogging->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .Add(fLogFile) + .AddGlue()) + .Add(fLogFileName) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .AddGlue() + .Add(fCreateLogFile)) + .SetInsets(5, 5, 5, 5)); + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(consoleLogging) + .Add(fileLogging) + .SetInsets(5, 5, 5, 5)); } diff --git a/src/apps/poorman/PoorManLoggingView.h b/src/apps/poorman/PoorManLoggingView.h index 2ffa367606..9648f08be4 100644 --- a/src/apps/poorman/PoorManLoggingView.h +++ b/src/apps/poorman/PoorManLoggingView.h @@ -14,28 +14,36 @@ #include -class PoorManLoggingView: public BView -{ +class PoorManLoggingView: public BView { public: - PoorManLoggingView(BRect, const char *name); + PoorManLoggingView(const char* name); - void SetLogConsoleValue(bool state) {if (state) logConsole->SetValue(B_CONTROL_ON); - else logConsole->SetValue(B_CONTROL_OFF); } - bool LogConsoleValue() { return (logConsole->Value() == B_CONTROL_ON) ? true : false; } - void SetLogFileValue(bool state) {if (state) logFile->SetValue(B_CONTROL_ON); - else logFile->SetValue(B_CONTROL_OFF); } - bool LogFileValue() { return (logFile->Value() == B_CONTROL_ON) ? true : false; } -const char * LogFileName() { return logFileName->Text(); } - void SetLogFileName(const char * log) { logFileName->SetText(log); } -private: - // Logging Tab + void SetLogConsoleValue(bool state) + { if (state) + fLogConsole->SetValue(B_CONTROL_ON); + else fLogConsole->SetValue(B_CONTROL_OFF); } + bool LogConsoleValue() + { return (fLogConsole->Value() == B_CONTROL_ON) + ? true : false; } + void SetLogFileValue(bool state) + { if (state) fLogFile->SetValue(B_CONTROL_ON); + else fLogFile->SetValue(B_CONTROL_OFF); } + bool LogFileValue() + { return (fLogFile->Value() == B_CONTROL_ON) + ? true : false; } + const char* LogFileName() + { return fLogFileName->Text(); } + void SetLogFileName(const char* log) + { fLogFileName->SetText(log); } +private: + // Logging Tab // Console Logging - BCheckBox * logConsole; + BCheckBox* fLogConsole; // File Logging - BCheckBox * logFile; - BTextControl * logFileName; - BButton * createLogFile; + BCheckBox* fLogFile; + BTextControl* fLogFileName; + BButton * fCreateLogFile; }; #endif diff --git a/src/apps/poorman/PoorManPreferencesWindow.cpp b/src/apps/poorman/PoorManPreferencesWindow.cpp index 21a7137ee3..a09475de91 100644 --- a/src/apps/poorman/PoorManPreferencesWindow.cpp +++ b/src/apps/poorman/PoorManPreferencesWindow.cpp @@ -9,7 +9,10 @@ #include #include #include +#include +#include #include +#include #include #include "constants.h" @@ -25,110 +28,72 @@ PoorManPreferencesWindow::PoorManPreferencesWindow(BRect frame, char * name) : BWindow(frame, name, B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE - | B_CLOSE_ON_ESCAPE), - webDirFilePanel(NULL), - logFilePanel(NULL) + | B_CLOSE_ON_ESCAPE | B_AUTO_UPDATE_SIZE_LIMITS), + fWebDirFilePanel(NULL), + fLogFilePanel(NULL) { - frame = Bounds(); + SetLayout(new BGroupLayout(B_VERTICAL)); - prefView = new PoorManView(frame, STR_WIN_NAME_PREF); - //prefView->SetViewColor(216,216,216,255); - prefView->SetViewColor(BACKGROUND_COLOR); - AddChild(prefView); - - - // Button View - BRect buttonRect; - buttonRect = Bounds(); - buttonRect.top = buttonRect.bottom - 30; - - buttonView = new PoorManView(buttonRect, "Button View"); - buttonView->SetViewColor(BACKGROUND_COLOR); - prefView->AddChild(buttonView); - - // Buttons - float buttonTop = 0.0f; - float buttonHeight = 26.0f; - - float widthCancel = prefView->StringWidth(B_TRANSLATE("Cancel")) + 24.0f; - float widthDone = prefView->StringWidth(B_TRANSLATE("Done")) + 24.0f; - - float gap = 5.0f; - - BRect button1(prefView->Bounds().Width() - 2 * gap - widthCancel - - widthDone, buttonTop, prefView->Bounds().Width() - 2 * gap - widthDone, - buttonTop + buttonHeight); - cancelButton = new BButton(button1, "Cancel Button", B_TRANSLATE("Cancel"), + fCancelButton = new BButton("Cancel Button", B_TRANSLATE("Cancel"), new BMessage(MSG_PREF_BTN_CANCEL)); - - BRect button2(prefView->Bounds().Width() - gap - widthDone, buttonTop, - prefView->Bounds().Width() - gap, buttonTop + buttonHeight); - doneButton = new BButton(button2, "Done Button", B_TRANSLATE("Done"), + fDoneButton = new BButton("Done Button", B_TRANSLATE("Done"), new BMessage(MSG_PREF_BTN_DONE)); - buttonView->AddChild(cancelButton); - buttonView->AddChild(doneButton); - - // Create tabs - BRect r; - r = Bounds(); - //r.InsetBy(5, 5); - r.top += 8.0; - r.bottom -= 38.0; - - prefTabView = new BTabView(r, "Pref Tab View"); - prefTabView->SetViewColor(BACKGROUND_COLOR); - - r = prefTabView->Bounds(); - r.InsetBy(5, 5); - r.bottom -= prefTabView->TabHeight(); + fPrefTabView = new BTabView("Pref Tab View"); // Site Tab - siteTab = new BTab(); - siteView = new PoorManSiteView(r, "Site View"); - prefTabView->AddTab(siteView, siteTab); - siteTab->SetLabel(STR_TAB_SITE); + fSiteTab = new BTab(); + fSiteView = new PoorManSiteView("Site View"); + fPrefTabView->AddTab(fSiteView, fSiteTab); + fSiteTab->SetLabel(STR_TAB_SITE); // Logging Tab - loggingTab = new BTab(); - loggingView = new PoorManLoggingView(r, "Logging View"); - prefTabView->AddTab(loggingView, loggingTab); - loggingTab->SetLabel(STR_TAB_LOGGING); + fLoggingTab = new BTab(); + fLoggingView = new PoorManLoggingView("Logging View"); + fPrefTabView->AddTab(fLoggingView, fLoggingTab); + fLoggingTab->SetLabel(STR_TAB_LOGGING); // Advanced Tab - advancedTab = new BTab(); - advancedView = new PoorManAdvancedView(r, "Advanced View"); - prefTabView->AddTab(advancedView, advancedTab); - advancedTab->SetLabel(STR_TAB_ADVANCED); - - prefView->AddChild(prefTabView); + fAdvancedTab = new BTab(); + fAdvancedView = new PoorManAdvancedView("Advanced View"); + fPrefTabView->AddTab(fAdvancedView, fAdvancedTab); + fAdvancedTab->SetLabel(STR_TAB_ADVANCED); // FilePanels BWindow * change_title; BMessenger messenger(this); BMessage message(MSG_FILE_PANEL_SELECT_WEB_DIR); - webDirFilePanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL, + fWebDirFilePanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL, B_DIRECTORY_NODE, false, &message, NULL, true); - webDirFilePanel->SetPanelDirectory(new BDirectory("/boot/home/public_html")); - webDirFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Select")); - change_title = webDirFilePanel->Window(); + fWebDirFilePanel->SetPanelDirectory( + new BDirectory("/boot/home/public_html")); + fWebDirFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Select")); + change_title = fWebDirFilePanel->Window(); change_title->SetTitle(STR_FILEPANEL_SELECT_WEB_DIR); message.what = MSG_FILE_PANEL_CREATE_LOG_FILE; - logFilePanel = new BFilePanel(B_SAVE_PANEL, &messenger, NULL, + fLogFilePanel = new BFilePanel(B_SAVE_PANEL, &messenger, NULL, B_FILE_NODE, false, &message); - logFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Create")); - change_title = logFilePanel->Window(); + fLogFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, B_TRANSLATE("Create")); + change_title = fLogFilePanel->Window(); change_title->SetTitle(STR_FILEPANEL_CREATE_LOG_FILE); + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(fPrefTabView) + .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .AddGlue() + .Add(fCancelButton) + .Add(fDoneButton)) + .SetInsets(5, 5, 5, 5)); } PoorManPreferencesWindow::~PoorManPreferencesWindow() { - delete logFilePanel; - delete webDirFilePanel; + delete fLogFilePanel; + delete fWebDirFilePanel; } @@ -139,38 +104,38 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message) case MSG_PREF_BTN_DONE: PoorManWindow* win; PoorManServer* server; - win = ((PoorManApplication *)be_app)->GetPoorManWindow(); + win = ((PoorManApplication*)be_app)->GetPoorManWindow(); server = win->GetServer(); PRINT(("Pref Window: sendDir CheckBox: %d\n", - siteView->SendDirValue())); - server->SetListDir(siteView->SendDirValue()); - win->SetDirListFlag(siteView->SendDirValue()); + fSiteView->SendDirValue())); + server->SetListDir(fSiteView->SendDirValue()); + win->SetDirListFlag(fSiteView->SendDirValue()); PRINT(("Pref Window: indexFileName TextControl: %s\n", - siteView->IndexFileName())); - if (server->SetIndexName(siteView->IndexFileName()) == B_OK) - win->SetIndexFileName(siteView->IndexFileName()); - PRINT(("Pref Window: webDir: %s\n", siteView->WebDir())); - if (server->SetWebDir(siteView->WebDir()) == B_OK) { - win->SetWebDir(siteView->WebDir()); - win->SetDirLabel(siteView->WebDir()); + fSiteView->IndexFileName())); + if (server->SetIndexName(fSiteView->IndexFileName()) == B_OK) + win->SetIndexFileName(fSiteView->IndexFileName()); + PRINT(("Pref Window: webDir: %s\n", fSiteView->WebDir())); + if (server->SetWebDir(fSiteView->WebDir()) == B_OK) { + win->SetWebDir(fSiteView->WebDir()); + win->SetDirLabel(fSiteView->WebDir()); } PRINT(("Pref Window: logConsole CheckBox: %d\n", - loggingView->LogConsoleValue())); - win->SetLogConsoleFlag(loggingView->LogConsoleValue()); + fLoggingView->LogConsoleValue())); + win->SetLogConsoleFlag(fLoggingView->LogConsoleValue()); PRINT(("Pref Window: logFile CheckBox: %d\n", - loggingView->LogFileValue())); - win->SetLogFileFlag(loggingView->LogFileValue()); + fLoggingView->LogFileValue())); + win->SetLogFileFlag(fLoggingView->LogFileValue()); PRINT(("Pref Window: logFileName: %s\n", - loggingView->LogFileName())); - win->SetLogPath(loggingView->LogFileName()); + fLoggingView->LogFileName())); + win->SetLogPath(fLoggingView->LogFileName()); PRINT(("Pref Window: MaxConnections Slider: %ld\n", - advancedView->MaxSimultaneousConnections())); - server->SetMaxConns(advancedView->MaxSimultaneousConnections()); + fAdvancedView->MaxSimultaneousConnections())); + server->SetMaxConns(fAdvancedView->MaxSimultaneousConnections()); win->SetMaxConnections( - (int16)advancedView->MaxSimultaneousConnections()); + (int16)fAdvancedView->MaxSimultaneousConnections()); if (Lock()) Quit(); @@ -181,10 +146,10 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message) break; case MSG_PREF_SITE_BTN_SELECT: // Select the Web Directory, root directory to look in. - webDirFilePanel->SetTarget(this); - webDirFilePanel->SetMessage(new BMessage(MSG_FILE_PANEL_SELECT_WEB_DIR)); - if (!webDirFilePanel->IsShowing()) - webDirFilePanel->Show(); + fWebDirFilePanel->SetTarget(this); + fWebDirFilePanel->SetMessage(new BMessage(MSG_FILE_PANEL_SELECT_WEB_DIR)); + if (!fWebDirFilePanel->IsShowing()) + fWebDirFilePanel->Show(); break; case MSG_FILE_PANEL_SELECT_WEB_DIR: // handle the open BMessage from the Select Web Directory File Panel @@ -193,7 +158,7 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message) break; case MSG_PREF_LOG_BTN_CREATE_FILE: // Create the Log File - logFilePanel->Show(); + fLogFilePanel->Show(); break; case MSG_FILE_PANEL_CREATE_LOG_FILE: // handle the save BMessage from the Create Log File Panel @@ -201,8 +166,8 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message) CreateLogFile(message); break; case MSG_PREF_ADV_SLD_MAX_CONNECTION: - max_connections = advancedView->MaxSimultaneousConnections(); - PRINT(("Max Connections: %ld\n", max_connections)); + fMaxConnections = fAdvancedView->MaxSimultaneousConnections(); + PRINT(("Max Connections: %ld\n", fMaxConnections)); break; default: BWindow::MessageReceived(message); @@ -212,10 +177,10 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message) void -PoorManPreferencesWindow::SelectWebDir(BMessage * message) +PoorManPreferencesWindow::SelectWebDir(BMessage* message) { entry_ref ref; - const char * name; + const char* name; BPath path; BEntry entry; @@ -227,15 +192,15 @@ PoorManPreferencesWindow::SelectWebDir(BMessage * message) entry.GetPath(&path); PRINT(("DIR: %s\n", path.Path())); - siteView->SetWebDir(path.Path()); + fSiteView->SetWebDir(path.Path()); bool temp; if (message->FindBool("Default Dialog", &temp) == B_OK) { PoorManWindow* win = ((PoorManApplication *)be_app)->GetPoorManWindow(); win->StartServer(); - if (win->GetServer()->SetWebDir(siteView->WebDir()) == B_OK) { - win->SetWebDir(siteView->WebDir()); - win->SetDirLabel(siteView->WebDir()); + if (win->GetServer()->SetWebDir(fSiteView->WebDir()) == B_OK) { + win->SetWebDir(fSiteView->WebDir()); + win->SetDirLabel(fSiteView->WebDir()); win->SaveSettings(); win->Show(); } @@ -246,7 +211,7 @@ PoorManPreferencesWindow::SelectWebDir(BMessage * message) void -PoorManPreferencesWindow::CreateLogFile(BMessage * message) +PoorManPreferencesWindow::CreateLogFile(BMessage* message) { entry_ref ref; const char * name; @@ -268,8 +233,8 @@ PoorManPreferencesWindow::CreateLogFile(BMessage * message) PRINT(("Log File: %s\n", path.Path())); if (err == B_OK) { - loggingView->SetLogFileName(path.Path()); - loggingView->SetLogFileValue(true); + fLoggingView->SetLogFileName(path.Path()); + fLoggingView->SetLogFileValue(true); } // mark the checkbox @@ -283,8 +248,8 @@ PoorManPreferencesWindow::ShowWebDirFilePanel() BMessage message(MSG_FILE_PANEL_SELECT_WEB_DIR); message.AddBool("Default Dialog", true); - webDirFilePanel->SetTarget(be_app); - webDirFilePanel->SetMessage(&message); - if (!webDirFilePanel->IsShowing()) - webDirFilePanel->Show(); + fWebDirFilePanel->SetTarget(be_app); + fWebDirFilePanel->SetMessage(&message); + if (!fWebDirFilePanel->IsShowing()) + fWebDirFilePanel->Show(); } diff --git a/src/apps/poorman/PoorManPreferencesWindow.h b/src/apps/poorman/PoorManPreferencesWindow.h index 2aaace87ef..7758799dda 100644 --- a/src/apps/poorman/PoorManPreferencesWindow.h +++ b/src/apps/poorman/PoorManPreferencesWindow.h @@ -22,59 +22,56 @@ #include "PoorManAdvancedView.h" - - -class PoorManPreferencesWindow: public BWindow -{ -private: - - PoorManView * prefView; - PoorManView * buttonView; - - // ------------------------------------------------ - // Tabs - BTabView * prefTabView; - BTab * siteTab; - BTab * loggingTab; - BTab * advancedTab; - // Tab Views - PoorManSiteView * siteView; - PoorManLoggingView * loggingView; - PoorManAdvancedView * advancedView; - - // ------------------------------------------------ - // Buttons - BButton * cancelButton; - BButton * doneButton; - - // ------------------------------------------------ - // FilePanels - BFilePanel * webDirFilePanel; - BFilePanel * logFilePanel; - - - // ------------------------------------------------ - // temporary preference variables used to save and - // set the application to - // site tab - char web_directory[B_FILE_NAME_LENGTH]; - char index_file_name[64]; - bool send_dir; - // logging tab - bool log_to_console; - bool log_to_file; - char log_file_name[B_FILE_NAME_LENGTH]; - // advanced tab - int32 max_connections; +class PoorManPreferencesWindow: public BWindow { public: - PoorManPreferencesWindow(BRect frame, char * name); - ~PoorManPreferencesWindow(); + PoorManPreferencesWindow(BRect frame, char* name); + ~PoorManPreferencesWindow(); -virtual void MessageReceived(BMessage * message); + virtual void MessageReceived(BMessage* message); - void ShowWebDirFilePanel(); - void SelectWebDir(BMessage * message); - void CreateLogFile(BMessage * message); + void ShowWebDirFilePanel(); + void SelectWebDir(BMessage* message); + void CreateLogFile(BMessage* message); + +private: + PoorManView* fPrefView; + PoorManView* fButtonView; + + // ------------------------------------------------ + // Tabs + BTabView* fPrefTabView; + BTab* fSiteTab; + BTab* fLoggingTab; + BTab* fAdvancedTab; + // Tab Views + PoorManSiteView* fSiteView; + PoorManLoggingView* fLoggingView; + PoorManAdvancedView* fAdvancedView; + + // ------------------------------------------------ + // Buttons + BButton* fCancelButton; + BButton* fDoneButton; + + // ------------------------------------------------ + // FilePanels + BFilePanel* fWebDirFilePanel; + BFilePanel* fLogFilePanel; + + + // ------------------------------------------------ + // temporary preference variables used to save and + // set the application to + // site tab + char fWebDirectory[B_FILE_NAME_LENGTH]; + char fIndexFileName[64]; + bool fSendDir; + // logging tab + bool flogToConsole; + bool fLogToFile; + char fLogFileName[B_FILE_NAME_LENGTH]; + // advanced tab + int32 fMaxConnections; }; #endif diff --git a/src/apps/poorman/PoorManSiteView.cpp b/src/apps/poorman/PoorManSiteView.cpp index 4214d6c01f..532c0e65ad 100644 --- a/src/apps/poorman/PoorManSiteView.cpp +++ b/src/apps/poorman/PoorManSiteView.cpp @@ -6,91 +6,63 @@ */ #include +#include #include "constants.h" #include "PoorManSiteView.h" #include "PoorManWindow.h" #include "PoorManApplication.h" -PoorManSiteView::PoorManSiteView(BRect rect, const char *name) - : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) +PoorManSiteView::PoorManSiteView(const char* name) + : BView(name, B_WILL_DRAW, NULL) { - PoorManWindow * win; + PoorManWindow* win; win = ((PoorManApplication *)be_app)->GetPoorManWindow(); - SetViewColor(BACKGROUND_COLOR); + SetLayout(new BGroupLayout(B_VERTICAL)); // Web Site Location BBox - BRect webLocationRect; - webLocationRect = rect; - webLocationRect.top -= 5.0; - webLocationRect.left -= 5.0; - webLocationRect.right -= 7.0; - webLocationRect.bottom -= 98.0; - - BBox * webSiteLocation = new BBox(webLocationRect, "Web Location"); + BBox* webSiteLocation = new BBox("Web Location"); webSiteLocation->SetLabel(STR_BBX_LOCATION); - AddChild(webSiteLocation); // Web Site Options BBox - BRect webOptionsRect; - webOptionsRect = webLocationRect; - webOptionsRect.top = webOptionsRect.bottom + 10.0; - webOptionsRect.bottom = webOptionsRect.top + 80.0; - - BBox * webSiteOptions = new BBox(webOptionsRect, "Web Options"); + BBox* webSiteOptions = new BBox("Web Options"); webSiteOptions->SetLabel(STR_BBX_OPTIONS); - AddChild(webSiteOptions); // Send Directory List if No Index - float left = 10.0; - float top = 20.0; - float box_size = 13.0; - BRect sendDirRect(left, top, webOptionsRect.Width() - 5.0, top + box_size); - sendDir = new BCheckBox(sendDirRect, "Send Dir", STR_CBX_DIR_LIST_LABEL, new BMessage(MSG_PREF_SITE_CBX_INDEX)); + fSendDir = new BCheckBox("Send Dir", STR_CBX_DIR_LIST_LABEL, + new BMessage(MSG_PREF_SITE_CBX_INDEX)); // set the checkbox to the value the program has SetSendDirValue(win->DirListFlag()); - webSiteOptions->AddChild(sendDir); - - // Finish the Web Site Location Section - BRect webSiteLocationRect; - webSiteLocationRect = webLocationRect; - webSiteLocationRect.InsetBy(10.0, 7.0); - webSiteLocationRect.top += 13.0; - webSiteLocationRect.bottom = webSiteLocationRect.top + 19.0; - // Web Directory Text Control - webDir = new BTextControl(webSiteLocationRect, "Web Dir", - STR_TXT_DIRECTORY, NULL, NULL); - webDir->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); - webDir->SetDivider(80.0); + fWebDir = new BTextControl("Web Dir", STR_TXT_DIRECTORY, NULL); SetWebDir(win->WebDir()); - webSiteLocation->AddChild(webDir); // Select Web Directory Button - BRect selectWebDirRect; - - selectWebDirRect.top = webSiteLocationRect.bottom + 5.0; - selectWebDirRect.right = webSiteLocationRect.right + 2.0; - selectWebDirRect.left = selectWebDirRect.right - - webSiteLocation->StringWidth("Select Web Dir") - 24.0; - selectWebDirRect.bottom = selectWebDirRect.top + 19.0; - - selectWebDir = new BButton(selectWebDirRect, "Select Web Dir", - STR_BTN_DIRECTORY, new BMessage(MSG_PREF_SITE_BTN_SELECT)); - webSiteLocation->AddChild(selectWebDir); + fSelectWebDir = new BButton("Select Web Dir", STR_BTN_DIRECTORY, + new BMessage(MSG_PREF_SITE_BTN_SELECT)); // Index File Name Text Control - //webDirRect.InsetBy(10.0, 7.0); - webSiteLocationRect.top += 63.0; - webSiteLocationRect.bottom = webSiteLocationRect.top + 19.0; - - indexFileName = new BTextControl(webSiteLocationRect, - "Index File Name", STR_TXT_INDEX, NULL, NULL); - indexFileName->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT); - indexFileName->SetDivider(80.0); + fIndexFileName = new BTextControl("Index File Name", STR_TXT_INDEX, NULL); SetIndexFileName(win->IndexFileName()); - webSiteLocation->AddChild(indexFileName); + webSiteOptions->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .Add(fSendDir) + .AddGlue()) + .SetInsets(5, 5, 5, 5)); + + webSiteLocation->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(fWebDir) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .AddGlue() + .Add(fSelectWebDir)) + .Add(fIndexFileName) + .SetInsets(5, 5, 5, 5)); + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + .Add(webSiteLocation) + .Add(webSiteOptions) + .SetInsets(5, 5, 5, 5)); } diff --git a/src/apps/poorman/PoorManSiteView.h b/src/apps/poorman/PoorManSiteView.h index 2fecd8f86c..8bd8716da4 100644 --- a/src/apps/poorman/PoorManSiteView.h +++ b/src/apps/poorman/PoorManSiteView.h @@ -14,26 +14,34 @@ #include -class PoorManSiteView: public BView -{ +class PoorManSiteView: public BView { public: - PoorManSiteView(BRect, const char *name); - void SetSendDirValue(bool state) {if (state) sendDir->SetValue(B_CONTROL_ON); - else sendDir->SetValue(B_CONTROL_OFF); } - bool SendDirValue() { return (sendDir->Value() == B_CONTROL_ON) ? true : false; } -const char * IndexFileName() { return indexFileName->Text(); } - void SetIndexFileName(const char * name) { indexFileName->SetText(name); } -const char * WebDir() { return webDir->Text(); } - void SetWebDir(const char * dir) { webDir->SetText(dir); } + PoorManSiteView(const char *name); + + void SetSendDirValue(bool state) + { if (state) fSendDir->SetValue(B_CONTROL_ON); + else fSendDir->SetValue(B_CONTROL_OFF); } + bool SendDirValue() + { return (fSendDir->Value() == B_CONTROL_ON) + ? true : false; } + const char* IndexFileName() + { return fIndexFileName->Text(); } + void SetIndexFileName(const char* name) + { fIndexFileName->SetText(name); } + const char* WebDir() + { return fWebDir->Text(); } + void SetWebDir(const char* dir) + { fWebDir->SetText(dir); } + private: // Site Tab // Web Site Location - BTextControl * webDir; - BTextControl * indexFileName; - BButton * selectWebDir; + BTextControl* fWebDir; + BTextControl* fIndexFileName; + BButton* fSelectWebDir; // Web Site Options - BCheckBox * sendDir; + BCheckBox* fSendDir; }; diff --git a/src/apps/poorman/PoorManView.cpp b/src/apps/poorman/PoorManView.cpp index 492162c9b6..9a27f517e1 100644 --- a/src/apps/poorman/PoorManView.cpp +++ b/src/apps/poorman/PoorManView.cpp @@ -10,7 +10,7 @@ #endif PoorManView::PoorManView(BRect rect, const char *name) - : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW ) + : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW) { } diff --git a/src/apps/poorman/PoorManView.h b/src/apps/poorman/PoorManView.h index 724dcadeb6..e4c40da3cc 100644 --- a/src/apps/poorman/PoorManView.h +++ b/src/apps/poorman/PoorManView.h @@ -12,11 +12,11 @@ #include #endif -class PoorManView: public BView -{ +class PoorManView: public BView { public: - PoorManView(BRect, const char *name); -virtual void AttachedToWindow(); + PoorManView(BRect, const char *name); + + virtual void AttachedToWindow(); }; #endif diff --git a/src/apps/poorman/PoorManWindow.cpp b/src/apps/poorman/PoorManWindow.cpp index 08eb8b83e8..07e5ba907e 100644 --- a/src/apps/poorman/PoorManWindow.cpp +++ b/src/apps/poorman/PoorManWindow.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -43,182 +44,111 @@ PoorManWindow::PoorManWindow(BRect frame) - : BWindow(frame, STR_APP_NAME, B_TITLED_WINDOW, 0), - status(false), hits(0), prefWindow(NULL), fLogFile(NULL), fServer(NULL) + : + BWindow(frame, STR_APP_NAME, B_TITLED_WINDOW, 0), + fStatus(false), + fHits(0), + fPrefWindow(NULL), + fLogFile(NULL), + fServer(NULL) { //preferences init - web_directory.SetTo(STR_DEFAULT_WEB_DIRECTORY); - index_file_name.SetTo("index.html"); - dir_list_flag = false; + fWebDirectory.SetTo(STR_DEFAULT_WEB_DIRECTORY); + fIndexFileName.SetTo("index.html"); + fDirListFlag = false; - log_console_flag = true; - log_file_flag = false; - log_path.SetTo(""); + fLogConsoleFlag = true; + fLogFileFlag = false; + fLogPath.SetTo(""); - max_connections = (int16)32; + fMaxConnections = (int16)32; - is_zoomed = true; - last_width = 318.0f; - last_height = 320.0f; - this->frame = frame; - setwindow_frame.Set(112.0f, 60.0f, 492.0f, 340.0f); + fIsZoomed = true; + fLastWidth = 318.0f; + fLastHeight = 320.0f; + this->fFrame = frame; + fSetwindowFrame.Set(112.0f, 60.0f, 492.0f, 340.0f); // PoorMan Window SetSizeLimits(318, 1600, 53, 1200); // limit the size of the size of the window - //SetZoomLimits(1024, 768); - - //frame.Set(30.0f, 30.0f, 355.0f, 185.0f); - frame.OffsetTo(B_ORIGIN); - frame = Bounds(); - frame.top += 19.0; - - mainView = new PoorManView(frame, STR_APP_NAME); - mainView->SetViewColor(216,216,216,255); - - mainView->SetFont(be_bold_font); - mainView->SetFontSize(12); - AddChild(mainView); - - // BBox tests - BRect br; - br = mainView->Bounds(); - br.top = 1.0; - - BBox * bb = new BBox(br, "Background", B_FOLLOW_ALL_SIDES, - B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE); - bb->SetHighColor(WHITE); - bb->SetLowColor(GRAY); - bb->SetBorder(B_PLAIN_BORDER); - mainView->AddChild(bb); + SetLayout(new BGroupLayout(B_VERTICAL)); // ----------------------------------------------------------------- // Three Labels // Status String - BRect statusRect; - statusRect = Bounds(); - statusRect.left += 5; - statusRect.top += 3; - statusRect.bottom = statusRect.top + 15; - statusRect.right = statusRect.left + 100; // make the width wide enough for the string to display - - statusView = new BStringView(statusRect, "Status View", - B_TRANSLATE("Status: Stopped")); - bb->AddChild(statusView); + fStatusView = new BStringView("Status View", B_TRANSLATE("Status: Stopped")); // Directory String - BRect dirRect; - dirRect = Bounds(); - dirRect.top = statusRect.bottom - 1; - dirRect.bottom = dirRect.top + 15; - dirRect.left = statusRect.left; - dirRect.right -= 5; - - dirView = new BStringView(dirRect, "Dir View", - B_TRANSLATE("Directory: (none)"), B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP); - bb->AddChild(dirView); + fDirView = new BStringView("Dir View", B_TRANSLATE("Directory: (none)")); // Hits String - BRect hitsRect; - hitsRect = bb->Bounds(); - hitsRect.InsetBy(5.0f, 5.0f); - hitsRect.top = statusRect.top; - hitsRect.bottom = statusRect.bottom; - hitsRect.left = statusRect.right + 20; - - hitsView = new BStringView(hitsRect, "Hit View", B_TRANSLATE("Hits: 0"), - B_FOLLOW_RIGHT | B_FOLLOW_TOP); - hitsView->SetAlignment(B_ALIGN_RIGHT); - bb->AddChild(hitsView); + fHitsView = new BStringView("Hit View", B_TRANSLATE("Hits: 0")); // ----------------------------------------------------------------- // Logging View - - // logRect - BRect logRect = bb->Bounds();//(5.0, 36.0, 306.0, 131.0); - logRect.InsetBy(5, 5); - logRect.top = 36.0f; - logRect.right -= B_V_SCROLL_BAR_WIDTH; - - // textRect - BRect textRect; //(1.0, 1.0, 175.0, 75.0); - textRect = logRect; - textRect.top = 0.0; - textRect.left = 2.0; - textRect.right = logRect.right - logRect.left - 2.0; - textRect.bottom = logRect.bottom - logRect.top; - fLogViewFont = new BFont(be_plain_font); - fLogViewFont->SetSize(11.0); + fLoggingView = new BTextView(STR_TXT_VIEW, B_WILL_DRAW ); - loggingView = new BTextView(logRect, STR_TXT_VIEW, textRect, - fLogViewFont, NULL, B_FOLLOW_ALL_SIDES, B_WILL_DRAW ); - - loggingView->MakeEditable(false); // user cannot change the text - loggingView->MakeSelectable(true); - loggingView->SetViewColor(WHITE); - loggingView->SetStylable(true); + fLoggingView->MakeEditable(false); // user cannot change the text + fLoggingView->MakeSelectable(true); + fLoggingView->SetViewColor(WHITE); + fLoggingView->SetStylable(true); // create the scroll view - scrollView = new BScrollView("Scroll View", loggingView, B_FOLLOW_ALL_SIDES, - B_WILL_DRAW | B_FRAME_EVENTS, + fScrollView = new BScrollView("Scroll View", fLoggingView, + B_WILL_DRAW | B_FRAME_EVENTS | B_FOLLOW_ALL_SIDES, // Make sure articles on border do not occur when resizing false, true); - bb->AddChild(scrollView); - loggingView->MakeFocus(true); + fLoggingView->MakeFocus(true); // ----------------------------------------------------------------- // menu bar - BRect menuRect; - menuRect = Bounds(); - menuRect.bottom = 18.0f; - - FileMenuBar = new BMenuBar(menuRect, "File Menu Bar"); + fFileMenuBar = new BMenuBar("File Menu Bar"); // menus - FileMenu = BuildFileMenu(); - if (FileMenu) - FileMenuBar->AddItem(FileMenu); + fFileMenu = BuildFileMenu(); + if (fFileMenu) + fFileMenuBar->AddItem(fFileMenu); - EditMenu = BuildEditMenu(); - if (EditMenu) - FileMenuBar->AddItem(EditMenu); + fEditMenu = BuildEditMenu(); + if (fEditMenu) + fFileMenuBar->AddItem(fEditMenu); - ControlsMenu = BuildControlsMenu(); - if (ControlsMenu) - FileMenuBar->AddItem(ControlsMenu); + fControlsMenu = BuildControlsMenu(); + if (fControlsMenu) + fFileMenuBar->AddItem(fControlsMenu); // File Panels BWindow* change_title; - BMessenger messenger(this); - saveConsoleFilePanel = new BFilePanel( - B_SAVE_PANEL, - &messenger, - NULL, - B_FILE_NODE, - false, + fSaveConsoleFilePanel = new BFilePanel(B_SAVE_PANEL, new BMessenger(this), + NULL, B_FILE_NODE, false, new BMessage(MSG_FILE_PANEL_SAVE_CONSOLE)); - - change_title = saveConsoleFilePanel->Window(); + change_title = fSaveConsoleFilePanel->Window(); change_title->SetTitle(STR_FILEPANEL_SAVE_CONSOLE); - saveConsoleSelectionFilePanel = new BFilePanel( - B_SAVE_PANEL, - &messenger, - NULL, - B_FILE_NODE, - false, + fSaveConsoleSelectionFilePanel = new BFilePanel(B_SAVE_PANEL, + new BMessenger(this), NULL, B_FILE_NODE, false, new BMessage(MSG_FILE_PANEL_SAVE_CONSOLE_SELECTION)); - - change_title = saveConsoleSelectionFilePanel->Window(); + change_title = fSaveConsoleSelectionFilePanel->Window(); change_title->SetTitle(STR_FILEPANEL_SAVE_CONSOLE_SELECTION); - - AddChild(FileMenuBar); + AddChild(BGroupLayoutBuilder(B_VERTICAL) + .Add(fFileMenuBar) + .Add(BGroupLayoutBuilder(B_VERTICAL, 5) + .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .Add(fStatusView) + .AddGlue() + .Add(fHitsView)) + .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .Add(fDirView) + .AddGlue()) + .Add(fScrollView) + .SetInsets(10, 10, 10, 10))); pthread_rwlock_init(&fLogFileLock, NULL); } @@ -227,7 +157,6 @@ PoorManWindow::PoorManWindow(BRect frame) PoorManWindow::~PoorManWindow() { delete fServer; - delete fLogViewFont; delete fLogFile; pthread_rwlock_destroy(&fLogFileLock); } @@ -237,129 +166,127 @@ void PoorManWindow::MessageReceived(BMessage* message) { switch (message->what) { - case MSG_MENU_FILE_SAVE_AS: - saveConsoleFilePanel->Show(); - break; - case MSG_FILE_PANEL_SAVE_CONSOLE: - printf("FilePanel: Save console\n"); - SaveConsole(message, false); - break; - case MSG_MENU_FILE_SAVE_SELECTION: - saveConsoleSelectionFilePanel->Show(); - break; - case MSG_FILE_PANEL_SAVE_CONSOLE_SELECTION: - printf("FilePanel: Save console selection\n"); - SaveConsole(message, true); - break; - case MSG_FILE_PANEL_SELECT_WEB_DIR: - prefWindow->MessageReceived(message); - break; - case MSG_MENU_EDIT_PREF: - prefWindow = new PoorManPreferencesWindow( - setwindow_frame, - STR_WIN_NAME_PREF); - prefWindow->Show(); - break; - case MSG_MENU_CTRL_RUN: - if (status) - StopServer(); - else - StartServer(); - break; - case MSG_MENU_CTRL_CLEAR_HIT: - SetHits(0); - //UpdateHitsLabel(); - break; - case MSG_MENU_CTRL_CLEAR_CONSOLE: - loggingView->SelectAll(); - loggingView->Delete(); - break; - case MSG_MENU_CTRL_CLEAR_LOG: - FILE * f; - f = fopen(log_path.String(), "w"); - fclose(f); - break; - case MSG_LOG: { - if (!log_console_flag && !log_file_flag) + case MSG_MENU_FILE_SAVE_AS: + fSaveConsoleFilePanel->Show(); break; + case MSG_FILE_PANEL_SAVE_CONSOLE: + printf("FilePanel: Save console\n"); + SaveConsole(message, false); + break; + case MSG_MENU_FILE_SAVE_SELECTION: + fSaveConsoleSelectionFilePanel->Show(); + break; + case MSG_FILE_PANEL_SAVE_CONSOLE_SELECTION: + printf("FilePanel: Save console selection\n"); + SaveConsole(message, true); + break; + case MSG_FILE_PANEL_SELECT_WEB_DIR: + fPrefWindow->MessageReceived(message); + break; + case MSG_MENU_EDIT_PREF: + fPrefWindow = new PoorManPreferencesWindow(fSetwindowFrame, + STR_WIN_NAME_PREF); + fPrefWindow->Show(); + break; + case MSG_MENU_CTRL_RUN: + if (fStatus) + StopServer(); + else + StartServer(); + break; + case MSG_MENU_CTRL_CLEAR_HIT: + SetHits(0); + //UpdateHitsLabel(); + break; + case MSG_MENU_CTRL_CLEAR_CONSOLE: + fLoggingView->SelectAll(); + fLoggingView->Delete(); + break; + case MSG_MENU_CTRL_CLEAR_LOG: + FILE* f; + f = fopen(fLogPath.String(), "w"); + fclose(f); + break; + case MSG_LOG: { + if (!fLogConsoleFlag && !fLogFileFlag) + break; - time_t time; - in_addr_t address; - rgb_color color; - const void* pointer; - ssize_t size; - const char* msg; - BString line; + time_t time; + in_addr_t address; + rgb_color color; + const void* pointer; + ssize_t size; + const char* msg; + BString line; - if (message->FindString("cstring", &msg) != B_OK) - break; - if (message->FindData("time_t", B_TIME_TYPE, &pointer, &size) != B_OK) - time = -1; - else - time = *static_cast(pointer); + if (message->FindString("cstring", &msg) != B_OK) + break; + if (message->FindData("time_t", B_TIME_TYPE, &pointer, &size) != B_OK) + time = -1; + else + time = *static_cast(pointer); - if (message->FindData("in_addr_t", B_ANY_TYPE, &pointer, &size) != B_OK) - address = INADDR_NONE; - else - address = *static_cast(pointer); + if (message->FindData("in_addr_t", B_ANY_TYPE, &pointer, &size) != B_OK) + address = INADDR_NONE; + else + address = *static_cast(pointer); - if (message->FindData("rgb_color", B_RGB_COLOR_TYPE, &pointer, &size) != B_OK) - color = BLACK; - else - color = *static_cast(pointer); + if (message->FindData("rgb_color", B_RGB_COLOR_TYPE, &pointer, &size) != B_OK) + color = BLACK; + else + color = *static_cast(pointer); - if (time != -1) { - BString timeString; - if (BLocale::Default()->FormatDateTime(&timeString, time, - DATE_FORMAT, TIME_FORMAT) == B_OK) { - line << '[' << timeString << "]: "; - } - } - - if (address != INADDR_NONE) { - char addr[INET_ADDRSTRLEN]; - struct in_addr sin_addr; - sin_addr.s_addr = address; - if (inet_ntop(AF_INET, &sin_addr, addr, sizeof(addr)) != NULL) { - addr[strlen(addr)] = '\0'; - line << '(' << addr << ") "; - } - } - - line << msg; - - text_run run; - text_run_array runs; - - run.offset = 0; - run.font = *fLogViewFont; - run.color = color; - - runs.count = 1; - runs.runs[0] = run; - - if (Lock()) { - if (log_console_flag) { - loggingView->Insert(loggingView->TextLength(), - line.String(), line.Length(), &runs); - loggingView->ScrollToOffset(loggingView->TextLength()); - } - - if (log_file_flag) { - if (pthread_rwlock_rdlock(&fLogFileLock) == 0) { - fLogFile->Write(line.String(), line.Length()); - pthread_rwlock_unlock(&fLogFileLock); + if (time != -1) { + BString timeString; + if (BLocale::Default()->FormatDateTime(&timeString, time, + DATE_FORMAT, TIME_FORMAT) == B_OK) { + line << '[' << timeString << "]: "; } } - - Unlock(); - } - break; - } - default: - BWindow::MessageReceived(message); - break; + if (address != INADDR_NONE) { + char addr[INET_ADDRSTRLEN]; + struct in_addr sin_addr; + sin_addr.s_addr = address; + if (inet_ntop(AF_INET, &sin_addr, addr, sizeof(addr)) != NULL) { + addr[strlen(addr)] = '\0'; + line << '(' << addr << ") "; + } + } + + line << msg; + + text_run run; + text_run_array runs; + + run.offset = 0; + run.color = color; + + runs.count = 1; + runs.runs[0] = run; + + if (Lock()) { + if (fLogConsoleFlag) { + fLoggingView->Insert(fLoggingView->TextLength(), + line.String(), line.Length(), &runs); + fLoggingView->ScrollToOffset(fLoggingView->TextLength()); + } + + if (fLogFileFlag) { + if (pthread_rwlock_rdlock(&fLogFileLock) == 0) { + fLogFile->Write(line.String(), line.Length()); + pthread_rwlock_unlock(&fLogFileLock); + } + } + + Unlock(); + } + + break; + } + default: + BWindow::MessageReceived(message); + break; } } @@ -367,17 +294,17 @@ PoorManWindow::MessageReceived(BMessage* message) void PoorManWindow::FrameMoved(BPoint origin) { - frame.left = origin.x; - frame.top = origin.y; + fFrame.left = origin.x; + fFrame.top = origin.y; } void PoorManWindow::FrameResized(float width, float height) { - if (is_zoomed) { - last_width = width; - last_height = height; + if (fIsZoomed) { + fLastWidth = width; + fLastHeight = height; } } @@ -385,7 +312,7 @@ PoorManWindow::FrameResized(float width, float height) bool PoorManWindow::QuitRequested() { - if (status) { + if (fStatus) { time_t now = time(NULL); BString timeString; BLocale::Default()->FormatDateTime(&timeString, now, @@ -395,21 +322,21 @@ PoorManWindow::QuitRequested() line << "[" << timeString << "]: " << B_TRANSLATE("Shutting down.") << "\n"; - if (log_console_flag) { - loggingView->Insert(loggingView->TextLength(), - line, line.Length()); - loggingView->ScrollToOffset(loggingView->TextLength()); + if (fLogConsoleFlag) { + fLoggingView->Insert(fLoggingView->TextLength(), + line, line.Length()); + fLoggingView->ScrollToOffset(fLoggingView->TextLength()); } - if (log_file_flag) { + if (fLogFileFlag) { if (pthread_rwlock_rdlock(&fLogFileLock) == 0) { - fLogFile->Write(line, line.Length()); - pthread_rwlock_unlock(&fLogFileLock); + fLogFile->Write(line, line.Length()); + pthread_rwlock_unlock(&fLogFileLock); } } fServer->Stop(); - status = false; + fStatus = false; UpdateStatusLabelAndMenuItem(); } @@ -422,14 +349,14 @@ PoorManWindow::QuitRequested() void PoorManWindow::Zoom(BPoint origin, float width, float height) { - if (is_zoomed) { + if (fIsZoomed) { // Change to the Minimal size - is_zoomed = false; + fIsZoomed = false; ResizeTo(318, 53); } else { // Change to the Zoomed size - is_zoomed = true; - ResizeTo(last_width, last_height); + fIsZoomed = true; + ResizeTo(fLastWidth, fLastHeight); } } @@ -437,7 +364,7 @@ PoorManWindow::Zoom(BPoint origin, float width, float height) void PoorManWindow::SetHits(uint32 num) { - hits = num; + fHits = num; UpdateHitsLabel(); } @@ -445,10 +372,10 @@ PoorManWindow::SetHits(uint32 num) // Private: Methods ------------------------------------------ -BMenu * +BMenu* PoorManWindow::BuildFileMenu() const { - BMenu * ptrFileMenu = new BMenu(STR_MNU_FILE); + BMenu* ptrFileMenu = new BMenu(STR_MNU_FILE); ptrFileMenu->AddItem(new BMenuItem(STR_MNU_FILE_SAVE_AS, new BMessage(MSG_MENU_FILE_SAVE_AS), CMD_FILE_SAVE_AS)); @@ -465,28 +392,28 @@ PoorManWindow::BuildFileMenu() const } -BMenu * +BMenu* PoorManWindow::BuildEditMenu() const { - BMenu * ptrEditMenu = new BMenu(STR_MNU_EDIT); + BMenu* ptrEditMenu = new BMenu(STR_MNU_EDIT); - BMenuItem * CopyMenuItem = new BMenuItem(STR_MNU_EDIT_COPY, + BMenuItem* CopyMenuItem = new BMenuItem(STR_MNU_EDIT_COPY, new BMessage(B_COPY), CMD_EDIT_COPY); ptrEditMenu->AddItem(CopyMenuItem); - CopyMenuItem->SetTarget(loggingView, NULL); + CopyMenuItem->SetTarget(fLoggingView, NULL); ptrEditMenu->AddSeparatorItem(); - BMenuItem * SelectAllMenuItem = new BMenuItem(STR_MNU_EDIT_SELECT_ALL, + BMenuItem* SelectAllMenuItem = new BMenuItem(STR_MNU_EDIT_SELECT_ALL, new BMessage(B_SELECT_ALL), CMD_EDIT_SELECT_ALL); ptrEditMenu->AddItem(SelectAllMenuItem); - SelectAllMenuItem->SetTarget(loggingView, NULL); + SelectAllMenuItem->SetTarget(fLoggingView, NULL); ptrEditMenu->AddSeparatorItem(); - BMenuItem * PrefMenuItem = new BMenuItem(STR_MNU_EDIT_PREF, + BMenuItem* PrefMenuItem = new BMenuItem(STR_MNU_EDIT_PREF, new BMessage(MSG_MENU_EDIT_PREF)); ptrEditMenu->AddItem(PrefMenuItem); @@ -494,27 +421,27 @@ PoorManWindow::BuildEditMenu() const } -BMenu * +BMenu* PoorManWindow::BuildControlsMenu() const { - BMenu * ptrControlMenu = new BMenu(STR_MNU_CTRL); + BMenu* ptrControlMenu = new BMenu(STR_MNU_CTRL); - BMenuItem * RunServerMenuItem = new BMenuItem(STR_MNU_CTRL_RUN_SERVER, + BMenuItem* RunServerMenuItem = new BMenuItem(STR_MNU_CTRL_RUN_SERVER, new BMessage(MSG_MENU_CTRL_RUN)); RunServerMenuItem->SetMarked(false); ptrControlMenu->AddItem(RunServerMenuItem); - BMenuItem * ClearHitCounterMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_HIT_COUNTER, + BMenuItem* ClearHitCounterMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_HIT_COUNTER, new BMessage(MSG_MENU_CTRL_CLEAR_HIT)); ptrControlMenu->AddItem(ClearHitCounterMenuItem); ptrControlMenu->AddSeparatorItem(); - BMenuItem * ClearConsoleLogMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_CONSOLE, + BMenuItem* ClearConsoleLogMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_CONSOLE, new BMessage(MSG_MENU_CTRL_CLEAR_CONSOLE)); ptrControlMenu->AddItem(ClearConsoleLogMenuItem); - BMenuItem * ClearLogFileMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_LOG_FILE, + BMenuItem* ClearLogFileMenuItem = new BMenuItem(STR_MNU_CTRL_CLEAR_LOG_FILE, new BMessage(MSG_MENU_CTRL_CLEAR_LOG)); ptrControlMenu->AddItem(ClearLogFileMenuItem); @@ -523,13 +450,13 @@ PoorManWindow::BuildControlsMenu() const void -PoorManWindow::SetDirLabel(const char * name) +PoorManWindow::SetDirLabel(const char* name) { BString dirPath(B_TRANSLATE("Directory: ")); dirPath.Append(name); if (Lock()) { - dirView->SetText(dirPath.String()); + fDirView->SetText(dirPath.String()); Unlock(); } } @@ -539,11 +466,11 @@ void PoorManWindow::UpdateStatusLabelAndMenuItem() { if (Lock()) { - if (status) - statusView->SetText(B_TRANSLATE("Status: Running")); + if (fStatus) + fStatusView->SetText(B_TRANSLATE("Status: Running")); else - statusView->SetText(B_TRANSLATE("Status: Stopped")); - ControlsMenu->FindItem(STR_MNU_CTRL_RUN_SERVER)->SetMarked(status); + fStatusView->SetText(B_TRANSLATE("Status: Stopped")); + fControlsMenu->FindItem(STR_MNU_CTRL_RUN_SERVER)->SetMarked(fStatus); Unlock(); } } @@ -553,8 +480,8 @@ void PoorManWindow::UpdateHitsLabel() { if (Lock()) { - sprintf(hitsLabel, B_TRANSLATE("Hits: %lu"), GetHits()); - hitsView->SetText(hitsLabel); + sprintf(fHitsLabel, B_TRANSLATE("Hits: %lu"), GetHits()); + fHitsView->SetText(fHitsLabel); Unlock(); } @@ -562,22 +489,25 @@ PoorManWindow::UpdateHitsLabel() status_t -PoorManWindow::SaveConsole(BMessage * message, bool selection) +PoorManWindow::SaveConsole(BMessage* message, bool selection) { entry_ref ref; - const char * name; + const char* name; BPath path; BEntry entry; status_t err = B_OK; - FILE *f; + FILE* f; - if ((err = message->FindRef("directory", &ref)) != B_OK) + err = message->FindRef("directory", &ref); + if (err != B_OK) return err; - if ((err = message->FindString("name", &name)) != B_OK) + err = message->FindString("name", &name); + if (err != B_OK) return err; - if ((err = entry.SetTo(&ref)) != B_OK) + err = entry.SetTo(&ref); + if (err != B_OK) return err; entry.GetPath(&path); @@ -588,20 +518,21 @@ PoorManWindow::SaveConsole(BMessage * message, bool selection) if (!selection) { // write the data to the file - err = fwrite(loggingView->Text(), 1, loggingView->TextLength(), f); + err = fwrite(fLoggingView->Text(), 1, fLoggingView->TextLength(), f); } else { // find the selected text and write it to a file int32 start = 0, end = 0; - loggingView->GetSelection(&start, &end); + fLoggingView->GetSelection(&start, &end); BString buffer; char * buffData = buffer.LockBuffer(end - start + 1); // copy the selected text from the TextView to the buffer - loggingView->GetText(start, end - start, buffData); + fLoggingView->GetText(start, end - start, buffData); buffer.UnlockBuffer(end - start + 1); err = fwrite(buffer.String(), 1, end - start + 1, f); } + fclose(f); return err; @@ -627,10 +558,10 @@ PoorManWindow::DefaultSettings() break; case 1: - prefWindow = new PoorManPreferencesWindow( - setwindow_frame, + fPrefWindow = new PoorManPreferencesWindow( + fSetwindowFrame, STR_WIN_NAME_PREF); - prefWindow->ShowWebDirFilePanel(); + fPrefWindow->ShowWebDirFilePanel(); break; case 2: @@ -674,49 +605,49 @@ PoorManWindow::ReadSettings() return B_ERROR; //site tab - if (m.FindString("web_directory", &web_directory) != B_OK) - web_directory.SetTo(STR_DEFAULT_WEB_DIRECTORY); - if (m.FindString("index_file_name", &index_file_name) != B_OK) - index_file_name.SetTo("index.html"); - if (m.FindBool("dir_list_flag", &dir_list_flag) != B_OK) - dir_list_flag = false; + if (m.FindString("fWebDirectory", &fWebDirectory) != B_OK) + fWebDirectory.SetTo(STR_DEFAULT_WEB_DIRECTORY); + if (m.FindString("fIndexFileName", &fIndexFileName) != B_OK) + fIndexFileName.SetTo("index.html"); + if (m.FindBool("fDirListFlag", &fDirListFlag) != B_OK) + fDirListFlag = false; //logging tab - if (m.FindBool("log_console_flag", &log_console_flag) != B_OK) - log_console_flag = true; - if (m.FindBool("log_file_flag", &log_file_flag) != B_OK) - log_file_flag = false; - if (m.FindString("log_path", &log_path) != B_OK) - log_path.SetTo(""); + if (m.FindBool("fLogConsoleFlag", &fLogConsoleFlag) != B_OK) + fLogConsoleFlag = true; + if (m.FindBool("fLogFileFlag", &fLogFileFlag) != B_OK) + fLogFileFlag = false; + if (m.FindString("fLogPath", &fLogPath) != B_OK) + fLogPath.SetTo(""); //advance tab - if (m.FindInt16("max_connections", &max_connections) != B_OK) - max_connections = (int16)32; + if (m.FindInt16("fMaxConnections", &fMaxConnections) != B_OK) + fMaxConnections = (int16)32; //windows' position and size - if (m.FindRect("frame", &frame) != B_OK) - frame.Set(82.0f, 30.0f, 400.0f, 350.0f); - if (m.FindRect("setwindow_frame", &setwindow_frame) != B_OK) - setwindow_frame.Set(112.0f, 60.0f, 492.0f, 340.0f); - if (m.FindBool("is_zoomed", &is_zoomed) != B_OK) - is_zoomed = true; - if (m.FindFloat("last_width", &last_width) != B_OK) - last_width = 318.0f; - if (m.FindFloat("last_height", &last_height) != B_OK) - last_height = 320.0f; + if (m.FindRect("frame", &fFrame) != B_OK) + fFrame.Set(82.0f, 30.0f, 400.0f, 350.0f); + if (m.FindRect("fSetwindowFrame", &fSetwindowFrame) != B_OK) + fSetwindowFrame.Set(112.0f, 60.0f, 492.0f, 340.0f); + if (m.FindBool("fIsZoomed", &fIsZoomed) != B_OK) + fIsZoomed = true; + if (m.FindFloat("fLastWidth", &fLastWidth) != B_OK) + fLastWidth = 318.0f; + if (m.FindFloat("fLastHeight", &fLastHeight) != B_OK) + fLastHeight = 320.0f; - is_zoomed?ResizeTo(last_width, last_height):ResizeTo(318, 53); - MoveTo(frame.left, frame.top); + fIsZoomed?ResizeTo(fLastWidth, fLastHeight):ResizeTo(318, 53); + MoveTo(fFrame.left, fFrame.top); - fLogFile = new BFile(log_path.String(), B_CREATE_FILE | B_WRITE_ONLY + fLogFile = new BFile(fLogPath.String(), B_CREATE_FILE | B_WRITE_ONLY | B_OPEN_AT_END); if (fLogFile->InitCheck() != B_OK) { - log_file_flag = false; + fLogFileFlag = false; //log it to console, "log to file unavailable." return B_OK; } - SetDirLabel(web_directory.String()); + SetDirLabel(fWebDirectory.String()); return B_OK; } @@ -730,24 +661,24 @@ PoorManWindow::SaveSettings() BMessage m(MSG_PREF_FILE); //site tab - m.AddString("web_directory", web_directory); - m.AddString("index_file_name", index_file_name); - m.AddBool("dir_list_flag", dir_list_flag); + m.AddString("fWebDirectory", fWebDirectory); + m.AddString("fIndexFileName", fIndexFileName); + m.AddBool("fDirListFlag", fDirListFlag); //logging tab - m.AddBool("log_console_flag", log_console_flag); - m.AddBool("log_file_flag", log_file_flag); - m.AddString("log_path", log_path); + m.AddBool("fLogConsoleFlag", fLogConsoleFlag); + m.AddBool("fLogFileFlag", fLogFileFlag); + m.AddString("fLogPath", fLogPath); //advance tab - m.AddInt16("max_connections", max_connections); + m.AddInt16("fMaxConnections", fMaxConnections); //windows' position and size - m.AddRect("frame", frame); - m.AddRect("setwindow_frame", setwindow_frame); - m.AddBool("is_zoomed", is_zoomed); - m.AddFloat("last_width", last_width); - m.AddFloat("last_height", last_height); + m.AddRect("frame", fFrame); + m.AddRect("fSetwindowFrame", fSetwindowFrame); + m.AddBool("fIsZoomed", fIsZoomed); + m.AddFloat("fLastWidth", fLastWidth); + m.AddFloat("fLastHeight", fLastHeight); if (find_directory(B_USER_SETTINGS_DIRECTORY, &p) != B_OK) return B_ERROR; @@ -768,18 +699,15 @@ status_t PoorManWindow::StartServer() { if (fServer == NULL) - fServer = new PoorManServer( - web_directory.String(), - max_connections, - dir_list_flag, - index_file_name.String()); + fServer = new PoorManServer(fWebDirectory.String(), fMaxConnections, + fDirListFlag, fIndexFileName.String()); poorman_log(B_TRANSLATE("Starting up... ")); if (fServer->Run() != B_OK) { return B_ERROR; } - status = true; + fStatus = true; UpdateStatusLabelAndMenuItem(); poorman_log(B_TRANSLATE("done.\n"), false, INADDR_NONE, GREEN); @@ -795,7 +723,7 @@ PoorManWindow::StopServer() poorman_log(B_TRANSLATE("Shutting down.\n")); fServer->Stop(); - status = false; + fStatus = false; UpdateStatusLabelAndMenuItem(); return B_OK; } @@ -804,7 +732,7 @@ PoorManWindow::StopServer() void PoorManWindow::SetLogPath(const char* str) { - if (!strcmp(log_path, str)) + if (!strcmp(fLogPath, str)) return; BFile* temp = new BFile(str, B_CREATE_FILE | B_WRITE_ONLY | B_OPEN_AT_END); @@ -823,5 +751,5 @@ PoorManWindow::SetLogPath(const char* str) return; } - log_path.SetTo(str); + fLogPath.SetTo(str); } diff --git a/src/apps/poorman/PoorManWindow.h b/src/apps/poorman/PoorManWindow.h index bdbca27bcf..a2ddc516ea 100644 --- a/src/apps/poorman/PoorManWindow.h +++ b/src/apps/poorman/PoorManWindow.h @@ -33,125 +33,132 @@ class PoorManServer; class PoorManWindow: public BWindow { public: - PoorManWindow(BRect frame); -virtual ~PoorManWindow(); -virtual void MessageReceived(BMessage * message); + PoorManWindow(BRect frame); + virtual ~PoorManWindow(); + virtual void MessageReceived(BMessage* message); -virtual void FrameMoved(BPoint origin); -virtual void FrameResized(float width, float height); -virtual bool QuitRequested(); -virtual void Zoom(BPoint origin, float width, float height); + virtual void FrameMoved(BPoint origin); + virtual void FrameResized(float width, float height); + virtual bool QuitRequested(); + virtual void Zoom(BPoint origin, float width, float height); // ------------------------------------------- // Public PoorMan Window Methods - void SetDirLabel(const char * name); - void SetHits(uint32 num); - uint32 GetHits() { return hits; } - status_t SaveConsole(BMessage * message, bool); + void SetDirLabel(const char* name); + void SetHits(uint32 num); + uint32 GetHits() { return fHits; } + status_t SaveConsole(BMessage* message, bool); - status_t SaveSettings(); - status_t ReadSettings(); - void DefaultSettings(); + status_t SaveSettings(); + status_t ReadSettings(); + void DefaultSettings(); - status_t StartServer(); - status_t StopServer(); + status_t StartServer(); + status_t StopServer(); - PoorManServer* GetServer()const{return fServer;} + PoorManServer* GetServer() const { return fServer;} // ------------------------------------------- // Preferences and Settings // Site Tab - bool DirListFlag() { return dir_list_flag; } - void SetDirListFlag(bool flag) { dir_list_flag = flag; } - const char * IndexFileName() { return index_file_name.String(); } - void SetIndexFileName(const char * str) { index_file_name.SetTo(str); } - const char * WebDir() { return web_directory.String(); } - void SetWebDir(const char * str) { web_directory.SetTo(str); } + bool DirListFlag() + { return fDirListFlag; } + void SetDirListFlag(bool flag) + { fDirListFlag = flag; } + const char* IndexFileName() + { return fIndexFileName.String(); } + void SetIndexFileName(const char* str) + { fIndexFileName.SetTo(str); } + const char* WebDir() + { return fWebDirectory.String(); } + void SetWebDir(const char* str) + { fWebDirectory.SetTo(str); } // Logging Tab - bool LogConsoleFlag() { return log_console_flag; } - void SetLogConsoleFlag(bool flag) { log_console_flag = flag; } - bool LogFileFlag() { return log_file_flag; } - void SetLogFileFlag(bool flag) { log_file_flag = flag; } - const char * LogPath() { return log_path.String(); } - void SetLogPath(const char * str); + bool LogConsoleFlag() + { return fLogConsoleFlag; } + void SetLogConsoleFlag(bool flag) + { fLogConsoleFlag = flag; } + bool LogFileFlag() + { return fLogFileFlag; } + void SetLogFileFlag(bool flag) + { fLogFileFlag = flag; } + const char* LogPath() + { return fLogPath.String(); } + void SetLogPath(const char* str); // Advanced Tab - int16 MaxConnections() { return max_connections; } - void SetMaxConnections(int16 num) { max_connections = num; } - + int16 MaxConnections() + { return fMaxConnections; } + void SetMaxConnections(int16 num) + { fMaxConnections = num; } private: // ------------------------------------------- // PoorMan Window Methods - void UpdateStatusLabelAndMenuItem(); - void UpdateHitsLabel(); + void UpdateStatusLabelAndMenuItem(); + void UpdateHitsLabel(); private: - // ------------------------------------------- - // PoorMan Window - PoorManView * mainView; - // ------------------------------------------- // Build Menu Methods - BMenu * BuildFileMenu() const; - BMenu * BuildEditMenu() const; - BMenu * BuildControlsMenu() const; + BMenu* BuildFileMenu() const; + BMenu* BuildEditMenu() const; + BMenu* BuildControlsMenu() const; // -------------------------------------------- // MenuBar & Menu items - BMenuBar * FileMenuBar; - BMenu * FileMenu; - BMenu * EditMenu; - BMenu * ControlsMenu; + BMenuBar* fFileMenuBar; + BMenu* fFileMenu; + BMenu* fEditMenu; + BMenu* fControlsMenu; // -------------------------------------------- // Status, Hits, Directory - BStringView * statusView; - BStringView * hitsView; - BStringView * dirView; + BStringView* fStatusView; + BStringView* fHitsView; + BStringView* fDirView; - bool status; - uint32 hits; - char hitsLabel[25]; + bool fStatus; + uint32 fHits; + char fHitsLabel[25]; // -------------------------------------------- // Logging View - BScrollView * scrollView; - BTextView * loggingView; + BScrollView* fScrollView; + BTextView* fLoggingView; // use asctime() for format of [Date/Time]: // ------------------------------------------- // PoorMan Preference Window - PoorManPreferencesWindow * prefWindow; + PoorManPreferencesWindow * fPrefWindow; // site tab - BString web_directory; - BString index_file_name; - bool dir_list_flag; + BString fWebDirectory; + BString fIndexFileName; + bool fDirListFlag; // logging tab - bool log_console_flag; - bool log_file_flag; - BString log_path; + bool fLogConsoleFlag; + bool fLogFileFlag; + BString fLogPath; // advanced tab - int16 max_connections; + int16 fMaxConnections; - bool is_zoomed; - float last_width; - float last_height; - BRect frame; - BRect setwindow_frame; + bool fIsZoomed; + float fLastWidth; + float fLastHeight; + BRect fFrame; + BRect fSetwindowFrame; // File Panels - BFilePanel * saveConsoleFilePanel; - BFilePanel * saveConsoleSelectionFilePanel; + BFilePanel* fSaveConsoleFilePanel; + BFilePanel* fSaveConsoleSelectionFilePanel; - BFile* fLogFile; - BFont* fLogViewFont; + BFile* fLogFile; - PoorManServer* fServer; + PoorManServer* fServer; - pthread_rwlock_t fLogFileLock; + pthread_rwlock_t fLogFileLock; }; #endif diff --git a/src/apps/poorman/StatusSlider.cpp b/src/apps/poorman/StatusSlider.cpp index deaa1b03a1..694cda00c3 100644 --- a/src/apps/poorman/StatusSlider.cpp +++ b/src/apps/poorman/StatusSlider.cpp @@ -11,31 +11,19 @@ #include -StatusSlider::StatusSlider (BRect frame, - const char *name, - const char *label, - char *statusPrefix, - BMessage *message, - int32 minValue, - int32 maxValue) - - : BSlider(frame, - name, - label, - message, - minValue, - maxValue - ), - StatusPrefix(statusPrefix) +StatusSlider::StatusSlider(const char* name, const char* label, + char* statusPrefix, BMessage* message, int32 minValue, int32 maxValue) + : + BSlider(name, label, message, minValue, maxValue, B_HORIZONTAL), + fStatusPrefix(statusPrefix) { - temp = str; + fTemp = fStr; } const char* StatusSlider::UpdateText() const { - - sprintf(temp, "%ld %s", Value(), StatusPrefix); - - return temp; + sprintf(fTemp, "%ld %s", Value(), fStatusPrefix); + + return fTemp; } diff --git a/src/apps/poorman/StatusSlider.h b/src/apps/poorman/StatusSlider.h index b9003d7ccc..e7d0d27082 100644 --- a/src/apps/poorman/StatusSlider.h +++ b/src/apps/poorman/StatusSlider.h @@ -13,21 +13,21 @@ #include -class StatusSlider: public BSlider -{ +class StatusSlider: public BSlider { public: - StatusSlider(BRect frame, - const char *name, - const char *label, - char *statusPrefix, - BMessage *message, - int32 minValue, - int32 maxValue); -virtual const char* UpdateText() const; + StatusSlider(const char* name, + const char* label, + char* statusPrefix, + BMessage* message, + int32 minValue, + int32 maxValue); + + virtual const char* UpdateText() const; + private: - char * StatusPrefix; - char * temp; - char str[128]; + char* fStatusPrefix; + char* fTemp; + char fStr[128]; }; #endif From c5a09a88e954244862a0573146dd2bfeb9137ab8 Mon Sep 17 00:00:00 2001 From: Alex Wilson Date: Sat, 14 Jul 2012 12:29:20 +1200 Subject: [PATCH 12/15] In PoorMan: use templatized layout builders. Also clean up layout a bit. --- src/apps/poorman/PoorManAdvancedView.cpp | 22 +++++---- src/apps/poorman/PoorManLoggingView.cpp | 46 ++++++++++--------- src/apps/poorman/PoorManPreferencesWindow.cpp | 15 +++--- src/apps/poorman/PoorManSiteView.cpp | 46 +++++++++++-------- src/apps/poorman/PoorManWindow.cpp | 23 +++++----- 5 files changed, 82 insertions(+), 70 deletions(-) diff --git a/src/apps/poorman/PoorManAdvancedView.cpp b/src/apps/poorman/PoorManAdvancedView.cpp index e817428698..260da72b9c 100644 --- a/src/apps/poorman/PoorManAdvancedView.cpp +++ b/src/apps/poorman/PoorManAdvancedView.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include #include #include "constants.h" @@ -27,8 +27,6 @@ PoorManAdvancedView::PoorManAdvancedView(const char* name) PoorManWindow* win; win = ((PoorManApplication*)be_app)->GetPoorManWindow(); - SetLayout(new BGroupLayout(B_VERTICAL)); - BBox* connectionOptions = new BBox(B_TRANSLATE("Connections")); connectionOptions->SetLabel(STR_BBX_CONNECTION); @@ -40,14 +38,18 @@ PoorManAdvancedView::PoorManAdvancedView(const char* name) fMaxConnections->SetLimitLabels("1", "200"); SetMaxSimutaneousConnections(win->MaxConnections()); - connectionOptions->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(fMaxConnections) - .SetInsets(5, 5, 5, 5)); - - AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(connectionOptions) + + BGroupLayout* connectionOptionsLayout = new BGroupLayout(B_VERTICAL, 0); + connectionOptions->SetLayout(connectionOptionsLayout); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .AddGroup(connectionOptionsLayout) + .SetInsets(B_USE_ITEM_INSETS) + .AddStrut(B_USE_ITEM_SPACING) + .Add(fMaxConnections) + .End() .AddGlue() - .SetInsets(5, 5, 5, 5)); + .SetInsets(B_USE_ITEM_INSETS); } void diff --git a/src/apps/poorman/PoorManLoggingView.cpp b/src/apps/poorman/PoorManLoggingView.cpp index 2d06194a1c..dacef76463 100644 --- a/src/apps/poorman/PoorManLoggingView.cpp +++ b/src/apps/poorman/PoorManLoggingView.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include #include #include "constants.h" @@ -27,8 +27,6 @@ PoorManLoggingView::PoorManLoggingView(const char* name) PoorManWindow* win; win = ((PoorManApplication*)be_app)->GetPoorManWindow(); - SetLayout(new BGroupLayout(B_VERTICAL)); - BBox* consoleLogging = new BBox(B_TRANSLATE("Console Logging")); consoleLogging->SetLabel(STR_BBX_CONSOLE_LOGGING); @@ -57,24 +55,28 @@ PoorManLoggingView::PoorManLoggingView(const char* name) fCreateLogFile = new BButton(B_TRANSLATE("Create Log File"), STR_BTN_CREATE_LOG_FILE, new BMessage(MSG_PREF_LOG_BTN_CREATE_FILE)); - consoleLogging->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) - .Add(fLogConsole) - .AddGlue()) - .SetInsets(5, 5, 5, 5)); - - fileLogging->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) - .Add(fLogFile) - .AddGlue()) - .Add(fLogFileName) - .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) - .AddGlue() - .Add(fCreateLogFile)) - .SetInsets(5, 5, 5, 5)); + BGroupLayout* consoleLoggingLayout = new BGroupLayout(B_VERTICAL, 0); + consoleLogging->SetLayout(consoleLoggingLayout); - AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(consoleLogging) - .Add(fileLogging) - .SetInsets(5, 5, 5, 5)); + BGroupLayout* fileLoggingLayout = new BGroupLayout(B_VERTICAL, + B_USE_SMALL_SPACING); + fileLogging->SetLayout(fileLoggingLayout); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .SetInsets(B_USE_ITEM_INSETS) + .AddGroup(consoleLoggingLayout) + .SetInsets(B_USE_ITEM_INSETS) + .AddGroup(B_HORIZONTAL) + .SetInsets(0, B_USE_ITEM_INSETS, 0, 0) + .Add(fLogConsole) + .AddGlue() + .End() + .End() + .AddGroup(fileLoggingLayout) + .SetInsets(B_USE_ITEM_INSETS) + .AddGrid(B_USE_SMALL_SPACING, B_USE_SMALL_SPACING) + .SetInsets(0, B_USE_ITEM_INSETS, 0, 0) + .Add(fLogFile, 0, 0) + .AddTextControl(fLogFileName, 0, 1, B_ALIGN_LEFT, 1, 2) + .Add(fCreateLogFile, 2, 2); } diff --git a/src/apps/poorman/PoorManPreferencesWindow.cpp b/src/apps/poorman/PoorManPreferencesWindow.cpp index a09475de91..5535f338b2 100644 --- a/src/apps/poorman/PoorManPreferencesWindow.cpp +++ b/src/apps/poorman/PoorManPreferencesWindow.cpp @@ -9,10 +9,8 @@ #include #include #include -#include -#include +#include #include -#include #include #include "constants.h" @@ -32,8 +30,6 @@ PoorManPreferencesWindow::PoorManPreferencesWindow(BRect frame, char * name) fWebDirFilePanel(NULL), fLogFilePanel(NULL) { - SetLayout(new BGroupLayout(B_VERTICAL)); - fCancelButton = new BButton("Cancel Button", B_TRANSLATE("Cancel"), new BMessage(MSG_PREF_BTN_CANCEL)); fDoneButton = new BButton("Done Button", B_TRANSLATE("Done"), @@ -80,13 +76,14 @@ PoorManPreferencesWindow::PoorManPreferencesWindow(BRect frame, char * name) change_title = fLogFilePanel->Window(); change_title->SetTitle(STR_FILEPANEL_CREATE_LOG_FILE); - AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .SetInsets(B_USE_WINDOW_INSETS) .Add(fPrefTabView) - .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .AddGroup(B_HORIZONTAL) .AddGlue() .Add(fCancelButton) - .Add(fDoneButton)) - .SetInsets(5, 5, 5, 5)); + .Add(fDoneButton); } diff --git a/src/apps/poorman/PoorManSiteView.cpp b/src/apps/poorman/PoorManSiteView.cpp index 532c0e65ad..a31ce8584a 100644 --- a/src/apps/poorman/PoorManSiteView.cpp +++ b/src/apps/poorman/PoorManSiteView.cpp @@ -6,7 +6,7 @@ */ #include -#include +#include #include "constants.h" #include "PoorManSiteView.h" @@ -24,7 +24,7 @@ PoorManSiteView::PoorManSiteView(const char* name) // Web Site Location BBox BBox* webSiteLocation = new BBox("Web Location"); webSiteLocation->SetLabel(STR_BBX_LOCATION); - + // Web Site Options BBox BBox* webSiteOptions = new BBox("Web Options"); webSiteOptions->SetLabel(STR_BBX_OPTIONS); @@ -47,22 +47,32 @@ PoorManSiteView::PoorManSiteView(const char* name) fIndexFileName = new BTextControl("Index File Name", STR_TXT_INDEX, NULL); SetIndexFileName(win->IndexFileName()); - webSiteOptions->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) - .Add(fSendDir) - .AddGlue()) - .SetInsets(5, 5, 5, 5)); - webSiteLocation->AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(fWebDir) - .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) - .AddGlue() - .Add(fSelectWebDir)) - .Add(fIndexFileName) - .SetInsets(5, 5, 5, 5)); + BGroupLayout* webSiteLocationLayout = new BGroupLayout(B_VERTICAL, 0); + webSiteLocation->SetLayout(webSiteLocationLayout); - AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) - .Add(webSiteLocation) - .Add(webSiteOptions) - .SetInsets(5, 5, 5, 5)); + BGroupLayout* webSiteOptionsLayout = new BGroupLayout(B_VERTICAL, 0); + webSiteOptions->SetLayout(webSiteOptionsLayout); + + BLayoutBuilder::Group<>(this, B_VERTICAL) + .SetInsets(B_USE_ITEM_INSETS) + .AddGroup(webSiteLocationLayout) + .SetInsets(B_USE_ITEM_INSETS) + .AddGrid(B_USE_SMALL_SPACING, B_USE_SMALL_SPACING) + .SetInsets(0, B_USE_ITEM_INSETS, 0, 0) + .AddTextControl(fWebDir, 0, 0, B_ALIGN_LEFT, 1, 2) + .Add(fSelectWebDir, 2, 1) + .AddTextControl(fIndexFileName, 0, 2, B_ALIGN_LEFT, 1, 2) + .SetColumnWeight(1, 10.f) + .End() + .End() + .AddGroup(webSiteOptionsLayout) + .SetInsets(B_USE_ITEM_INSETS) + .AddStrut(B_USE_ITEM_SPACING) + .AddGroup(B_HORIZONTAL) + .SetInsets(0) + .Add(fSendDir) + .AddGlue() + .End() + .AddGlue(); } diff --git a/src/apps/poorman/PoorManWindow.cpp b/src/apps/poorman/PoorManWindow.cpp index 07e5ba907e..019ecc1e8a 100644 --- a/src/apps/poorman/PoorManWindow.cpp +++ b/src/apps/poorman/PoorManWindow.cpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -73,8 +73,6 @@ PoorManWindow::PoorManWindow(BRect frame) SetSizeLimits(318, 1600, 53, 1200); // limit the size of the size of the window - SetLayout(new BGroupLayout(B_VERTICAL)); - // ----------------------------------------------------------------- // Three Labels @@ -137,18 +135,21 @@ PoorManWindow::PoorManWindow(BRect frame) change_title = fSaveConsoleSelectionFilePanel->Window(); change_title->SetTitle(STR_FILEPANEL_SAVE_CONSOLE_SELECTION); - AddChild(BGroupLayoutBuilder(B_VERTICAL) + BLayoutBuilder::Group<>(this, B_VERTICAL, 0) + .SetInsets(0) .Add(fFileMenuBar) - .Add(BGroupLayoutBuilder(B_VERTICAL, 5) - .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .AddGroup(B_VERTICAL, B_USE_SMALL_SPACING) + .SetInsets(B_USE_WINDOW_INSETS) + .AddGroup(B_HORIZONTAL) .Add(fStatusView) .AddGlue() - .Add(fHitsView)) - .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .Add(fHitsView) + .End() + .AddGroup(B_HORIZONTAL) .Add(fDirView) - .AddGlue()) - .Add(fScrollView) - .SetInsets(10, 10, 10, 10))); + .AddGlue() + .End() + .Add(fScrollView); pthread_rwlock_init(&fLogFileLock, NULL); } From 0a96da93d180a27d0d4ae58915dd516b17f1f6ba Mon Sep 17 00:00:00 2001 From: Alex Wilson Date: Mon, 16 Jul 2012 13:31:51 +1200 Subject: [PATCH 13/15] Fix style on inline methods in PoorMan. --- src/apps/poorman/PoorManLoggingView.h | 52 +++++++++----- src/apps/poorman/PoorManSiteView.h | 46 +++++++++---- src/apps/poorman/PoorManWindow.h | 98 +++++++++++++++++++-------- 3 files changed, 136 insertions(+), 60 deletions(-) diff --git a/src/apps/poorman/PoorManLoggingView.h b/src/apps/poorman/PoorManLoggingView.h index 9648f08be4..4203505f79 100644 --- a/src/apps/poorman/PoorManLoggingView.h +++ b/src/apps/poorman/PoorManLoggingView.h @@ -18,23 +18,41 @@ class PoorManLoggingView: public BView { public: PoorManLoggingView(const char* name); - void SetLogConsoleValue(bool state) - { if (state) - fLogConsole->SetValue(B_CONTROL_ON); - else fLogConsole->SetValue(B_CONTROL_OFF); } - bool LogConsoleValue() - { return (fLogConsole->Value() == B_CONTROL_ON) - ? true : false; } - void SetLogFileValue(bool state) - { if (state) fLogFile->SetValue(B_CONTROL_ON); - else fLogFile->SetValue(B_CONTROL_OFF); } - bool LogFileValue() - { return (fLogFile->Value() == B_CONTROL_ON) - ? true : false; } - const char* LogFileName() - { return fLogFileName->Text(); } - void SetLogFileName(const char* log) - { fLogFileName->SetText(log); } + void SetLogConsoleValue(bool state) + { + if (state) + fLogConsole->SetValue(B_CONTROL_ON); + else + fLogConsole->SetValue(B_CONTROL_OFF); + } + + bool LogConsoleValue() + { + return (fLogConsole->Value() == B_CONTROL_ON); + } + + void SetLogFileValue(bool state) + { + if (state) + fLogFile->SetValue(B_CONTROL_ON); + else + fLogFile->SetValue(B_CONTROL_OFF); + } + + bool LogFileValue() + { + return (fLogFile->Value() == B_CONTROL_ON); + } + + const char* LogFileName() + { + return fLogFileName->Text(); + } + + void SetLogFileName(const char* log) + { + fLogFileName->SetText(log); + } private: // Logging Tab diff --git a/src/apps/poorman/PoorManSiteView.h b/src/apps/poorman/PoorManSiteView.h index 8bd8716da4..8765347219 100644 --- a/src/apps/poorman/PoorManSiteView.h +++ b/src/apps/poorman/PoorManSiteView.h @@ -18,20 +18,38 @@ class PoorManSiteView: public BView { public: PoorManSiteView(const char *name); - void SetSendDirValue(bool state) - { if (state) fSendDir->SetValue(B_CONTROL_ON); - else fSendDir->SetValue(B_CONTROL_OFF); } - bool SendDirValue() - { return (fSendDir->Value() == B_CONTROL_ON) - ? true : false; } - const char* IndexFileName() - { return fIndexFileName->Text(); } - void SetIndexFileName(const char* name) - { fIndexFileName->SetText(name); } - const char* WebDir() - { return fWebDir->Text(); } - void SetWebDir(const char* dir) - { fWebDir->SetText(dir); } + void SetSendDirValue(bool state) + { + if (state) + fSendDir->SetValue(B_CONTROL_ON); + else + fSendDir->SetValue(B_CONTROL_OFF); + } + + bool SendDirValue() + { + return (fSendDir->Value() == B_CONTROL_ON); + } + + const char* IndexFileName() + { + return fIndexFileName->Text(); + } + + void SetIndexFileName(const char* name) + { + fIndexFileName->SetText(name); + } + + const char* WebDir() + { + return fWebDir->Text(); + } + + void SetWebDir(const char* dir) + { + fWebDir->SetText(dir); + } private: // Site Tab diff --git a/src/apps/poorman/PoorManWindow.h b/src/apps/poorman/PoorManWindow.h index a2ddc516ea..20367ec78e 100644 --- a/src/apps/poorman/PoorManWindow.h +++ b/src/apps/poorman/PoorManWindow.h @@ -60,35 +60,75 @@ public: // ------------------------------------------- // Preferences and Settings // Site Tab - bool DirListFlag() - { return fDirListFlag; } - void SetDirListFlag(bool flag) - { fDirListFlag = flag; } - const char* IndexFileName() - { return fIndexFileName.String(); } - void SetIndexFileName(const char* str) - { fIndexFileName.SetTo(str); } - const char* WebDir() - { return fWebDirectory.String(); } - void SetWebDir(const char* str) - { fWebDirectory.SetTo(str); } - // Logging Tab - bool LogConsoleFlag() - { return fLogConsoleFlag; } - void SetLogConsoleFlag(bool flag) - { fLogConsoleFlag = flag; } - bool LogFileFlag() - { return fLogFileFlag; } - void SetLogFileFlag(bool flag) - { fLogFileFlag = flag; } - const char* LogPath() - { return fLogPath.String(); } - void SetLogPath(const char* str); - // Advanced Tab - int16 MaxConnections() - { return fMaxConnections; } - void SetMaxConnections(int16 num) - { fMaxConnections = num; } + bool DirListFlag() + { + return fDirListFlag; + } + + void SetDirListFlag(bool flag) + { + fDirListFlag = flag; + } + + const char* IndexFileName() + { + return fIndexFileName.String(); + } + + void SetIndexFileName(const char* str) + { + fIndexFileName.SetTo(str); + } + + const char* WebDir() + { + return fWebDirectory.String(); + } + + void SetWebDir(const char* str) + { + fWebDirectory.SetTo(str); + } + + // Logging Tab + + bool LogConsoleFlag() + { + return fLogConsoleFlag; + } + + void SetLogConsoleFlag(bool flag) + { + fLogConsoleFlag = flag; + } + + bool LogFileFlag() + { + return fLogFileFlag; + } + + void SetLogFileFlag(bool flag) + { + fLogFileFlag = flag; + } + + const char* LogPath() + { + return fLogPath.String(); + } + + void SetLogPath(const char* str); + + // Advanced Tab + int16 MaxConnections() + { + return fMaxConnections; + } + + void SetMaxConnections(int16 num) + { + fMaxConnections = num; + } private: // ------------------------------------------- From 3bbf781c1a27f5c0e8d4f3c632908174ed1f6ede Mon Sep 17 00:00:00 2001 From: Alex Wilson Date: Mon, 16 Jul 2012 14:52:56 +1200 Subject: [PATCH 14/15] Fix #8706 in Poorman - Selecting a web dir There is no 'name' entry in the message from a B_OPEN_PANEL BFilePanel. Also fix a little memory leak along the way. --- src/apps/poorman/PoorManPreferencesWindow.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/apps/poorman/PoorManPreferencesWindow.cpp b/src/apps/poorman/PoorManPreferencesWindow.cpp index 5535f338b2..0095c82deb 100644 --- a/src/apps/poorman/PoorManPreferencesWindow.cpp +++ b/src/apps/poorman/PoorManPreferencesWindow.cpp @@ -142,12 +142,15 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message) Quit(); break; case MSG_PREF_SITE_BTN_SELECT: + { // Select the Web Directory, root directory to look in. fWebDirFilePanel->SetTarget(this); - fWebDirFilePanel->SetMessage(new BMessage(MSG_FILE_PANEL_SELECT_WEB_DIR)); + BMessage webDirSelectedMsg(MSG_FILE_PANEL_SELECT_WEB_DIR); + fWebDirFilePanel->SetMessage(&webDirSelectedMsg); if (!fWebDirFilePanel->IsShowing()) fWebDirFilePanel->Show(); break; + } case MSG_FILE_PANEL_SELECT_WEB_DIR: // handle the open BMessage from the Select Web Directory File Panel PRINT(("Select Web Directory:\n")); @@ -177,13 +180,10 @@ void PoorManPreferencesWindow::SelectWebDir(BMessage* message) { entry_ref ref; - const char* name; BPath path; BEntry entry; - if (message->FindRef("refs", &ref) != B_OK - || message->FindString("name", &name) != B_OK - || entry.SetTo(&ref) != B_OK) { + if (message->FindRef("refs", &ref) != B_OK || entry.SetTo(&ref) != B_OK) { return; } entry.GetPath(&path); From 73fc635b3d87970ed7843eacd0ac7a5ffcac0e9b Mon Sep 17 00:00:00 2001 From: Fredrik Holmqvist Date: Mon, 16 Jul 2012 13:41:08 +0200 Subject: [PATCH 15/15] Tick at 1000Hz not 1MHz. Our FreeBSD networking code defined hz to 1MHz and 1 tick = 1 / hz, but the clock code ticked 1 tick at 1000Hz. This caused all calculations that are done on ticks, autonegotiation and wlan scanning to be done very often as FreeBSD uses 1000 Hz (100Hz for ARM). Defaults for autonegotiation is 5 and 17 ticks. (Another interesting thing is that callouts are using 8% cpu...) --- src/libs/compat/freebsd_network/Condvar.cpp | 5 +---- src/libs/compat/freebsd_network/callout.cpp | 6 +++--- src/libs/compat/freebsd_network/clock.c | 20 ++++--------------- .../freebsd_network/compat/sys/kernel.h | 18 ++++++++--------- .../compat/freebsd_network/compat/sys/time.h | 2 +- 5 files changed, 18 insertions(+), 33 deletions(-) diff --git a/src/libs/compat/freebsd_network/Condvar.cpp b/src/libs/compat/freebsd_network/Condvar.cpp index c1343b3ce2..74499ef0cb 100644 --- a/src/libs/compat/freebsd_network/Condvar.cpp +++ b/src/libs/compat/freebsd_network/Condvar.cpp @@ -12,9 +12,6 @@ extern "C" { #include "Condvar.h" -#define ticks_to_usecs(t) (1000000*((bigtime_t)t) / hz) - - void conditionInit(struct cv* variable, const char* description) { @@ -23,7 +20,7 @@ conditionInit(struct cv* variable, const char* description) void -conditionPublish(struct cv* variable, const void* waitChannel, +conditionPublish(struct cv* variable, const void* waitChannel, const char* description) { variable->condition.Publish(waitChannel, description); diff --git a/src/libs/compat/freebsd_network/callout.cpp b/src/libs/compat/freebsd_network/callout.cpp index f062da5824..1541580500 100644 --- a/src/libs/compat/freebsd_network/callout.cpp +++ b/src/libs/compat/freebsd_network/callout.cpp @@ -62,9 +62,9 @@ callout_thread(void* /*data*/) if (mutex != NULL) mtx_lock(mutex); - + c->c_func(c->c_arg); - + if (mutex != NULL) mtx_unlock(mutex); @@ -116,7 +116,7 @@ init_callout(void) } sThread = spawn_kernel_thread(callout_thread, "fbsd callout", - B_URGENT_DISPLAY_PRIORITY, NULL); + B_DISPLAY_PRIORITY, NULL); if (sThread < 0) { status = sThread; goto err2; diff --git a/src/libs/compat/freebsd_network/clock.c b/src/libs/compat/freebsd_network/clock.c index aa3612c745..91a095429d 100644 --- a/src/libs/compat/freebsd_network/clock.c +++ b/src/libs/compat/freebsd_network/clock.c @@ -5,10 +5,7 @@ #include "device.h" - - -#define CONVERT_HZ_TO_USECS(hertz) (1000000LL / (hertz)) -#define FREEBSD_CLOCK_FREQUENCY_IN_HZ 1000 +#include "kernel.h" int ticks; @@ -27,24 +24,15 @@ hardClock(timer* hardClockTimer) /*! - * Initialization of the hardclock timer. - * - * Note: We are not using the FreeBSD variable hz as the invocation frequency - * as it is the case in FreeBSD's hardclock function. This is due to lower - * system load. The hz (see compat/sys/kernel.h) variable in the compat layer is - * set to 1000000 Hz, whereas it is usually set to 1000 Hz for FreeBSD. + * Initialization of the hardclock timer which ticks according to hz defined in + * compat/sys/kernel.h. */ status_t init_hard_clock() { - status_t status; - ticks = 0; - status = add_timer(&sHardClockTimer, hardClock, - CONVERT_HZ_TO_USECS(FREEBSD_CLOCK_FREQUENCY_IN_HZ), + return add_timer(&sHardClockTimer, hardClock, ticks_to_usecs(1), B_PERIODIC_TIMER); - - return status; } diff --git a/src/libs/compat/freebsd_network/compat/sys/kernel.h b/src/libs/compat/freebsd_network/compat/sys/kernel.h index 6c8c545f7d..615b9f760d 100644 --- a/src/libs/compat/freebsd_network/compat/sys/kernel.h +++ b/src/libs/compat/freebsd_network/compat/sys/kernel.h @@ -17,18 +17,18 @@ /* * - * In FreeBSD hz holds the count of how often the thread scheduler is invoked - * per second. Moreover this is the rate at which FreeBSD can generate callouts - * (kind of timeout mechanism). - * For FreeBSD 8 this is typically 1000 times per second. This value is defined - * in a file called subr_param.c + * The rate at which FreeBSD can generate callouts (kind of timeout mechanism). + * For FreeBSD 8 this is typically 1000 times per second (100 for ARM). + * This value is defined in a file called subr_param.c * - * For Haiku this value is much higher, due to using another timeout scheduling - * mechanism, which has a resolution of 1 MHz. So hz for Haiku is set to - * 1000000. Suffixing LL prevents integer overflows during calculations. + * WHile Haiku can have a much higher granularity, it is not a good idea to have + * this since FreeBSD tries to do certain tasks based on ticks, for instance + * autonegotiation and wlan scanning. + * Suffixing LL prevents integer overflows during calculations. * as it defines a long long constant.*/ -#define hz 1000000LL +#define hz 1000LL +#define ticks_to_usecs(t) (1000000*((bigtime_t)t) / hz) typedef void (*system_init_func_t)(void *); diff --git a/src/libs/compat/freebsd_network/compat/sys/time.h b/src/libs/compat/freebsd_network/compat/sys/time.h index 1bbabb743a..4b061e3ad4 100644 --- a/src/libs/compat/freebsd_network/compat/sys/time.h +++ b/src/libs/compat/freebsd_network/compat/sys/time.h @@ -12,7 +12,7 @@ #include -#define time_uptime system_time() / 1000000 +#define time_uptime (system_time() / 1000000) int ppsratecheck(struct timeval*, int*, int);