void TFilePanel::OpenDirectory() { BObjectList<BPose>* list = PoseView()->SelectionList(); if (list->CountItems() != 1) return; Model* model = list->FirstItem()->TargetModel(); if (model->ResolveIfLink()->IsDirectory()) { BMessage message(B_REFS_RECEIVED); message.AddRef("refs", model->EntryRef()); PostMessage(&message); } }
void TFilePanel::HandleOpenButton() { PoseView()->CommitActivePose(); BObjectList<BPose>* selection = PoseView()->SelectionList(); // if we have only one directory and we're not opening dirs, enter. if ((fNodeFlavors & B_DIRECTORY_NODE) == 0 && selection->CountItems() == 1) { Model* model = selection->FirstItem()->TargetModel(); if (model->IsDirectory() || (model->IsSymLink() && !(fNodeFlavors & B_SYMLINK_NODE) && model->ResolveIfLink()->IsDirectory())) { BMessage message(B_REFS_RECEIVED); message.AddRef("refs", model->EntryRef()); PostMessage(&message); return; } } // don't do anything unless there are items selected // message->fMessage->message from here to end if (selection->CountItems()) { BMessage message(*fMessage); // go through selection and add appropriate items for (int32 index = 0; index < selection->CountItems(); index++) { Model* model = selection->ItemAt(index)->TargetModel(); if (((fNodeFlavors & B_DIRECTORY_NODE) != 0 && model->ResolveIfLink()->IsDirectory()) || ((fNodeFlavors & B_SYMLINK_NODE) != 0 && model->IsSymLink()) || ((fNodeFlavors & B_FILE_NODE) != 0 && model->ResolveIfLink()->IsFile())) { message.AddRef("refs", model->EntryRef()); } } OpenSelectionCommon(&message); } }
void TFilePanel::AdjustButton() { // adjust button state BButton* button = dynamic_cast<BButton*>(FindView("default button")); if (button == NULL) return; BTextControl* textControl = dynamic_cast<BTextControl*>(FindView("text view")); BObjectList<BPose>* selectionList = fPoseView->SelectionList(); BString buttonText = fButtonText; bool enabled = false; if (fIsSavePanel && textControl != NULL) { enabled = textControl->Text()[0] != '\0'; if (fPoseView->IsFocus()) { fPoseView->ShowSelection(true); if (selectionList->CountItems() == 1) { Model* model = selectionList->FirstItem()->TargetModel(); if (model->ResolveIfLink()->IsDirectory()) { enabled = true; buttonText = B_TRANSLATE("Open"); } else { // insert the name of the selected model into // the text field textControl->SetText(model->Name()); textControl->MakeFocus(true); } } } else fPoseView->ShowSelection(false); } else { int32 count = selectionList->CountItems(); if (count) { enabled = true; // go through selection list looking at content for (int32 index = 0; index < count; index++) { Model* model = selectionList->ItemAt(index)->TargetModel(); uint32 modelFlavor = GetLinkFlavor(model, false); uint32 linkFlavor = GetLinkFlavor(model, true); // if only one item is selected and we're not in dir // selection mode then we don't disable button ever if ((modelFlavor == B_DIRECTORY_NODE || linkFlavor == B_DIRECTORY_NODE) && count == 1) break; if ((fNodeFlavors & modelFlavor) == 0 && (fNodeFlavors & linkFlavor) == 0) { enabled = false; break; } } } } button->SetLabel(buttonText.String()); button->SetEnabled(enabled); }