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> 31ed7a3501SAxel Dörfler #include <Deskbar.h> 32a12827f2SAxel Dörfler #include <Roster.h> 33ed7a3501SAxel Dörfler 34e2940ab6SAxel Dörfler #include <stdio.h> 35e2940ab6SAxel Dörfler #include <stdlib.h> 36*89f088e0SIthamar R. Adema #include <string.h> 37a12827f2SAxel Dörfler 38a12827f2SAxel Dörfler class PCApplication : public BApplication { 39a12827f2SAxel Dörfler public: 40a12827f2SAxel Dörfler PCApplication(); 41a12827f2SAxel Dörfler virtual ~PCApplication(); 42a12827f2SAxel Dörfler 43a12827f2SAxel Dörfler virtual void ReadyToRun(); 44a12827f2SAxel Dörfler virtual void ArgvReceived(int32 argc, char **argv); 45a12827f2SAxel Dörfler }; 46a12827f2SAxel Dörfler 47a12827f2SAxel Dörfler 48ed7a3501SAxel Dörfler const char* kSignature = "application/x-vnd.Geb-ProcessController"; 49ed7a3501SAxel Dörfler const char* kTrackerSig = "application/x-vnd.Be-TRAK"; 50ed7a3501SAxel Dörfler const char* kDeskbarSig = "application/x-vnd.Be-TSKB"; 51e2940ab6SAxel Dörfler const char* kTerminalSig = "application/x-vnd.Haiku-Terminal"; 52ed7a3501SAxel Dörfler const char* kPreferencesFileName = "ProcessController Prefs"; 53ed7a3501SAxel Dörfler 54a12827f2SAxel Dörfler const char* kPosPrefName = "Position"; 55a12827f2SAxel Dörfler const char* kVersionName = "Version"; 56a12827f2SAxel Dörfler const int kCurrentVersion = 311; 57e2940ab6SAxel Dörfler 58ed7a3501SAxel Dörfler thread_id id = 0; 59ed7a3501SAxel Dörfler 60ed7a3501SAxel Dörfler 61e2940ab6SAxel Dörfler PCApplication::PCApplication() 62e2940ab6SAxel Dörfler : BApplication(kSignature) 63ed7a3501SAxel Dörfler { 64ed7a3501SAxel Dörfler } 65ed7a3501SAxel Dörfler 66e2940ab6SAxel Dörfler 67ed7a3501SAxel Dörfler PCApplication::~PCApplication() 68ed7a3501SAxel Dörfler { 69ed7a3501SAxel Dörfler if (id) { 70e2940ab6SAxel Dörfler status_t returnValue; 71e2940ab6SAxel Dörfler wait_for_thread(id, &returnValue); 72ed7a3501SAxel Dörfler } 73ed7a3501SAxel Dörfler } 74ed7a3501SAxel Dörfler 75e2940ab6SAxel Dörfler 76e2940ab6SAxel Dörfler void 77e2940ab6SAxel Dörfler PCApplication::ReadyToRun() 78ed7a3501SAxel Dörfler { 79a12827f2SAxel Dörfler GebsPreferences preferences(kPreferencesFileName); 80a12827f2SAxel Dörfler int32 version = 0; 81a12827f2SAxel Dörfler preferences.ReadInt32(version, kVersionName); 82a12827f2SAxel Dörfler if (version != kCurrentVersion) { 83a12827f2SAxel Dörfler BAlert* alert = new BAlert("", "Do you want ProcessController to live in the Deskbar?", 84a12827f2SAxel Dörfler "Don't", "Install", NULL, B_WIDTH_AS_USUAL, B_WARNING_ALERT); 85a12827f2SAxel Dörfler alert->SetShortcut(0, B_ESCAPE); 86a12827f2SAxel Dörfler 87a12827f2SAxel Dörfler if (alert->Go()) { 88a12827f2SAxel Dörfler bool hasOne = false; 89a12827f2SAxel Dörfler { 90a12827f2SAxel Dörfler BDeskbar deskbar; 91a12827f2SAxel Dörfler if (deskbar.HasItem(kDeskbarItemName)) 92a12827f2SAxel Dörfler hasOne = true; 93a12827f2SAxel Dörfler } 94a12827f2SAxel Dörfler 95a12827f2SAxel Dörfler if (hasOne) { 96a12827f2SAxel Dörfler // Restart deskbar to make sure the new version is picked up 97a12827f2SAxel Dörfler team_id deskbarTeam = be_roster->TeamFor(kDeskbarSig); 98a12827f2SAxel Dörfler if (deskbarTeam >= 0) { 99a12827f2SAxel Dörfler BMessenger messenger(NULL, deskbarTeam); 100a12827f2SAxel Dörfler messenger.SendMessage(B_QUIT_REQUESTED); 101a12827f2SAxel Dörfler int k = 500; 102a12827f2SAxel Dörfler do { 103a12827f2SAxel Dörfler snooze (10000); 104a12827f2SAxel Dörfler } while (be_roster->IsRunning(kDeskbarSig) && k-- > 0); 105a12827f2SAxel Dörfler } 106a12827f2SAxel Dörfler be_roster->Launch(kDeskbarSig); 107a12827f2SAxel Dörfler int k = 500; 108a12827f2SAxel Dörfler do { 109a12827f2SAxel Dörfler snooze (10000); 110a12827f2SAxel Dörfler } while (!be_roster->IsRunning(kDeskbarSig) && k-- > 0); 111a12827f2SAxel Dörfler } 112a12827f2SAxel Dörfler 113a12827f2SAxel Dörfler BDeskbar deskbar; 114a12827f2SAxel Dörfler if (!deskbar.HasItem(kDeskbarItemName)) 115a12827f2SAxel Dörfler move_to_deskbar(deskbar); 116a12827f2SAxel Dörfler 117a12827f2SAxel Dörfler Quit(); 118a12827f2SAxel Dörfler return; 119a12827f2SAxel Dörfler } 120a12827f2SAxel Dörfler } 121a12827f2SAxel Dörfler 122ed7a3501SAxel Dörfler new PCWindow(); 123e2940ab6SAxel Dörfler 124e2940ab6SAxel Dörfler // quit other eventually running instances 125ed7a3501SAxel Dörfler BList list; 126ed7a3501SAxel Dörfler be_roster->GetAppList(kSignature, &list); 127e2940ab6SAxel Dörfler long count = list.CountItems(); 128e2940ab6SAxel Dörfler if (count > 1) { 129e2940ab6SAxel Dörfler for (long i = 0; i < count - 1; i++) { 130e2940ab6SAxel Dörfler BMessenger* otherme = new BMessenger(NULL, (team_id)list.ItemAt(i)); 131ed7a3501SAxel Dörfler BMessage* message = new BMessage(B_QUIT_REQUESTED); 132ed7a3501SAxel Dörfler otherme->SendMessage(message); 133ed7a3501SAxel Dörfler delete otherme; 134ed7a3501SAxel Dörfler } 135ed7a3501SAxel Dörfler } 136ed7a3501SAxel Dörfler } 137ed7a3501SAxel Dörfler 138e2940ab6SAxel Dörfler 139e2940ab6SAxel Dörfler void 140e2940ab6SAxel Dörfler PCApplication::ArgvReceived(int32 argc, char **argv) 141ed7a3501SAxel Dörfler { 142e2940ab6SAxel Dörfler if (argc == 2 && strcmp(argv[1], "-desktop-reset") == 0) { 143ed7a3501SAxel Dörfler team_id tracker = be_roster->TeamFor(kTrackerSig); 144e2940ab6SAxel Dörfler if (tracker >= 0) { 145ed7a3501SAxel Dörfler BMessenger messenger(NULL, tracker); 146ed7a3501SAxel Dörfler messenger.SendMessage(B_QUIT_REQUESTED); 147ed7a3501SAxel Dörfler int k = 500; 148ed7a3501SAxel Dörfler do { 149ed7a3501SAxel Dörfler snooze(10000); 150ed7a3501SAxel Dörfler } while (be_roster->IsRunning(kTrackerSig) && k-- > 0); 151ed7a3501SAxel Dörfler } 152ed7a3501SAxel Dörfler remove("/boot/home/config/settings/Tracker/tracker_shelf"); 153ed7a3501SAxel Dörfler launch(kTrackerSig, "/boot/beos/system/Tracker"); 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 160ed7a3501SAxel Dörfler printf("Usage: %s [-deskbar]\n", argv[0]); 161a12827f2SAxel Dörfler printf("(c) 1996-2001 Georges-Edouard Berenger, berenger@francenet.fr\n"); 162ed7a3501SAxel Dörfler } 163e2940ab6SAxel Dörfler 164ed7a3501SAxel Dörfler Quit(); 165ed7a3501SAxel Dörfler } 166e2940ab6SAxel Dörfler 167e2940ab6SAxel Dörfler 168e2940ab6SAxel Dörfler // #pragma mark - 169e2940ab6SAxel Dörfler 170e2940ab6SAxel Dörfler 171e2940ab6SAxel Dörfler int 172e2940ab6SAxel Dörfler main() 173e2940ab6SAxel Dörfler { 174e2940ab6SAxel Dörfler PCApplication application; 175e2940ab6SAxel Dörfler application.Run(); 176e2940ab6SAxel Dörfler 177e2940ab6SAxel Dörfler return B_OK; 178e2940ab6SAxel Dörfler } 179e2940ab6SAxel Dörfler 180