xref: /haiku/src/apps/processcontroller/PCWorld.cpp (revision 546208a53940a26c6379c48a7854ade1a8250fc5)
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