* Copyright 2009, Oliver Tappe, zooey@hirschkaefer.de. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <Application.h>
#include <Button.h>
#include <ControlLook.h>
#include <GroupLayout.h>
#include <GroupLayoutBuilder.h>
#include <ScrollView.h>
#include <String.h>
#include <TextControl.h>
#include <TextView.h>
#include <Window.h>
#include <stdio.h>
const static uint32 kMsgAlignLeft = 'alle';
const static uint32 kMsgAlignCenter = 'alce';
const static uint32 kMsgAlignRight = 'alri';
class Window : public BWindow {
public:
Window();
virtual bool QuitRequested();
virtual void MessageReceived(BMessage *message);
private:
BTextControl* fTextControl;
BTextView* fTextView;
};
Window::Window()
: BWindow(BRect(100, 100, 800, 500), "TextView-Test",
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS)
{
fTextControl = new BTextControl("text-contr-O",
"a single line of text - (c) Conglom-O", NULL);
BMessage storage;
fTextControl->Archive(&storage);
BTextControl* unarchived = new BTextControl(&storage);
BTextControl* disabled = new BTextControl("disabled",
"I'm disabled: you can't edit me", NULL);
disabled->SetEnabled(false);
BTextControl* invalid = new BTextControl("invalid",
"I'm invalid: my border is red", NULL);
invalid->MarkAsInvalid(true);
fTextView = new BTextView("text-O");
BScrollView* scrollView = new BScrollView("scroll-O", fTextView, 0, true,
true, B_FANCY_BORDER);
SetLayout(new BGroupLayout(B_HORIZONTAL));
AddChild(BGroupLayoutBuilder(B_VERTICAL, 10)
.Add(fTextControl)
.Add(unarchived)
.Add(disabled)
.Add(invalid)
.Add(scrollView)
.Add(BGroupLayoutBuilder(B_HORIZONTAL, 10)
.Add(new BButton("Align Left", new BMessage(kMsgAlignLeft)))
.AddGlue()
.Add(new BButton("Align Center", new BMessage(kMsgAlignCenter)))
.AddGlue()
.Add(new BButton("Align Right", new BMessage(kMsgAlignRight)))
)
.SetInsets(5, 5, 5, 5)
);
const int32 kLineCount = 10;
const int32 kLineNoSize = 6;
BString line = ": just some text here - nothing special to see\n";
BString format = BString("%*d") << line;
BString content;
int32 lineLength = line.Length() + kLineNoSize;
int32 contentLength = lineLength * kLineCount;
char* currLine = content.LockBuffer(contentLength);
if (currLine) {
int32 lineNo = 0;
for ( ; lineNo < kLineCount; currLine += lineLength)
sprintf(currLine, format.String(), kLineNoSize, lineNo++);
content.UnlockBuffer(contentLength);
}
fTextView->SetInsets(2,2,2,2);
fTextView->SetText(content.String());
}
bool
Window::QuitRequested()
{
be_app->PostMessage(B_QUIT_REQUESTED);
return true;
}
void
Window::MessageReceived(BMessage *message)
{
switch (message->what) {
case kMsgAlignLeft:
fTextControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_LEFT);
fTextView->SetAlignment(B_ALIGN_LEFT);
break;
case kMsgAlignCenter:
fTextControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_CENTER);
fTextView->SetAlignment(B_ALIGN_CENTER);
break;
case kMsgAlignRight:
fTextControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_RIGHT);
fTextView->SetAlignment(B_ALIGN_RIGHT);
break;
default:
BWindow::MessageReceived(message);
break;
}
}
class Application : public BApplication {
public:
Application();
virtual void ReadyToRun(void);
};
Application::Application()
: BApplication("application/x-vnd.haiku-test")
{
}
void
Application::ReadyToRun(void)
{
BWindow *window = new Window();
window->Show();
}
int
main(int argc, char **argv)
{
Application app;
app.Run();
return 0;
}