#include <Catalog.h>
#include <Locale.h>
#include <Menu.h>
#include <MenuItem.h>
#include <Path.h>
#include <PopUpMenu.h>
#include <MenuItem.h>
#include <Query.h>
#include "Attributes.h"
#include "Commands.h"
#include "QueryContainerWindow.h"
#include "QueryPoseView.h"
#include "Shortcuts.h"
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "QueryContainerWindow"
BQueryContainerWindow::BQueryContainerWindow(LockingList<BWindow>* windowList,
uint32 openFlags)
:
BContainerWindow(windowList, openFlags)
{
}
BPoseView*
BQueryContainerWindow::NewPoseView(Model* model, uint32)
{
return new BQueryPoseView(model);
}
BQueryPoseView*
BQueryContainerWindow::PoseView() const
{
return static_cast<BQueryPoseView*>(fPoseView);
}
void
BQueryContainerWindow::CreatePoseView(Model* model)
{
fPoseView = NewPoseView(model, kListMode);
fBorderedView->GroupLayout()->AddView(fPoseView);
fBorderedView->EnableBorderHighlight(false);
fBorderedView->GroupLayout()->SetInsets(0, 0, 1, 1);
}
void
BQueryContainerWindow::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(PoseView());
menu->AddItem(item);
item = Shortcuts()->InvertSelectionItem();
item->SetTarget(PoseView());
menu->AddItem(item);
item = Shortcuts()->CloseItem();
item->SetTarget(this);
menu->AddItem(item);
item = Shortcuts()->CloseAllInWorkspaceItem();
item->SetTarget(this);
menu->AddItem(item);
}
void
BQueryContainerWindow::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);
}
void
BQueryContainerWindow::SetupDefaultState()
{
BNode defaultingNode;
WindowStateNodeOpener opener(this, true);
if (opener.StreamNode() == NULL)
return;
BString defaultStatePath(kQueryTemplates);
BString sanitizedType(PoseView()->SearchForType());
defaultStatePath += '/';
int32 length = sanitizedType.Length();
char* buf = sanitizedType.LockBuffer(length);
for (int32 index = length - 1; index >= 0; index--)
if (buf[index] == '/')
buf[index] = '_';
sanitizedType.UnlockBuffer(length);
defaultStatePath += sanitizedType;
PRINT(("looking for default query state at %s\n",
defaultStatePath.String()));
if (!DefaultStateSourceNode(defaultStatePath.String(), &defaultingNode,
false)) {
TRACE();
return;
}
const char* allowAttrs[] = {
kAttrWindowFrame,
kAttrViewState,
kAttrViewStateForeign,
kAttrColumns,
kAttrColumnsForeign,
0
};
AttributeStreamMemoryNode memoryNode;
NamesToAcceptAttrFilter filter(allowAttrs);
AttributeStreamFileNode fileNode(&defaultingNode);
*opener.StreamNode() << memoryNode << filter << fileNode;
}
bool
BQueryContainerWindow::ShouldHaveEditQueryItem(const entry_ref*)
{
return true;
}
bool
BQueryContainerWindow::ActiveOnDevice(dev_t device) const
{
return PoseView()->ActiveOnDevice(device);
}