From 55d4f9ff18d61bde20dfdf9889c6022a7eb844d3 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Tue, 21 Jul 2015 21:47:11 -0400 Subject: [PATCH] Debugger: Implement value editor hook for more handlers. {Bool,Enumeration}ValueHandler: - Implement GetTableCellValueEditor() hook. --- .../value/value_handlers/BoolValueHandler.cpp | 33 ++++++++++++++++- .../value/value_handlers/BoolValueHandler.h | 3 ++ .../EnumerationValueHandler.cpp | 37 +++++++++++++++++++ .../value_handlers/EnumerationValueHandler.h | 3 ++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/src/apps/debugger/value/value_handlers/BoolValueHandler.cpp b/src/apps/debugger/value/value_handlers/BoolValueHandler.cpp index bfba420ccb..06223d76a1 100644 --- a/src/apps/debugger/value/value_handlers/BoolValueHandler.cpp +++ b/src/apps/debugger/value/value_handlers/BoolValueHandler.cpp @@ -11,6 +11,7 @@ #include "BoolValue.h" #include "BoolValueFormatter.h" +#include "TableCellBoolEditor.h" #include "TableCellFormattedValueRenderer.h" @@ -62,7 +63,7 @@ BoolValueHandler::GetTableCellValueRenderer(Value* value, return B_BAD_VALUE; ValueFormatter* formatter = NULL; - if (GetValueFormatter(value, formatter)) + if (GetValueFormatter(value, formatter) != B_OK) return B_NO_MEMORY; BReference formatterReference(formatter, true); @@ -75,3 +76,33 @@ BoolValueHandler::GetTableCellValueRenderer(Value* value, _renderer = renderer; return B_OK; } + + +status_t +BoolValueHandler::GetTableCellValueEditor(Value* _value, Settings* settings, + TableCellValueEditor*& _editor) +{ + BoolValue* value = dynamic_cast(_value); + if (value == NULL) + return B_BAD_VALUE; + + ValueFormatter* formatter; + status_t error = GetValueFormatter(value, formatter); + if (error != B_OK) + return error; + BReference formatterReference(formatter, true); + + TableCellBoolEditor* editor = new(std::nothrow) + TableCellBoolEditor(value, formatter); + if (editor == NULL) + return B_NO_MEMORY; + + BReference editorReference(editor, true); + error = editor->Init(); + if (error != B_OK) + return error; + + editorReference.Detach(); + _editor = editor; + return B_OK; +} diff --git a/src/apps/debugger/value/value_handlers/BoolValueHandler.h b/src/apps/debugger/value/value_handlers/BoolValueHandler.h index 15acb89db7..0ff13f8f19 100644 --- a/src/apps/debugger/value/value_handlers/BoolValueHandler.h +++ b/src/apps/debugger/value/value_handlers/BoolValueHandler.h @@ -21,6 +21,9 @@ public: ValueFormatter*& _formatter); virtual status_t GetTableCellValueRenderer(Value* value, TableCellValueRenderer*& _renderer); + virtual status_t GetTableCellValueEditor(Value* _value, + Settings* settings, + TableCellValueEditor*& _editor); }; diff --git a/src/apps/debugger/value/value_handlers/EnumerationValueHandler.cpp b/src/apps/debugger/value/value_handlers/EnumerationValueHandler.cpp index 83f53a5b32..1f6df72aad 100644 --- a/src/apps/debugger/value/value_handlers/EnumerationValueHandler.cpp +++ b/src/apps/debugger/value/value_handlers/EnumerationValueHandler.cpp @@ -11,6 +11,7 @@ #include "EnumerationValue.h" #include "EnumerationValueFormatter.h" +#include "TableCellEnumerationEditor.h" #include "TableCellFormattedValueRenderer.h" #include "Type.h" @@ -64,6 +65,42 @@ EnumerationValueHandler::GetValueFormatter(Value* _value, } +status_t +EnumerationValueHandler::GetTableCellValueEditor(Value* _value, + Settings* settings, TableCellValueEditor*& _editor) +{ + EnumerationValue* value = dynamic_cast(_value); + if (value == NULL) + return B_BAD_VALUE; + + IntegerValueFormatter::Config* config = NULL; + status_t error = CreateIntegerFormatterConfig(value, config); + if (error != B_OK) + return error; + BReference configReference(config, true); + + ValueFormatter* formatter; + error = CreateValueFormatter(config, formatter); + if (error != B_OK) + return error; + BReference formatterReference(formatter, true); + + TableCellEnumerationEditor* editor = new(std::nothrow) + TableCellEnumerationEditor(value, formatter); + if (editor == NULL) + return B_NO_MEMORY; + + BReference editorReference(editor, true); + error = editor->Init(); + if (error != B_OK) + return error; + + editorReference.Detach(); + _editor = editor; + return B_OK; +} + + integer_format EnumerationValueHandler::DefaultIntegerFormat(IntegerValue* _value) { diff --git a/src/apps/debugger/value/value_handlers/EnumerationValueHandler.h b/src/apps/debugger/value/value_handlers/EnumerationValueHandler.h index f595b8b357..de45ea6b1b 100644 --- a/src/apps/debugger/value/value_handlers/EnumerationValueHandler.h +++ b/src/apps/debugger/value/value_handlers/EnumerationValueHandler.h @@ -19,6 +19,9 @@ public: virtual float SupportsValue(Value* value); virtual status_t GetValueFormatter(Value* value, ValueFormatter*& _formatter); + virtual status_t GetTableCellValueEditor(Value* value, + Settings* settings, + TableCellValueEditor*& _editor); protected: virtual integer_format DefaultIntegerFormat(IntegerValue* value);