1ed7a3501SAxel Dörfler /* 2ed7a3501SAxel Dörfler PCWorld.cpp 3ed7a3501SAxel Dörfler 4e2940ab6SAxel Dörfler ProcessController © 2000, Georges-Edouard Berenger, All Rights Reserved. 5ed7a3501SAxel Dörfler Copyright (C) 2004 beunited.org 6ed7a3501SAxel Dörfler 7ed7a3501SAxel Dörfler This library is free software; you can redistribute it and/or 8ed7a3501SAxel Dörfler modify it under the terms of the GNU Lesser General Public 9ed7a3501SAxel Dörfler License as published by the Free Software Foundation; either 10ed7a3501SAxel Dörfler version 2.1 of the License, or (at your option) any later version. 11ed7a3501SAxel Dörfler 12ed7a3501SAxel Dörfler This library is distributed in the hope that it will be useful, 13ed7a3501SAxel Dörfler but WITHOUT ANY WARRANTY; without even the implied warranty of 14ed7a3501SAxel Dörfler MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15ed7a3501SAxel Dörfler Lesser General Public License for more details. 16ed7a3501SAxel Dörfler 17ed7a3501SAxel Dörfler You should have received a copy of the GNU Lesser General Public 18ed7a3501SAxel Dörfler License along with this library; if not, write to the Free Software 19ed7a3501SAxel Dörfler Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20ed7a3501SAxel Dörfler */ 21ed7a3501SAxel Dörfler 22e2940ab6SAxel Dörfler 23ed7a3501SAxel Dörfler #include "PCWorld.h" 24ed7a3501SAxel Dörfler #include "PCWindow.h" 25a12827f2SAxel Dörfler #include "Preferences.h" 26a12827f2SAxel Dörfler #include "ProcessController.h" 27a12827f2SAxel Dörfler #include "Utilities.h" 28e2940ab6SAxel Dörfler 29a12827f2SAxel Dörfler #include <Alert.h> 30a12827f2SAxel Dörfler #include <Application.h> 3195fcf739SAdrien Destugues #include <Catalog.h> 32ed7a3501SAxel Dörfler #include <Deskbar.h> 33323b6546SOliver Tappe #include <FindDirectory.h> 34323b6546SOliver Tappe #include <Path.h> 35a12827f2SAxel Dörfler #include <Roster.h> 36ed7a3501SAxel Dörfler 37e2940ab6SAxel Dörfler #include <stdio.h> 38e2940ab6SAxel Dörfler #include <stdlib.h> 3989f088e0SIthamar R. Adema #include <string.h> 40a12827f2SAxel Dörfler 41dd9740daSAxel Dörfler 42*546208a5SOliver Tappe #undef B_TRANSLATION_CONTEXT 43*546208a5SOliver Tappe #define B_TRANSLATION_CONTEXT "ProcessController" 4495fcf739SAdrien Destugues 4595fcf739SAdrien Destugues 46a12827f2SAxel Dörfler class PCApplication : public BApplication { 47a12827f2SAxel Dörfler public: 48a12827f2SAxel Dörfler PCApplication(); 49a12827f2SAxel Dörfler virtual ~PCApplication(); 50a12827f2SAxel Dörfler 51a12827f2SAxel Dörfler virtual void ReadyToRun(); 52a12827f2SAxel Dörfler virtual void ArgvReceived(int32 argc, char** argv); 53a12827f2SAxel Dörfler }; 54a12827f2SAxel Dörfler 55a12827f2SAxel Dörfler 56f3f9e93aSRyan Leavengood const char* kSignature = "application/x-vnd.Haiku-ProcessController"; 57ed7a3501SAxel Dörfler const char* kTrackerSig = "application/x-vnd.Be-TRAK"; 58ed7a3501SAxel Dörfler const char* kDeskbarSig = "application/x-vnd.Be-TSKB"; 59e2940ab6SAxel Dörfler const char* kTerminalSig = "application/x-vnd.Haiku-Terminal"; 602dfee1f7SSiarzhuk Zharski const char* kPreferencesFileName = "ProcessController Prefs"; 61ed7a3501SAxel Dörfler 622dfee1f7SSiarzhuk Zharski const char* kPosPrefName = "Position"; 632dfee1f7SSiarzhuk Zharski const char* kVersionName = "Version"; 64a12827f2SAxel Dörfler const int kCurrentVersion = 311; 65e2940ab6SAxel Dörfler 66ed7a3501SAxel Dörfler thread_id id = 0; 67ed7a3501SAxel Dörfler 68ed7a3501SAxel Dörfler 69e2940ab6SAxel Dörfler PCApplication::PCApplication() 70dd9740daSAxel Dörfler : 71dd9740daSAxel Dörfler BApplication(kSignature) 72ed7a3501SAxel Dörfler { 73ed7a3501SAxel Dörfler } 74ed7a3501SAxel Dörfler 75e2940ab6SAxel Dörfler 76ed7a3501SAxel Dörfler PCApplication::~PCApplication() 77ed7a3501SAxel Dörfler { 78ed7a3501SAxel Dörfler if (id) { 79e2940ab6SAxel Dörfler status_t returnValue; 80e2940ab6SAxel Dörfler wait_for_thread(id, &returnValue); 81ed7a3501SAxel Dörfler } 82ed7a3501SAxel Dörfler } 83ed7a3501SAxel Dörfler 84e2940ab6SAxel Dörfler 85e2940ab6SAxel Dörfler void 86e2940ab6SAxel Dörfler PCApplication::ReadyToRun() 87ed7a3501SAxel Dörfler { 88a12827f2SAxel Dörfler BDeskbar deskbar; 89dd9740daSAxel Dörfler if (!deskbar.HasItem(kDeskbarItemName)) { 90dd9740daSAxel Dörfler // We're not yet installed in the Deskbar, ask if we should 9180cdaa81SSiarzhuk Zharski BAlert* alert = new BAlert(B_TRANSLATE("Info"), 9282116426SJoachim Seemer B_TRANSLATE("You can run ProcessController in a window" 9395fcf739SAdrien Destugues " or install it in the Deskbar."), B_TRANSLATE("Run in window"), 9495fcf739SAdrien Destugues B_TRANSLATE("Install in Deskbar"), 9595fcf739SAdrien Destugues NULL, B_WIDTH_AS_USUAL, B_WARNING_ALERT); 96dd9740daSAxel Dörfler alert->SetShortcut(0, B_ESCAPE); 97dd9740daSAxel Dörfler 98dd9740daSAxel Dörfler if (alert->Go() != 0) { 99dd9740daSAxel Dörfler BDeskbar deskbar; 100dd9740daSAxel Dörfler if (!deskbar.HasItem(kDeskbarItemName)) 101dd9740daSAxel Dörfler move_to_deskbar(deskbar); 102dd9740daSAxel Dörfler Quit(); 103dd9740daSAxel Dörfler return; 104dd9740daSAxel Dörfler } 105fcab391bSFredrik Modeen } else { 10680cdaa81SSiarzhuk Zharski BAlert* alert = new BAlert(B_TRANSLATE("Info"), 10795fcf739SAdrien Destugues B_TRANSLATE("ProcessController is already installed in Deskbar."), 10895fcf739SAdrien Destugues B_TRANSLATE("OK"), NULL, 109fcab391bSFredrik Modeen NULL, B_WIDTH_AS_USUAL, B_WARNING_ALERT); 11005afd333SFredrik Modeen alert->SetShortcut(0, B_ESCAPE); 11105afd333SFredrik Modeen alert->Go(); 112a12827f2SAxel Dörfler } 113a12827f2SAxel Dörfler 114ed7a3501SAxel Dörfler new PCWindow(); 115e2940ab6SAxel Dörfler 116e2940ab6SAxel Dörfler // quit other eventually running instances 117ed7a3501SAxel Dörfler BList list; 118ed7a3501SAxel Dörfler be_roster->GetAppList(kSignature, &list); 119e2940ab6SAxel Dörfler long count = list.CountItems(); 120e2940ab6SAxel Dörfler if (count > 1) { 121e2940ab6SAxel Dörfler for (long i = 0; i < count - 1; i++) { 122e2940ab6SAxel Dörfler BMessenger* otherme = new BMessenger(NULL, (team_id)list.ItemAt(i)); 123ed7a3501SAxel Dörfler BMessage* message = new BMessage(B_QUIT_REQUESTED); 124ed7a3501SAxel Dörfler otherme->SendMessage(message); 125ed7a3501SAxel Dörfler delete otherme; 126ed7a3501SAxel Dörfler } 127ed7a3501SAxel Dörfler } 128ed7a3501SAxel Dörfler } 129ed7a3501SAxel Dörfler 130e2940ab6SAxel Dörfler 131e2940ab6SAxel Dörfler void 132e2940ab6SAxel Dörfler PCApplication::ArgvReceived(int32 argc, char **argv) 133ed7a3501SAxel Dörfler { 134e2940ab6SAxel Dörfler if (argc == 2 && strcmp(argv[1], "-desktop-reset") == 0) { 135ed7a3501SAxel Dörfler team_id tracker = be_roster->TeamFor(kTrackerSig); 136e2940ab6SAxel Dörfler if (tracker >= 0) { 137ed7a3501SAxel Dörfler BMessenger messenger(NULL, tracker); 138ed7a3501SAxel Dörfler messenger.SendMessage(B_QUIT_REQUESTED); 139ed7a3501SAxel Dörfler int k = 500; 140ed7a3501SAxel Dörfler do { 141ed7a3501SAxel Dörfler snooze(10000); 142ed7a3501SAxel Dörfler } while (be_roster->IsRunning(kTrackerSig) && k-- > 0); 143ed7a3501SAxel Dörfler } 144323b6546SOliver Tappe BPath shelfPath; 145323b6546SOliver Tappe if (find_directory(B_USER_SETTINGS_DIRECTORY, &shelfPath) == B_OK 146323b6546SOliver Tappe && shelfPath.Append("Tracker/tracker_shelf") == B_OK) { 147323b6546SOliver Tappe remove(shelfPath.Path()); 148323b6546SOliver Tappe } 149323b6546SOliver Tappe BPath trackerPath; 150323b6546SOliver Tappe if (find_directory(B_SYSTEM_DIRECTORY, &trackerPath) == B_OK 151323b6546SOliver Tappe && trackerPath.Append("Tracker") == B_OK) { 152323b6546SOliver Tappe launch(kTrackerSig, trackerPath.Path()); 153323b6546SOliver Tappe } 154e2940ab6SAxel Dörfler } else if (argc == 2 && strcmp(argv[1], "-deskbar") == 0) { 155e2940ab6SAxel Dörfler BDeskbar deskbar; 156e2940ab6SAxel Dörfler if (!gInDeskbar && !deskbar.HasItem(kDeskbarItemName)) 157e2940ab6SAxel Dörfler move_to_deskbar(deskbar); 158e2940ab6SAxel Dörfler } else if (argc > 1) { 159ed7a3501SAxel Dörfler // print a simple usage string 16095fcf739SAdrien Destugues printf(B_TRANSLATE("Usage: %s [-deskbar]\n"), argv[0]); 16195fcf739SAdrien Destugues printf(B_TRANSLATE("(c) 1996-2001 Georges-Edouard Berenger, " 16295fcf739SAdrien Destugues "berenger@francenet.fr\n")); 163ed7a3501SAxel Dörfler } 164e2940ab6SAxel Dörfler 165ed7a3501SAxel Dörfler Quit(); 166ed7a3501SAxel Dörfler } 167e2940ab6SAxel Dörfler 168e2940ab6SAxel Dörfler 169e2940ab6SAxel Dörfler // #pragma mark - 170e2940ab6SAxel Dörfler 171e2940ab6SAxel Dörfler 172e2940ab6SAxel Dörfler int 173e2940ab6SAxel Dörfler main() 174e2940ab6SAxel Dörfler { 175e2940ab6SAxel Dörfler PCApplication application; 176e2940ab6SAxel Dörfler application.Run(); 177e2940ab6SAxel Dörfler 178e2940ab6SAxel Dörfler return B_OK; 179e2940ab6SAxel Dörfler } 180e2940ab6SAxel Dörfler 181