aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilippe Houdoin <philippe.houdoin@gmail.com>2012-07-19 23:48:23 +0200
committerPhilippe Houdoin <philippe.houdoin@gmail.com>2012-07-19 23:48:23 +0200
commitca741c4835e9099d8e160daa6bd1fcca5499a0dd (patch)
tree9070b92c67a0df348ce2ea43eeb54c36a2aa0a3f
parent9be0c9b03c9e25270699d59a363355cea083f63b (diff)
parent8959a4e0c37873f56f44ea1743902de0ec0e44d4 (diff)
Merge branch 'master' of ssh://git.haiku-os.org/haikuhrev44356
-rw-r--r--build/jam/OptionalPackageDependencies1
-rw-r--r--build/jam/OptionalPackages20
-rw-r--r--headers/os/interface/InterfaceDefs.h1
-rw-r--r--headers/private/app/ServerReadOnlyMemory.h9
-rw-r--r--src/add-ons/accelerants/radeon_hd/display.cpp14
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/ACPICAHaiku.cpp (renamed from src/add-ons/kernel/bus_managers/acpi/oshaiku.cpp)0
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_priv.h)6
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/BusManager.cpp (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_busman.c)19
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/Device.cpp (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_device.c)39
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/EmbeddedController.cpp (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp)4
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/EmbeddedController.h (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.h)2
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/Jamfile12
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/Module.cpp (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_module.c)4
-rw-r--r--src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp (renamed from src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp)26
-rw-r--r--src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp3
-rw-r--r--src/apps/debuganalyzer/gui/table/TreeTable.cpp42
-rw-r--r--src/apps/debuganalyzer/gui/table/TreeTable.h20
-rw-r--r--src/apps/debugger/Jamfile1
-rw-r--r--src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp10
-rw-r--r--src/apps/debugger/dwarf/DebugInfoEntries.cpp1
-rw-r--r--src/apps/debugger/dwarf/DwarfFile.cpp6
-rw-r--r--src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp3
-rw-r--r--src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp32
-rw-r--r--src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp272
-rw-r--r--src/apps/debugger/user_interface/gui/team_window/VariablesView.h5
-rw-r--r--src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp56
-rw-r--r--src/apps/debugger/user_interface/gui/util/ActionMenuItem.h31
-rw-r--r--src/apps/debugger/util/IntegerFormatter.cpp120
-rw-r--r--src/apps/debugger/value/value_nodes/BMessageValueNode.cpp4
-rw-r--r--src/apps/debugger/value/value_nodes/CStringValueNode.cpp18
-rw-r--r--src/apps/poorman/PoorManAdvancedView.cpp54
-rw-r--r--src/apps/poorman/PoorManAdvancedView.h15
-rw-r--r--src/apps/poorman/PoorManLoggingView.cpp92
-rw-r--r--src/apps/poorman/PoorManLoggingView.h60
-rw-r--r--src/apps/poorman/PoorManPreferencesWindow.cpp200
-rw-r--r--src/apps/poorman/PoorManPreferencesWindow.h91
-rw-r--r--src/apps/poorman/PoorManSiteView.cpp102
-rw-r--r--src/apps/poorman/PoorManSiteView.h54
-rw-r--r--src/apps/poorman/PoorManView.cpp2
-rw-r--r--src/apps/poorman/PoorManView.h8
-rw-r--r--src/apps/poorman/PoorManWindow.cpp623
-rw-r--r--src/apps/poorman/PoorManWindow.h193
-rw-r--r--src/apps/poorman/StatusSlider.cpp30
-rw-r--r--src/apps/poorman/StatusSlider.h26
-rw-r--r--src/bin/WindowShade.cpp1
-rw-r--r--src/kits/interface/ColumnListView.cpp17
-rw-r--r--src/kits/interface/ColumnTypes.cpp14
-rw-r--r--src/kits/interface/ControlLook.cpp5
-rw-r--r--src/kits/interface/InterfaceDefs.cpp1
-rw-r--r--src/kits/interface/SpaceLayoutItem.cpp14
-rw-r--r--src/libs/compat/freebsd_network/Condvar.cpp5
-rw-r--r--src/libs/compat/freebsd_network/callout.cpp16
-rw-r--r--src/libs/compat/freebsd_network/clock.c20
-rw-r--r--src/libs/compat/freebsd_network/compat/sys/callout.h5
-rw-r--r--src/libs/compat/freebsd_network/compat/sys/kernel.h18
-rw-r--r--src/libs/compat/freebsd_network/compat/sys/time.h2
-rw-r--r--src/libs/compat/freebsd_wlan/net80211/Jamfile4
-rw-r--r--src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp1
-rw-r--r--src/preferences/appearance/ColorSet.cpp1
-rw-r--r--src/preferences/appearance/ColorWhichItem.cpp8
-rw-r--r--src/system/kernel/cache/block_cache.cpp4
-rw-r--r--src/tools/fs_shell/block_cache.cpp2
62 files changed, 1446 insertions, 1023 deletions
diff --git a/build/jam/OptionalPackageDependencies b/build/jam/OptionalPackageDependencies
index 650783dc8f..aa4a525d3b 100644
--- a/build/jam/OptionalPackageDependencies
+++ b/build/jam/OptionalPackageDependencies
@@ -20,6 +20,7 @@ OptionalPackageDependencies Git : Expat Curl OpenSSL LibIconv ;
OptionalPackageDependencies GitDoc : Man Git ;
OptionalPackageDependencies ICU-devel : DevelopmentBase ;
OptionalPackageDependencies LibLayout : DevelopmentBase ;
+OptionalPackageDependencies LibXML2 : XZ-Utils ;
OptionalPackageDependencies Man : Groff ;
OptionalPackageDependencies Tar : LibIconv ;
OptionalPackageDependencies Python : Bzip ;
diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index ad77d54041..f4b3dd97b6 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -475,13 +475,13 @@ if [ IsOptionalHaikuImagePackageAdded CMake ] {
} else {
if $(HAIKU_GCC_VERSION[1]) >= 4 {
InstallOptionalHaikuImagePackage
- cmake-2.8.4-r1a3-x86-gcc4-2011-05-23.zip
- : $(baseURL)/cmake-2.8.4-r1a3-x86-gcc4-2011-05-23.zip
+ cmake-2.8.5-x86-gcc4-2012-07-18.zip
+ : $(baseURL)/cmake-2.8.5-x86-gcc4-2012-07-18.zip
: : true ;
} else {
InstallOptionalHaikuImagePackage
- cmake-2.8.4-r1a3-x86-gcc2-2011-05-19.zip
- : $(baseURL)/cmake-2.8.4-r1a3-x86-gcc2-2011-05-19.zip
+ cmake-2.8.5-x86-gcc2-2012-07-16.zip
+ : $(baseURL)/cmake-2.8.5-x86-gcc2-2012-07-16.zip
: : true ;
}
}
@@ -1206,12 +1206,12 @@ if [ IsOptionalHaikuImagePackageAdded LibXML2 ] {
} else {
if $(HAIKU_GCC_VERSION[1]) >= 4 {
InstallOptionalHaikuImagePackage
- libxml2-2.8.0-x86-gcc4-2012-06-18.zip
- : $(baseURL)/libxml2-2.8.0-x86-gcc4-2012-06-18.zip ;
+ libxml2-2.8.0-x86-gcc4-2012-07-18.zip
+ : $(baseURL)/libxml2-2.8.0-x86-gcc4-2012-07-18.zip ;
} else {
InstallOptionalHaikuImagePackage
- libxml2-2.8.0-x86-gcc2-2012-06-21.zip
- : $(baseURL)/libxml2-2.8.0-x86-gcc2-2012-06-21.zip ;
+ libxml2-2.8.0-x86-gcc2-2012-07-17.zip
+ : $(baseURL)/libxml2-2.8.0-x86-gcc2-2012-07-17.zip ;
}
}
}
@@ -1986,8 +1986,8 @@ if [ IsOptionalHaikuImagePackageAdded XZ-Utils ] {
Echo "No optional package XZ-Utils available for $(TARGET_ARCH)" ;
} else {
InstallOptionalHaikuImagePackage
- xz-utils-5.0.1-r1a3-x86-gcc4-2011-05-24.zip
- : $(baseURL)/xz-utils-5.0.1-r1a3-x86-gcc4-2011-05-24.zip ;
+ xz-utils-5.0.1-x86-gcc4-2012-07-18.zip
+ : $(baseURL)/xz-utils-5.0.1-x86-gcc4-2012-07-18.zip ;
AddExpanderRuleToHaikuImage "application/x-xz" : .tar.xz
: "tar -Jtvf \\0045s"
: "tar -Jxvf \\0045s"
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/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);
}
}
diff --git a/src/add-ons/kernel/bus_managers/acpi/oshaiku.cpp b/src/add-ons/kernel/bus_managers/acpi/ACPICAHaiku.cpp
index d001e0e2be..d001e0e2be 100644
--- a/src/add-ons/kernel/bus_managers/acpi/oshaiku.cpp
+++ b/src/add-ons/kernel/bus_managers/acpi/ACPICAHaiku.cpp
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h b/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h
index 5bf47e5271..7af1e5e705 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h
+++ b/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h
@@ -3,8 +3,8 @@
* Copyright 2006, Jérôme Duval. All rights reserved.
* Distributed under the terms of the MIT License.
*/
-#ifndef __ACPI_PRIV_H__
-#define __ACPI_PRIV_H__
+#ifndef _ACPI_PRIVATE_H
+#define _ACPI_PRIVATE_H
#include <sys/cdefs.h>
@@ -227,4 +227,4 @@ status_t get_table(const char* signature, uint32 instance, void** tableHeader);
__END_DECLS
-#endif /* __ACPI_PRIV_H__ */
+#endif /* _ACPI_PRIVATE_H */
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c b/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp
index 557247ccdc..0f2317dc21 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c
+++ b/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp
@@ -20,11 +20,13 @@
#include <safemode.h>
+extern "C" {
#include "acpi.h"
#include "accommon.h"
#include "acdisasm.h"
#include "acnamesp.h"
-#include "acpi_priv.h"
+}
+#include "ACPIPrivate.h"
//#define TRACE_ACPI_BUS
#ifdef TRACE_ACPI_BUS
@@ -384,7 +386,7 @@ status_t
install_fixed_event_handler(uint32 event, interrupt_handler* handler,
void *data)
{
- return AcpiInstallFixedEventHandler(event, (void*)handler, data) == AE_OK
+ return AcpiInstallFixedEventHandler(event, (ACPI_EVENT_HANDLER)handler, data) == AE_OK
? B_OK : B_ERROR;
}
@@ -392,7 +394,7 @@ install_fixed_event_handler(uint32 event, interrupt_handler* handler,
status_t
remove_fixed_event_handler(uint32 event, interrupt_handler* handler)
{
- return AcpiRemoveFixedEventHandler(event, (void*)handler) == AE_OK
+ return AcpiRemoveFixedEventHandler(event, (ACPI_EVENT_HANDLER)handler) == AE_OK
? B_OK : B_ERROR;
}
@@ -441,7 +443,7 @@ get_device(const char* hid, uint32 index, char* result, size_t resultLength)
char *buffer = NULL;
TRACE("get_device %s, index %ld\n", hid, index);
- status = AcpiGetDevices((ACPI_STRING)hid, (void*)&get_device_by_hid_callback,
+ status = AcpiGetDevices((ACPI_STRING)hid, (ACPI_WALK_CALLBACK)&get_device_by_hid_callback,
counter, (void**)&buffer);
if (status != AE_OK || buffer == NULL)
return B_ENTRY_NOT_FOUND;
@@ -523,7 +525,7 @@ get_object(const char* path, acpi_object_type** _returnValue)
status = AcpiEvaluateObject(handle, NULL, NULL, &buffer);
- *_returnValue = buffer.Pointer;
+ *_returnValue = (acpi_object_type*)buffer.Pointer;
return status == AE_OK ? B_OK : B_ERROR;
}
@@ -545,7 +547,7 @@ get_object_typed(const char* path, acpi_object_type** _returnValue,
status = AcpiEvaluateObjectTyped(handle, NULL, NULL, &buffer, objectType);
- *_returnValue = buffer.Pointer;
+ *_returnValue = (acpi_object_type*)buffer.Pointer;
return status == AE_OK ? B_OK : B_ERROR;
}
@@ -642,7 +644,7 @@ prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size)
status_t status;
// Note: The supplied code must already be locked into memory.
- status = get_memory_map(wakeFunc, size, &wakeVector, 1);
+ status = get_memory_map((const void*)wakeFunc, size, &wakeVector, 1);
if (status != B_OK)
return status;
@@ -676,7 +678,10 @@ enter_sleep_state(uint8 state, uint8 flags)
TRACE("enter_sleep_state %d with flags %d\n", state, flags);
+ cpu_status cpu = disable_interrupts();
status = AcpiEnterSleepState(state, flags);
+ restore_interrupts(cpu);
+ panic("AcpiEnterSleepState should not return.");
if (status != AE_OK)
return B_ERROR;
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_device.c b/src/add-ons/kernel/bus_managers/acpi/Device.cpp
index 6ac8361c60..77d1cc1d93 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_device.c
+++ b/src/add-ons/kernel/bus_managers/acpi/Device.cpp
@@ -9,8 +9,10 @@
#include <stdio.h>
#include <stdlib.h>
-#include "acpi_priv.h"
+#include "ACPIPrivate.h"
+extern "C" {
#include "acpi.h"
+}
static status_t
@@ -43,17 +45,17 @@ acpi_remove_address_space_handler(acpi_device device, uint32 spaceId,
{
return remove_address_space_handler(device->handle, spaceId, handler);
}
-
-static uint32
+
+static uint32
acpi_get_object_type(acpi_device device)
{
return device->type;
}
-static status_t
-acpi_get_object(acpi_device device, const char *path, acpi_object_type **return_value)
+static status_t
+acpi_get_object(acpi_device device, const char *path, acpi_object_type **return_value)
{
if (path) {
char objname[255];
@@ -64,9 +66,9 @@ acpi_get_object(acpi_device device, const char *path, acpi_object_type **return_
}
-static status_t
+static status_t
acpi_evaluate_method(acpi_device device, const char *method,
- acpi_objects *args, acpi_data *returnValue)
+ acpi_objects *args, acpi_data *returnValue)
{
return evaluate_method(device->handle, method, args, returnValue);
}
@@ -77,19 +79,17 @@ acpi_device_init_driver(device_node *node, void **cookie)
{
ACPI_HANDLE handle;
const char *path;
- acpi_device_cookie *device;
- status_t status = B_OK;
uint32 type;
-
+
if (gDeviceManager->get_attr_uint32(node, ACPI_DEVICE_TYPE_ITEM, &type, false) != B_OK)
return B_ERROR;
if (gDeviceManager->get_attr_string(node, ACPI_DEVICE_PATH_ITEM, &path, false) != B_OK)
return B_ERROR;
-
- device = malloc(sizeof(*device));
+
+ acpi_device_cookie *device = (acpi_device_cookie*)malloc(sizeof(*device));
if (device == NULL)
return B_NO_MEMORY;
-
+
memset(device, 0, sizeof(*device));
if (AcpiGetHandle(NULL, (ACPI_STRING)path, &handle) != AE_OK) {
@@ -102,20 +102,17 @@ acpi_device_init_driver(device_node *node, void **cookie)
device->type = type;
device->node = node;
- snprintf(device->name, sizeof(device->name), "acpi_device %s",
- path);
-
+ snprintf(device->name, sizeof(device->name), "acpi_device %s", path);
*cookie = device;
-
- return status;
+ return B_OK;
}
static void
acpi_device_uninit_driver(void *cookie)
{
- acpi_device_cookie *device = cookie;
-
+ acpi_device_cookie *device = (acpi_device_cookie*)cookie;
+
free(device->path);
free(device);
}
@@ -133,7 +130,7 @@ acpi_device_std_ops(int32 op, ...)
return B_BAD_VALUE;
}
-
+
acpi_device_module_info gACPIDeviceModule = {
{
{
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp b/src/add-ons/kernel/bus_managers/acpi/EmbeddedController.cpp
index 9cbfbc7f08..e504a705ea 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.cpp
+++ b/src/add-ons/kernel/bus_managers/acpi/EmbeddedController.cpp
@@ -28,7 +28,7 @@
*/
-#include "acpi_embedded_controller.h"
+#include "EmbeddedController.h"
#include <kernel.h>
#include <stdio.h>
@@ -555,7 +555,7 @@ EcGpeQueryHandler(void* context)
if (status != B_OK) {
TRACE("evaluation of query method %s failed\n", qxx);
}
-
+
// Reenable runtime GPE if its execution was deferred.
if (sci_enqueued) {
status = sc->ec_acpi_module->finish_gpe(sc->ec_gpehandle, sc->ec_gpebit);
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.h b/src/add-ons/kernel/bus_managers/acpi/EmbeddedController.h
index e8e1ef2cf3..c9ad95d58e 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_embedded_controller.h
+++ b/src/add-ons/kernel/bus_managers/acpi/EmbeddedController.h
@@ -44,7 +44,7 @@ extern "C" {
# include "accommon.h"
# include "acnamesp.h"
# include "actypes.h"
-# include "acpi_priv.h"
+# include "ACPIPrivate.h"
}
diff --git a/src/add-ons/kernel/bus_managers/acpi/Jamfile b/src/add-ons/kernel/bus_managers/acpi/Jamfile
index 8852b64d3e..800fe4e296 100644
--- a/src/add-ons/kernel/bus_managers/acpi/Jamfile
+++ b/src/add-ons/kernel/bus_managers/acpi/Jamfile
@@ -200,12 +200,12 @@ SEARCH on [ FGristFiles $(tables_src) ] = [ FDirName $(HAIKU_TOP) src add-ons ke
SEARCH on [ FGristFiles $(utilities_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi acpica components utilities ] ;
KernelAddon acpi :
- oshaiku.cpp
- acpi_busman.c
- acpi_module.c
- acpi_device.c
- acpi_ns_dump.cpp
- acpi_embedded_controller.cpp
+ ACPICAHaiku.cpp
+ BusManager.cpp
+ Module.cpp
+ Device.cpp
+ NamespaceDump.cpp
+ EmbeddedController.cpp
SmallResourceData.cpp
:
libacpi_ca.a
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c b/src/add-ons/kernel/bus_managers/acpi/Module.cpp
index fbddef1228..6b37c47275 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c
+++ b/src/add-ons/kernel/bus_managers/acpi/Module.cpp
@@ -9,7 +9,7 @@
#include <stdlib.h>
#include <string.h>
-#include "acpi_priv.h"
+#include "ACPIPrivate.h"
#include <dpc.h>
#include <PCI.h>
@@ -126,7 +126,7 @@ acpi_enumerate_child_devices(device_node* node, const char* root)
static status_t
acpi_module_register_child_devices(void* cookie)
{
- device_node* node = cookie;
+ device_node* node = (device_node*)cookie;
status_t status = gDeviceManager->publish_device(node, "acpi/namespace",
ACPI_NS_DUMP_DEVICE_MODULE_NAME);
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp b/src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp
index 2640920a85..3502fd4a84 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpi_ns_dump.cpp
+++ b/src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp
@@ -1,5 +1,5 @@
/* ++++++++++
- ACPI namespace dump.
+ ACPI namespace dump.
Nothing special here, just tree enumeration and type identification.
+++++ */
@@ -9,7 +9,7 @@
#include <stdlib.h>
#include <string.h>
-#include "acpi_priv.h"
+#include "ACPIPrivate.h"
#include <util/kernel_cpp.h>
#include <util/ring_buffer.h>
@@ -17,7 +17,7 @@
class RingBuffer {
public:
RingBuffer(size_t size = 1024);
- ~RingBuffer();
+ ~RingBuffer();
size_t Read(void *buffer, ssize_t length);
size_t Write(const void *buffer, ssize_t length);
size_t WritableAmount() const;
@@ -60,18 +60,18 @@ make_space(acpi_ns_device_info *device, size_t space)
}
snooze(10000);
- if (!device->buffer->Lock())
+ if (!device->buffer->Lock())
return false;
-
+
} while (device->buffer->WritableAmount() < space);
-
+
return true;
-}
+}
-static void
-dump_acpi_namespace(acpi_ns_device_info *device, char *root, int indenting)
+static void
+dump_acpi_namespace(acpi_ns_device_info *device, char *root, int indenting)
{
char result[255];
char output[320];
@@ -79,13 +79,13 @@ dump_acpi_namespace(acpi_ns_device_info *device, char *root, int indenting)
char hid[16] = "";
int i;
size_t written = 0;
- for (i = 0; i < indenting; i++)
+ for (i = 0; i < indenting; i++)
strlcat(tabs, "| ", sizeof(tabs));
strlcat(tabs, "|--- ", sizeof(tabs));
int depth = sizeof(char) * 5 * indenting + sizeof(char); // index into result where the device name will be.
-
+
void *counter = NULL;
while (device->acpi->get_next_entry(ACPI_TYPE_ANY, root, result, 255, &counter) == B_OK) {
uint32 type = device->acpi->get_object_type(result);
@@ -142,13 +142,13 @@ dump_acpi_namespace(acpi_ns_device_info *device, char *root, int indenting)
written = 0;
RingBuffer &ringBuffer = *device->buffer;
size_t toWrite = strlen(output);
-
+
if (toWrite <= 0)
break;
strlcat(output, "\n", sizeof(output));
toWrite++;
- if (!ringBuffer.Lock())
+ if (!ringBuffer.Lock())
break;
if (ringBuffer.WritableAmount() < toWrite &&
diff --git a/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp b/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp
index 7ad21e7f63..25a391d6ed 100644
--- a/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp
+++ b/src/add-ons/mail_daemon/inbound_protocols/pop3/pop3.cpp
@@ -112,6 +112,9 @@ POP3Protocol::Connect()
status_t
POP3Protocol::Disconnect()
{
+ if (fServerConnection == NULL)
+ return B_OK;
+
SendCommand("QUIT" CRLF);
fServerConnection->Disconnect();
diff --git a/src/apps/debuganalyzer/gui/table/TreeTable.cpp b/src/apps/debuganalyzer/gui/table/TreeTable.cpp
index 0c20843914..851342a4cd 100644
--- a/src/apps/debuganalyzer/gui/table/TreeTable.cpp
+++ b/src/apps/debuganalyzer/gui/table/TreeTable.cpp
@@ -1,5 +1,6 @@
/*
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
+ * Copyright 2012, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
@@ -226,6 +227,14 @@ TreeTableModel::NotifyNodesChanged(const TreeTablePath& path, int32 childIndex,
}
+// #pragma mark - TreeTableToolTipProvider
+
+
+TreeTableToolTipProvider::~TreeTableToolTipProvider()
+{
+}
+
+
// #pragma mark - TreeTableListener
@@ -650,6 +659,7 @@ TreeTable::TreeTable(const char* name, uint32 flags, border_style borderStyle,
:
AbstractTable(name, flags, borderStyle, showHorizontalScrollbar),
fModel(NULL),
+ fToolTipProvider(NULL),
fRootNode(NULL),
fSelectionModel(this),
fIgnoreSelectionChange(0)
@@ -731,6 +741,13 @@ TreeTable::SetTreeTableModel(TreeTableModel* model)
}
+void
+TreeTable::SetToolTipProvider(TreeTableToolTipProvider* toolTipProvider)
+{
+ fToolTipProvider = toolTipProvider;
+}
+
+
TreeTableSelectionModel*
TreeTable::SelectionModel()
{
@@ -810,6 +827,31 @@ TreeTable::RemoveTreeTableListener(TreeTableListener* listener)
}
+bool
+TreeTable::GetToolTipAt(BPoint point, BToolTip** _tip)
+{
+ if (fToolTipProvider == NULL)
+ return AbstractTable::GetToolTipAt(point, _tip);
+
+ // get the table row
+ BRow* row = RowAt(point);
+ if (row == NULL)
+ return AbstractTable::GetToolTipAt(point, _tip);
+
+ TreeTableRow* treeRow = dynamic_cast<TreeTableRow*>(row);
+ // get the table column
+ BColumn* column = ColumnAt(point);
+
+ int32 columnIndex = column != NULL ? column->LogicalFieldNum() : -1;
+
+ TreeTablePath path;
+ _GetPathForNode(treeRow->Node(), path);
+
+ return fToolTipProvider->GetToolTipForTablePath(path, columnIndex,
+ _tip);
+}
+
+
void
TreeTable::SelectionChanged()
{
diff --git a/src/apps/debuganalyzer/gui/table/TreeTable.h b/src/apps/debuganalyzer/gui/table/TreeTable.h
index a4758690e3..b006e083f1 100644
--- a/src/apps/debuganalyzer/gui/table/TreeTable.h
+++ b/src/apps/debuganalyzer/gui/table/TreeTable.h
@@ -1,5 +1,6 @@
/*
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
+ * Copyright 2012, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
#ifndef TREE_TABLE_H
@@ -122,6 +123,17 @@ private:
};
+class TreeTableToolTipProvider {
+public:
+ virtual ~TreeTableToolTipProvider();
+
+ virtual bool GetToolTipForTablePath(
+ const TreeTablePath& path,
+ int32 columnIndex, BToolTip** _tip) = 0;
+ // columnIndex can be -1, if not in a column
+};
+
+
class TreeTableListener {
public:
virtual ~TreeTableListener();
@@ -157,6 +169,11 @@ public:
bool SetTreeTableModel(TreeTableModel* model);
TreeTableModel* GetTreeTableModel() const { return fModel; }
+ void SetToolTipProvider(
+ TreeTableToolTipProvider* toolTipProvider);
+ TreeTableToolTipProvider* ToolTipProvider() const
+ { return fToolTipProvider; }
+
TreeTableSelectionModel* SelectionModel();
void SelectNode(const TreeTablePath& path,
@@ -177,6 +194,8 @@ public:
TreeTableListener* listener);
protected:
+ virtual bool GetToolTipAt(BPoint point, BToolTip** _tip);
+
virtual void SelectionChanged();
virtual AbstractColumn* CreateColumn(TableColumn* column);
@@ -226,6 +245,7 @@ private:
private:
TreeTableModel* fModel;
+ TreeTableToolTipProvider* fToolTipProvider;
TreeTableNode* fRootNode;
TreeTableSelectionModel fSelectionModel;
ListenerList fListeners;
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/debug_info/DwarfImageDebugInfo.cpp b/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp
index 4a9b5c5af6..befa138729 100644
--- a/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp
+++ b/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp
@@ -693,10 +693,12 @@ DwarfImageDebugInfo::GetStatement(FunctionDebugInfo* _function,
int32 statementLine = -1;
int32 statementColumn = -1;
while (program.GetNextRow(state)) {
- bool isOurFile = state.file == fileIndex;
+ // skip statements of other files
+ if (state.file != fileIndex)
+ continue;
if (statementAddress != 0
- && (!isOurFile || state.isStatement || state.isSequenceEnd)) {
+ && (state.isStatement || state.isSequenceEnd)) {
target_addr_t endAddress = state.address;
if (address >= statementAddress && address < endAddress) {
ContiguousStatement* statement = new(std::nothrow)
@@ -714,10 +716,6 @@ DwarfImageDebugInfo::GetStatement(FunctionDebugInfo* _function,
statementAddress = 0;
}
- // skip statements of other files
- if (!isOurFile)
- continue;
-
if (state.isStatement) {
statementAddress = state.address;
statementLine = state.line - 1;
diff --git a/src/apps/debugger/dwarf/DebugInfoEntries.cpp b/src/apps/debugger/dwarf/DebugInfoEntries.cpp
index 976684090c..9c2ecf47a9 100644
--- a/src/apps/debugger/dwarf/DebugInfoEntries.cpp
+++ b/src/apps/debugger/dwarf/DebugInfoEntries.cpp
@@ -2697,6 +2697,7 @@ DebugInfoEntryFactory::CreateDebugInfoEntry(uint16 tag, DebugInfoEntry*& _entry)
entry = new(std::nothrow) DIESharedType;
break;
default:
+ return B_ENTRY_NOT_FOUND;
break;
}
diff --git a/src/apps/debugger/dwarf/DwarfFile.cpp b/src/apps/debugger/dwarf/DwarfFile.cpp
index f07f10ae2a..f95d18ea4a 100644
--- a/src/apps/debugger/dwarf/DwarfFile.cpp
+++ b/src/apps/debugger/dwarf/DwarfFile.cpp
@@ -825,8 +825,12 @@ DwarfFile::_ParseDebugInfoEntry(DataReader& dataReader,
DebugInfoEntry* entry;
status_t error = fDebugInfoFactory.CreateDebugInfoEntry(
abbreviationEntry.Tag(), entry);
- if (error != B_OK)
+ if (error != B_OK) {
+ WARNING("Failed to generate entry for tag %lu, code %lu\n",
+ abbreviationEntry.Tag(), code);
return error;
+ }
+
ObjectDeleter<DebugInfoEntry> entryDeleter(entry);
TRACE_DIE("%*sentry %p at %lld: %lu, tag: %s (%lu), children: %d\n",
diff --git a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
index c3612e6576..224cb0a88f 100644
--- a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
+++ b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
@@ -251,9 +251,6 @@ InspectorWindow::MessageReceived(BMessage* msg)
}
break;
}
- {
- break;
- }
default:
{
BWindow::MessageReceived(msg);
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 bb8ca25c42..e4363313d2 100644
--- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
@@ -109,6 +109,7 @@ TeamWindow::TeamWindow(::Team* team, UserInterfaceListener* listener)
fStepOverButton(NULL),
fStepIntoButton(NULL),
fStepOutButton(NULL),
+ fInspectorWindow(NULL),
fSourceLocatePanel(NULL)
{
fTeam->Lock();
@@ -217,26 +218,33 @@ 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:
{
_SaveInspectorSettings(CurrentMessage());
fInspectorWindow = NULL;
+ break;
}
case B_REFS_RECEIVED:
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..b0beb9c0e9 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.
*/
@@ -13,17 +13,20 @@
#include <Looper.h>
#include <PopUpMenu.h>
+#include <ToolTip.h>
#include <AutoDeleter.h>
#include <AutoLocker.h>
#include "table/TableColumns.h"
+#include "ActionMenuItem.h"
#include "Architecture.h"
#include "FunctionID.h"
#include "FunctionInstance.h"
#include "GUISettingsUtils.h"
#include "MessageCodes.h"
+#include "Register.h"
#include "SettingsMenu.h"
#include "StackFrame.h"
#include "StackFrameValues.h"
@@ -36,6 +39,7 @@
#include "Value.h"
#include "ValueHandler.h"
#include "ValueHandlerRoster.h"
+#include "ValueLocation.h"
#include "ValueNode.h"
#include "ValueNodeContainer.h"
#include "Variable.h"
@@ -310,10 +314,12 @@ protected:
targetView);
return;
}
+ } else if (value.Type() == B_STRING_TYPE) {
+ fField.SetString(value.ToString());
+ } else {
+ // fall back to drawing an empty string
+ fField.SetString("");
}
-
- // fall back to drawing an empty string
- fField.SetString("");
fField.SetWidth(Width());
fColumn.DrawField(&fField, rect, targetView);
}
@@ -343,7 +349,8 @@ protected:
// #pragma mark - VariableTableModel
-class VariablesView::VariableTableModel : public TreeTableModel {
+class VariablesView::VariableTableModel : public TreeTableModel,
+ public TreeTableToolTipProvider {
public:
VariableTableModel();
~VariableTableModel();
@@ -377,6 +384,10 @@ public:
void NotifyNodeChanged(ModelNode* node);
void NotifyNodeHidden(ModelNode* node);
+ virtual bool GetToolTipForTablePath(
+ const TreeTablePath& path,
+ int32 columnIndex, BToolTip** _tip);
+
private:
struct NodeHashDefinition {
typedef ValueNodeChild* KeyType;
@@ -487,34 +498,77 @@ public:
}
status_t Init(Settings* rendererSettings,
- SettingsMenu* rendererSettingsMenu)
+ SettingsMenu* rendererSettingsMenu,
+ 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");
if (fContextMenu == NULL)
return B_NO_MEMORY;
- status_t error = fRendererSettingsMenu->AddToMenu(fContextMenu, 0);
- if (error != B_OK)
- return error;
+ status_t error = B_OK;
+ if (preSettingsActions != NULL
+ && preSettingsActions->CountItems() > 0) {
+ error = _AddActionItems(preSettingsActions);
+ if (error != B_OK)
+ return error;
- AutoLocker<Settings> settingsLocker(fRendererSettings);
- fRendererSettings->AddListener(this);
+ if (fRendererSettingsMenu != NULL || postSettingsActions != NULL)
+ fContextMenu->AddSeparatorItem();
+ }
- fRendererMenuAdded = true;
+ 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;
+
+ }
+
+ if (fRendererSettings != NULL) {
+ AutoLocker<Settings> 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<ActionMenuItem*>(
+ fContextMenu->ItemAt(i));
+ if (item != NULL)
+ item->PrepareToShow(fParentLooper, fParent.Target(NULL));
+ }
fMenuPreparedToShow = true;
@@ -528,7 +582,18 @@ 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<ActionMenuItem*>(
+ fContextMenu->ItemAt(i));
+ if (item != NULL) {
+ stillActive |= item->Finish(fParentLooper,
+ fParent.Target(NULL), force);
+ }
+ }
+
fMenuPreparedToShow = stillActive;
}
@@ -559,6 +624,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;
@@ -1031,8 +1114,29 @@ VariablesView::VariableTableModel::GetValueAt(void* object, int32 columnIndex,
_value.SetTo(node->Name(), B_VARIANT_DONT_COPY_DATA);
return true;
case 1:
- if (node->GetValue() == NULL)
+ if (node->GetValue() == NULL) {
+ ValueLocation* location = node->NodeChild()->Location();
+ if (location == NULL)
+ return false;
+
+ Type* nodeChildRawType = node->NodeChild()->Node()->GetType()
+ ->ResolveRawType(false);
+ if (nodeChildRawType->Kind() == TYPE_COMPOUND)
+ {
+ if (location->CountPieces() > 1)
+ return false;
+
+ BString data;
+ ValuePieceLocation piece = location->PieceAt(0);
+ if (piece.type != VALUE_PIECE_LOCATION_MEMORY)
+ return false;
+
+ data.SetToFormat("[@ 0x%llx]", piece.address);
+ _value.SetTo(data);
+ return true;
+ }
return false;
+ }
_value.SetTo(node, VALUE_NODE_TYPE);
return true;
@@ -1085,6 +1189,55 @@ VariablesView::VariableTableModel::NotifyNodeHidden(ModelNode* node)
}
+bool
+VariablesView::VariableTableModel::GetToolTipForTablePath(
+ const TreeTablePath& path, int32 columnIndex, BToolTip** _tip)
+{
+ ModelNode* node = (ModelNode*)NodeForPath(path);
+ if (node == NULL)
+ return false;
+
+ if (node->NodeChild()->LocationResolutionState() != B_OK)
+ return false;
+
+ ValueLocation* location = node->NodeChild()->Location();
+ BString tipData;
+ for (int32 i = 0; i < location->CountPieces(); i++) {
+ ValuePieceLocation piece = location->PieceAt(i);
+ BString pieceData;
+ switch (piece.type) {
+ case VALUE_PIECE_LOCATION_MEMORY:
+ pieceData.SetToFormat("(%ld): Address: 0x%llx, Size: "
+ "%lld bytes", i, piece.address, piece.size);
+ break;
+ case VALUE_PIECE_LOCATION_REGISTER:
+ {
+ Architecture* architecture = fThread->GetTeam()->GetArchitecture();
+ pieceData.SetToFormat("(%ld): Register (%s)",
+ i, architecture->Registers()[piece.reg].Name());
+
+ break;
+ }
+ default:
+ break;
+ }
+
+ tipData += pieceData;
+ if (i < location->CountPieces() - 1)
+ tipData += "\n";
+ }
+
+ if (tipData.IsEmpty())
+ return false;
+
+ *_tip = new(std::nothrow) BTextToolTip(tipData);
+ if (*_tip == NULL)
+ return false;
+
+ return true;
+}
+
+
status_t
VariablesView::VariableTableModel::_AddNode(Variable* variable,
ModelNode* parent, ValueNodeChild* nodeChild, bool isPresentationNode,
@@ -1412,6 +1565,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;
@@ -1594,25 +1756,39 @@ VariablesView::TreeTableCellMouseDown(TreeTable* table,
if (node == NULL)
return;
+ Settings* settings = NULL;
+ SettingsMenu* settingsMenu = NULL;
+ BReference<SettingsMenu> settingsMenuReference;
+ status_t error = B_OK;
TableCellValueRenderer* cellRenderer = node->TableCellRenderer();
- if (cellRenderer == NULL)
- 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;
+ }
+ }
- Settings* settings = cellRenderer->GetSettings();
- if (settings == NULL)
+ TableCellContextMenuTracker* tracker = new(std::nothrow)
+ TableCellContextMenuTracker(node, Looper(), this);
+ BReference<TableCellContextMenuTracker> trackerReference(tracker);
+
+ ContextActionList* preActionList = new(std::nothrow) ContextActionList;
+ if (preActionList == NULL)
return;
- SettingsMenu* settingsMenu;
- status_t error = node->GetValueHandler()->CreateTableCellValueSettingsMenu(
- node->GetValue(), settings, settingsMenu);
- BReference<SettingsMenu> settingsMenuReference(settingsMenu, true);
+ BPrivate::ObjectDeleter<ContextActionList> preActionListDeleter(
+ preActionList);
+
+ error = _GetContextActionsForNode(node, preActionList);
if (error != B_OK)
return;
- TableCellContextMenuTracker* tracker = new(std::nothrow)
- TableCellContextMenuTracker(node, Looper(), this);
- BReference<TableCellContextMenuTracker> trackerReference(tracker);
- if (tracker == NULL || tracker->Init(settings, settingsMenu) != B_OK)
+ if (tracker == NULL || tracker->Init(settings, settingsMenu, preActionList) != B_OK)
return;
fTableCellContextMenuTracker = trackerReference.Detach();
@@ -1637,6 +1813,7 @@ VariablesView::_Init()
if (fVariableTableModel->Init() != B_OK)
throw std::bad_alloc();
fVariableTable->SetTreeTableModel(fVariableTableModel);
+ fVariableTable->SetToolTipProvider(fVariableTableModel);
fContainerListener = new ContainerListener(this);
fVariableTableModel->SetContainerListener(fContainerListener);
@@ -1679,6 +1856,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<BMessage> 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<ActionMenuItem> 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 0310dbd4de..30f3149fa9 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,13 +62,15 @@ private:
class VariableTableModel;
class ContextMenu;
class TableCellContextMenuTracker;
+ typedef BObjectList<ActionMenuItem> ContextActionList;
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(
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..27ca732de4
--- /dev/null
+++ b/src/apps/debugger/user_interface/gui/util/ActionMenuItem.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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 <new>
+
+#include <Looper.h>
+
+
+// #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)
+{
+ SetTarget(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 <MenuItem.h>
+
+
+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
diff --git a/src/apps/debugger/util/IntegerFormatter.cpp b/src/apps/debugger/util/IntegerFormatter.cpp
index 818b4f308c..8ae05d1217 100644
--- a/src/apps/debugger/util/IntegerFormatter.cpp
+++ b/src/apps/debugger/util/IntegerFormatter.cpp
@@ -1,5 +1,6 @@
/*
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
+ * Copyright 2012, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
@@ -7,10 +8,88 @@
#include "IntegerFormatter.h"
#include <stdio.h>
+#include <string.h>
#include <TypeConstants.h>
+static integer_format
+GetFormatForTypeAndFormat(type_code type, integer_format format,
+ char* _formatString, int formatSize)
+{
+ integer_format result = format;
+ _formatString[0] = '%';
+ ++_formatString;
+ formatSize -= 1;
+
+ switch (type) {
+ case B_INT8_TYPE:
+ switch (format) {
+ case INTEGER_FORMAT_HEX_DEFAULT:
+ result = INTEGER_FORMAT_HEX_8;
+ break;
+ case INTEGER_FORMAT_SIGNED:
+ strlcpy(_formatString, B_PRId8, formatSize);
+ break;
+ case INTEGER_FORMAT_UNSIGNED:
+ strlcpy(_formatString, B_PRIu8, formatSize);
+ break;
+ default:
+ break;
+ }
+ break;
+ case B_INT16_TYPE:
+ switch (format) {
+ case INTEGER_FORMAT_HEX_DEFAULT:
+ result = INTEGER_FORMAT_HEX_16;
+ break;
+ case INTEGER_FORMAT_SIGNED:
+ strlcpy(_formatString, B_PRId16, formatSize);
+ break;
+ case INTEGER_FORMAT_UNSIGNED:
+ strlcpy(_formatString, B_PRIu16, formatSize);
+ break;
+ default:
+ break;
+ }
+ break;
+ case B_INT32_TYPE:
+ switch (format) {
+ case INTEGER_FORMAT_HEX_DEFAULT:
+ result = INTEGER_FORMAT_HEX_32;
+ break;
+ case INTEGER_FORMAT_SIGNED:
+ strlcpy(_formatString, B_PRId32, formatSize);
+ break;
+ case INTEGER_FORMAT_UNSIGNED:
+ strlcpy(_formatString, B_PRIu32, formatSize);
+ break;
+ default:
+ break;
+ }
+ break;
+ case B_INT64_TYPE:
+ default:
+ switch (format) {
+ case INTEGER_FORMAT_HEX_DEFAULT:
+ result = INTEGER_FORMAT_HEX_64;
+ break;
+ case INTEGER_FORMAT_SIGNED:
+ strlcpy(_formatString, B_PRId64, formatSize);
+ break;
+ case INTEGER_FORMAT_UNSIGNED:
+ strlcpy(_formatString, B_PRIu64, formatSize);
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+
+ return result;
+}
+
+
/*static*/ bool
IntegerFormatter::FormatValue(const BVariant& value, integer_format format,
char* buffer, size_t bufferSize)
@@ -19,38 +98,30 @@ IntegerFormatter::FormatValue(const BVariant& value, integer_format format,
if (!value.IsInteger(&isSigned))
return false;
- if (format == INTEGER_FORMAT_DEFAULT)
- format = isSigned ? INTEGER_FORMAT_SIGNED : INTEGER_FORMAT_UNSIGNED;
+ char formatString[10];
- if (format == INTEGER_FORMAT_HEX_DEFAULT) {
- switch (value.Type()) {
- case B_INT8_TYPE:
- case B_UINT8_TYPE:
- format = INTEGER_FORMAT_HEX_8;
- break;
- case B_INT16_TYPE:
- case B_UINT16_TYPE:
- format = INTEGER_FORMAT_HEX_16;
- break;
- case B_INT32_TYPE:
- case B_UINT32_TYPE:
- format = INTEGER_FORMAT_HEX_32;
- break;
- case B_INT64_TYPE:
- case B_UINT64_TYPE:
- default:
- format = INTEGER_FORMAT_HEX_64;
- break;
- }
+ if (format == INTEGER_FORMAT_DEFAULT) {
+ format = isSigned ? INTEGER_FORMAT_SIGNED : INTEGER_FORMAT_UNSIGNED;
}
+ format = GetFormatForTypeAndFormat(value.Type(), format, formatString,
+ sizeof(formatString));
+
// format the value
switch (format) {
case INTEGER_FORMAT_SIGNED:
- snprintf(buffer, bufferSize, "%lld", value.ToInt64());
+ snprintf(buffer, bufferSize, formatString,
+ value.Type() == B_INT8_TYPE ? value.ToInt8() :
+ value.Type() == B_INT16_TYPE ? value.ToInt16() :
+ value.Type() == B_INT32_TYPE ? value.ToInt32() :
+ value.ToInt64());
break;
case INTEGER_FORMAT_UNSIGNED:
- snprintf(buffer, bufferSize, "%llu", value.ToUInt64());
+ snprintf(buffer, bufferSize, formatString,
+ value.Type() == B_INT8_TYPE ? value.ToUInt8() :
+ value.Type() == B_INT16_TYPE ? value.ToUInt16() :
+ value.Type() == B_INT32_TYPE ? value.ToUInt32() :
+ value.ToUInt64());
break;
case INTEGER_FORMAT_HEX_8:
snprintf(buffer, bufferSize, "%#x", (uint8)value.ToUInt64());
@@ -62,7 +133,6 @@ IntegerFormatter::FormatValue(const BVariant& value, integer_format format,
snprintf(buffer, bufferSize, "%#lx", (uint32)value.ToUInt64());
break;
case INTEGER_FORMAT_HEX_64:
- case INTEGER_FORMAT_HEX_DEFAULT:
default:
snprintf(buffer, bufferSize, "%#llx", value.ToUInt64());
break;
diff --git a/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp b/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp
index 8316d6e8dc..b805a35332 100644
--- a/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp
+++ b/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp
@@ -281,6 +281,9 @@ BMessageValueNode::ResolvedLocationAndValue(ValueLoader* valueLoader,
uint8* messageBuffer = new(std::nothrow) uint8[totalSize];
if (messageBuffer == NULL)
return B_NO_MEMORY;
+
+ ArrayDeleter<uint8> deleter(messageBuffer);
+
memset(messageBuffer, 0, totalSize);
memcpy(messageBuffer, fHeader, sizeof(BMessage::message_header));
uint8* tempBuffer = messageBuffer + sizeof(BMessage::message_header);
@@ -313,7 +316,6 @@ BMessageValueNode::ResolvedLocationAndValue(ValueLoader* valueLoader,
}
error = fMessage.Unflatten((const char*)messageBuffer);
- delete[] messageBuffer;
if (error != B_OK)
return error;
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<AddressType*>(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<ArrayType*>(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<ValueLocation> 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;
}
diff --git a/src/apps/poorman/PoorManAdvancedView.cpp b/src/apps/poorman/PoorManAdvancedView.cpp
index 10ef09a8ca..260da72b9c 100644
--- a/src/apps/poorman/PoorManAdvancedView.cpp
+++ b/src/apps/poorman/PoorManAdvancedView.cpp
@@ -7,6 +7,7 @@
#include <Box.h>
#include <Catalog.h>
+#include <LayoutBuilder.h>
#include <Locale.h>
#include "constants.h"
@@ -19,46 +20,43 @@
#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);
-
- // 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);
+
+
+ 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(B_USE_ITEM_INSETS);
}
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..dacef76463 100644
--- a/src/apps/poorman/PoorManLoggingView.cpp
+++ b/src/apps/poorman/PoorManLoggingView.cpp
@@ -7,6 +7,7 @@
#include <Box.h>
#include <Catalog.h>
+#include <LayoutBuilder.h>
#include <Locale.h>
#include "constants.h"
@@ -19,80 +20,63 @@
#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);
-
- // 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);
+ BGroupLayout* consoleLoggingLayout = new BGroupLayout(B_VERTICAL, 0);
+ consoleLogging->SetLayout(consoleLoggingLayout);
+
+ 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/PoorManLoggingView.h b/src/apps/poorman/PoorManLoggingView.h
index 2ffa367606..4203505f79 100644
--- a/src/apps/poorman/PoorManLoggingView.h
+++ b/src/apps/poorman/PoorManLoggingView.h
@@ -14,28 +14,54 @@
#include <CheckBox.h>
-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);
+ }
+
+ 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
// 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..0095c82deb 100644
--- a/src/apps/poorman/PoorManPreferencesWindow.cpp
+++ b/src/apps/poorman/PoorManPreferencesWindow.cpp
@@ -9,6 +9,7 @@
#include <Catalog.h>
#include <Debug.h>
#include <Directory.h>
+#include <LayoutBuilder.h>
#include <Locale.h>
#include <Window.h>
@@ -25,110 +26,71 @@
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();
-
- 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);
+
+
+ BLayoutBuilder::Group<>(this, B_VERTICAL)
+ .SetInsets(B_USE_WINDOW_INSETS)
+ .Add(fPrefTabView)
+ .AddGroup(B_HORIZONTAL)
+ .AddGlue()
+ .Add(fCancelButton)
+ .Add(fDoneButton);
}
PoorManPreferencesWindow::~PoorManPreferencesWindow()
{
- delete logFilePanel;
- delete webDirFilePanel;
+ delete fLogFilePanel;
+ delete fWebDirFilePanel;
}
@@ -139,38 +101,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();
@@ -180,12 +142,15 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
Quit();
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);
+ 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"));
@@ -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,30 +177,27 @@ PoorManPreferencesWindow::MessageReceived(BMessage* message)
void
-PoorManPreferencesWindow::SelectWebDir(BMessage * message)
+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);
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 +208,7 @@ PoorManPreferencesWindow::SelectWebDir(BMessage * message)
void
-PoorManPreferencesWindow::CreateLogFile(BMessage * message)
+PoorManPreferencesWindow::CreateLogFile(BMessage* message)
{
entry_ref ref;
const char * name;
@@ -268,8 +230,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 +245,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 {
+public:
+ PoorManPreferencesWindow(BRect frame, char* name);
+ ~PoorManPreferencesWindow();
+ virtual void MessageReceived(BMessage* message);
-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;
+ void ShowWebDirFilePanel();
+ void SelectWebDir(BMessage* message);
+ void CreateLogFile(BMessage* message);
- // ------------------------------------------------
- // FilePanels
- BFilePanel * webDirFilePanel;
- BFilePanel * logFilePanel;
+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 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;
-public:
- PoorManPreferencesWindow(BRect frame, char * name);
- ~PoorManPreferencesWindow();
-
-virtual void MessageReceived(BMessage * message);
-
- void ShowWebDirFilePanel();
- void SelectWebDir(BMessage * message);
- void CreateLogFile(BMessage * message);
+ // 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..a31ce8584a 100644
--- a/src/apps/poorman/PoorManSiteView.cpp
+++ b/src/apps/poorman/PoorManSiteView.cpp
@@ -6,91 +6,73 @@
*/
#include <Box.h>
+#include <LayoutBuilder.h>
#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");
+ // Web Site Options BBox
+ 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);
+
+ BGroupLayout* webSiteLocationLayout = new BGroupLayout(B_VERTICAL, 0);
+ webSiteLocation->SetLayout(webSiteLocationLayout);
+
+ 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/PoorManSiteView.h b/src/apps/poorman/PoorManSiteView.h
index 2fecd8f86c..8765347219 100644
--- a/src/apps/poorman/PoorManSiteView.h
+++ b/src/apps/poorman/PoorManSiteView.h
@@ -14,26 +14,52 @@
#include <CheckBox.h>
-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);
+ }
+
+ 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 <View.h>
#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..019ecc1e8a 100644
--- a/src/apps/poorman/PoorManWindow.cpp
+++ b/src/apps/poorman/PoorManWindow.cpp
@@ -17,6 +17,7 @@
#include <Directory.h>
#include <File.h>
#include <FindDirectory.h>
+#include <LayoutBuilder.h>
#include <Locale.h>
#include <Menu.h>
#include <MenuBar.h>
@@ -43,182 +44,112 @@
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);
-
// -----------------------------------------------------------------
// 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);
-
- 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 = new BTextView(STR_TXT_VIEW, B_WILL_DRAW );
+
+ 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);
+ BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
+ .SetInsets(0)
+ .Add(fFileMenuBar)
+ .AddGroup(B_VERTICAL, B_USE_SMALL_SPACING)
+ .SetInsets(B_USE_WINDOW_INSETS)
+ .AddGroup(B_HORIZONTAL)
+ .Add(fStatusView)
+ .AddGlue()
+ .Add(fHitsView)
+ .End()
+ .AddGroup(B_HORIZONTAL)
+ .Add(fDirView)
+ .AddGlue()
+ .End()
+ .Add(fScrollView);
pthread_rwlock_init(&fLogFileLock, NULL);
}
@@ -227,7 +158,6 @@ PoorManWindow::PoorManWindow(BRect frame)
PoorManWindow::~PoorManWindow()
{
delete fServer;
- delete fLogViewFont;
delete fLogFile;
pthread_rwlock_destroy(&fLogFileLock);
}
@@ -237,129 +167,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<const time_t*>(pointer);
-
- if (message->FindData("in_addr_t", B_ANY_TYPE, &pointer, &size) != B_OK)
- address = INADDR_NONE;
- else
- address = *static_cast<const in_addr_t*>(pointer);
-
- if (message->FindData("rgb_color", B_RGB_COLOR_TYPE, &pointer, &size) != B_OK)
- color = BLACK;
- else
- color = *static_cast<const rgb_color*>(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<const time_t*>(pointer);
+
+ if (message->FindData("in_addr_t", B_ANY_TYPE, &pointer, &size) != B_OK)
+ address = INADDR_NONE;
+ else
+ address = *static_cast<const in_addr_t*>(pointer);
+
+ if (message->FindData("rgb_color", B_RGB_COLOR_TYPE, &pointer, &size) != B_OK)
+ color = BLACK;
+ else
+ color = *static_cast<const rgb_color*>(pointer);
- if (time != -1) {
- BString timeString;
- if (BLocale::Default()->FormatDateTime(&timeString, time,
- DATE_FORMAT, TIME_FORMAT) == B_OK) {
- line << '[' << timeString << "]: ";
+ 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 << ") ";
+ 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;
+ line << msg;
- text_run run;
- text_run_array runs;
+ text_run run;
+ text_run_array runs;
- run.offset = 0;
- run.font = *fLogViewFont;
- run.color = color;
+ run.offset = 0;
+ run.color = color;
- runs.count = 1;
- runs.runs[0] = run;
+ 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 (Lock()) {
+ if (fLogConsoleFlag) {
+ fLoggingView->Insert(fLoggingView->TextLength(),
+ line.String(), line.Length(), &runs);
+ fLoggingView->ScrollToOffset(fLoggingView->TextLength());
+ }
- if (log_file_flag) {
- if (pthread_rwlock_rdlock(&fLogFileLock) == 0) {
- fLogFile->Write(line.String(), line.Length());
- pthread_rwlock_unlock(&fLogFileLock);
+ if (fLogFileFlag) {
+ if (pthread_rwlock_rdlock(&fLogFileLock) == 0) {
+ fLogFile->Write(line.String(), line.Length());
+ pthread_rwlock_unlock(&fLogFileLock);
+ }
}
- }
- Unlock();
- }
+ Unlock();
+ }
- break;
- }
- default:
- BWindow::MessageReceived(message);
- break;
+ break;
+ }
+ default:
+ BWindow::MessageReceived(message);
+ break;
}
}
@@ -367,17 +295,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 +313,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 +323,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 +350,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 +365,7 @@ PoorManWindow::Zoom(BPoint origin, float width, float height)
void
PoorManWindow::SetHits(uint32 num)
{
- hits = num;
+ fHits = num;
UpdateHitsLabel();
}
@@ -445,10 +373,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 +393,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 +422,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 +451,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 +467,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 +481,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 +490,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 +519,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 +559,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 +606,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;
-
- is_zoomed?ResizeTo(last_width, last_height):ResizeTo(318, 53);
- MoveTo(frame.left, frame.top);
-
- fLogFile = new BFile(log_path.String(), B_CREATE_FILE | B_WRITE_ONLY
+ 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;
+
+ fIsZoomed?ResizeTo(fLastWidth, fLastHeight):ResizeTo(318, 53);
+ MoveTo(fFrame.left, fFrame.top);
+
+ 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 +662,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 +700,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 +724,7 @@ PoorManWindow::StopServer()
poorman_log(B_TRANSLATE("Shutting down.\n"));
fServer->Stop();
- status = false;
+ fStatus = false;
UpdateStatusLabelAndMenuItem();
return B_OK;
}
@@ -804,7 +733,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 +752,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..20367ec78e 100644
--- a/src/apps/poorman/PoorManWindow.h
+++ b/src/apps/poorman/PoorManWindow.h
@@ -33,125 +33,172 @@ 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); }
- // 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);
- // Advanced Tab
- int16 MaxConnections() { return max_connections; }
- void SetMaxConnections(int16 num) { max_connections = 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:
// -------------------------------------------
// 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 <stdio.h>
-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 <Slider.h>
-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
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/ColumnListView.cpp b/src/kits/interface/ColumnListView.cpp
index baa05a2822..b31cf0c0a4 100644
--- a/src/kits/interface/ColumnListView.cpp
+++ b/src/kits/interface/ColumnListView.cpp
@@ -3512,8 +3512,11 @@ OutlineView::MouseDown(BPoint position)
fCurrentRow = new_row;
fCurrentField = new_field;
fCurrentCode = B_INSIDE_VIEW;
+ BMessage* message = Window()->CurrentMessage();
+ int32 buttons = 1;
+ message->FindInt32("buttons", &buttons);
fCurrentColumn->MouseDown(fMasterView, fCurrentRow,
- fCurrentField, fFieldRect, position, 1);
+ fCurrentField, fFieldRect, position, buttons);
}
if (!fEditMode) {
@@ -4090,6 +4093,16 @@ OutlineView::RemoveRow(BRow* row)
fItemsHeight -= subTreeHeight;
FixScrollBar(false);
+ int32 indent = 0;
+ float top = 0.0;
+ if (FindRow(fVisibleRect.top, &indent, &top) == NULL && ScrollBar(B_VERTICAL) != NULL) {
+ // after removing this row, no rows are actually visible any more,
+ // force a scroll to make them visible again
+ if (fItemsHeight > fVisibleRect.Height())
+ ScrollBy(0.0, fItemsHeight - fVisibleRect.Height() - Bounds().top);
+ else
+ ScrollBy(0.0, -Bounds().top);
+ }
if (parentRow != NULL) {
parentRow->fChildList->RemoveItem(row);
if (parentRow->fChildList->CountItems() == 0) {
@@ -4294,7 +4307,7 @@ OutlineView::FixScrollBar(bool scrollToFit)
float maxScrollBarValue = fItemsHeight - fVisibleRect.Height();
vScrollBar->SetProportion(fVisibleRect.Height() / fItemsHeight);
- // If the user is scrolled down too far when makes the range smaller, the list
+ // If the user is scrolled down too far when making the range smaller, the list
// will jump suddenly, which is undesirable. In this case, don't fix the scroll
// bar here. In ScrollTo, it checks to see if this has occured, and will
// fix the scroll bars sneakily if the user has scrolled up far enough.
diff --git a/src/kits/interface/ColumnTypes.cpp b/src/kits/interface/ColumnTypes.cpp
index 5298f19276..82a8fef579 100644
--- a/src/kits/interface/ColumnTypes.cpp
+++ b/src/kits/interface/ColumnTypes.cpp
@@ -130,7 +130,7 @@ BStringField::SetString(const char* val)
fString = val;
fClippedString = "";
fWidth = 0;
-}
+}
const char*
@@ -158,7 +158,7 @@ void
BStringField::SetClippedString(const char* val)
{
fClippedString = val;
-}
+}
const char*
@@ -184,15 +184,17 @@ BStringColumn::DrawField(BField* _field, BRect rect, BView* parent)
{
float width = rect.Width() - (2 * kTEXT_MARGIN);
BStringField* field = static_cast<BStringField*>(_field);
+ bool clipNeeded = width < field->Width();
- if (width != field->Width()) {
+ if (clipNeeded) {
BString out_string(field->String());
parent->TruncateString(&out_string, fTruncate, width + 2);
field->SetClippedString(out_string.String());
field->SetWidth(width);
}
- DrawString(field->ClippedString(), parent, rect);
+
+ DrawString(clipNeeded ? field->ClippedString() : field->String(), parent, rect);
}
@@ -256,7 +258,7 @@ void
BDateField::SetClippedString(const char* val)
{
fClippedString = val;
-}
+}
const char*
@@ -643,7 +645,7 @@ BBitmapColumn::CompareFields(BField* /*field1*/, BField* /*field2*/)
}
-bool
+bool
BBitmapColumn::AcceptsField(const BField *field) const
{
return static_cast<bool>(dynamic_cast<const BBitmapField*>(field));
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/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 <new>
+#include <ControlLook.h>
#include <Message.h>
@@ -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)
{
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..da06a5b310 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;
@@ -172,7 +172,7 @@ callout_init_mtx(struct callout *c, struct mtx *mtx, int flags)
int
-callout_reset(struct callout *c, int when, void (*func)(void *), void *arg)
+callout_reset(struct callout *c, int ticks, void (*func)(void *), void *arg)
{
int canceled = callout_stop(c);
@@ -183,12 +183,12 @@ callout_reset(struct callout *c, int when, void (*func)(void *), void *arg)
TRACE("callout_reset %p, func %p, arg %p\n", c, c->c_func, c->c_arg);
- if (when >= 0) {
+ if (ticks >= 0) {
// reschedule or add this timer
if (c->due <= 0)
list_add_item(&sTimers, c);
- c->due = system_time() + when;
+ c->due = system_time() + ticks_to_usecs(ticks);
// notify timer about the change if necessary
if (sTimeout > c->due)
@@ -200,9 +200,9 @@ callout_reset(struct callout *c, int when, void (*func)(void *), void *arg)
int
-callout_schedule(struct callout *callout, int toTicks)
+callout_schedule(struct callout *callout, int ticks)
{
- return callout_reset(callout, toTicks, callout->c_func, callout->c_arg);
+ return callout_reset(callout, ticks, callout->c_func, callout->c_arg);
}
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/callout.h b/src/libs/compat/freebsd_network/compat/sys/callout.h
index 50909aa95f..9d4da3b944 100644
--- a/src/libs/compat/freebsd_network/compat/sys/callout.h
+++ b/src/libs/compat/freebsd_network/compat/sys/callout.h
@@ -30,8 +30,9 @@ struct callout {
void callout_init(struct callout *c, int mpsafe);
void callout_init_mtx(struct callout *c, struct mtx *mutex, int flags);
-int callout_schedule(struct callout *c, int when);
-int callout_reset(struct callout *c, int when, void (*func)(void *), void *arg);
+/* Time values are in ticks, see compat/sys/kernel.h for its definition */
+int callout_schedule(struct callout *c, int ticks);
+int callout_reset(struct callout *c, int ticks, void (*func)(void *), void *arg);
int callout_pending(struct callout *c);
int callout_active(struct callout *c);
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 <sys/types.h>
-#define time_uptime system_time() / 1000000
+#define time_uptime (system_time() / 1000000)
int ppsratecheck(struct timeval*, int*, int);
diff --git a/src/libs/compat/freebsd_wlan/net80211/Jamfile b/src/libs/compat/freebsd_wlan/net80211/Jamfile
index 6e63b3eb1e..bff3d75686 100644
--- a/src/libs/compat/freebsd_wlan/net80211/Jamfile
+++ b/src/libs/compat/freebsd_wlan/net80211/Jamfile
@@ -11,9 +11,9 @@ UsePrivateKernelHeaders ;
Includes [ FGristFiles kernel_c++_structs.h ]
: <src!system!kernel>kernel_c++_struct_sizes.h ;
-SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 IEEE80211_DEBUG=1 ]
+SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ]
-Wno-format -Wno-unused -Wno-uninitialized ;
-SubDirC++Flags [ FDefines _KERNEL=1 FBSD_DRIVER=1 IEEE80211_DEBUG=1 ]
+SubDirC++Flags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ]
-Wno-format -Wno-unused -Wno-uninitialized ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) .. crypto rijndael ] ;
diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp
index 5fad3885c8..d4910cdef5 100644
--- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp
+++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp
@@ -539,7 +539,6 @@ ieee80211_sysctl_vattach(struct ieee80211vap* vap)
| IEEE80211_MSG_NODE
| IEEE80211_MSG_ASSOC
| IEEE80211_MSG_AUTH
- | IEEE80211_MSG_SCAN
| IEEE80211_MSG_STATE
| IEEE80211_MSG_POWER
| IEEE80211_MSG_WME
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") },
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
diff --git a/src/system/kernel/cache/block_cache.cpp b/src/system/kernel/cache/block_cache.cpp
index b49bf6e902..e0c258b804 100644
--- a/src/system/kernel/cache/block_cache.cpp
+++ b/src/system/kernel/cache/block_cache.cpp
@@ -1268,7 +1268,7 @@ BlockWriter::_BlockDone(cached_block* block, hash_iterator* iterator)
fDeletedTransaction = true;
}
}
- if (block->transaction == NULL && block->ref_count == 0) {
+ if (block->transaction == NULL && block->ref_count == 0 && !block->unused) {
// the block is no longer used
block->unused = true;
fCache->unused_blocks.Add(block);
@@ -1761,7 +1761,9 @@ put_cached_block(block_cache* cache, cached_block* block)
cache->RemoveBlock(block);
} else {
// put this block in the list of unused blocks
+ ASSERT(!block->unused);
block->unused = true;
+
ASSERT(block->original_data == NULL
&& block->parent_data == NULL);
cache->unused_blocks.Add(block);
diff --git a/src/tools/fs_shell/block_cache.cpp b/src/tools/fs_shell/block_cache.cpp
index 78f69d2865..2f47a094dc 100644
--- a/src/tools/fs_shell/block_cache.cpp
+++ b/src/tools/fs_shell/block_cache.cpp
@@ -927,7 +927,7 @@ write_cached_block(block_cache* cache, cached_block* block,
}
}
}
- if (block->transaction == NULL && block->ref_count == 0) {
+ if (block->transaction == NULL && block->ref_count == 0 && !block->unused) {
// the block is no longer used
block->unused = true;
cache->unused_blocks.Add(block);