Debugger: Add interface subclasses for table cell editors.
TableCellTextControlEditor: - Serves as a base for editors that expose their functionality via a text control. Handles common functionality of watching for changes, validating input, and notifying listeners appropriately. TableCellOptionPopUpEditor: - Serves as a base class for editors where the set of possible values is fixed and known up front. Handles reacting to selection changes and notifying listeners.
This commit is contained in:
parent
5f5499b40b
commit
a82499551d
@ -300,7 +300,11 @@ Application Debugger :
|
|||||||
WatchPromptWindow.cpp
|
WatchPromptWindow.cpp
|
||||||
|
|
||||||
# user_interface/gui/value
|
# user_interface/gui/value
|
||||||
|
TableCellFormattedValueEditor.cpp
|
||||||
TableCellFormattedValueRenderer.cpp
|
TableCellFormattedValueRenderer.cpp
|
||||||
|
TableCellOptionPopUpEditor.cpp
|
||||||
|
TableCellTextControlEditor.cpp
|
||||||
|
TableCellValueEditor.cpp
|
||||||
TableCellValueRenderer.cpp
|
TableCellValueRenderer.cpp
|
||||||
TableCellValueRendererUtils.cpp
|
TableCellValueRendererUtils.cpp
|
||||||
|
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TableCellFormattedValueEditor.h"
|
||||||
|
|
||||||
|
#include "ValueFormatter.h"
|
||||||
|
|
||||||
|
|
||||||
|
TableCellFormattedValueEditor::TableCellFormattedValueEditor(
|
||||||
|
Value* initialValue, ValueFormatter* formatter)
|
||||||
|
:
|
||||||
|
TableCellValueEditor(),
|
||||||
|
fValueFormatter(formatter)
|
||||||
|
{
|
||||||
|
SetInitialValue(initialValue);
|
||||||
|
fValueFormatter->AcquireReference();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TableCellFormattedValueEditor::~TableCellFormattedValueEditor()
|
||||||
|
{
|
||||||
|
fValueFormatter->ReleaseReference();
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
#ifndef TABLE_CELL_FORMATTED_VALUE_EDITOR_H
|
||||||
|
#define TABLE_CELL_FORMATTED_VALUE_EDITOR_H
|
||||||
|
|
||||||
|
#include "TableCellValueEditor.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ValueFormatter;
|
||||||
|
|
||||||
|
|
||||||
|
class TableCellFormattedValueEditor : public TableCellValueEditor {
|
||||||
|
public:
|
||||||
|
TableCellFormattedValueEditor(
|
||||||
|
Value* initialValue,
|
||||||
|
ValueFormatter* formatter);
|
||||||
|
virtual ~TableCellFormattedValueEditor();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ValueFormatter* GetValueFormatter() const
|
||||||
|
{ return fValueFormatter; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
ValueFormatter* fValueFormatter;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // TABLE_CELL_FORMATTED_VALUE_EDITOR_H
|
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TableCellOptionPopUpEditor.h"
|
||||||
|
|
||||||
|
#include "Value.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MSG_SELECTED_OPTION_CHANGED = 'msoc'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
TableCellOptionPopUpEditor::TableCellOptionPopUpEditor(::Value* initialValue,
|
||||||
|
ValueFormatter* formatter)
|
||||||
|
:
|
||||||
|
TableCellFormattedValueEditor(initialValue, formatter),
|
||||||
|
BOptionPopUp("optionEditor", NULL, NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TableCellOptionPopUpEditor::~TableCellOptionPopUpEditor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
TableCellOptionPopUpEditor::Init()
|
||||||
|
{
|
||||||
|
BMessage* message = new(std::nothrow) BMessage(
|
||||||
|
MSG_SELECTED_OPTION_CHANGED);
|
||||||
|
if (message == NULL)
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
SetMessage(message);
|
||||||
|
|
||||||
|
return ConfigureOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BView*
|
||||||
|
TableCellOptionPopUpEditor::GetView()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TableCellOptionPopUpEditor::AttachedToWindow()
|
||||||
|
{
|
||||||
|
BOptionPopUp::AttachedToWindow();
|
||||||
|
|
||||||
|
SetTarget(this);
|
||||||
|
|
||||||
|
NotifyEditBeginning();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TableCellOptionPopUpEditor::MessageReceived(BMessage* message)
|
||||||
|
{
|
||||||
|
switch (message->what) {
|
||||||
|
case MSG_SELECTED_OPTION_CHANGED:
|
||||||
|
{
|
||||||
|
// TODO: implement
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
BOptionPopUp::MessageReceived(message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
#ifndef TABLE_CELL_OPTION_POPUP_EDITOR_H
|
||||||
|
#define TABLE_CELL_OPTION_POPUP_EDITOR_H
|
||||||
|
|
||||||
|
#include <OptionPopUp.h>
|
||||||
|
|
||||||
|
#include "TableCellFormattedValueEditor.h"
|
||||||
|
|
||||||
|
|
||||||
|
// common base class for editors that have a fixed set of chooseable
|
||||||
|
// values known up front
|
||||||
|
class TableCellOptionPopUpEditor : public TableCellFormattedValueEditor,
|
||||||
|
protected BOptionPopUp {
|
||||||
|
public:
|
||||||
|
TableCellOptionPopUpEditor(
|
||||||
|
::Value* initialValue,
|
||||||
|
ValueFormatter* formatter);
|
||||||
|
virtual ~TableCellOptionPopUpEditor();
|
||||||
|
|
||||||
|
status_t Init();
|
||||||
|
|
||||||
|
virtual BView* GetView();
|
||||||
|
|
||||||
|
virtual status_t ConfigureOptions() = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
virtual void MessageReceived(BMessage* message);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TABLE_CELL_TEXT_CONTROL_EDITOR_H
|
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "TableCellTextControlEditor.h"
|
||||||
|
|
||||||
|
#include "Value.h"
|
||||||
|
#include "ValueFormatter.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MSG_INPUT_VALIDATION_NEEDED = 'ivne',
|
||||||
|
MSG_TEXT_VALUE_CHANGED = 'tevc'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
TableCellTextControlEditor::TableCellTextControlEditor(::Value* initialValue,
|
||||||
|
ValueFormatter* formatter)
|
||||||
|
:
|
||||||
|
TableCellFormattedValueEditor(initialValue, formatter),
|
||||||
|
BTextControl("", "", NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TableCellTextControlEditor::~TableCellTextControlEditor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
TableCellTextControlEditor::Init()
|
||||||
|
{
|
||||||
|
BMessage* message = new(std::nothrow) BMessage(
|
||||||
|
MSG_INPUT_VALIDATION_NEEDED);
|
||||||
|
if (message == NULL)
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
SetMessage(message);
|
||||||
|
|
||||||
|
message = new(std::nothrow) BMessage(MSG_TEXT_VALUE_CHANGED);
|
||||||
|
if (message == NULL)
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
SetModificationMessage(message);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BView*
|
||||||
|
TableCellTextControlEditor::GetView()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TableCellTextControlEditor::AttachedToWindow()
|
||||||
|
{
|
||||||
|
BTextControl::AttachedToWindow();
|
||||||
|
|
||||||
|
SetTarget(this);
|
||||||
|
|
||||||
|
BString output;
|
||||||
|
|
||||||
|
if (GetValueFormatter()->FormatValue(InitialValue(), output) == B_OK)
|
||||||
|
SetText(output);
|
||||||
|
|
||||||
|
NotifyEditBeginning();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TableCellTextControlEditor::MessageReceived(BMessage* message)
|
||||||
|
{
|
||||||
|
switch (message->what) {
|
||||||
|
case MSG_TEXT_VALUE_CHANGED:
|
||||||
|
{
|
||||||
|
// TODO: highlight the input view in some way to show
|
||||||
|
// invalid inputs
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MSG_INPUT_VALIDATION_NEEDED:
|
||||||
|
{
|
||||||
|
if (ValidateInput()) {
|
||||||
|
::Value* value = NULL;
|
||||||
|
status_t error = GetValueForInput(value);
|
||||||
|
if (error != B_OK)
|
||||||
|
break;
|
||||||
|
|
||||||
|
BReference< ::Value> valueReference(value, true);
|
||||||
|
NotifyEditCompleted(value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
BTextControl::MessageReceived(message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
#ifndef TABLE_CELL_TEXT_CONTROL_EDITOR_H
|
||||||
|
#define TABLE_CELL_TEXT_CONTROL_EDITOR_H
|
||||||
|
|
||||||
|
#include <TextControl.h>
|
||||||
|
|
||||||
|
#include "TableCellFormattedValueEditor.h"
|
||||||
|
|
||||||
|
|
||||||
|
// common base class for editors that input a value via a text field
|
||||||
|
class TableCellTextControlEditor : public TableCellFormattedValueEditor,
|
||||||
|
protected BTextControl {
|
||||||
|
public:
|
||||||
|
TableCellTextControlEditor(
|
||||||
|
::Value* initialValue,
|
||||||
|
ValueFormatter* formatter);
|
||||||
|
virtual ~TableCellTextControlEditor();
|
||||||
|
|
||||||
|
status_t Init();
|
||||||
|
|
||||||
|
virtual BView* GetView();
|
||||||
|
|
||||||
|
virtual bool ValidateInput() const = 0;
|
||||||
|
|
||||||
|
virtual status_t GetValueForInput(::Value*& _output) const = 0;
|
||||||
|
// returns reference
|
||||||
|
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
virtual void MessageReceived(BMessage* message);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TABLE_CELL_TEXT_CONTROL_EDITOR_H
|
Loading…
x
Reference in New Issue
Block a user