/* * Copyright 2000, Georges-Edouard Berenger. All rights reserved. * Distributed under the terms of the MIT License. */ #include "PCWorld.h" #include "PCWindow.h" #include "Preferences.h" #include "ProcessController.h" #include "Utilities.h" #include #include #include #include #include #include #include #include #include #include #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "ProcessController" class PCApplication : public BApplication { public: PCApplication(); virtual ~PCApplication(); virtual void ReadyToRun(); virtual void ArgvReceived(int32 argc, char** argv); }; const char* kSignature = "application/x-vnd.Haiku-ProcessController"; const char* kTrackerSig = "application/x-vnd.Be-TRAK"; const char* kDeskbarSig = "application/x-vnd.Be-TSKB"; const char* kTerminalSig = "application/x-vnd.Haiku-Terminal"; const char* kPreferencesFileName = "ProcessController Prefs"; const char* kPosPrefName = "Position"; const char* kVersionName = "Version"; const int kCurrentVersion = 311; thread_id id = 0; PCApplication::PCApplication() : BApplication(kSignature) { } PCApplication::~PCApplication() { if (id) { status_t returnValue; wait_for_thread(id, &returnValue); } } void PCApplication::ReadyToRun() { BDeskbar deskbar; if (!deskbar.HasItem(kDeskbarItemName)) { // We're not yet installed in the Deskbar, ask if we should BAlert* alert = new BAlert(B_TRANSLATE("Info"), B_TRANSLATE("You can run ProcessController in a window" " or install it in the Deskbar."), B_TRANSLATE("Run in window"), B_TRANSLATE("Install in Deskbar"), NULL, B_WIDTH_AS_USUAL, B_WARNING_ALERT); if (alert->Go() != 0) { BDeskbar deskbar; if (!deskbar.HasItem(kDeskbarItemName)) move_to_deskbar(deskbar); Quit(); return; } } else { BAlert* alert = new BAlert(B_TRANSLATE("Info"), B_TRANSLATE("ProcessController is already installed in Deskbar."), B_TRANSLATE("OK"), NULL, NULL, B_WIDTH_AS_USUAL, B_WARNING_ALERT); alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); alert->Go(); } new PCWindow(); // quit other eventually running instances BList list; be_roster->GetAppList(kSignature, &list); int32 count = list.CountItems(); if (count > 1) { for (int32 i = 0; i < count - 1; i++) { BMessenger otherme(NULL, (addr_t)list.ItemAt(i)); otherme.SendMessage(B_QUIT_REQUESTED); } } } void PCApplication::ArgvReceived(int32 argc, char **argv) { if (argc == 2 && strcmp(argv[1], "-desktop-reset") == 0) { team_id tracker = be_roster->TeamFor(kTrackerSig); if (tracker >= 0) { BMessenger messenger(NULL, tracker); messenger.SendMessage(B_QUIT_REQUESTED); int k = 500; do { snooze(10000); } while (be_roster->IsRunning(kTrackerSig) && k-- > 0); } BPath shelfPath; if (find_directory(B_USER_SETTINGS_DIRECTORY, &shelfPath) == B_OK && shelfPath.Append("Tracker/tracker_shelf") == B_OK) { remove(shelfPath.Path()); } BPath trackerPath; if (find_directory(B_SYSTEM_DIRECTORY, &trackerPath) == B_OK && trackerPath.Append("Tracker") == B_OK) { launch(kTrackerSig, trackerPath.Path()); } } else if (argc == 2 && strcmp(argv[1], "-deskbar") == 0) { BDeskbar deskbar; if (!gInDeskbar && !deskbar.HasItem(kDeskbarItemName)) move_to_deskbar(deskbar); } else if (argc > 1) { // print a simple usage string printf(B_TRANSLATE("Usage: %s [-deskbar]\n"), argv[0]); puts(B_TRANSLATE("(c) 1996-2001 Georges-Edouard Berenger, " "berenger@francenet.fr")); } Quit(); } // #pragma mark - int main() { PCApplication application; application.Run(); return B_OK; }