⛏️ index : haiku.git

#include <Application.h>
#include <Button.h>
#include <GroupLayout.h>
#include <GroupLayoutBuilder.h>
#include <ScrollView.h>
#include <View.h>
#include <Window.h>


class Window : public BWindow {
public:
		Window() : BWindow(BRect(100, 100, 300, 300), "", B_TITLED_WINDOW,
			B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS |
			B_AUTO_UPDATE_SIZE_LIMITS | B_QUIT_ON_WINDOW_CLOSE)
		{
			BGroupLayout* base = new BGroupLayout(B_HORIZONTAL);
			SetLayout(base);

			BView* view = new BView("", B_WILL_DRAW, NULL);
			view->SetViewColor(255, 0, 0, 255);
			view->SetExplicitMinSize(BSize(B_SIZE_UNSET, 200));

			fScrollView = new BScrollView("mit", view, B_NAVIGABLE_JUMP, true,
				true, B_NO_BORDER);

			BView* view2 = new BView(BRect(0, 0, 200, 200), "", B_FOLLOW_ALL,
				B_WILL_DRAW);
			view2->SetViewColor(255, 0, 0, 255);

			fScrollView2 = new BScrollView("ohne", view2, B_FOLLOW_ALL,
				B_NAVIGABLE_JUMP, true, true, B_NO_BORDER);

			BButton* one = new BButton("No Border", new BMessage('nobd'));
			BButton* two = new BButton("Plain Border", new BMessage('plbd'));
			BButton* three = new BButton("Fancy Border", new BMessage('fcbd'));

			base->AddView(BGroupLayoutBuilder(B_VERTICAL, 5.0)
				.Add(fScrollView)
				.Add(fScrollView2)
				.AddGroup(B_HORIZONTAL, 5.0)
					.Add(one)
					.Add(two)
					.Add(three)
				.End()
				.SetInsets(10.0, 10.0, 10.0, 10.0));

			PrintToStream();
		}

		void MessageReceived(BMessage* message)
		{
			switch(message->what) {
				case 'nobd':
					fScrollView->SetBorder(B_NO_BORDER);
					fScrollView2->SetBorder(B_NO_BORDER);

					PrintToStream();
					break;

				case 'plbd':
					fScrollView->SetBorder(B_PLAIN_BORDER);
					fScrollView2->SetBorder(B_PLAIN_BORDER);

					PrintToStream();
					break;

				case 'fcbd':
					fScrollView->SetBorder(B_FANCY_BORDER);
					fScrollView2->SetBorder(B_FANCY_BORDER);

					PrintToStream();
					break;

				default:
					BWindow::MessageReceived(message);
					break;
			}
		}

		void PrintToStream()
		{
			BView* view = fScrollView->Target();
			BView* view2 = fScrollView2->Target();

			view->Bounds().PrintToStream();
			view->Frame().PrintToStream();

			view2->Bounds().PrintToStream();
			view2->Frame().PrintToStream();
		}

private:
	BScrollView*	fScrollView;
	BScrollView*	fScrollView2;
};


class Application : public BApplication {
public:
			Application() : BApplication("application/x-vnd.scrollview") {}
			~Application() {}

	void	ReadyToRun()
	{
		Window* win = new Window();
		win->Show();
	}
};


int main(int argc, char* argv[])
{
	Application app;
	return app.Run();
}