xref: /haiku/src/tests/kits/interface/TextViewTestManual.cpp (revision 83aa7d63a5e9945787fa19c83765fb5eaf0f2437)
1 /*
2  * Copyright 2009, Oliver Tappe, zooey@hirschkaefer.de. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <Application.h>
8 #include <Button.h>
9 #include <ControlLook.h>
10 #include <GroupLayout.h>
11 #include <GroupLayoutBuilder.h>
12 #include <ScrollView.h>
13 #include <String.h>
14 #include <TextControl.h>
15 #include <TextView.h>
16 #include <Window.h>
17 
18 #include <stdio.h>
19 
20 
21 const static uint32 kMsgAlignLeft = 'alle';
22 const static uint32 kMsgAlignCenter = 'alce';
23 const static uint32 kMsgAlignRight = 'alri';
24 
25 
26 class Window : public BWindow {
27 	public:
28 		Window();
29 
30 		virtual bool QuitRequested();
31 		virtual void MessageReceived(BMessage *message);
32 
33 	private:
34 		BTextControl* fTextControl;
35 		BTextView* fTextView;
36 };
37 
38 
39 //	#pragma mark -
40 
41 
Window()42 Window::Window()
43 	: BWindow(BRect(100, 100, 800, 500), "TextView-Test",
44 			B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS)
45 {
46 	fTextControl = new BTextControl("text-contr-O",
47 		"a single line of text - (c) Conglom-O", NULL);
48 
49 	BMessage storage;
50 	fTextControl->Archive(&storage);
51 
52 	BTextControl* unarchived = new BTextControl(&storage);
53 
54 	BTextControl* disabled = new BTextControl("disabled",
55 		"I'm disabled: you can't edit me", NULL);
56 	disabled->SetEnabled(false);
57 	BTextControl* invalid = new BTextControl("invalid",
58 		"I'm invalid: my border is red", NULL);
59 	invalid->MarkAsInvalid(true);
60 
61 	fTextView = new BTextView("text-O");
62 	BScrollView* scrollView = new BScrollView("scroll-O", fTextView, 0, true,
63 		true, B_FANCY_BORDER);
64 
65 	SetLayout(new BGroupLayout(B_HORIZONTAL));
66 	AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
67 		.Add(fTextControl)
68 		.Add(unarchived)
69 		.Add(disabled)
70 		.Add(invalid)
71 		.Add(scrollView)
72 		.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
73 			.Add(new BButton("Align Left", new BMessage(kMsgAlignLeft)))
74 			.AddGlue()
75 			.Add(new BButton("Align Center", new BMessage(kMsgAlignCenter)))
76 			.AddGlue()
77 			.Add(new BButton("Align Right", new BMessage(kMsgAlignRight)))
78 		)
79 		.SetInsets(5, 5, 5, 5)
80 	);
81 
82 	// generate some lines of content
83 	const int32 kLineCount = 10;
84 	const int32 kLineNoSize = 6;
85 	BString line = ": just some text here - nothing special to see\n";
86 	BString format = BString("%*d") << line;
87 	BString content;
88 	int32 lineLength = line.Length() + kLineNoSize;
89 	int32 contentLength = lineLength * kLineCount;
90 	char* currLine = content.LockBuffer(contentLength);
91 	if (currLine) {
92 		int32 lineNo = 0;
93 		for ( ; lineNo < kLineCount; currLine += lineLength)
94 			sprintf(currLine, format.String(), kLineNoSize, lineNo++);
95 		content.UnlockBuffer(contentLength);
96 	}
97 	fTextView->SetInsets(2,2,2,2);
98 	fTextView->SetText(content.String());
99 }
100 
101 
102 bool
QuitRequested()103 Window::QuitRequested()
104 {
105 	be_app->PostMessage(B_QUIT_REQUESTED);
106 	return true;
107 }
108 
109 
110 void
MessageReceived(BMessage * message)111 Window::MessageReceived(BMessage *message)
112 {
113 	switch (message->what) {
114 		case kMsgAlignLeft:
115 			fTextControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_LEFT);
116 			fTextView->SetAlignment(B_ALIGN_LEFT);
117 			break;
118 
119 		case kMsgAlignCenter:
120 			fTextControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_CENTER);
121 			fTextView->SetAlignment(B_ALIGN_CENTER);
122 			break;
123 
124 		case kMsgAlignRight:
125 			fTextControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_RIGHT);
126 			fTextView->SetAlignment(B_ALIGN_RIGHT);
127 			break;
128 
129 		default:
130 			BWindow::MessageReceived(message);
131 			break;
132 	}
133 }
134 
135 
136 //	#pragma mark -
137 
138 
139 class Application : public BApplication {
140 	public:
141 		Application();
142 
143 		virtual void ReadyToRun(void);
144 };
145 
146 
Application()147 Application::Application()
148 	: BApplication("application/x-vnd.haiku-test")
149 {
150 }
151 
152 
153 void
ReadyToRun(void)154 Application::ReadyToRun(void)
155 {
156 	BWindow *window = new Window();
157 	window->Show();
158 }
159 
160 
161 //	#pragma mark -
162 
163 
164 int
main(int argc,char ** argv)165 main(int argc, char **argv)
166 {
167 	Application app;
168 
169 	app.Run();
170 	return 0;
171 }
172 
173