#include "VirtualDirectoryWindow.h"
#include <Catalog.h>
#include <Locale.h>
#include <AutoLocker.h>
#include "Commands.h"
#include "Shortcuts.h"
#include "VirtualDirectoryManager.h"
#include "VirtualDirectoryPoseView.h"
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "VirtualDirectoryWindow"
namespace BPrivate {
VirtualDirectoryWindow::VirtualDirectoryWindow(LockingList<BWindow>* windowList,
uint32 openFlags, window_look look, window_feel feel, uint32 windowFlags,
uint32 workspace)
:
BContainerWindow(windowList, openFlags, look, feel, windowFlags, workspace)
{
}
void
VirtualDirectoryWindow::CreatePoseView(Model* model)
{
fPoseView = NewPoseView(model, kListMode);
if (fPoseView == NULL)
return;
fBorderedView->GroupLayout()->AddView(fPoseView);
fBorderedView->EnableBorderHighlight(false);
fBorderedView->GroupLayout()->SetInsets(0, 0, 1, 1);
}
BPoseView*
VirtualDirectoryWindow::NewPoseView(Model* model, uint32 viewMode)
{
VirtualDirectoryManager* manager = VirtualDirectoryManager::Instance();
if (manager == NULL)
return NULL;
{
AutoLocker<VirtualDirectoryManager> managerLocker(manager);
BStringList directoryPaths;
node_ref nodeRef;
entry_ref entryRef;
if (manager->ResolveDirectoryPaths(*model->NodeRef(),
*model->EntryRef(), directoryPaths, &nodeRef, &entryRef)
!= B_OK) {
return NULL;
}
if (nodeRef != *model->NodeRef()) {
Model* newModel = new(std::nothrow) Model(&entryRef);
if (newModel == NULL || newModel->InitCheck() != B_OK) {
delete newModel;
return NULL;
}
delete model;
model = newModel;
}
}
return new VirtualDirectoryPoseView(model);
}
VirtualDirectoryPoseView*
VirtualDirectoryWindow::PoseView() const
{
return static_cast<VirtualDirectoryPoseView*>(fPoseView);
}
void
VirtualDirectoryWindow::AddWindowMenu(BMenu* menu)
{
BMenuItem* item;
item = Shortcuts()->ResizeToFitItem();
item->SetTarget(this);
menu->AddItem(item);
item = Shortcuts()->SelectItem();
item->SetTarget(PoseView());
menu->AddItem(item);
item = Shortcuts()->SelectAllItem();
item->SetTarget(this);
menu->AddItem(item);
item = Shortcuts()->InvertSelectionItem();
item->SetTarget(PoseView());
menu->AddItem(item);
item = Shortcuts()->OpenParentItem();
item->SetTarget(PoseView());
menu->AddItem(item);
item = Shortcuts()->CloseItem();
item->SetTarget(this);
menu->AddItem(item);
}
void
VirtualDirectoryWindow::AddWindowContextMenus(BMenu* menu)
{
BMenuItem* resizeItem = Shortcuts()->ResizeToFitItem();
menu->AddItem(resizeItem);
menu->AddItem(Shortcuts()->SelectItem());
menu->AddItem(Shortcuts()->SelectAllItem());
BMenuItem* closeItem = Shortcuts()->CloseItem();
menu->AddItem(closeItem);
menu->SetTargetForItems(PoseView());
closeItem->SetTarget(this);
resizeItem->SetTarget(this);
}
}