1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "FloatValueHandler.h"
8
9#include <new>
10
11#include "FloatValue.h"
12#include "FloatValueFormatter.h"
13#include "TableCellFloatEditor.h"
14#include "TableCellFormattedValueRenderer.h"
15
16
17FloatValueHandler::FloatValueHandler()
18{
19}
20
21
22FloatValueHandler::~FloatValueHandler()
23{
24}
25
26
27status_t
28FloatValueHandler::Init()
29{
30	return B_OK;
31}
32
33
34float
35FloatValueHandler::SupportsValue(Value* value)
36{
37	return dynamic_cast<FloatValue*>(value) != NULL ? 0.5f : 0;
38}
39
40
41status_t
42FloatValueHandler::GetValueFormatter(Value* value,
43	ValueFormatter*& _formatter)
44{
45	if (dynamic_cast<FloatValue*>(value) == NULL)
46		return B_BAD_VALUE;
47
48	FloatValueFormatter* formatter = new(std::nothrow) FloatValueFormatter;
49	if (formatter == NULL)
50		return B_NO_MEMORY;
51
52	_formatter = formatter;
53	return B_OK;
54}
55
56
57status_t
58FloatValueHandler::GetTableCellValueRenderer(Value* value,
59	TableCellValueRenderer*& _renderer)
60{
61	if (dynamic_cast<FloatValue*>(value) == NULL)
62		return B_BAD_VALUE;
63
64	ValueFormatter* formatter = NULL;
65	status_t error = GetValueFormatter(value, formatter);
66	if (error != B_OK)
67		return error;
68	BReference<ValueFormatter> formatterReference(formatter, true);
69
70	// create the renderer
71	TableCellValueRenderer* renderer
72		= new(std::nothrow) TableCellFormattedValueRenderer(formatter);
73	if (renderer == NULL)
74		return B_NO_MEMORY;
75
76	_renderer = renderer;
77	return B_OK;
78}
79
80
81status_t
82FloatValueHandler::GetTableCellValueEditor(Value* _value, Settings* settings,
83	TableCellValueEditor*& _editor)
84{
85	FloatValue* value = dynamic_cast<FloatValue*>(_value);
86	if (value == NULL)
87		return B_BAD_VALUE;
88
89	ValueFormatter* formatter;
90	status_t error = GetValueFormatter(value, formatter);
91	if (error != B_OK)
92		return error;
93	BReference<ValueFormatter> formatterReference(formatter, true);
94
95	TableCellFloatEditor* editor = new(std::nothrow)
96		TableCellFloatEditor(value, formatter);
97	if (editor == NULL)
98		return B_NO_MEMORY;
99
100	BReference<TableCellFloatEditor> editorReference(editor, true);
101	error = editor->Init();
102	if (error != B_OK)
103		return error;
104
105	editorReference.Detach();
106	_editor = editor;
107	return B_OK;
108}
109