103 lines
1.7 KiB
C++
103 lines
1.7 KiB
C++
/*
|
|||
|
|
* Copyright 2015, Rene Gollent, [email protected].
|
||
|
|
* 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;
|
||
|
|
}
|
||
|
|
}
|