diff --git a/src/apps/debugger/Jamfile b/src/apps/debugger/Jamfile index ed1ea0ffdb..4ca5c5eade 100644 --- a/src/apps/debugger/Jamfile +++ b/src/apps/debugger/Jamfile @@ -304,6 +304,7 @@ Application Debugger : TableCellFloatRenderer.cpp TableCellIntegerRenderer.cpp TableCellStringRenderer.cpp + TableCellValueEditor.cpp TableCellValueRenderer.cpp TableCellValueRendererUtils.cpp diff --git a/src/apps/debugger/user_interface/gui/value/TableCellValueEditor.cpp b/src/apps/debugger/user_interface/gui/value/TableCellValueEditor.cpp new file mode 100644 index 0000000000..4fe0572857 --- /dev/null +++ b/src/apps/debugger/user_interface/gui/value/TableCellValueEditor.cpp @@ -0,0 +1,107 @@ +/* + * Copyright 2015, Rene Gollent, rene@gollent.com. + * Distributed under the terms of the MIT License. + */ + +#include "TableCellValueEditor.h" + +#include "Value.h" + + +TableCellValueEditor::TableCellValueEditor() + : + BReferenceable(), + fInitialValue(NULL) +{ +} + + +TableCellValueEditor::~TableCellValueEditor() +{ + if (fInitialValue != NULL) + fInitialValue->ReleaseReference(); +} + + +void +TableCellValueEditor::AddListener(Listener* listener) +{ + fListeners.Add(listener); +} + + +void +TableCellValueEditor::RemoveListener(Listener* listener) +{ + fListeners.Remove(listener); +} + + +void +TableCellValueEditor::SetInitialValue(Value* value) +{ + if (fInitialValue != NULL) + fInitialValue->ReleaseReference(); + + fInitialValue = value; + if (fInitialValue != NULL) + fInitialValue->AcquireReference(); +} + + +void +TableCellValueEditor::NotifyEditBeginning() +{ + for (ListenerList::Iterator it = fListeners.GetIterator(); + Listener* listener = it.Next();) { + listener->TableCellEditBeginning(); + } +} + + +void +TableCellValueEditor::NotifyEditCancelled() +{ + for (ListenerList::Iterator it = fListeners.GetIterator(); + Listener* listener = it.Next();) { + listener->TableCellEditCancelled(); + } +} + + +void +TableCellValueEditor::NotifyEditCompleted(Value* newValue) +{ + for (ListenerList::Iterator it = fListeners.GetIterator(); + Listener* listener = it.Next();) { + listener->TableCellEditEnded(newValue); + } +} + + +// #pragma mark - TableCellValueEditor::Listener + + +TableCellValueEditor::Listener::~Listener() +{ +} + + +void +TableCellValueEditor::Listener::TableCellEditBeginning() +{ +} + + +void +TableCellValueEditor::Listener::TableCellEditCancelled() +{ +} + + +void +TableCellValueEditor::Listener::TableCellEditEnded(Value* newValue) +{ +} + + diff --git a/src/apps/debugger/user_interface/gui/value/TableCellValueEditor.h b/src/apps/debugger/user_interface/gui/value/TableCellValueEditor.h new file mode 100644 index 0000000000..77b573a0d6 --- /dev/null +++ b/src/apps/debugger/user_interface/gui/value/TableCellValueEditor.h @@ -0,0 +1,55 @@ +/* + * Copyright 2015, Rene Gollent, rene@gollent.com. + * Distributed under the terms of the MIT License. + */ +#ifndef TABLE_CELL_VALUE_EDITOR_H +#define TABLE_CELL_VALUE_EDITOR_H + +#include + +#include + + +class BView; +class Value; + + +class TableCellValueEditor : public BReferenceable { +public: + class Listener; + TableCellValueEditor(); + virtual ~TableCellValueEditor(); + + void AddListener(Listener* listener); + void RemoveListener(Listener* listener); + + inline Value* InitialValue() const { return fInitialValue; } + void SetInitialValue(Value* value); + + virtual BView* GetView() = 0; + +protected: + void NotifyEditBeginning(); + void NotifyEditCancelled(); + void NotifyEditCompleted(Value* newValue); + +private: + typedef DoublyLinkedList ListenerList; + +private: + ListenerList fListeners; + Value* fInitialValue; +}; + + +class TableCellValueEditor::Listener : public + DoublyLinkedListLinkImpl { +public: + virtual ~Listener(); + + virtual void TableCellEditBeginning(); + virtual void TableCellEditCancelled(); + virtual void TableCellEditEnded(Value* newValue); +}; + +#endif // TABLE_CELL_VALUE_EDITOR_H diff --git a/src/apps/debugger/value/ValueHandler.cpp b/src/apps/debugger/value/ValueHandler.cpp index fc3bf875a2..be7e4495da 100644 --- a/src/apps/debugger/value/ValueHandler.cpp +++ b/src/apps/debugger/value/ValueHandler.cpp @@ -1,5 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2015, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ @@ -19,3 +20,12 @@ ValueHandler::CreateTableCellValueSettingsMenu(Value* value, Settings* settings, _menu = NULL; return B_OK; } + + +status_t +ValueHandler::GetTableCellValueEditor(Value* value, Settings* settings, + TableCellValueEditor*& _editor) +{ + _editor = NULL; + return B_OK; +} diff --git a/src/apps/debugger/value/ValueHandler.h b/src/apps/debugger/value/ValueHandler.h index fac0f7eb30..ae3087eec1 100644 --- a/src/apps/debugger/value/ValueHandler.h +++ b/src/apps/debugger/value/ValueHandler.h @@ -1,5 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2015, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ #ifndef VALUE_HANDLER_H @@ -11,6 +12,7 @@ class Settings; class SettingsMenu; +class TableCellValueEditor; class TableCellValueRenderer; class Value; class ValueFormatter; @@ -27,6 +29,12 @@ public: virtual status_t GetTableCellValueRenderer(Value* value, TableCellValueRenderer*& _renderer) = 0; // returns a reference + virtual status_t GetTableCellValueEditor(Value* value, + Settings* settings, + // may be NULL if preconfiguration with + // particular settings isn't desired. + TableCellValueEditor*& _editor); + // may return NULL, otherwise a reference virtual status_t CreateTableCellValueSettingsMenu(Value* value, Settings* settings, SettingsMenu*& _menu); // may return NULL, otherwise a reference