1/* 2 * Copyright 2015, Rene Gollent, rene@gollent.com. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "TableCellTextControlEditor.h" 7 8#include "Value.h" 9#include "ValueFormatter.h" 10 11 12enum { 13 MSG_INPUT_VALIDATION_NEEDED = 'ivne', 14 MSG_TEXT_VALUE_CHANGED = 'tevc' 15}; 16 17 18TableCellTextControlEditor::TableCellTextControlEditor(::Value* initialValue, 19 ValueFormatter* formatter) 20 : 21 TableCellFormattedValueEditor(initialValue, formatter), 22 BTextControl("", "", NULL) 23{ 24} 25 26 27TableCellTextControlEditor::~TableCellTextControlEditor() 28{ 29} 30 31 32status_t 33TableCellTextControlEditor::Init() 34{ 35 BMessage* message = new(std::nothrow) BMessage( 36 MSG_INPUT_VALIDATION_NEEDED); 37 if (message == NULL) 38 return B_NO_MEMORY; 39 40 SetMessage(message); 41 42 message = new(std::nothrow) BMessage(MSG_TEXT_VALUE_CHANGED); 43 if (message == NULL) 44 return B_NO_MEMORY; 45 46 SetModificationMessage(message); 47 48 return B_OK; 49} 50 51 52BView* 53TableCellTextControlEditor::GetView() 54{ 55 return this; 56} 57 58 59void 60TableCellTextControlEditor::AttachedToWindow() 61{ 62 BTextControl::AttachedToWindow(); 63 64 SetTarget(this); 65 66 BString output; 67 68 if (GetValueFormatter()->FormatValue(InitialValue(), output) == B_OK) 69 SetText(output); 70 71 NotifyEditBeginning(); 72} 73 74 75void 76TableCellTextControlEditor::MessageReceived(BMessage* message) 77{ 78 switch (message->what) { 79 case MSG_TEXT_VALUE_CHANGED: 80 { 81 // TODO: highlight the input view in some way to show 82 // invalid inputs 83 84 // fall through 85 } 86 case MSG_INPUT_VALIDATION_NEEDED: 87 { 88 if (ValidateInput()) { 89 ::Value* value = NULL; 90 status_t error = GetValueForInput(value); 91 if (error != B_OK) 92 break; 93 94 BReference< ::Value> valueReference(value, true); 95 NotifyEditCompleted(value); 96 } 97 break; 98 } 99 default: 100 BTextControl::MessageReceived(message); 101 break; 102 } 103} 104