1/* 2 * Copyright (c) 1998-2007 Matthijs Hollemans 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 * DEALINGS IN THE SOFTWARE. 21 */ 22 23#include "GrepApp.h" 24 25#include <stdio.h> 26 27#include <Entry.h> 28 29#include "GlobalDefs.h" 30#include "GrepWindow.h" 31#include "Model.h" 32 33 34GrepApp::GrepApp() 35 : BApplication(APP_SIGNATURE), 36 fGotArgvOnStartup(false), 37 fGotRefsOnStartup(false), 38 fQuitter(NULL) 39{ 40} 41 42 43GrepApp::~GrepApp() 44{ 45 delete fQuitter; 46} 47 48 49void 50GrepApp::ArgvReceived(int32 argc, char** argv) 51{ 52 fGotArgvOnStartup = true; 53 54 BMessage message(B_REFS_RECEIVED); 55 int32 refCount = 0; 56 57 for (int32 i = 1; i < argc; i++) { 58 BEntry entry(argv[i]); 59 entry_ref ref; 60 entry.GetRef(&ref); 61 62 if (entry.Exists()) { 63 message.AddRef("refs", &ref); 64 refCount += 1; 65 } else 66 printf("%s: File not found: %s\n", argv[0], argv[i]); 67 } 68 69 if (refCount > 0) 70 RefsReceived(&message); 71} 72 73 74void 75GrepApp::RefsReceived(BMessage* message) 76{ 77 if (IsLaunching()) 78 fGotRefsOnStartup = true; 79 80 new GrepWindow(message); 81} 82 83 84void 85GrepApp::ReadyToRun() 86{ 87 if (!fGotArgvOnStartup && !fGotRefsOnStartup) 88 _NewUnfocusedGrepWindow(); 89 90 // TODO: stippi: I don't understand what this is supposed to do: 91 if (fGotArgvOnStartup && !fGotRefsOnStartup) 92 PostMessage(B_QUIT_REQUESTED); 93} 94 95 96void 97GrepApp::MessageReceived(BMessage* message) 98{ 99 switch (message->what) { 100 case B_SILENT_RELAUNCH: 101 _NewUnfocusedGrepWindow(); 102 break; 103 104 case MSG_TRY_QUIT: 105 _TryQuit(); 106 break; 107 108 default: 109 BApplication::MessageReceived(message); 110 break; 111 } 112} 113 114 115void 116GrepApp::_TryQuit() 117{ 118 if (CountWindows() == 0) 119 PostMessage(B_QUIT_REQUESTED); 120 121 if (CountWindows() == 1 && fQuitter == NULL) { 122 fQuitter = new BMessageRunner(be_app_messenger, 123 new BMessage(MSG_TRY_QUIT), 200000, -1); 124 } 125} 126 127 128void 129GrepApp::_NewUnfocusedGrepWindow() 130{ 131 BMessage emptyMessage; 132 new GrepWindow(&emptyMessage); 133} 134