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