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