xref: /haiku/src/apps/packageinstaller/main.cpp (revision 4eb0cbb044cf538f18c0d252934a5bcaa33bfd34)
144f919daSRyan Leavengood /*
27974d3dcSStephan Aßmus  * Copyright (c) 2007-2009, Haiku, Inc. All rights reserved.
344f919daSRyan Leavengood  * Distributed under the terms of the MIT license.
444f919daSRyan Leavengood  *
544f919daSRyan Leavengood  * Author:
644f919daSRyan Leavengood  *		Łukasz 'Sil2100' Zemczak <sil2100@vexillium.org>
744f919daSRyan Leavengood  */
844f919daSRyan Leavengood 
944f919daSRyan Leavengood 
1044f919daSRyan Leavengood #include "PackageWindow.h"
1144f919daSRyan Leavengood 
12091440e0SStephan Aßmus #include <Alert.h>
1344f919daSRyan Leavengood #include <Application.h>
14091440e0SStephan Aßmus #include <Autolock.h>
15091440e0SStephan Aßmus #include <Catalog.h>
16091440e0SStephan Aßmus #include <Entry.h>
1744f919daSRyan Leavengood #include <FilePanel.h>
1844f919daSRyan Leavengood #include <List.h>
19091440e0SStephan Aßmus #include <Locale.h>
2044f919daSRyan Leavengood #include <TextView.h>
21091440e0SStephan Aßmus 
2244f919daSRyan Leavengood #include <stdio.h>
2344f919daSRyan Leavengood 
24*4eb0cbb0SMatt Madia #undef B_TRANSLATE_CONTEXT
25*4eb0cbb0SMatt Madia #define B_TRANSLATE_CONTEXT "Packageinstaller main"
2644f919daSRyan Leavengood 
2744f919daSRyan Leavengood class PackageInstaller : public BApplication {
2844f919daSRyan Leavengood 	public:
2944f919daSRyan Leavengood 		PackageInstaller();
3044f919daSRyan Leavengood 		~PackageInstaller();
3144f919daSRyan Leavengood 
3244f919daSRyan Leavengood 		void RefsReceived(BMessage *msg);
3344f919daSRyan Leavengood 		void ArgvReceived(int32 argc, char **argv);
3444f919daSRyan Leavengood 		void ReadyToRun();
3544f919daSRyan Leavengood 
3644f919daSRyan Leavengood 		void MessageReceived(BMessage *msg);
3744f919daSRyan Leavengood 
3844f919daSRyan Leavengood 		void AboutRequested();
3944f919daSRyan Leavengood 
4044f919daSRyan Leavengood 	private:
4144f919daSRyan Leavengood 		BFilePanel	*fOpen;
4244f919daSRyan Leavengood 		uint32		fWindowCount;
43091440e0SStephan Aßmus 		BCatalog	fAppCatalog;
4444f919daSRyan Leavengood };
4544f919daSRyan Leavengood 
4644f919daSRyan Leavengood 
4744f919daSRyan Leavengood PackageInstaller::PackageInstaller()
4844f919daSRyan Leavengood 	:	BApplication("application/x-vnd.Haiku-PackageInstaller"),
49091440e0SStephan Aßmus 	fOpen(NULL),
50091440e0SStephan Aßmus 	fWindowCount(0),
51091440e0SStephan Aßmus 	fAppCatalog(NULL)
5244f919daSRyan Leavengood {
5344f919daSRyan Leavengood 	fOpen = new BFilePanel(B_OPEN_PANEL);
54091440e0SStephan Aßmus 	be_locale->GetAppCatalog(&fAppCatalog);
5544f919daSRyan Leavengood }
5644f919daSRyan Leavengood 
5744f919daSRyan Leavengood 
5844f919daSRyan Leavengood PackageInstaller::~PackageInstaller()
5944f919daSRyan Leavengood {
6044f919daSRyan Leavengood }
6144f919daSRyan Leavengood 
6244f919daSRyan Leavengood 
6344f919daSRyan Leavengood void
6444f919daSRyan Leavengood PackageInstaller::ReadyToRun()
6544f919daSRyan Leavengood {
6644f919daSRyan Leavengood 	// We're ready to run - if no windows are yet visible, this means that
6744f919daSRyan Leavengood 	// we should show a open panel
6844f919daSRyan Leavengood 	if (fWindowCount == 0) {
6944f919daSRyan Leavengood 		fOpen->Show();
7044f919daSRyan Leavengood 	}
7144f919daSRyan Leavengood }
7244f919daSRyan Leavengood 
7344f919daSRyan Leavengood 
7444f919daSRyan Leavengood void
7544f919daSRyan Leavengood PackageInstaller::RefsReceived(BMessage *msg)
7644f919daSRyan Leavengood {
7744f919daSRyan Leavengood 	uint32 type;
7844f919daSRyan Leavengood 	int32 i, count;
7944f919daSRyan Leavengood 	status_t ret = msg->GetInfo("refs", &type, &count);
8044f919daSRyan Leavengood 	if (ret != B_OK || type != B_REF_TYPE)
8144f919daSRyan Leavengood 		return;
8244f919daSRyan Leavengood 
8344f919daSRyan Leavengood 	entry_ref ref;
8444f919daSRyan Leavengood 	PackageWindow *iter;
8544f919daSRyan Leavengood 	for (i = 0; i < count; i++) {
8644f919daSRyan Leavengood 		if (msg->FindRef("refs", i, &ref) == B_OK) {
8744f919daSRyan Leavengood 			iter = new PackageWindow(&ref);
8844f919daSRyan Leavengood 			fWindowCount++;
8944f919daSRyan Leavengood 			iter->Show();
9044f919daSRyan Leavengood 		}
9144f919daSRyan Leavengood 	}
9244f919daSRyan Leavengood }
9344f919daSRyan Leavengood 
9444f919daSRyan Leavengood 
9544f919daSRyan Leavengood void
9644f919daSRyan Leavengood PackageInstaller::ArgvReceived(int32 argc, char **argv)
9744f919daSRyan Leavengood {
9844f919daSRyan Leavengood 	int i;
9944f919daSRyan Leavengood 	BPath path;
10044f919daSRyan Leavengood 	entry_ref ref;
10144f919daSRyan Leavengood 	status_t ret = B_OK;
10244f919daSRyan Leavengood 	PackageWindow *iter = 0;
10344f919daSRyan Leavengood 
10444f919daSRyan Leavengood 	for (i = 1; i < argc; i++) {
10544f919daSRyan Leavengood 		if (path.SetTo(argv[i]) != B_OK) {
106eef95624SMatt Madia 			fprintf(stderr,
107eef95624SMatt Madia 					B_TRANSLATE("Error! \"%s\" is not a valid path.\n"),
108eef95624SMatt Madia 					argv[i]);
10944f919daSRyan Leavengood 			continue;
11044f919daSRyan Leavengood 		}
11144f919daSRyan Leavengood 
11244f919daSRyan Leavengood 		ret = get_ref_for_path(path.Path(), &ref);
11344f919daSRyan Leavengood 		if (ret != B_OK) {
114eef95624SMatt Madia 			fprintf(stderr,
115eef95624SMatt Madia 					B_TRANSLATE("Error (%s)! Could not open \"%s\".\n"),
116eef95624SMatt Madia 					strerror(ret), argv[i]);
11744f919daSRyan Leavengood 			continue;
11844f919daSRyan Leavengood 		}
11944f919daSRyan Leavengood 
12044f919daSRyan Leavengood 		iter = new PackageWindow(&ref);
12144f919daSRyan Leavengood 		fWindowCount++;
12244f919daSRyan Leavengood 		iter->Show();
12344f919daSRyan Leavengood 	}
12444f919daSRyan Leavengood }
12544f919daSRyan Leavengood 
12644f919daSRyan Leavengood 
12744f919daSRyan Leavengood void
12844f919daSRyan Leavengood PackageInstaller::MessageReceived(BMessage *msg)
12944f919daSRyan Leavengood {
13044f919daSRyan Leavengood 	switch (msg->what) {
13144f919daSRyan Leavengood 		case P_WINDOW_QUIT:
13244f919daSRyan Leavengood 			fWindowCount--;
133b052daffSRyan Leavengood 		case B_CANCEL:
13444f919daSRyan Leavengood 			if (fWindowCount == 0) {
13544f919daSRyan Leavengood 				BAutolock lock(this);
13644f919daSRyan Leavengood 				if (lock.IsLocked())
13744f919daSRyan Leavengood 					Quit();
13844f919daSRyan Leavengood 			}
13944f919daSRyan Leavengood 			break;
14044f919daSRyan Leavengood 		default:
14144f919daSRyan Leavengood 			BApplication::MessageReceived(msg);
14244f919daSRyan Leavengood 	}
14344f919daSRyan Leavengood }
14444f919daSRyan Leavengood 
14544f919daSRyan Leavengood 
14644f919daSRyan Leavengood void
14744f919daSRyan Leavengood PackageInstaller::AboutRequested()
14844f919daSRyan Leavengood {
14944f919daSRyan Leavengood 	BAlert *about = new BAlert("about",
150eef95624SMatt Madia 		B_TRANSLATE("PackageInstaller\n"
15144f919daSRyan Leavengood 		"BeOS legacy .pkg file installer for Haiku.\n\n"
15244f919daSRyan Leavengood 		"Copyright 2007,\nŁukasz 'Sil2100' Zemczak\n\n"
153091440e0SStephan Aßmus 		"Copyright (c) 2007 Haiku, Inc. \n"),
154eef95624SMatt Madia 		B_TRANSLATE("OK"));
15544f919daSRyan Leavengood 
15644f919daSRyan Leavengood 	BTextView *view = about->TextView();
15744f919daSRyan Leavengood 	BFont font;
15844f919daSRyan Leavengood 	view->SetStylable(true);
15944f919daSRyan Leavengood 	view->GetFont(&font);
16044f919daSRyan Leavengood 	font.SetFace(B_BOLD_FACE);
16144f919daSRyan Leavengood 	font.SetSize(font.Size() * 1.5);
16244f919daSRyan Leavengood 	view->SetFontAndColor(0, 17, &font);
16344f919daSRyan Leavengood 
16444f919daSRyan Leavengood 	about->Go();
16544f919daSRyan Leavengood }
16644f919daSRyan Leavengood 
16744f919daSRyan Leavengood 
16844f919daSRyan Leavengood int
16944f919daSRyan Leavengood main(void)
17044f919daSRyan Leavengood {
17144f919daSRyan Leavengood 	PackageInstaller app;
17244f919daSRyan Leavengood 	app.Run();
17344f919daSRyan Leavengood 
17444f919daSRyan Leavengood 	return 0;
17544f919daSRyan Leavengood }
17644f919daSRyan Leavengood 
177