1#include <stdio.h>
2#include <SupportDefs.h>
3
4#include <Application.h>
5#include <String.h>
6#include <View.h>
7#include <Window.h>
8
9
10class TruncateView : public BView {
11public:
12	TruncateView(BRect frame)
13		:	BView(frame, "TruncateView", B_FOLLOW_ALL, B_WILL_DRAW)
14	{
15	}
16
17	void Draw(BRect updateRect)
18	{
19		const float kSpacing = 20.0;
20		const float kTopOffset = kSpacing + 5;
21		const uint32 kTruncateModes[]
22			= { B_TRUNCATE_BEGINNING, B_TRUNCATE_MIDDLE, B_TRUNCATE_END };
23		const uint32 kTruncateModeCount
24			= sizeof(kTruncateModes) / sizeof(kTruncateModes[0]);
25
26		BString theString("ö&ä|ü-é#");
27		BPoint point(10, kTopOffset);
28		BString truncated;
29		for (float length = 5; length < 65; length += 3) {
30			SetHighColor(255, 0, 0);
31			StrokeRect(BRect(point.x, point.y - kSpacing, point.x + length,
32				point.y + kSpacing * kTruncateModeCount));
33			SetHighColor(0, 0, 0);
34
35			for (uint32 i = 0; i < kTruncateModeCount; i++) {
36				truncated = theString;
37				TruncateString(&truncated, kTruncateModes[i], length);
38				DrawString(truncated.String(), point);
39				point.y += kSpacing;
40			}
41
42			point.x += length + kSpacing;
43			point.y = kTopOffset;
44		}
45	}
46};
47
48
49int
50main(int argc, char *argv[])
51{
52	BApplication app("application/x-vnd.Haiku-TruncateString");
53
54	BRect frame(100, 200, 1200, 300);
55	BWindow *window = new BWindow(frame, "TruncateString", B_TITLED_WINDOW,
56		B_QUIT_ON_WINDOW_CLOSE);
57
58	TruncateView *view = new TruncateView(frame.OffsetToSelf(0, 0));
59	window->AddChild(view);
60
61	window->Show();
62	app.Run();
63	return 0;
64}
65