1 /* 2 * Copyright (c) 2008 Stephan Aßmus <superstippi@gmx.de>. All rights reserved. 3 * Distributed under the terms of the MIT/X11 license. 4 * 5 * Copyright (c) 1999 Mike Steed. You are free to use and distribute this software 6 * as long as it is accompanied by it's documentation and this copyright notice. 7 * The software comes with no warranty, etc. 8 */ 9 #include "App.h" 10 11 #include <stdio.h> 12 13 #include <File.h> 14 #include <FindDirectory.h> 15 #include <Node.h> 16 #include <Path.h> 17 18 #include "Common.h" 19 #include "MainWindow.h" 20 21 22 App::App() 23 : BApplication(kAppSignature), 24 fResources(read_resources(kAppSignature)), 25 fMainWindow(NULL), 26 fSavedRefsReceived(NULL) 27 { 28 } 29 30 31 App::~App() 32 { 33 delete fResources; 34 delete fSavedRefsReceived; 35 } 36 37 38 void 39 App::ArgvReceived(int32 argc, char** argv) 40 { 41 BMessage refsReceived(B_REFS_RECEIVED); 42 for (int32 i = 1; i < argc; i++) { 43 BEntry entry(argv[i], true); 44 entry_ref ref; 45 if (entry.GetRef(&ref) == B_OK) 46 refsReceived.AddRef("refs", &ref); 47 } 48 if (refsReceived.HasRef("refs")) 49 PostMessage(&refsReceived); 50 } 51 52 53 void 54 App::RefsReceived(BMessage* message) 55 { 56 if (fMainWindow == NULL) { 57 // ReadyToRun() has not been called yet, this happens when someone 58 // launches us with a B_REFS_RECEIVED message. 59 delete fSavedRefsReceived; 60 fSavedRefsReceived = new BMessage(*message); 61 } else 62 fMainWindow->PostMessage(message); 63 } 64 65 66 void 67 App::ReadyToRun() 68 { 69 BRect frame; 70 71 BPath path; 72 BFile settingsFile; 73 BMessage settings; 74 if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK 75 || path.Append("DiskUsage") != B_OK 76 || settingsFile.SetTo(path.Path(), B_READ_ONLY) != B_OK 77 || settings.Unflatten(&settingsFile) != B_OK 78 || settings.FindRect("window frame", &frame) != B_OK) { 79 // use default window frame 80 frame.Set(0, 0, kDefaultPieSize, kDefaultPieSize); 81 frame.OffsetTo(50, 50); 82 } 83 84 fMainWindow = new MainWindow(frame); 85 86 if (fSavedRefsReceived) { 87 // RefsReceived() was called earlier than ReadyToRun() 88 fMainWindow->PostMessage(fSavedRefsReceived); 89 delete fSavedRefsReceived; 90 fSavedRefsReceived = NULL; 91 } 92 } 93 94 95 bool 96 App::QuitRequested() 97 { 98 // Save the settings. 99 BPath path; 100 BFile settingsFile; 101 BMessage settings; 102 if (settings.AddRect("window frame", fMainWindow->Frame()) != B_OK 103 || find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK 104 || path.Append("DiskUsage") != B_OK 105 || settingsFile.SetTo(path.Path(), 106 B_CREATE_FILE | B_WRITE_ONLY | B_ERASE_FILE) != B_OK 107 || settings.Flatten(&settingsFile) != B_OK) { 108 fprintf(stderr, "Failed to write application settings.\n"); 109 } 110 111 return BApplication::QuitRequested(); 112 } 113