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