12ec6b3cfSWim van der Meer/*
22ec6b3cfSWim van der Meer * Copyright 2010 Wim van der Meer <WPJvanderMeer@gmail.com>
32ec6b3cfSWim van der Meer * All rights reserved. Distributed under the terms of the MIT license.
42ec6b3cfSWim van der Meer *
52ec6b3cfSWim van der Meer * Authors:
62ec6b3cfSWim van der Meer *		Wim van der Meer
72ec6b3cfSWim van der Meer */
82ec6b3cfSWim van der Meer
92ec6b3cfSWim van der Meer
102ec6b3cfSWim van der Meer#include "ScreenshotApp.h"
112ec6b3cfSWim van der Meer
122ec6b3cfSWim van der Meer#include <stdlib.h>
132ec6b3cfSWim van der Meer
142ec6b3cfSWim van der Meer#include <Bitmap.h>
150c9f5a02SWim van der Meer#include <Catalog.h>
162ec6b3cfSWim van der Meer#include <Locale.h>
172ec6b3cfSWim van der Meer#include <Roster.h>
182ec6b3cfSWim van der Meer
192ec6b3cfSWim van der Meer#include "ScreenshotWindow.h"
202ec6b3cfSWim van der Meer#include "Utility.h"
212ec6b3cfSWim van der Meer
222ec6b3cfSWim van der Meer
232ec6b3cfSWim van der MeerScreenshotApp::ScreenshotApp()
242ec6b3cfSWim van der Meer	:
253417d2a9SWim van der Meer	BApplication("application/x-vnd.haiku-screenshot"),
260c9f5a02SWim van der Meer	fUtility(new Utility),
270c9f5a02SWim van der Meer	fSilent(false),
280c9f5a02SWim van der Meer	fClipboard(false)
292ec6b3cfSWim van der Meer{
302ec6b3cfSWim van der Meer}
312ec6b3cfSWim van der Meer
322ec6b3cfSWim van der Meer
332ec6b3cfSWim van der MeerScreenshotApp::~ScreenshotApp()
342ec6b3cfSWim van der Meer{
352ec6b3cfSWim van der Meer	delete fUtility;
362ec6b3cfSWim van der Meer}
372ec6b3cfSWim van der Meer
382ec6b3cfSWim van der Meer
392ec6b3cfSWim van der Meervoid
402ec6b3cfSWim van der MeerScreenshotApp::MessageReceived(BMessage* message)
412ec6b3cfSWim van der Meer{
422ec6b3cfSWim van der Meer	status_t status = B_OK;
432ec6b3cfSWim van der Meer	switch (message->what) {
442ec6b3cfSWim van der Meer		case SS_UTILITY_DATA:
452ec6b3cfSWim van der Meer		{
462ec6b3cfSWim van der Meer			BMessage bitmap;
472ec6b3cfSWim van der Meer			status = message->FindMessage("wholeScreen", &bitmap);
482ec6b3cfSWim van der Meer			if (status != B_OK)
492ec6b3cfSWim van der Meer				break;
502ec6b3cfSWim van der Meer
512ec6b3cfSWim van der Meer			fUtility->wholeScreen = new BBitmap(&bitmap);
522ec6b3cfSWim van der Meer
532ec6b3cfSWim van der Meer			status = message->FindMessage("cursorBitmap", &bitmap);
542ec6b3cfSWim van der Meer			if (status != B_OK)
552ec6b3cfSWim van der Meer				break;
562ec6b3cfSWim van der Meer
572ec6b3cfSWim van der Meer			fUtility->cursorBitmap = new BBitmap(&bitmap);
582ec6b3cfSWim van der Meer
592ec6b3cfSWim van der Meer			status = message->FindMessage("cursorAreaBitmap", &bitmap);
602ec6b3cfSWim van der Meer			if (status != B_OK)
612ec6b3cfSWim van der Meer				break;
622ec6b3cfSWim van der Meer
632ec6b3cfSWim van der Meer			fUtility->cursorAreaBitmap = new BBitmap(&bitmap);
642ec6b3cfSWim van der Meer
652ec6b3cfSWim van der Meer			status = message->FindPoint("cursorPosition",
662ec6b3cfSWim van der Meer				&fUtility->cursorPosition);
672ec6b3cfSWim van der Meer			if (status != B_OK)
682ec6b3cfSWim van der Meer				break;
692ec6b3cfSWim van der Meer
702ec6b3cfSWim van der Meer			status = message->FindRect("activeWindowFrame",
712ec6b3cfSWim van der Meer				&fUtility->activeWindowFrame);
722ec6b3cfSWim van der Meer			if (status != B_OK)
732ec6b3cfSWim van der Meer				break;
742ec6b3cfSWim van der Meer
752ec6b3cfSWim van der Meer			status = message->FindRect("tabFrame", &fUtility->tabFrame);
762ec6b3cfSWim van der Meer			if (status != B_OK)
772ec6b3cfSWim van der Meer				break;
782ec6b3cfSWim van der Meer
792ec6b3cfSWim van der Meer			status = message->FindFloat("borderSize", &fUtility->borderSize);
802ec6b3cfSWim van der Meer			if (status != B_OK)
812ec6b3cfSWim van der Meer				break;
822ec6b3cfSWim van der Meer
832ec6b3cfSWim van der Meer			break;
842ec6b3cfSWim van der Meer		}
852ec6b3cfSWim van der Meer
862ec6b3cfSWim van der Meer		default:
872ec6b3cfSWim van der Meer			BApplication::MessageReceived(message);
882ec6b3cfSWim van der Meer			break;
892ec6b3cfSWim van der Meer	}
90d0ac6099SHumdinger
912ec6b3cfSWim van der Meer	if (status != B_OK)
922ec6b3cfSWim van der Meer		be_app->PostMessage(B_QUIT_REQUESTED);
932ec6b3cfSWim van der Meer}
942ec6b3cfSWim van der Meer
952ec6b3cfSWim van der Meer
960c9f5a02SWim van der Meervoid
970c9f5a02SWim van der MeerScreenshotApp::ArgvReceived(int32 argc, char** argv)
980c9f5a02SWim van der Meer{
990c9f5a02SWim van der Meer	for (int32 i = 0; i < argc; i++) {
100d0ac6099SHumdinger		if (strcmp(argv[i], "-s") == 0
1010c9f5a02SWim van der Meer			|| strcmp(argv[i], "--silent") == 0)
1020c9f5a02SWim van der Meer			fSilent = true;
103d0ac6099SHumdinger		else if (strcmp(argv[i], "-c") == 0
1040c9f5a02SWim van der Meer			|| strcmp(argv[i], "--clipboard") == 0)
105d0ac6099SHumdinger			fClipboard = true;
1060c9f5a02SWim van der Meer	}
1070c9f5a02SWim van der Meer}
1080c9f5a02SWim van der Meer
1090c9f5a02SWim van der Meer
1102ec6b3cfSWim van der Meervoid
1112ec6b3cfSWim van der MeerScreenshotApp::ReadyToRun()
1122ec6b3cfSWim van der Meer{
1130c9f5a02SWim van der Meer	new ScreenshotWindow(*fUtility, fSilent, fClipboard);
1142ec6b3cfSWim van der Meer}
1152ec6b3cfSWim van der Meer
1162ec6b3cfSWim van der Meer
1172ec6b3cfSWim van der Meerint
1182ec6b3cfSWim van der Meermain()
1192ec6b3cfSWim van der Meer{
1202ec6b3cfSWim van der Meer	ScreenshotApp app;
1212ec6b3cfSWim van der Meer	return app.Run();
1222ec6b3cfSWim van der Meer}
123