void FileTypes::MessageReceived(BMessage *message) { switch (message->what) { case kMsgSettingsChanged: fSettings.UpdateFrom(message); break; case kMsgOpenTypesWindow: if (fTypesWindow == NULL) { fTypesWindow = new FileTypesWindow(fSettings.Message()); fTypesWindow->Show(); fWindowCount++; } else fTypesWindow->Activate(true); break; case kMsgTypesWindowClosed: fTypesWindow = NULL; _WindowClosed(); break; case kMsgOpenApplicationTypesWindow: if (fApplicationTypesWindow == NULL) { fApplicationTypesWindow = new ApplicationTypesWindow( fSettings.Message()); fApplicationTypesWindow->Show(); fWindowCount++; } else fApplicationTypesWindow->Activate(true); break; case kMsgApplicationTypesWindowClosed: fApplicationTypesWindow = NULL; _WindowClosed(); break; case kMsgTypeWindowClosed: fTypeWindowCount--; // supposed to fall through case kMsgWindowClosed: _WindowClosed(); break; case kMsgOpenFilePanel: { // the open file panel sends us a message when it's done const char* subTitle; if (message->FindString("title", &subTitle) != B_OK) subTitle = B_TRANSLATE("Open file"); int32 what; if (message->FindInt32("message", &what) != B_OK) what = B_REFS_RECEIVED; BMessenger target; if (message->FindMessenger("target", &target) != B_OK) target = be_app_messenger; BString title = B_TRANSLATE("FileTypes"); if (subTitle != NULL && subTitle[0]) { title.Append(": "); title.Append(subTitle); } fFilePanel->SetMessage(new BMessage(what)); fFilePanel->Window()->SetTitle(title.String()); fFilePanel->SetTarget(target); if (!fFilePanel->IsShowing()) fFilePanel->Show(); break; } case B_SILENT_RELAUNCH: // In case we were launched via the add-on, there is no types // window yet. if (fTypesWindow == NULL) PostMessage(kMsgOpenTypesWindow); break; case B_CANCEL: if (fWindowCount == 0) PostMessage(B_QUIT_REQUESTED); break; case B_SIMPLE_DATA: RefsReceived(message); break; default: BApplication::MessageReceived(message); break; } }
void FileTypes::MessageReceived(BMessage* message) { switch (message->what) { case kMsgSettingsChanged: fSettings.UpdateFrom(message); break; case kMsgOpenTypesWindow: if (fTypesWindow == NULL) { fTypesWindow = new FileTypesWindow(fSettings.Message()); if (fArgvType.Length() > 0) { // Set the window to the type that was requested on the // command line (-type), we do this only once, if we // ever opened more than one FileTypesWindow. fTypesWindow->SelectType(fArgvType.String()); fArgvType = ""; } fTypesWindow->Show(); fWindowCount++; } else fTypesWindow->Activate(true); break; case kMsgTypesWindowClosed: fTypesWindow = NULL; _WindowClosed(); break; case kMsgOpenApplicationTypesWindow: if (fApplicationTypesWindow == NULL) { fApplicationTypesWindow = new ApplicationTypesWindow( fSettings.Message()); fApplicationTypesWindow->Show(); fWindowCount++; } else fApplicationTypesWindow->Activate(true); break; case kMsgApplicationTypesWindowClosed: fApplicationTypesWindow = NULL; _WindowClosed(); break; case kMsgTypeWindowClosed: fTypeWindowCount--; // supposed to fall through case kMsgWindowClosed: _WindowClosed(); break; case kMsgOpenFilePanel: { // the open file panel sends us a message when it's done const char* subTitle; if (message->FindString("title", &subTitle) != B_OK) subTitle = B_TRANSLATE("Open file"); int32 what; if (message->FindInt32("message", &what) != B_OK) what = B_REFS_RECEIVED; BMessenger target; if (message->FindMessenger("target", &target) != B_OK) target = be_app_messenger; BString title = B_TRANSLATE("FileTypes"); if (subTitle != NULL && subTitle[0]) { title.Append(": "); title.Append(subTitle); } uint32 flavors = B_FILE_NODE; if (message->FindBool("allowDirs")) flavors |= B_DIRECTORY_NODE; fFilePanel->SetNodeFlavors(flavors); fFilePanel->SetMessage(new BMessage(what)); fFilePanel->Window()->SetTitle(title.String()); fFilePanel->SetTarget(target); if (!fFilePanel->IsShowing()) fFilePanel->Show(); break; } case B_SILENT_RELAUNCH: // In case we were launched via the add-on, there is no types // window yet. if (fTypesWindow == NULL) PostMessage(kMsgOpenTypesWindow); break; case B_CANCEL: if (fWindowCount == 0) PostMessage(B_QUIT_REQUESTED); break; case B_SIMPLE_DATA: RefsReceived(message); break; default: BApplication::MessageReceived(message); break; } }