1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "TableCellStringRenderer.h"
8
9#include <stdio.h>
10
11#include <String.h>
12
13#include "TableCellValueRendererUtils.h"
14#include "Value.h"
15
16
17void
18TableCellStringRenderer::RenderValue(Value* value, BRect rect,
19	BView* targetView)
20{
21	BString string = "\"";
22	BString tempString;
23	if (!value->ToString(tempString))
24		return;
25	for (int32 i = 0; i < tempString.Length(); i++) {
26		if (tempString[i] < 31) {
27			switch (tempString[i]) {
28				case '\0':
29					string << "\\0";
30					break;
31				case '\a':
32					string << "\\a";
33					break;
34				case '\b':
35					string << "\\b";
36					break;
37				case '\t':
38					string << "\\t";
39					break;
40				case '\r':
41					string << "\\r";
42					break;
43				case '\n':
44					string << "\\n";
45					break;
46				case '\f':
47					string << "\\f";
48					break;
49				default:
50				{
51					char buffer[5];
52					snprintf(buffer, sizeof(buffer), "\\x%x",
53						tempString.String()[i]);
54					string << buffer;
55					break;
56				}
57			}
58		} else if (tempString[i] == '\"')
59			string << "\\\"";
60		else
61			string << tempString[i];
62	}
63
64	string += "\"";
65
66	TableCellValueRendererUtils::DrawString(targetView, rect, string,
67		B_ALIGN_RIGHT, true);
68}
69
70
71float
72TableCellStringRenderer::PreferredValueWidth(Value* value, BView* targetView)
73{
74	BString string;
75	if (!value->ToString(string))
76		return 0;
77
78	return TableCellValueRendererUtils::PreferredStringWidth(targetView,
79		string);
80}
81