Round 2 of style changes to Tracker
* focused on 80-char limit fixes. * also some whitespace and case statement indentation fixes
This commit is contained in:
@@ -167,8 +167,8 @@ AttributeStreamNode::Read(const char* name, const char* foreignName,
|
|||||||
|
|
||||||
|
|
||||||
off_t
|
off_t
|
||||||
AttributeStreamNode::Write(const char* name, const char* foreignName, uint32 type,
|
AttributeStreamNode::Write(const char* name, const char* foreignName,
|
||||||
off_t size, const void* buffer)
|
uint32 type, off_t size, const void* buffer)
|
||||||
{
|
{
|
||||||
if (!fWriteTo)
|
if (!fWriteTo)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -295,7 +295,8 @@ AttributeStreamFileNode::Read(const char* name, const char* foreignName,
|
|||||||
return size;
|
return size;
|
||||||
|
|
||||||
// didn't find the attribute under the native name, try the foreign name
|
// didn't find the attribute under the native name, try the foreign name
|
||||||
if (foreignName && fNode->ReadAttr(foreignName, type, 0, buffer, (size_t)size) == size) {
|
if (foreignName && fNode->ReadAttr(foreignName, type, 0, buffer,
|
||||||
|
(size_t)size) == size) {
|
||||||
// foreign attribute, swap the data
|
// foreign attribute, swap the data
|
||||||
if (swapFunc)
|
if (swapFunc)
|
||||||
(swapFunc)(buffer);
|
(swapFunc)(buffer);
|
||||||
@@ -353,8 +354,8 @@ bool
|
|||||||
AttributeStreamFileNode::Fill(char* buffer) const
|
AttributeStreamFileNode::Fill(char* buffer) const
|
||||||
{
|
{
|
||||||
ASSERT(fNode);
|
ASSERT(fNode);
|
||||||
return fNode->ReadAttr(fCurrentAttr.Name(), fCurrentAttr.Type(), 0, buffer,
|
return fNode->ReadAttr(fCurrentAttr.Name(), fCurrentAttr.Type(), 0,
|
||||||
(size_t)fCurrentAttr.Size()) == (ssize_t)fCurrentAttr.Size();
|
buffer, (size_t)fCurrentAttr.Size()) == (ssize_t)fCurrentAttr.Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -422,8 +423,9 @@ AttributeStreamMemoryNode::Contains(const char* name, uint32 type)
|
|||||||
|
|
||||||
|
|
||||||
off_t
|
off_t
|
||||||
AttributeStreamMemoryNode::Read(const char* name, const char* DEBUG_ONLY(foreignName),
|
AttributeStreamMemoryNode::Read(const char* name,
|
||||||
uint32 type, off_t bufferSize, void* buffer, void (*DEBUG_ONLY(swapFunc))(void*))
|
const char* DEBUG_ONLY(foreignName), uint32 type, off_t bufferSize,
|
||||||
|
void* buffer, void (*DEBUG_ONLY(swapFunc))(void*))
|
||||||
{
|
{
|
||||||
ASSERT(!foreignName);
|
ASSERT(!foreignName);
|
||||||
ASSERT(!swapFunc);
|
ASSERT(!swapFunc);
|
||||||
@@ -479,7 +481,8 @@ AttributeStreamMemoryNode::Drive()
|
|||||||
|
|
||||||
|
|
||||||
AttributeStreamMemoryNode::AttrNode*
|
AttributeStreamMemoryNode::AttrNode*
|
||||||
AttributeStreamMemoryNode::BufferingGet(const char* name, uint32 type, off_t size)
|
AttributeStreamMemoryNode::BufferingGet(const char* name, uint32 type,
|
||||||
|
off_t size)
|
||||||
{
|
{
|
||||||
char* newBuffer = new char[size];
|
char* newBuffer = new char[size];
|
||||||
if (!fReadFrom->Fill(newBuffer)) {
|
if (!fReadFrom->Fill(newBuffer)) {
|
||||||
@@ -665,8 +668,10 @@ AttributeStreamFilterNode::Read(const char* name, const char* foreignName,
|
|||||||
if (!fReadFrom)
|
if (!fReadFrom)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!Reject(name, type, size))
|
if (!Reject(name, type, size)) {
|
||||||
return fReadFrom->Read(name, foreignName, type, size, buffer, swapFunc);
|
return fReadFrom->Read(name, foreignName, type, size, buffer,
|
||||||
|
swapFunc);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ All rights reserved.
|
|||||||
//
|
//
|
||||||
// destinationNode << transformer << buffer << filter << sourceNode
|
// destinationNode << transformer << buffer << filter << sourceNode
|
||||||
//
|
//
|
||||||
// transformer may for instance perform endian-swapping or offsetting of a B_RECT attribute
|
// transformer may for instance perform endian-swapping or offsetting of
|
||||||
// filter may withold certain attributes
|
// a B_RECT attribute filter may withold certain attributes buffer is a
|
||||||
// buffer is a memory allocated snapshot of attributes, may be repeatedly streamed into
|
// memory allocated snapshot of attributes, may be repeatedly streamed into
|
||||||
// other files, buffers
|
// other files, buffers
|
||||||
//
|
//
|
||||||
// In addition to the whacky (but usefull) << syntax, calls like Read, Write are also
|
// In addition to the whacky (but usefull) << syntax, calls like Read, Write
|
||||||
// available
|
// are also available
|
||||||
#ifndef __ATTRIBUTE_STREAM__
|
#ifndef __ATTRIBUTE_STREAM__
|
||||||
#define __ATTRIBUTE_STREAM__
|
#define __ATTRIBUTE_STREAM__
|
||||||
|
|
||||||
@@ -104,7 +104,8 @@ public:
|
|||||||
// any data it has, gets, transforms, doesn't filter out
|
// any data it has, gets, transforms, doesn't filter out
|
||||||
//
|
//
|
||||||
// under the hood sets up streaming into the next node; hooking
|
// under the hood sets up streaming into the next node; hooking
|
||||||
// up source and destination, forces the stream head to start streaming
|
// up source and destination, forces the stream head to start
|
||||||
|
// streaming
|
||||||
|
|
||||||
virtual void Rewind();
|
virtual void Rewind();
|
||||||
// get ready to start all over again
|
// get ready to start all over again
|
||||||
@@ -128,14 +129,13 @@ public:
|
|||||||
virtual const AttributeInfo* Next();
|
virtual const AttributeInfo* Next();
|
||||||
// give me the next attribute in the stream
|
// give me the next attribute in the stream
|
||||||
virtual const char* Get();
|
virtual const char* Get();
|
||||||
// give me the data of the attribute in the stream that was just returned
|
// give me the data of the attribute in the stream that was just
|
||||||
// by Next
|
// returned by Next assumes there is a buffering node somewhere on the
|
||||||
// assumes there is a buffering node somewhere on the way to
|
// way to the source, from which the resulting buffer is borrowed
|
||||||
// the source, from which the resulting buffer is borrowed
|
|
||||||
virtual bool Fill(char* buffer) const;
|
virtual bool Fill(char* buffer) const;
|
||||||
// fill the buffer with data of the attribute in the stream that was just returned
|
// fill the buffer with data of the attribute in the stream that was
|
||||||
// by next
|
// just returned by next <buffer> is big enough to hold the entire
|
||||||
// <buffer> is big enough to hold the entire attribute data
|
// attribute data
|
||||||
|
|
||||||
virtual bool CanFeed() const { return false; }
|
virtual bool CanFeed() const { return false; }
|
||||||
// return true if can work as a source for the entire stream
|
// return true if can work as a source for the entire stream
|
||||||
@@ -199,10 +199,10 @@ public:
|
|||||||
|
|
||||||
virtual void MakeEmpty();
|
virtual void MakeEmpty();
|
||||||
virtual off_t Contains(const char* name, uint32 type);
|
virtual off_t Contains(const char* name, uint32 type);
|
||||||
virtual off_t Read(const char* name, const char* foreignName, uint32 type, off_t size,
|
virtual off_t Read(const char* name, const char* foreignName,
|
||||||
void* buffer, void (*swapFunc)(void*) = 0);
|
uint32 type, off_t size, void* buffer, void (*swapFunc)(void*) = 0);
|
||||||
virtual off_t Write(const char* name, const char* foreignName, uint32 type, off_t size,
|
virtual off_t Write(const char* name, const char* foreignName,
|
||||||
const void* buffer);
|
uint32 type, off_t size, const void* buffer);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool CanFeed() const { return true; }
|
virtual bool CanFeed() const { return true; }
|
||||||
@@ -275,10 +275,10 @@ public:
|
|||||||
AttributeStreamFilterNode()
|
AttributeStreamFilterNode()
|
||||||
{}
|
{}
|
||||||
virtual off_t Contains(const char* name, uint32 type);
|
virtual off_t Contains(const char* name, uint32 type);
|
||||||
virtual off_t Read(const char* name, const char* foreignName, uint32 type, off_t size,
|
virtual off_t Read(const char* name, const char* foreignName,
|
||||||
void* buffer, void (*swapFunc)(void*) = 0);
|
uint32 type, off_t size, void* buffer, void (*swapFunc)(void*) = 0);
|
||||||
virtual off_t Write(const char* name, const char* foreignName, uint32 type, off_t size,
|
virtual off_t Write(const char* name, const char* foreignName,
|
||||||
const void* buffer);
|
uint32 type, off_t size, const void* buffer);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool Reject(const char* name, uint32 type, off_t size);
|
virtual bool Reject(const char* name, uint32 type, off_t size);
|
||||||
@@ -319,8 +319,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual bool WillTransform(const char* name, uint32 type, off_t size,
|
virtual bool WillTransform(const char* name, uint32 type, off_t size,
|
||||||
const char* data) const;
|
const char* data) const;
|
||||||
// override to implement filtering; should only return true if transformation will
|
// override to implement filtering, should only return true if
|
||||||
// occur
|
// transformation will occur
|
||||||
virtual char* CopyAndApplyTransformer(const char* name, uint32 type,
|
virtual char* CopyAndApplyTransformer(const char* name, uint32 type,
|
||||||
off_t size, const char* data);
|
off_t size, const char* data);
|
||||||
// makes a copy of data
|
// makes a copy of data
|
||||||
|
|||||||
@@ -119,7 +119,8 @@ AutomountSettingsPanel::AutomountSettingsPanel(BMessage* settings,
|
|||||||
new BMessage(kAutomountSettingsChanged));
|
new BMessage(kAutomountSettingsChanged));
|
||||||
|
|
||||||
fAutoMountAllBFSCheck = new BRadioButton("autoBFS",
|
fAutoMountAllBFSCheck = new BRadioButton("autoBFS",
|
||||||
B_TRANSLATE("All BeOS disks"), new BMessage(kAutomountSettingsChanged));
|
B_TRANSLATE("All BeOS disks"),
|
||||||
|
new BMessage(kAutomountSettingsChanged));
|
||||||
|
|
||||||
fAutoMountAllCheck = new BRadioButton("autoAll",
|
fAutoMountAllCheck = new BRadioButton("autoAll",
|
||||||
B_TRANSLATE("All disks"), new BMessage(kAutomountSettingsChanged));
|
B_TRANSLATE("All disks"), new BMessage(kAutomountSettingsChanged));
|
||||||
@@ -343,4 +344,3 @@ AutomountSettingsDialog::RunAutomountSettings(const BMessenger& target)
|
|||||||
|
|
||||||
(new AutomountSettingsDialog(&reply, target))->Show();
|
(new AutomountSettingsDialog(&reply, target))->Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,8 @@ BackgroundImage::GetBackgroundImage(const BNode* node, bool isDesktop)
|
|||||||
BMessage container;
|
BMessage container;
|
||||||
char* buffer = new char[info.size];
|
char* buffer = new char[info.size];
|
||||||
|
|
||||||
status_t error = node->ReadAttr(kBackgroundImageInfo, info.type, 0, buffer, (size_t)info.size);
|
status_t error = node->ReadAttr(kBackgroundImageInfo, info.type, 0,
|
||||||
|
buffer, (size_t)info.size);
|
||||||
if (error == info.size)
|
if (error == info.size)
|
||||||
error = container.Unflatten(buffer);
|
error = container.Unflatten(buffer);
|
||||||
|
|
||||||
@@ -91,7 +92,8 @@ BackgroundImage::GetBackgroundImage(const BNode* node, bool isDesktop)
|
|||||||
BPoint offset;
|
BPoint offset;
|
||||||
BBitmap* bitmap = NULL;
|
BBitmap* bitmap = NULL;
|
||||||
|
|
||||||
if (container.FindString(kBackgroundImageInfoPath, index, &path) == B_OK) {
|
if (container.FindString(kBackgroundImageInfoPath, index, &path)
|
||||||
|
== B_OK) {
|
||||||
bitmap = BTranslationUtils::GetBitmap(path);
|
bitmap = BTranslationUtils::GetBitmap(path);
|
||||||
if (!bitmap) {
|
if (!bitmap) {
|
||||||
PRINT(("failed to load background bitmap from path\n"));
|
PRINT(("failed to load background bitmap from path\n"));
|
||||||
@@ -177,6 +179,7 @@ BackgroundImage::Show(BView* view, int32 workspace)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BackgroundImage::Show(BackgroundImageInfo* info, BView* view)
|
BackgroundImage::Show(BackgroundImageInfo* info, BView* view)
|
||||||
{
|
{
|
||||||
@@ -276,13 +279,15 @@ BackgroundImage::Remove()
|
|||||||
fView->ClearViewBitmap();
|
fView->ClearViewBitmap();
|
||||||
fView->Invalidate();
|
fView->Invalidate();
|
||||||
BPoseView* poseView = dynamic_cast<BPoseView*>(fView);
|
BPoseView* poseView = dynamic_cast<BPoseView*>(fView);
|
||||||
// make sure text widgets draw the default way, erasing their background
|
// make sure text widgets draw the default way, erasing
|
||||||
|
// their background
|
||||||
if (poseView)
|
if (poseView)
|
||||||
poseView->SetWidgetTextOutline(true);
|
poseView->SetWidgetTextOutline(true);
|
||||||
}
|
}
|
||||||
fShowingBitmap = NULL;
|
fShowingBitmap = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BackgroundImage::BackgroundImageInfo*
|
BackgroundImage::BackgroundImageInfo*
|
||||||
BackgroundImage::ImageInfoForWorkspace(int32 workspace) const
|
BackgroundImage::ImageInfoForWorkspace(int32 workspace) const
|
||||||
{
|
{
|
||||||
@@ -308,6 +313,7 @@ BackgroundImage::ImageInfoForWorkspace(int32 workspace) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BackgroundImage::WorkspaceActivated(BView* view, int32 workspace, bool state)
|
BackgroundImage::WorkspaceActivated(BView* view, int32 workspace, bool state)
|
||||||
{
|
{
|
||||||
@@ -334,6 +340,7 @@ BackgroundImage::WorkspaceActivated(BView* view, int32 workspace, bool state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BackgroundImage::ScreenChanged(BRect, color_space)
|
BackgroundImage::ScreenChanged(BRect, color_space)
|
||||||
{
|
{
|
||||||
@@ -348,12 +355,13 @@ BackgroundImage::ScreenChanged(BRect, color_space)
|
|||||||
(viewBounds.Width() - bitmapBounds.Width()) / 2,
|
(viewBounds.Width() - bitmapBounds.Width()) / 2,
|
||||||
(viewBounds.Height() - bitmapBounds.Height()) / 2);
|
(viewBounds.Height() - bitmapBounds.Height()) / 2);
|
||||||
|
|
||||||
fView->SetViewBitmap(fShowingBitmap->fBitmap, bitmapBounds, destinationBitmapBounds,
|
fView->SetViewBitmap(fShowingBitmap->fBitmap, bitmapBounds,
|
||||||
B_FOLLOW_NONE, 0);
|
destinationBitmapBounds, B_FOLLOW_NONE, 0);
|
||||||
fView->Invalidate();
|
fView->Invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BackgroundImage*
|
BackgroundImage*
|
||||||
BackgroundImage::Refresh(BackgroundImage* oldBackgroundImage,
|
BackgroundImage::Refresh(BackgroundImage* oldBackgroundImage,
|
||||||
const BNode* fromNode, bool desktop, BPoseView* poseView)
|
const BNode* fromNode, bool desktop, BPoseView* poseView)
|
||||||
@@ -369,4 +377,3 @@ BackgroundImage::Refresh(BackgroundImage* oldBackgroundImage,
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,8 +77,8 @@ public:
|
|||||||
class BackgroundImageInfo {
|
class BackgroundImageInfo {
|
||||||
// element of the per-workspace list
|
// element of the per-workspace list
|
||||||
public:
|
public:
|
||||||
BackgroundImageInfo(uint32 workspace, BBitmap* bitmap, Mode mode, BPoint offset,
|
BackgroundImageInfo(uint32 workspace, BBitmap* bitmap, Mode mode,
|
||||||
bool textWidgetOutline);
|
BPoint offset, bool textWidgetOutline);
|
||||||
~BackgroundImageInfo();
|
~BackgroundImageInfo();
|
||||||
|
|
||||||
uint32 fWorkspace;
|
uint32 fWorkspace;
|
||||||
|
|||||||
@@ -153,8 +153,8 @@ ActivateWindowFilter(BMessage*, BHandler** target, BMessageFilter*)
|
|||||||
{
|
{
|
||||||
BView* view = dynamic_cast<BView*>(*target);
|
BView* view = dynamic_cast<BView*>(*target);
|
||||||
|
|
||||||
// activate the window if no PoseView or DraggableContainerIcon had been pressed
|
// activate the window if no PoseView or DraggableContainerIcon had been
|
||||||
// (those will activate the window themselves, if necessary)
|
// pressed (those will activate the window themselves, if necessary)
|
||||||
if (view
|
if (view
|
||||||
&& !dynamic_cast<BPoseView*>(view)
|
&& !dynamic_cast<BPoseView*>(view)
|
||||||
&& !dynamic_cast<DraggableContainerIcon*>(view)
|
&& !dynamic_cast<DraggableContainerIcon*>(view)
|
||||||
@@ -377,7 +377,8 @@ DraggableContainerIcon::MouseDown(BPoint point)
|
|||||||
if (IconCache::sIconCache->IconHitTest(point, window->TargetModel(),
|
if (IconCache::sIconCache->IconHitTest(point, window->TargetModel(),
|
||||||
kNormalIcon, B_MINI_ICON)) {
|
kNormalIcon, B_MINI_ICON)) {
|
||||||
// The click hit the icon, initiate a drag
|
// The click hit the icon, initiate a drag
|
||||||
fDragButton = buttons & (B_PRIMARY_MOUSE_BUTTON | B_SECONDARY_MOUSE_BUTTON);
|
fDragButton = buttons
|
||||||
|
& (B_PRIMARY_MOUSE_BUTTON | B_SECONDARY_MOUSE_BUTTON);
|
||||||
fDragStarted = false;
|
fDragStarted = false;
|
||||||
fClickPoint = point;
|
fClickPoint = point;
|
||||||
} else
|
} else
|
||||||
@@ -418,10 +419,11 @@ DraggableContainerIcon::MouseMoved(BPoint point, uint32 /*transit*/,
|
|||||||
|
|
||||||
font_height fontHeight;
|
font_height fontHeight;
|
||||||
font.GetHeight(&fontHeight);
|
font.GetHeight(&fontHeight);
|
||||||
float height = fontHeight.ascent + fontHeight.descent + fontHeight.leading + 2
|
float height = fontHeight.ascent + fontHeight.descent + fontHeight.leading
|
||||||
+ Bounds().Height() + 8;
|
+ 2 + Bounds().Height() + 8;
|
||||||
|
|
||||||
BRect rect(0, 0, max_c(Bounds().Width(), font.StringWidth(model->Name()) + 4), height);
|
BRect rect(0, 0, max_c(Bounds().Width(),
|
||||||
|
font.StringWidth(model->Name()) + 4), height);
|
||||||
BBitmap* dragBitmap = new BBitmap(rect, B_RGBA32, true);
|
BBitmap* dragBitmap = new BBitmap(rect, B_RGBA32, true);
|
||||||
|
|
||||||
dragBitmap->Lock();
|
dragBitmap->Lock();
|
||||||
@@ -437,7 +439,8 @@ DraggableContainerIcon::MouseMoved(BPoint point, uint32 /*transit*/,
|
|||||||
view->SetHighColor(0, 0, 0, 0);
|
view->SetHighColor(0, 0, 0, 0);
|
||||||
view->FillRect(view->Bounds());
|
view->FillRect(view->Bounds());
|
||||||
view->SetDrawingMode(B_OP_ALPHA);
|
view->SetDrawingMode(B_OP_ALPHA);
|
||||||
view->SetHighColor(0, 0, 0, 128); // set the level of transparency by value
|
view->SetHighColor(0, 0, 0, 128);
|
||||||
|
// set the level of transparency by value
|
||||||
view->SetBlendingMode(B_CONSTANT_ALPHA, B_ALPHA_COMPOSITE);
|
view->SetBlendingMode(B_CONSTANT_ALPHA, B_ALPHA_COMPOSITE);
|
||||||
|
|
||||||
// Draw the icon
|
// Draw the icon
|
||||||
@@ -451,8 +454,10 @@ DraggableContainerIcon::MouseMoved(BPoint point, uint32 /*transit*/,
|
|||||||
view->TruncateString(&nameString, B_TRUNCATE_END, rect.Width() - 5);
|
view->TruncateString(&nameString, B_TRUNCATE_END, rect.Width() - 5);
|
||||||
|
|
||||||
// Draw the label
|
// Draw the label
|
||||||
float leftText = (view->StringWidth(nameString.String()) - Bounds().Width()) / 2;
|
float leftText = (view->StringWidth(nameString.String())
|
||||||
view->MovePenTo(BPoint(hIconOffset - leftText + 2, Bounds().Height() + (fontHeight.ascent + 2)));
|
- Bounds().Width()) / 2;
|
||||||
|
view->MovePenTo(BPoint(hIconOffset - leftText + 2, Bounds().Height()
|
||||||
|
+ (fontHeight.ascent + 2)));
|
||||||
view->DrawString(nameString.String());
|
view->DrawString(nameString.String());
|
||||||
|
|
||||||
view->Sync();
|
view->Sync();
|
||||||
@@ -470,8 +475,8 @@ DraggableContainerIcon::MouseMoved(BPoint point, uint32 /*transit*/,
|
|||||||
|
|
||||||
if (button & B_PRIMARY_MOUSE_BUTTON) {
|
if (button & B_PRIMARY_MOUSE_BUTTON) {
|
||||||
// add an action specifier to the message, so that it is not copied
|
// add an action specifier to the message, so that it is not copied
|
||||||
message.AddInt32("be:actions",
|
message.AddInt32("be:actions", (modifiers() & B_OPTION_KEY) != 0
|
||||||
(modifiers() & B_OPTION_KEY) != 0 ? B_COPY_TARGET : B_MOVE_TARGET);
|
? B_COPY_TARGET : B_MOVE_TARGET);
|
||||||
}
|
}
|
||||||
|
|
||||||
fDragStarted = true;
|
fDragStarted = true;
|
||||||
@@ -787,14 +792,16 @@ BContainerWindow::CreatePoseView(Model* model)
|
|||||||
&& !fPoseView->IsFilePanel()) {
|
&& !fPoseView->IsFilePanel()) {
|
||||||
BRect rect(Bounds());
|
BRect rect(Bounds());
|
||||||
rect.top = 0;
|
rect.top = 0;
|
||||||
// The KeyMenuBar isn't attached yet, otherwise we'd use that to get the offset.
|
// The KeyMenuBar isn't attached yet, otherwise we'd use that
|
||||||
|
// to get the offset.
|
||||||
rect.bottom = BNavigator::CalcNavigatorHeight();
|
rect.bottom = BNavigator::CalcNavigatorHeight();
|
||||||
fNavigator = new BNavigator(model, rect);
|
fNavigator = new BNavigator(model, rect);
|
||||||
if (!settings.ShowNavigator())
|
if (!settings.ShowNavigator())
|
||||||
fNavigator->Hide();
|
fNavigator->Hide();
|
||||||
AddChild(fNavigator);
|
AddChild(fNavigator);
|
||||||
}
|
}
|
||||||
SetPathWatchingEnabled(settings.ShowNavigator() || settings.ShowFullPathInTitleBar());
|
SetPathWatchingEnabled(settings.ShowNavigator()
|
||||||
|
|| settings.ShowFullPathInTitleBar());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -891,8 +898,8 @@ BContainerWindow::RepopulateMenus()
|
|||||||
int32 selectCount = PoseView()->SelectionList()->CountItems();
|
int32 selectCount = PoseView()->SelectionList()->CountItems();
|
||||||
|
|
||||||
SetupOpenWithMenu(fFileMenu);
|
SetupOpenWithMenu(fFileMenu);
|
||||||
SetupMoveCopyMenus(selectCount
|
SetupMoveCopyMenus(selectCount ? PoseView()->SelectionList()->
|
||||||
? PoseView()->SelectionList()->FirstItem()->TargetModel()->EntryRef() : NULL,
|
FirstItem()->TargetModel()->EntryRef() : NULL,
|
||||||
fFileMenu);
|
fFileMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -925,7 +932,8 @@ BContainerWindow::Init(const BMessage* message)
|
|||||||
|
|
||||||
if (ShouldAddMenus()) {
|
if (ShouldAddMenus()) {
|
||||||
// add menu bar, menus and resize poseview to fit
|
// add menu bar, menus and resize poseview to fit
|
||||||
fMenuBar = new BMenuBar(BRect(0, 0, Bounds().Width() + 1, 1), "MenuBar");
|
fMenuBar = new BMenuBar(BRect(0, 0, Bounds().Width() + 1, 1),
|
||||||
|
"MenuBar");
|
||||||
fMenuBar->SetBorder(B_BORDER_FRAME);
|
fMenuBar->SetBorder(B_BORDER_FRAME);
|
||||||
AddMenus();
|
AddMenus();
|
||||||
AddChild(fMenuBar);
|
AddChild(fMenuBar);
|
||||||
@@ -942,8 +950,10 @@ BContainerWindow::Init(const BMessage* message)
|
|||||||
fPoseView->MoveTo(BPoint(0, navigatorDelta + y_delta));
|
fPoseView->MoveTo(BPoint(0, navigatorDelta + y_delta));
|
||||||
fPoseView->ResizeBy(0, -(y_delta));
|
fPoseView->ResizeBy(0, -(y_delta));
|
||||||
if (fPoseView->VScrollBar()) {
|
if (fPoseView->VScrollBar()) {
|
||||||
fPoseView->VScrollBar()->MoveBy(0, KeyMenuBar()->Bounds().Height());
|
fPoseView->VScrollBar()->MoveBy(0,
|
||||||
fPoseView->VScrollBar()->ResizeBy(0, -(KeyMenuBar()->Bounds().Height()));
|
KeyMenuBar()->Bounds().Height());
|
||||||
|
fPoseView->VScrollBar()->ResizeBy(0,
|
||||||
|
-(KeyMenuBar()->Bounds().Height()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// add folder icon to menu bar
|
// add folder icon to menu bar
|
||||||
@@ -960,7 +970,8 @@ BContainerWindow::Init(const BMessage* message)
|
|||||||
fMenuBar->AddChild(icon);
|
fMenuBar->AddChild(icon);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// add equivalents of the menu shortcuts to the menuless desktop window
|
// add equivalents of the menu shortcuts to the menuless
|
||||||
|
// desktop window
|
||||||
AddShortcuts();
|
AddShortcuts();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1304,7 +1315,8 @@ BContainerWindow::SetLayoutState(BNode* node, const BMessage* message)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->WriteAttr(name, type, 0, buffer, (size_t)size) != size) {
|
if (node->WriteAttr(name, type, 0, buffer,
|
||||||
|
(size_t)size) != size) {
|
||||||
PRINT(("error writing %s \n", name));
|
PRINT(("error writing %s \n", name));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1369,7 +1381,8 @@ BContainerWindow::ResizeToFit()
|
|||||||
BRect screenFrame(screen.Frame());
|
BRect screenFrame(screen.Frame());
|
||||||
|
|
||||||
screenFrame.InsetBy(5, 5);
|
screenFrame.InsetBy(5, 5);
|
||||||
screenFrame.top += 15; // keeps title bar of window visible
|
screenFrame.top += 15;
|
||||||
|
// keeps title bar of window visible
|
||||||
|
|
||||||
BRect frame(Frame());
|
BRect frame(Frame());
|
||||||
|
|
||||||
@@ -1490,12 +1503,13 @@ BContainerWindow::MessageReceived(BMessage* message)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
PoseView()->MoveSelectionInto(&model, this, false, false,
|
PoseView()->MoveSelectionInto(&model, this, false, false,
|
||||||
message->what == kCreateLink, message->what == kCreateRelativeLink);
|
message->what == kCreateLink,
|
||||||
} else {
|
message->what == kCreateRelativeLink);
|
||||||
|
} else if (!TargetModel()->IsQuery()) {
|
||||||
// no destination specified, create link in same dir as item
|
// no destination specified, create link in same dir as item
|
||||||
if (!TargetModel()->IsQuery())
|
|
||||||
PoseView()->MoveSelectionInto(TargetModel(), this, false, false,
|
PoseView()->MoveSelectionInto(TargetModel(), this, false, false,
|
||||||
message->what == kCreateLink, message->what == kCreateRelativeLink);
|
message->what == kCreateLink,
|
||||||
|
message->what == kCreateRelativeLink);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1554,13 +1568,17 @@ BContainerWindow::MessageReceived(BMessage* message)
|
|||||||
// 'action' at all if he can't find it??
|
// 'action' at all if he can't find it??
|
||||||
action = kActionSet;
|
action = kActionSet;
|
||||||
|
|
||||||
Navigator()->UpdateLocation(PoseView()->TargetModel(), action);
|
Navigator()->UpdateLocation(PoseView()->TargetModel(),
|
||||||
|
action);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackerSettings settings;
|
TrackerSettings settings;
|
||||||
if (settings.ShowNavigator() || settings.ShowFullPathInTitleBar())
|
if (settings.ShowNavigator()
|
||||||
|
|| settings.ShowFullPathInTitleBar()) {
|
||||||
SetPathWatchingEnabled(true);
|
SetPathWatchingEnabled(true);
|
||||||
SetSingleWindowBrowseShortcuts(settings.SingleWindowBrowse());
|
}
|
||||||
|
SetSingleWindowBrowseShortcuts(
|
||||||
|
settings.SingleWindowBrowse());
|
||||||
|
|
||||||
// Update draggable folder icon
|
// Update draggable folder icon
|
||||||
BView* view = FindView("MenuBar");
|
BView* view = FindView("MenuBar");
|
||||||
@@ -1581,26 +1599,23 @@ BContainerWindow::MessageReceived(BMessage* message)
|
|||||||
|
|
||||||
case B_REFS_RECEIVED:
|
case B_REFS_RECEIVED:
|
||||||
if (Dragging()) {
|
if (Dragging()) {
|
||||||
//
|
|
||||||
// ref in this message is the target,
|
// ref in this message is the target,
|
||||||
// the end point of the drag
|
// the end point of the drag
|
||||||
//
|
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
if (message->FindRef("refs", &ref) == B_OK) {
|
if (message->FindRef("refs", &ref) == B_OK) {
|
||||||
|
|
||||||
//printf("BContainerWindow::MessageReceived - refs received\n");
|
|
||||||
fWaitingForRefs = false;
|
fWaitingForRefs = false;
|
||||||
BEntry entry(&ref, true);
|
BEntry entry(&ref, true);
|
||||||
//
|
|
||||||
// don't copy to printers dir
|
// don't copy to printers dir
|
||||||
if (!FSIsPrintersDir(&entry)) {
|
if (!FSIsPrintersDir(&entry)) {
|
||||||
if (entry.InitCheck() == B_OK && entry.IsDirectory()) {
|
if (entry.InitCheck() == B_OK
|
||||||
|
&& entry.IsDirectory()) {
|
||||||
Model targetModel(&entry, true, false);
|
Model targetModel(&entry, true, false);
|
||||||
BPoint dropPoint;
|
BPoint dropPoint;
|
||||||
uint32 buttons;
|
uint32 buttons;
|
||||||
PoseView()->GetMouse(&dropPoint, &buttons, true);
|
PoseView()->GetMouse(&dropPoint, &buttons, true);
|
||||||
PoseView()->HandleDropCommon(fDragMessage, &targetModel, NULL,
|
PoseView()->HandleDropCommon(fDragMessage,
|
||||||
PoseView(), dropPoint);
|
&targetModel, NULL, PoseView(), dropPoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1611,15 +1626,21 @@ BContainerWindow::MessageReceived(BMessage* message)
|
|||||||
case B_OBSERVER_NOTICE_CHANGE:
|
case B_OBSERVER_NOTICE_CHANGE:
|
||||||
{
|
{
|
||||||
int32 observerWhat;
|
int32 observerWhat;
|
||||||
if (message->FindInt32("be:observe_change_what", &observerWhat) == B_OK) {
|
if (message->FindInt32("be:observe_change_what", &observerWhat)
|
||||||
|
== B_OK) {
|
||||||
TrackerSettings settings;
|
TrackerSettings settings;
|
||||||
switch (observerWhat) {
|
switch (observerWhat) {
|
||||||
case kWindowsShowFullPathChanged:
|
case kWindowsShowFullPathChanged:
|
||||||
UpdateTitle();
|
UpdateTitle();
|
||||||
if (!IsPathWatchingEnabled() && settings.ShowFullPathInTitleBar())
|
if (!IsPathWatchingEnabled()
|
||||||
|
&& settings.ShowFullPathInTitleBar()) {
|
||||||
SetPathWatchingEnabled(true);
|
SetPathWatchingEnabled(true);
|
||||||
if (IsPathWatchingEnabled() && !(settings.ShowNavigator() || settings.ShowFullPathInTitleBar()))
|
}
|
||||||
|
if (IsPathWatchingEnabled()
|
||||||
|
&& !(settings.ShowNavigator()
|
||||||
|
|| settings.ShowFullPathInTitleBar())) {
|
||||||
SetPathWatchingEnabled(false);
|
SetPathWatchingEnabled(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kSingleWindowBrowseChanged:
|
case kSingleWindowBrowseChanged:
|
||||||
@@ -1630,35 +1651,47 @@ BContainerWindow::MessageReceived(BMessage* message)
|
|||||||
&& !PoseView()->IsDesktopWindow()) {
|
&& !PoseView()->IsDesktopWindow()) {
|
||||||
BRect rect(Bounds());
|
BRect rect(Bounds());
|
||||||
rect.top = KeyMenuBar()->Bounds().Height() + 1;
|
rect.top = KeyMenuBar()->Bounds().Height() + 1;
|
||||||
rect.bottom = rect.top + BNavigator::CalcNavigatorHeight();
|
rect.bottom = rect.top
|
||||||
|
+ BNavigator::CalcNavigatorHeight();
|
||||||
fNavigator = new BNavigator(TargetModel(), rect);
|
fNavigator = new BNavigator(TargetModel(), rect);
|
||||||
fNavigator->Hide();
|
fNavigator->Hide();
|
||||||
AddChild(fNavigator);
|
AddChild(fNavigator);
|
||||||
SetPathWatchingEnabled(settings.ShowNavigator() || settings.ShowFullPathInTitleBar());
|
SetPathWatchingEnabled(settings.ShowNavigator()
|
||||||
|
|| settings.ShowFullPathInTitleBar());
|
||||||
}
|
}
|
||||||
SetSingleWindowBrowseShortcuts(settings.SingleWindowBrowse());
|
SetSingleWindowBrowseShortcuts(
|
||||||
|
settings.SingleWindowBrowse());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kShowNavigatorChanged:
|
case kShowNavigatorChanged:
|
||||||
ShowNavigator(settings.ShowNavigator());
|
ShowNavigator(settings.ShowNavigator());
|
||||||
if (!IsPathWatchingEnabled() && settings.ShowNavigator())
|
if (!IsPathWatchingEnabled()
|
||||||
|
&& settings.ShowNavigator()) {
|
||||||
SetPathWatchingEnabled(true);
|
SetPathWatchingEnabled(true);
|
||||||
if (IsPathWatchingEnabled() && !(settings.ShowNavigator() || settings.ShowFullPathInTitleBar()))
|
}
|
||||||
|
if (IsPathWatchingEnabled()
|
||||||
|
&& !(settings.ShowNavigator()
|
||||||
|
|| settings.ShowFullPathInTitleBar())) {
|
||||||
SetPathWatchingEnabled(false);
|
SetPathWatchingEnabled(false);
|
||||||
SetSingleWindowBrowseShortcuts(settings.SingleWindowBrowse());
|
}
|
||||||
|
SetSingleWindowBrowseShortcuts(
|
||||||
|
settings.SingleWindowBrowse());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kDontMoveFilesToTrashChanged:
|
case kDontMoveFilesToTrashChanged:
|
||||||
{
|
{
|
||||||
bool dontMoveToTrash = settings.DontMoveFilesToTrash();
|
bool dontMoveToTrash
|
||||||
|
= settings.DontMoveFilesToTrash();
|
||||||
|
|
||||||
BMenuItem* item = fFileContextMenu->FindItem(kMoveToTrash);
|
BMenuItem* item
|
||||||
if (item) {
|
= fFileContextMenu->FindItem(kMoveToTrash);
|
||||||
|
if (item != NULL) {
|
||||||
item->SetLabel(dontMoveToTrash
|
item->SetLabel(dontMoveToTrash
|
||||||
? B_TRANSLATE("Delete")
|
? B_TRANSLATE("Delete")
|
||||||
: B_TRANSLATE("Move to Trash"));
|
: B_TRANSLATE("Move to Trash"));
|
||||||
}
|
}
|
||||||
// Deskbar doesn't have a menu bar, so check if there is fMenuBar
|
// Deskbar doesn't have a menu bar, so check if
|
||||||
|
// there is fMenuBar
|
||||||
if (fMenuBar && fFileMenu) {
|
if (fMenuBar && fFileMenu) {
|
||||||
item = fFileMenu->FindItem(kMoveToTrash);
|
item = fFileMenu->FindItem(kMoveToTrash);
|
||||||
if (item) {
|
if (item) {
|
||||||
@@ -2009,8 +2042,8 @@ BContainerWindow::AddWindowMenu(BMenu* menu)
|
|||||||
item->SetTarget(PoseView());
|
item->SetTarget(PoseView());
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Select all"), new BMessage(B_SELECT_ALL),
|
item = new BMenuItem(B_TRANSLATE("Select all"),
|
||||||
'A');
|
new BMessage(B_SELECT_ALL), 'A');
|
||||||
item->SetTarget(PoseView());
|
item->SetTarget(PoseView());
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
@@ -2026,8 +2059,8 @@ BContainerWindow::AddWindowMenu(BMenu* menu)
|
|||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Close"), new BMessage(B_QUIT_REQUESTED),
|
item = new BMenuItem(B_TRANSLATE("Close"),
|
||||||
'W');
|
new BMessage(B_QUIT_REQUESTED), 'W');
|
||||||
item->SetTarget(this);
|
item->SetTarget(this);
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
@@ -2053,26 +2086,42 @@ BContainerWindow::AddShortcuts()
|
|||||||
ASSERT(!PoseView()->IsFilePanel());
|
ASSERT(!PoseView()->IsFilePanel());
|
||||||
ASSERT(!TargetModel()->IsQuery());
|
ASSERT(!TargetModel()->IsQuery());
|
||||||
|
|
||||||
AddShortcut('X', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(kCutMoreSelectionToClipboard), this);
|
AddShortcut('X', B_COMMAND_KEY | B_SHIFT_KEY,
|
||||||
AddShortcut('C', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(kCopyMoreSelectionToClipboard), this);
|
new BMessage(kCutMoreSelectionToClipboard), this);
|
||||||
AddShortcut('F', B_COMMAND_KEY, new BMessage(kFindButton), PoseView());
|
AddShortcut('C', B_COMMAND_KEY | B_SHIFT_KEY,
|
||||||
AddShortcut('N', B_COMMAND_KEY, new BMessage(kNewFolder), PoseView());
|
new BMessage(kCopyMoreSelectionToClipboard), this);
|
||||||
AddShortcut('O', B_COMMAND_KEY, new BMessage(kOpenSelection), PoseView());
|
AddShortcut('F', B_COMMAND_KEY,
|
||||||
AddShortcut('I', B_COMMAND_KEY, new BMessage(kGetInfo), PoseView());
|
new BMessage(kFindButton), PoseView());
|
||||||
AddShortcut('E', B_COMMAND_KEY, new BMessage(kEditItem), PoseView());
|
AddShortcut('N', B_COMMAND_KEY,
|
||||||
AddShortcut('D', B_COMMAND_KEY, new BMessage(kDuplicateSelection), PoseView());
|
new BMessage(kNewFolder), PoseView());
|
||||||
AddShortcut('T', B_COMMAND_KEY, new BMessage(kMoveToTrash), PoseView());
|
AddShortcut('O', B_COMMAND_KEY,
|
||||||
AddShortcut('K', B_COMMAND_KEY, new BMessage(kCleanup), PoseView());
|
new BMessage(kOpenSelection), PoseView());
|
||||||
AddShortcut('A', B_COMMAND_KEY, new BMessage(B_SELECT_ALL), PoseView());
|
AddShortcut('I', B_COMMAND_KEY,
|
||||||
AddShortcut('S', B_COMMAND_KEY, new BMessage(kInvertSelection), PoseView());
|
new BMessage(kGetInfo), PoseView());
|
||||||
AddShortcut('A', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(kShowSelectionWindow), PoseView());
|
AddShortcut('E', B_COMMAND_KEY,
|
||||||
AddShortcut('G', B_COMMAND_KEY, new BMessage(kEditQuery), PoseView());
|
new BMessage(kEditItem), PoseView());
|
||||||
|
AddShortcut('D', B_COMMAND_KEY,
|
||||||
|
new BMessage(kDuplicateSelection), PoseView());
|
||||||
|
AddShortcut('T', B_COMMAND_KEY,
|
||||||
|
new BMessage(kMoveToTrash), PoseView());
|
||||||
|
AddShortcut('K', B_COMMAND_KEY,
|
||||||
|
new BMessage(kCleanup), PoseView());
|
||||||
|
AddShortcut('A', B_COMMAND_KEY,
|
||||||
|
new BMessage(B_SELECT_ALL), PoseView());
|
||||||
|
AddShortcut('S', B_COMMAND_KEY,
|
||||||
|
new BMessage(kInvertSelection), PoseView());
|
||||||
|
AddShortcut('A', B_COMMAND_KEY | B_SHIFT_KEY,
|
||||||
|
new BMessage(kShowSelectionWindow), PoseView());
|
||||||
|
AddShortcut('G', B_COMMAND_KEY,
|
||||||
|
new BMessage(kEditQuery), PoseView());
|
||||||
// it is ok to add a global Edit query shortcut here, PoseView will
|
// it is ok to add a global Edit query shortcut here, PoseView will
|
||||||
// filter out cases where selected pose is not a query
|
// filter out cases where selected pose is not a query
|
||||||
AddShortcut('U', B_COMMAND_KEY, new BMessage(kUnmountVolume), PoseView());
|
AddShortcut('U', B_COMMAND_KEY,
|
||||||
AddShortcut(B_UP_ARROW, B_COMMAND_KEY, new BMessage(kOpenParentDir), PoseView());
|
new BMessage(kUnmountVolume), PoseView());
|
||||||
AddShortcut('O', B_COMMAND_KEY | B_CONTROL_KEY, new BMessage(kOpenSelectionWith),
|
AddShortcut(B_UP_ARROW, B_COMMAND_KEY,
|
||||||
PoseView());
|
new BMessage(kOpenParentDir), PoseView());
|
||||||
|
AddShortcut('O', B_COMMAND_KEY | B_CONTROL_KEY,
|
||||||
|
new BMessage(kOpenSelectionWith), PoseView());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2092,7 +2141,8 @@ BContainerWindow::MenusBeginning()
|
|||||||
|
|
||||||
SetupOpenWithMenu(fFileMenu);
|
SetupOpenWithMenu(fFileMenu);
|
||||||
SetupMoveCopyMenus(selectCount
|
SetupMoveCopyMenus(selectCount
|
||||||
? PoseView()->SelectionList()->FirstItem()->TargetModel()->EntryRef() : NULL, fFileMenu);
|
? PoseView()->SelectionList()->FirstItem()->TargetModel()->EntryRef()
|
||||||
|
: NULL, fFileMenu);
|
||||||
|
|
||||||
UpdateMenu(fMenuBar, kMenuBarContext);
|
UpdateMenu(fMenuBar, kMenuBarContext);
|
||||||
|
|
||||||
@@ -2464,11 +2514,13 @@ BContainerWindow::SetupMoveCopyMenus(const entry_ref* item_ref, BMenu* parent)
|
|||||||
// add all mounted volumes (except the one this item lives on)
|
// add all mounted volumes (except the one this item lives on)
|
||||||
if (modifierKeys & B_SHIFT_KEY) {
|
if (modifierKeys & B_SHIFT_KEY) {
|
||||||
fCreateLinkItem->SetMessage(new BMessage(kCreateRelativeLink));
|
fCreateLinkItem->SetMessage(new BMessage(kCreateRelativeLink));
|
||||||
PopulateMoveCopyNavMenu(dynamic_cast<BNavMenu*>(fCreateLinkItem->Submenu()),
|
PopulateMoveCopyNavMenu(dynamic_cast<BNavMenu*>
|
||||||
|
(fCreateLinkItem->Submenu()),
|
||||||
kCreateRelativeLink, item_ref, false);
|
kCreateRelativeLink, item_ref, false);
|
||||||
} else {
|
} else {
|
||||||
fCreateLinkItem->SetMessage(new BMessage(kCreateLink));
|
fCreateLinkItem->SetMessage(new BMessage(kCreateLink));
|
||||||
PopulateMoveCopyNavMenu(dynamic_cast<BNavMenu*>(fCreateLinkItem->Submenu()),
|
PopulateMoveCopyNavMenu(dynamic_cast<BNavMenu*>
|
||||||
|
(fCreateLinkItem->Submenu()),
|
||||||
kCreateLink, item_ref, false);
|
kCreateLink, item_ref, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2566,7 +2618,8 @@ BContainerWindow::ShowContextMenu(BPoint loc, const entry_ref* ref, BView*)
|
|||||||
// see the notes in SlowContextPopup::AttachedToWindow
|
// see the notes in SlowContextPopup::AttachedToWindow
|
||||||
|
|
||||||
if (!FSIsPrintersDir(&entry) && !fDragContextMenu->IsShowing()) {
|
if (!FSIsPrintersDir(&entry) && !fDragContextMenu->IsShowing()) {
|
||||||
// printf("ShowContextMenu - target is %s %i\n", ref->name, IsShowing(ref));
|
//printf("ShowContextMenu - target is %s %i\n",
|
||||||
|
// ref->name, IsShowing(ref));
|
||||||
fDragContextMenu->ClearMenu();
|
fDragContextMenu->ClearMenu();
|
||||||
|
|
||||||
// in case the ref is a symlink, resolve it
|
// in case the ref is a symlink, resolve it
|
||||||
@@ -2586,7 +2639,8 @@ BContainerWindow::ShowContextMenu(BPoint loc, const entry_ref* ref, BView*)
|
|||||||
if (poseView) {
|
if (poseView) {
|
||||||
BMessenger target(poseView);
|
BMessenger target(poseView);
|
||||||
fDragContextMenu->InitTrackingHook(
|
fDragContextMenu->InitTrackingHook(
|
||||||
&BPoseView::MenuTrackingHook, &target, fDragMessage);
|
&BPoseView::MenuTrackingHook, &target,
|
||||||
|
fDragMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is now asynchronous so that we don't
|
// this is now asynchronous so that we don't
|
||||||
@@ -2876,7 +2930,8 @@ BContainerWindow::EachAddon(BPath &path, bool (*eachAddon)(const Model*,
|
|||||||
else
|
else
|
||||||
delete resolved;
|
delete resolved;
|
||||||
}
|
}
|
||||||
if (model->InitCheck() != B_OK || !model->ResolveIfLink()->IsExecutable()) {
|
if (model->InitCheck() != B_OK
|
||||||
|
|| !model->ResolveIfLink()->IsExecutable()) {
|
||||||
delete model;
|
delete model;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -2903,7 +2958,8 @@ BContainerWindow::EachAddon(BPath &path, bool (*eachAddon)(const Model*,
|
|||||||
|
|
||||||
// check all supported types if it has some set
|
// check all supported types if it has some set
|
||||||
if (!secondary) {
|
if (!secondary) {
|
||||||
for (int32 i = mimeTypes.CountItems(); !primary && i-- > 0;) {
|
for (int32 i = mimeTypes.CountItems();
|
||||||
|
!primary && i-- > 0;) {
|
||||||
BString* type = mimeTypes.ItemAt(i);
|
BString* type = mimeTypes.ItemAt(i);
|
||||||
if (info.IsSupportedType(type->String())) {
|
if (info.IsSupportedType(type->String())) {
|
||||||
BMimeType mimeType(type->String());
|
BMimeType mimeType(type->String());
|
||||||
@@ -3044,7 +3100,8 @@ BContainerWindow::UpdateMenu(BMenu* menu, UpdateMenuContext context)
|
|||||||
|
|
||||||
Model* selectedModel = NULL;
|
Model* selectedModel = NULL;
|
||||||
if (selectCount == 1)
|
if (selectCount == 1)
|
||||||
selectedModel = PoseView()->SelectionList()->FirstItem()->TargetModel();
|
selectedModel = PoseView()->SelectionList()->FirstItem()->
|
||||||
|
TargetModel();
|
||||||
|
|
||||||
if (context == kMenuBarContext || context == kPosePopUpContext) {
|
if (context == kMenuBarContext || context == kPosePopUpContext) {
|
||||||
SetUpEditQueryItem(menu);
|
SetUpEditQueryItem(menu);
|
||||||
@@ -3117,8 +3174,8 @@ BContainerWindow::UpdateMenu(BMenu* menu, UpdateMenuContext context)
|
|||||||
|
|
||||||
BMenuItem* item = menu->FindItem(B_TRANSLATE("New"));
|
BMenuItem* item = menu->FindItem(B_TRANSLATE("New"));
|
||||||
if (item) {
|
if (item) {
|
||||||
TemplatesMenu* templateMenu = dynamic_cast<TemplatesMenu*>(
|
TemplatesMenu* templateMenu = dynamic_cast<TemplatesMenu*>
|
||||||
item->Submenu());
|
(item->Submenu());
|
||||||
if (templateMenu)
|
if (templateMenu)
|
||||||
templateMenu->UpdateMenuState();
|
templateMenu->UpdateMenuState();
|
||||||
}
|
}
|
||||||
@@ -3159,8 +3216,8 @@ BContainerWindow::LoadAddOn(BMessage* message)
|
|||||||
|
|
||||||
refs->AddMessenger("TrackerViewToken", BMessenger(PoseView()));
|
refs->AddMessenger("TrackerViewToken", BMessenger(PoseView()));
|
||||||
|
|
||||||
LaunchInNewThread("Add-on", B_NORMAL_PRIORITY, &AddOnThread, refs, addonRef,
|
LaunchInNewThread("Add-on", B_NORMAL_PRIORITY, &AddOnThread, refs,
|
||||||
*TargetModel()->EntryRef());
|
addonRef, *TargetModel()->EntryRef());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3174,12 +3231,15 @@ BContainerWindow::_UpdateSelectionMIMEInfo()
|
|||||||
if (!mimeType.Length() || mimeType.ICompare(B_FILE_MIMETYPE) == 0) {
|
if (!mimeType.Length() || mimeType.ICompare(B_FILE_MIMETYPE) == 0) {
|
||||||
pose->TargetModel()->Mimeset(true);
|
pose->TargetModel()->Mimeset(true);
|
||||||
if (pose->TargetModel()->IsSymLink()) {
|
if (pose->TargetModel()->IsSymLink()) {
|
||||||
Model* resolved = new Model(pose->TargetModel()->EntryRef(), true, true);
|
Model* resolved = new Model(pose->TargetModel()->EntryRef(),
|
||||||
|
true, true);
|
||||||
if (resolved->InitCheck() == B_OK) {
|
if (resolved->InitCheck() == B_OK) {
|
||||||
mimeType.SetTo(resolved->MimeType());
|
mimeType.SetTo(resolved->MimeType());
|
||||||
if (!mimeType.Length() || mimeType.ICompare(B_FILE_MIMETYPE) == 0)
|
if (!mimeType.Length()
|
||||||
|
|| mimeType.ICompare(B_FILE_MIMETYPE) == 0) {
|
||||||
resolved->Mimeset(true);
|
resolved->Mimeset(true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
delete resolved;
|
delete resolved;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3241,8 +3301,8 @@ BContainerWindow::NewAttributeMenu(BMenu* menu)
|
|||||||
kAttrRealName, B_STRING_TYPE, 145, B_ALIGN_LEFT, true, true));
|
kAttrRealName, B_STRING_TYPE, 145, B_ALIGN_LEFT, true, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
menu->AddItem(NewAttributeMenuItem (B_TRANSLATE("Size"), kAttrStatSize, B_OFF_T_TYPE,
|
menu->AddItem(NewAttributeMenuItem (B_TRANSLATE("Size"), kAttrStatSize,
|
||||||
80, B_ALIGN_RIGHT, false, true));
|
B_OFF_T_TYPE, 80, B_ALIGN_RIGHT, false, true));
|
||||||
|
|
||||||
menu->AddItem(NewAttributeMenuItem(B_TRANSLATE("Modified"),
|
menu->AddItem(NewAttributeMenuItem(B_TRANSLATE("Modified"),
|
||||||
kAttrStatModified, B_TIME_TYPE, 150, B_ALIGN_LEFT, false, true));
|
kAttrStatModified, B_TIME_TYPE, 150, B_ALIGN_LEFT, false, true));
|
||||||
@@ -3255,7 +3315,8 @@ BContainerWindow::NewAttributeMenu(BMenu* menu)
|
|||||||
|
|
||||||
if (IsTrash() || InTrash()) {
|
if (IsTrash() || InTrash()) {
|
||||||
menu->AddItem(NewAttributeMenuItem(B_TRANSLATE("Original name"),
|
menu->AddItem(NewAttributeMenuItem(B_TRANSLATE("Original name"),
|
||||||
kAttrOriginalPath, B_STRING_TYPE, 225, B_ALIGN_LEFT, false, false));
|
kAttrOriginalPath, B_STRING_TYPE, 225, B_ALIGN_LEFT, false,
|
||||||
|
false));
|
||||||
} else {
|
} else {
|
||||||
menu->AddItem(NewAttributeMenuItem(B_TRANSLATE("Location"), kAttrPath,
|
menu->AddItem(NewAttributeMenuItem(B_TRANSLATE("Location"), kAttrPath,
|
||||||
B_STRING_TYPE, 225, B_ALIGN_LEFT, false, false));
|
B_STRING_TYPE, 225, B_ALIGN_LEFT, false, false));
|
||||||
@@ -3344,9 +3405,10 @@ BContainerWindow::MarkArrangeByMenu(BMenu* menu)
|
|||||||
BMenuItem* item = menu->ItemAt(index);
|
BMenuItem* item = menu->ItemAt(index);
|
||||||
if (item->Message()) {
|
if (item->Message()) {
|
||||||
uint32 attrHash;
|
uint32 attrHash;
|
||||||
if (item->Message()->FindInt32("attr_hash", (int32*)&attrHash) == B_OK)
|
if (item->Message()->FindInt32("attr_hash",
|
||||||
|
(int32*)&attrHash) == B_OK) {
|
||||||
item->SetMarked(PoseView()->PrimarySort() == attrHash);
|
item->SetMarked(PoseView()->PrimarySort() == attrHash);
|
||||||
else if (item->Command() == kArrangeReverseOrder)
|
} else if (item->Command() == kArrangeReverseOrder)
|
||||||
item->SetMarked(PoseView()->ReverseSort());
|
item->SetMarked(PoseView()->ReverseSort());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3669,7 +3731,8 @@ BContainerWindow::SetUpDefaultState()
|
|||||||
BDirectory desktop;
|
BDirectory desktop;
|
||||||
FSGetDeskDir(&desktop);
|
FSGetDeskDir(&desktop);
|
||||||
|
|
||||||
// try copying state from our parent directory, unless it is the desktop folder
|
// try copying state from our parent directory, unless it is the
|
||||||
|
// desktop folder
|
||||||
BEntry entry(TargetModel()->EntryRef());
|
BEntry entry(TargetModel()->EntryRef());
|
||||||
BDirectory parent;
|
BDirectory parent;
|
||||||
if (entry.GetParent(&parent) == B_OK && parent != desktop) {
|
if (entry.GetParent(&parent) == B_OK && parent != desktop) {
|
||||||
@@ -3689,8 +3752,8 @@ BContainerWindow::SetUpDefaultState()
|
|||||||
// tracker settings folder for what our state should be
|
// tracker settings folder for what our state should be
|
||||||
// For simplicity we are not picking up the most recent
|
// For simplicity we are not picking up the most recent
|
||||||
// changes that didn't get committed if home is still open in
|
// changes that didn't get committed if home is still open in
|
||||||
// a window, that's probably not a problem; would be OK if state got committed
|
// a window, that's probably not a problem; would be OK if state
|
||||||
// after every change
|
// got committed after every change
|
||||||
&& !DefaultStateSourceNode(kDefaultFolderTemplate, &defaultingNode, true))
|
&& !DefaultStateSourceNode(kDefaultFolderTemplate, &defaultingNode, true))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -3712,7 +3775,8 @@ BContainerWindow::SetUpDefaultState()
|
|||||||
|
|
||||||
StaggerOneParams params;
|
StaggerOneParams params;
|
||||||
params.rectFromParent = shouldStagger;
|
params.rectFromParent = shouldStagger;
|
||||||
SelectiveAttributeTransformer frameOffsetter(kAttrWindowFrame, OffsetFrameOne, ¶ms);
|
SelectiveAttributeTransformer frameOffsetter(kAttrWindowFrame,
|
||||||
|
OffsetFrameOne, ¶ms);
|
||||||
SelectiveAttributeTransformer scrollOriginCleaner(kAttrViewState,
|
SelectiveAttributeTransformer scrollOriginCleaner(kAttrViewState,
|
||||||
ClearViewOriginOne, ¶ms);
|
ClearViewOriginOne, ¶ms);
|
||||||
|
|
||||||
@@ -3744,7 +3808,8 @@ BContainerWindow::RestoreWindowState(AttributeStreamNode* node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
BRect frame(Frame());
|
BRect frame(Frame());
|
||||||
if (node->Read(rectAttributeName, 0, B_RECT_TYPE, sizeof(BRect), &frame) == sizeof(BRect)) {
|
if (node->Read(rectAttributeName, 0, B_RECT_TYPE, sizeof(BRect), &frame)
|
||||||
|
== sizeof(BRect)) {
|
||||||
MoveTo(frame.LeftTop());
|
MoveTo(frame.LeftTop());
|
||||||
ResizeTo(frame.Width(), frame.Height());
|
ResizeTo(frame.Width(), frame.Height());
|
||||||
} else
|
} else
|
||||||
@@ -3754,7 +3819,8 @@ BContainerWindow::RestoreWindowState(AttributeStreamNode* node)
|
|||||||
|
|
||||||
uint32 workspace;
|
uint32 workspace;
|
||||||
if ((fContainerWindowFlags & kRestoreWorkspace)
|
if ((fContainerWindowFlags & kRestoreWorkspace)
|
||||||
&& node->Read(workspaceAttributeName, 0, B_INT32_TYPE, sizeof(uint32), &workspace) == sizeof(uint32))
|
&& node->Read(workspaceAttributeName, 0, B_INT32_TYPE, sizeof(uint32),
|
||||||
|
&workspace) == sizeof(uint32))
|
||||||
SetWorkspaces(workspace);
|
SetWorkspaces(workspace);
|
||||||
|
|
||||||
if (fContainerWindowFlags & kIsHidden)
|
if (fContainerWindowFlags & kIsHidden)
|
||||||
@@ -3766,7 +3832,8 @@ BContainerWindow::RestoreWindowState(AttributeStreamNode* node)
|
|||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
char buffer[size];
|
char buffer[size];
|
||||||
if ((fContainerWindowFlags & kRestoreDecor)
|
if ((fContainerWindowFlags & kRestoreDecor)
|
||||||
&& node->Read(kAttrWindowDecor, 0, B_RAW_TYPE, size, buffer) == size) {
|
&& node->Read(kAttrWindowDecor, 0, B_RAW_TYPE, size, buffer)
|
||||||
|
== size) {
|
||||||
BMessage decorSettings;
|
BMessage decorSettings;
|
||||||
if (decorSettings.Unflatten(buffer) == B_OK)
|
if (decorSettings.Unflatten(buffer) == B_OK)
|
||||||
SetDecoratorSettings(decorSettings);
|
SetDecoratorSettings(decorSettings);
|
||||||
@@ -3802,8 +3869,10 @@ BContainerWindow::RestoreWindowState(const BMessage &message)
|
|||||||
|
|
||||||
uint32 workspace;
|
uint32 workspace;
|
||||||
if ((fContainerWindowFlags & kRestoreWorkspace)
|
if ((fContainerWindowFlags & kRestoreWorkspace)
|
||||||
&& message.FindInt32(workspaceAttributeName, (int32*)&workspace) == B_OK)
|
&& message.FindInt32(workspaceAttributeName,
|
||||||
|
(int32*)&workspace) == B_OK) {
|
||||||
SetWorkspaces(workspace);
|
SetWorkspaces(workspace);
|
||||||
|
}
|
||||||
|
|
||||||
if (fContainerWindowFlags & kIsHidden)
|
if (fContainerWindowFlags & kIsHidden)
|
||||||
Minimize(true);
|
Minimize(true);
|
||||||
@@ -3890,12 +3959,15 @@ BContainerWindow::DragStart(const BMessage* dragMessage)
|
|||||||
|
|
||||||
// if already dragging, or
|
// if already dragging, or
|
||||||
// if all the refs match
|
// if all the refs match
|
||||||
if (Dragging() && SpringLoadedFolderCompareMessages(dragMessage, fDragMessage))
|
if (Dragging()
|
||||||
|
&& SpringLoadedFolderCompareMessages(dragMessage, fDragMessage)) {
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// cache the current drag message
|
// cache the current drag message
|
||||||
// build a list of the mimetypes in the message
|
// build a list of the mimetypes in the message
|
||||||
SpringLoadedFolderCacheDragData(dragMessage, &fDragMessage, &fCachedTypesList);
|
SpringLoadedFolderCacheDragData(dragMessage, &fDragMessage,
|
||||||
|
&fCachedTypesList);
|
||||||
|
|
||||||
fWaitingForRefs = true;
|
fWaitingForRefs = true;
|
||||||
|
|
||||||
@@ -4034,7 +4106,8 @@ BContainerWindow::SetSingleWindowBrowseShortcuts(bool enabled)
|
|||||||
new BMessage(kOpenSelection), PoseView());
|
new BMessage(kOpenSelection), PoseView());
|
||||||
AddShortcut(B_UP_ARROW, B_COMMAND_KEY,
|
AddShortcut(B_UP_ARROW, B_COMMAND_KEY,
|
||||||
new BMessage(kOpenParentDir), PoseView());
|
new BMessage(kOpenParentDir), PoseView());
|
||||||
// We change the meaning from kNavigatorCommandUp to kOpenParentDir.
|
// We change the meaning from kNavigatorCommandUp
|
||||||
|
// to kOpenParentDir.
|
||||||
AddShortcut(B_UP_ARROW, B_COMMAND_KEY | B_OPTION_KEY,
|
AddShortcut(B_UP_ARROW, B_COMMAND_KEY | B_OPTION_KEY,
|
||||||
new BMessage(kOpenParentDir), PoseView());
|
new BMessage(kOpenParentDir), PoseView());
|
||||||
// command + option results in closing the parent window
|
// command + option results in closing the parent window
|
||||||
@@ -4118,7 +4191,8 @@ BContainerWindow::PopulateArrangeByMenu(BMenu* menu)
|
|||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup), 'K');
|
item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup),
|
||||||
|
'K');
|
||||||
item->SetTarget(PoseView());
|
item->SetTarget(PoseView());
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
}
|
}
|
||||||
@@ -4127,7 +4201,8 @@ BContainerWindow::PopulateArrangeByMenu(BMenu* menu)
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
WindowStateNodeOpener::WindowStateNodeOpener(BContainerWindow* window, bool forWriting)
|
WindowStateNodeOpener::WindowStateNodeOpener(BContainerWindow* window,
|
||||||
|
bool forWriting)
|
||||||
: fModelOpener(NULL),
|
: fModelOpener(NULL),
|
||||||
fNode(NULL),
|
fNode(NULL),
|
||||||
fStreamNode(NULL)
|
fStreamNode(NULL)
|
||||||
@@ -4139,9 +4214,12 @@ WindowStateNodeOpener::WindowStateNodeOpener(BContainerWindow* window, bool forW
|
|||||||
fStreamNode = new AttributeStreamFileNode(fNode);
|
fStreamNode = new AttributeStreamFileNode(fNode);
|
||||||
}
|
}
|
||||||
} else if (window->TargetModel()){
|
} else if (window->TargetModel()){
|
||||||
fModelOpener = new ModelNodeLazyOpener(window->TargetModel(), forWriting, false);
|
fModelOpener = new ModelNodeLazyOpener(window->TargetModel(),
|
||||||
if (fModelOpener->IsOpen(forWriting))
|
forWriting, false);
|
||||||
fStreamNode = new AttributeStreamFileNode(fModelOpener->TargetModel()->Node());
|
if (fModelOpener->IsOpen(forWriting)) {
|
||||||
|
fStreamNode = new AttributeStreamFileNode(
|
||||||
|
fModelOpener->TargetModel()->Node());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,8 @@ class BContainerWindow : public BWindow {
|
|||||||
uint32 containerWindowFlags,
|
uint32 containerWindowFlags,
|
||||||
window_look look = B_DOCUMENT_WINDOW_LOOK,
|
window_look look = B_DOCUMENT_WINDOW_LOOK,
|
||||||
window_feel feel = B_NORMAL_WINDOW_FEEL,
|
window_feel feel = B_NORMAL_WINDOW_FEEL,
|
||||||
uint32 flags = B_WILL_ACCEPT_FIRST_CLICK | B_NO_WORKSPACE_ACTIVATION,
|
uint32 flags = B_WILL_ACCEPT_FIRST_CLICK
|
||||||
|
| B_NO_WORKSPACE_ACTIVATION,
|
||||||
uint32 workspace = B_CURRENT_WORKSPACE);
|
uint32 workspace = B_CURRENT_WORKSPACE);
|
||||||
|
|
||||||
virtual ~BContainerWindow();
|
virtual ~BContainerWindow();
|
||||||
@@ -152,7 +153,8 @@ class BContainerWindow : public BWindow {
|
|||||||
void MarkAttributeMenu();
|
void MarkAttributeMenu();
|
||||||
void MarkArrangeByMenu(BMenu*);
|
void MarkArrangeByMenu(BMenu*);
|
||||||
BMenuItem* NewAttributeMenuItem(const char* label, const char* name,
|
BMenuItem* NewAttributeMenuItem(const char* label, const char* name,
|
||||||
int32 type, float width, int32 align, bool editable, bool statField);
|
int32 type, float width, int32 align, bool editable,
|
||||||
|
bool statField);
|
||||||
BMenuItem* NewAttributeMenuItem(const char* label, const char* name,
|
BMenuItem* NewAttributeMenuItem(const char* label, const char* name,
|
||||||
int32 type, const char* displayAs, float width, int32 align,
|
int32 type, const char* displayAs, float width, int32 align,
|
||||||
bool editable, bool statField);
|
bool editable, bool statField);
|
||||||
@@ -163,7 +165,8 @@ class BContainerWindow : public BWindow {
|
|||||||
PiggybackTaskLoop* DelayedTaskLoop();
|
PiggybackTaskLoop* DelayedTaskLoop();
|
||||||
// use for RunLater queueing
|
// use for RunLater queueing
|
||||||
void PulseTaskLoop();
|
void PulseTaskLoop();
|
||||||
// called by some view that has pulse, either BackgroundView or BPoseView
|
// called by some view that has pulse, either BackgroundView
|
||||||
|
// or BPoseView
|
||||||
|
|
||||||
static bool DefaultStateSourceNode(const char* name, BNode* result,
|
static bool DefaultStateSourceNode(const char* name, BNode* result,
|
||||||
bool createNew = false, bool createFolder = true);
|
bool createNew = false, bool createFolder = true);
|
||||||
@@ -205,7 +208,8 @@ class BContainerWindow : public BWindow {
|
|||||||
|
|
||||||
virtual void AddMenus();
|
virtual void AddMenus();
|
||||||
virtual void AddShortcuts();
|
virtual void AddShortcuts();
|
||||||
// add equivalents of the menu shortcuts to the menuless desktop window
|
// add equivalents of the menu shortcuts to the menuless
|
||||||
|
// desktop window
|
||||||
virtual void AddFileMenu(BMenu* menu);
|
virtual void AddFileMenu(BMenu* menu);
|
||||||
virtual void AddWindowMenu(BMenu* menu);
|
virtual void AddWindowMenu(BMenu* menu);
|
||||||
|
|
||||||
@@ -227,7 +231,8 @@ class BContainerWindow : public BWindow {
|
|||||||
virtual void SetCloseItem(BMenu*);
|
virtual void SetCloseItem(BMenu*);
|
||||||
virtual void SetupNavigationMenu(const entry_ref*, BMenu*);
|
virtual void SetupNavigationMenu(const entry_ref*, BMenu*);
|
||||||
virtual void SetupMoveCopyMenus(const entry_ref*, BMenu*);
|
virtual void SetupMoveCopyMenus(const entry_ref*, BMenu*);
|
||||||
virtual void PopulateMoveCopyNavMenu(BNavMenu*, uint32, const entry_ref*, bool);
|
virtual void PopulateMoveCopyNavMenu(BNavMenu*, uint32,
|
||||||
|
const entry_ref*, bool);
|
||||||
|
|
||||||
virtual void SetupOpenWithMenu(BMenu*);
|
virtual void SetupOpenWithMenu(BMenu*);
|
||||||
virtual void SetUpEditQueryItem(BMenu*);
|
virtual void SetUpEditQueryItem(BMenu*);
|
||||||
@@ -250,7 +255,8 @@ class BContainerWindow : public BWindow {
|
|||||||
BHandler* ResolveSpecifier(BMessage*, int32, BMessage*, int32,
|
BHandler* ResolveSpecifier(BMessage*, int32, BMessage*, int32,
|
||||||
const char*);
|
const char*);
|
||||||
|
|
||||||
bool EachAddon(BPath &path, bool(*)(const Model*, const char*, uint32, bool, void*),
|
bool EachAddon(BPath &path,
|
||||||
|
bool (*)(const Model*, const char*, uint32, bool, void*),
|
||||||
BObjectList<Model>*, void*, BObjectList<BString> &);
|
BObjectList<Model>*, void*, BObjectList<BString> &);
|
||||||
void LoadAddOn(BMessage*);
|
void LoadAddOn(BMessage*);
|
||||||
|
|
||||||
@@ -313,8 +319,8 @@ class WindowStateNodeOpener {
|
|||||||
// this class manages opening and closing the proper node for
|
// this class manages opening and closing the proper node for
|
||||||
// state restoring / saving; the constructor knows how to decide whether
|
// state restoring / saving; the constructor knows how to decide whether
|
||||||
// to use a special directory for root, etc.
|
// to use a special directory for root, etc.
|
||||||
// setter calls used when no attributes can be read from a node and defaults
|
// setter calls used when no attributes can be read from a node and
|
||||||
// are to be substituted
|
// defaults are to be substituted
|
||||||
public:
|
public:
|
||||||
WindowStateNodeOpener(BContainerWindow* window, bool forWriting);
|
WindowStateNodeOpener(BContainerWindow* window, bool forWriting);
|
||||||
virtual ~WindowStateNodeOpener();
|
virtual ~WindowStateNodeOpener();
|
||||||
@@ -428,7 +434,7 @@ BContainerWindow::IsPathWatchingEnabled() const
|
|||||||
return fIsWatchingPath;
|
return fIsWatchingPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
filter_result ActivateWindowFilter(BMessage* message, BHandler**target,
|
filter_result ActivateWindowFilter(BMessage* message, BHandler** target,
|
||||||
BMessageFilter* messageFilter);
|
BMessageFilter* messageFilter);
|
||||||
|
|
||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|||||||
@@ -242,7 +242,8 @@ BCountView::Draw(BRect updateRect)
|
|||||||
|
|
||||||
if (IsTypingAhead()) {
|
if (IsTypingAhead()) {
|
||||||
// use a muted gray for the typeahead
|
// use a muted gray for the typeahead
|
||||||
SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_4_TINT));
|
SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||||
|
B_DARKEN_4_TINT));
|
||||||
} else
|
} else
|
||||||
SetHighColor(0, 0, 0);
|
SetHighColor(0, 0, 0);
|
||||||
|
|
||||||
@@ -263,7 +264,8 @@ BCountView::Draw(BRect updateRect)
|
|||||||
bounds.top--;
|
bounds.top--;
|
||||||
|
|
||||||
AddLine(bounds.LeftTop(), bounds.RightTop(), shadow);
|
AddLine(bounds.LeftTop(), bounds.RightTop(), shadow);
|
||||||
AddLine(BPoint(bounds.right, bounds.top + 2), bounds.RightBottom(), lightShadow);
|
AddLine(BPoint(bounds.right, bounds.top + 2), bounds.RightBottom(),
|
||||||
|
lightShadow);
|
||||||
AddLine(bounds.LeftBottom(), bounds.RightBottom(), lightShadow);
|
AddLine(bounds.LeftBottom(), bounds.RightBottom(), lightShadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,8 +284,10 @@ BCountView::Draw(BRect updateRect)
|
|||||||
|
|
||||||
barberPoleRect.InsetBy(1, 1);
|
barberPoleRect.InsetBy(1, 1);
|
||||||
|
|
||||||
BRect destRect(fBarberPoleMap ? fBarberPoleMap->Bounds() : BRect(0, 0, 0, 0));
|
BRect destRect(fBarberPoleMap
|
||||||
destRect.OffsetTo(barberPoleRect.LeftTop() - BPoint(0, fLastBarberPoleOffset));
|
? fBarberPoleMap->Bounds() : BRect(0, 0, 0, 0));
|
||||||
|
destRect.OffsetTo(barberPoleRect.LeftTop()
|
||||||
|
- BPoint(0, fLastBarberPoleOffset));
|
||||||
fLastBarberPoleOffset -= 1;
|
fLastBarberPoleOffset -= 1;
|
||||||
if (fLastBarberPoleOffset < 0)
|
if (fLastBarberPoleOffset < 0)
|
||||||
fLastBarberPoleOffset = 5;
|
fLastBarberPoleOffset = 5;
|
||||||
|
|||||||
@@ -84,7 +84,8 @@ struct AddOneShortcutParams {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
AddOneShortcut(const Model* model, const char*, uint32 shortcut, bool /*primary*/, void* context)
|
AddOneShortcut(const Model* model, const char*, uint32 shortcut,
|
||||||
|
bool /*primary*/, void* context)
|
||||||
{
|
{
|
||||||
if (!shortcut)
|
if (!shortcut)
|
||||||
// no shortcut, bail
|
// no shortcut, bail
|
||||||
@@ -151,11 +152,10 @@ BDeskWindow::~BDeskWindow()
|
|||||||
void
|
void
|
||||||
BDeskWindow::Init(const BMessage*)
|
BDeskWindow::Init(const BMessage*)
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// Set the size of the screen before calling the container window's
|
// Set the size of the screen before calling the container window's
|
||||||
// Init() because it will add volume poses to this window and
|
// Init() because it will add volume poses to this window and
|
||||||
// they will be clipped otherwise
|
// they will be clipped otherwise
|
||||||
//
|
|
||||||
BScreen screen(this);
|
BScreen screen(this);
|
||||||
fOldFrame = screen.Frame();
|
fOldFrame = screen.Frame();
|
||||||
|
|
||||||
@@ -347,8 +347,8 @@ BDeskWindow::AddWindowContextMenus(BMenu* menu)
|
|||||||
menu->AddItem(pasteItem);
|
menu->AddItem(pasteItem);
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
#endif
|
#endif
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup),
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Clean up"),
|
||||||
'K'));
|
new BMessage(kCleanup), 'K'));
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
|
||||||
new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY));
|
new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY));
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Select all"),
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Select all"),
|
||||||
@@ -470,4 +470,3 @@ BDeskWindow::MessageReceived(BMessage* message)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,9 +86,10 @@ private:
|
|||||||
BRect fOldFrame;
|
BRect fOldFrame;
|
||||||
|
|
||||||
// in the desktop window addon shortcuts have to be added by AddShortcut
|
// in the desktop window addon shortcuts have to be added by AddShortcut
|
||||||
// and we don't always get the MenusBeginning call to check for new addons/update the
|
// and we don't always get the MenusBeginning call to check for new
|
||||||
// shortcuts -- instead we need to node monitor the addon directory and keep
|
// addons/update the shortcuts -- instead we need to node monitor the
|
||||||
// a dirty flag that triggers shortcut re-installing
|
// addon directory and keep a dirty flag that triggers shortcut
|
||||||
|
// reinstallation
|
||||||
bool fShouldUpdateAddonShortcuts;
|
bool fShouldUpdateAddonShortcuts;
|
||||||
std::set<uint32> fCurrentAddonShortcuts;
|
std::set<uint32> fCurrentAddonShortcuts;
|
||||||
// keeps track of which shortcuts are installed for Tracker addons
|
// keeps track of which shortcuts are installed for Tracker addons
|
||||||
|
|||||||
@@ -79,13 +79,14 @@ DesktopPoseView::InitDesktopDirentIterator(BPoseView* nodeMonitoringTarget,
|
|||||||
|
|
||||||
ASSERT(!sourceModel.IsQuery());
|
ASSERT(!sourceModel.IsQuery());
|
||||||
ASSERT(sourceModel.Node());
|
ASSERT(sourceModel.Node());
|
||||||
BDirectory* sourceDirectory = dynamic_cast<BDirectory*>(sourceModel.Node());
|
BDirectory* sourceDirectory
|
||||||
|
= dynamic_cast<BDirectory*>(sourceModel.Node());
|
||||||
|
|
||||||
ASSERT(sourceDirectory);
|
ASSERT(sourceDirectory);
|
||||||
|
|
||||||
// build an iterator list, start with boot
|
// build an iterator list, start with boot
|
||||||
EntryListBase* perDesktopIterator = new CachedDirectoryEntryList(
|
EntryListBase* perDesktopIterator
|
||||||
*sourceDirectory);
|
= new CachedDirectoryEntryList(*sourceDirectory);
|
||||||
|
|
||||||
result->AddItem(perDesktopIterator);
|
result->AddItem(perDesktopIterator);
|
||||||
if (nodeMonitoringTarget) {
|
if (nodeMonitoringTarget) {
|
||||||
@@ -131,7 +132,8 @@ DesktopPoseView::FSNotification(const BMessage* message)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if (settings.MountVolumesOntoDesktop()
|
if (settings.MountVolumesOntoDesktop()
|
||||||
&& (!volume.IsShared() || settings.MountSharedVolumesOntoDesktop())) {
|
&& (!volume.IsShared()
|
||||||
|
|| settings.MountSharedVolumesOntoDesktop())) {
|
||||||
// place an icon for the volume onto the desktop
|
// place an icon for the volume onto the desktop
|
||||||
CreateVolumePose(&volume, true);
|
CreateVolumePose(&volume, true);
|
||||||
}
|
}
|
||||||
@@ -227,7 +229,8 @@ DesktopPoseView::AdaptToVolumeChange(BMessage* message)
|
|||||||
|
|
||||||
message->FindBool("ShowDisksIcon", &showDisksIcon);
|
message->FindBool("ShowDisksIcon", &showDisksIcon);
|
||||||
message->FindBool("MountVolumesOntoDesktop", &mountVolumesOnDesktop);
|
message->FindBool("MountVolumesOntoDesktop", &mountVolumesOnDesktop);
|
||||||
message->FindBool("MountSharedVolumesOntoDesktop", &mountSharedVolumesOntoDesktop);
|
message->FindBool("MountSharedVolumesOntoDesktop",
|
||||||
|
&mountSharedVolumesOntoDesktop);
|
||||||
|
|
||||||
BEntry entry("/");
|
BEntry entry("/");
|
||||||
Model model(&entry);
|
Model model(&entry);
|
||||||
@@ -270,7 +273,8 @@ DesktopPoseView::AdaptToDesktopIntegrationChange(BMessage* message)
|
|||||||
bool mountSharedVolumesOntoDesktop = true;
|
bool mountSharedVolumesOntoDesktop = true;
|
||||||
|
|
||||||
message->FindBool("MountVolumesOntoDesktop", &mountVolumesOnDesktop);
|
message->FindBool("MountVolumesOntoDesktop", &mountVolumesOnDesktop);
|
||||||
message->FindBool("MountSharedVolumesOntoDesktop", &mountSharedVolumesOntoDesktop);
|
message->FindBool("MountSharedVolumesOntoDesktop",
|
||||||
|
&mountSharedVolumesOntoDesktop);
|
||||||
|
|
||||||
ShowVolumes(false, mountSharedVolumesOntoDesktop);
|
ShowVolumes(false, mountSharedVolumesOntoDesktop);
|
||||||
ShowVolumes(mountVolumesOnDesktop, mountSharedVolumesOntoDesktop);
|
ShowVolumes(mountVolumesOnDesktop, mountSharedVolumesOntoDesktop);
|
||||||
|
|||||||
@@ -109,10 +109,13 @@ BDirMenu::Populate(const BEntry* startEntry, BWindow* originatingWindow,
|
|||||||
if (!includeStartEntry) {
|
if (!includeStartEntry) {
|
||||||
BDirectory parent;
|
BDirectory parent;
|
||||||
BDirectory dir(&entry);
|
BDirectory dir(&entry);
|
||||||
// if we're at the root directory skip "mnt" and go straight to "/"
|
|
||||||
if (!showDesktop && dir.InitCheck() == B_OK && dir.IsRootDirectory())
|
if (!showDesktop && dir.InitCheck() == B_OK
|
||||||
|
&& dir.IsRootDirectory()) {
|
||||||
|
// if we're at the root directory skip "mnt" and
|
||||||
|
// go straight to "/"
|
||||||
parent.SetTo("/");
|
parent.SetTo("/");
|
||||||
else
|
} else
|
||||||
entry.GetParent(&parent);
|
entry.GetParent(&parent);
|
||||||
|
|
||||||
parent.GetEntry(&entry);
|
parent.GetEntry(&entry);
|
||||||
@@ -137,10 +140,11 @@ BDirMenu::Populate(const BEntry* startEntry, BWindow* originatingWindow,
|
|||||||
|
|
||||||
bool hitRoot = false;
|
bool hitRoot = false;
|
||||||
|
|
||||||
// if we're at the root directory skip "mnt" and go straight to "/"
|
|
||||||
BDirectory dir(&entry);
|
BDirectory dir(&entry);
|
||||||
if (!showDesktop && dir.InitCheck() == B_OK
|
if (!showDesktop && dir.InitCheck() == B_OK
|
||||||
&& dir.IsRootDirectory()) {
|
&& dir.IsRootDirectory()) {
|
||||||
|
// if we're at the root directory skip "mnt" and
|
||||||
|
// go straight to "/"
|
||||||
hitRoot = true;
|
hitRoot = true;
|
||||||
parent.SetTo("/");
|
parent.SetTo("/");
|
||||||
}
|
}
|
||||||
@@ -213,12 +217,12 @@ BDirMenu::AddItemToDirMenu(const BEntry* entry, BWindow* originatingWindow,
|
|||||||
BContainerWindow* window = originatingWindow ?
|
BContainerWindow* window = originatingWindow ?
|
||||||
dynamic_cast<BContainerWindow*>(originatingWindow) : 0;
|
dynamic_cast<BContainerWindow*>(originatingWindow) : 0;
|
||||||
if (window)
|
if (window)
|
||||||
message->AddData("nodeRefsToClose", B_RAW_TYPE, window->TargetModel()->NodeRef(),
|
message->AddData("nodeRefsToClose", B_RAW_TYPE,
|
||||||
sizeof (node_ref));
|
window->TargetModel()->NodeRef(), sizeof (node_ref));
|
||||||
ModelMenuItem* item;
|
ModelMenuItem* item;
|
||||||
if (navMenuEntries) {
|
if (navMenuEntries) {
|
||||||
BNavMenu* subMenu = new BNavMenu(model.Name(), B_REFS_RECEIVED, fTarget,
|
BNavMenu* subMenu = new BNavMenu(model.Name(), B_REFS_RECEIVED,
|
||||||
window);
|
fTarget, window);
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
entry->GetRef(&ref);
|
entry->GetRef(&ref);
|
||||||
subMenu->SetNavDir(&ref);
|
subMenu->SetNavDir(&ref);
|
||||||
@@ -244,7 +248,8 @@ BDirMenu::AddItemToDirMenu(const BEntry* entry, BWindow* originatingWindow,
|
|||||||
item->SetTarget(fTarget);
|
item->SetTarget(fTarget);
|
||||||
|
|
||||||
if (fMenuBar) {
|
if (fMenuBar) {
|
||||||
ModelMenuItem* menu = dynamic_cast<ModelMenuItem*>(fMenuBar->ItemAt(0));
|
ModelMenuItem* menu
|
||||||
|
= dynamic_cast<ModelMenuItem*>(fMenuBar->ItemAt(0));
|
||||||
if (menu) {
|
if (menu) {
|
||||||
ThrowOnError(menu->SetEntry(entry));
|
ThrowOnError(menu->SetEntry(entry));
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
|
|||||||
@@ -50,8 +50,9 @@ public:
|
|||||||
virtual ~BDirMenu();
|
virtual ~BDirMenu();
|
||||||
|
|
||||||
void Populate(const BEntry* startDir, BWindow* originatingWindow,
|
void Populate(const BEntry* startDir, BWindow* originatingWindow,
|
||||||
bool includeStartDir = false, bool select = false, bool reverse = false,
|
bool includeStartDir = false, bool select = false,
|
||||||
bool addShortcuts = false, bool navMenuEntries = false);
|
bool reverse = false, bool addShortcuts = false,
|
||||||
|
bool navMenuEntries = false);
|
||||||
void AddItemToDirMenu(const BEntry*, BWindow* originatingWindow,
|
void AddItemToDirMenu(const BEntry*, BWindow* originatingWindow,
|
||||||
bool atEnd, bool addShortcuts, bool navMenuEntries = false);
|
bool atEnd, bool addShortcuts, bool navMenuEntries = false);
|
||||||
void AddDisksIconToMenu(bool reverse = false);
|
void AddDisksIconToMenu(bool reverse = false);
|
||||||
|
|||||||
@@ -131,8 +131,8 @@ EntryListBase::Next(dirent* ent)
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
CachedEntryIterator::CachedEntryIterator(BEntryList* iterator, int32 numEntries,
|
CachedEntryIterator::CachedEntryIterator(BEntryList* iterator,
|
||||||
bool sortInodes)
|
int32 numEntries, bool sortInodes)
|
||||||
:
|
:
|
||||||
fIterator(iterator),
|
fIterator(iterator),
|
||||||
fEntryRefBuffer(NULL),
|
fEntryRefBuffer(NULL),
|
||||||
@@ -265,7 +265,8 @@ CachedEntryIterator::GetNextDirents(struct dirent* ent, size_t size,
|
|||||||
bufferRemain -= currentDirentSize;
|
bufferRemain -= currentDirentSize;
|
||||||
ASSERT(bufferRemain >= 0);
|
ASSERT(bufferRemain >= 0);
|
||||||
|
|
||||||
if ((size_t)bufferRemain < (sizeof(dirent) + B_FILE_NAME_LENGTH)) {
|
if ((size_t)bufferRemain
|
||||||
|
< (sizeof(dirent) + B_FILE_NAME_LENGTH)) {
|
||||||
// cant fit a big entryRef in the buffer, just bail
|
// cant fit a big entryRef in the buffer, just bail
|
||||||
// and start from scratch
|
// and start from scratch
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ public:
|
|||||||
//
|
//
|
||||||
// each chunk of iterators in the cache are then returned in an order,
|
// each chunk of iterators in the cache are then returned in an order,
|
||||||
// sorted by their i-node number -- this turns out to give quite a bit
|
// sorted by their i-node number -- this turns out to give quite a bit
|
||||||
// better performance over just using the order in which they show up using
|
// better performance over just using the order in which they show up
|
||||||
// the default BEntryList iterator subclass
|
// using the default BEntryList iterator subclass
|
||||||
|
|
||||||
CachedEntryIterator(BEntryList* iterator, int32 numEntries,
|
CachedEntryIterator(BEntryList* iterator, int32 numEntries,
|
||||||
bool sortInodes = false);
|
bool sortInodes = false);
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ static void MakeNodeFromName(node_ref* node, char* name);
|
|||||||
static inline void MakeRefName(char* refName, const node_ref* node);
|
static inline void MakeRefName(char* refName, const node_ref* node);
|
||||||
static inline void MakeModeName(char* modeName, const node_ref* node);
|
static inline void MakeModeName(char* modeName, const node_ref* node);
|
||||||
static inline void MakeModeNameFromRefName(char* modeName, char* refName);
|
static inline void MakeModeNameFromRefName(char* modeName, char* refName);
|
||||||
static inline bool CompareModeAndRefName(const char* modeName, const char* refName);
|
static inline bool CompareModeAndRefName(const char* modeName,
|
||||||
|
const char* refName);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static bool
|
static bool
|
||||||
@@ -130,9 +131,11 @@ FSClipboardHasRefs()
|
|||||||
uint32 type;
|
uint32 type;
|
||||||
int32 count;
|
int32 count;
|
||||||
if (clip->GetInfo(B_REF_TYPE, 0, &refName, &type, &count) == B_OK
|
if (clip->GetInfo(B_REF_TYPE, 0, &refName, &type, &count) == B_OK
|
||||||
&& clip->GetInfo(B_INT32_TYPE, 0, &modeName, &type, &count) == B_OK)
|
&& clip->GetInfo(B_INT32_TYPE, 0, &modeName, &type, &count)
|
||||||
|
== B_OK) {
|
||||||
result = CompareModeAndRefName(modeName, refName);
|
result = CompareModeAndRefName(modeName, refName);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
be_clipboard->Unlock();
|
be_clipboard->Unlock();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -145,8 +148,8 @@ FSClipboardStartWatch(BMessenger target)
|
|||||||
if (dynamic_cast<TTracker*>(be_app) != NULL)
|
if (dynamic_cast<TTracker*>(be_app) != NULL)
|
||||||
((TTracker*)be_app)->ClipboardRefsWatcher()->AddToNotifyList(target);
|
((TTracker*)be_app)->ClipboardRefsWatcher()->AddToNotifyList(target);
|
||||||
else {
|
else {
|
||||||
// this code is used by external apps using objects using FSClipboard functions
|
// this code is used by external apps using objects using FSClipboard
|
||||||
// i.e: applications using FilePanel
|
// functions, i.e. applications using FilePanel
|
||||||
BMessenger messenger(kTrackerSignature);
|
BMessenger messenger(kTrackerSignature);
|
||||||
if (messenger.IsValid()) {
|
if (messenger.IsValid()) {
|
||||||
BMessage message(kStartWatchClipboardRefs);
|
BMessage message(kStartWatchClipboardRefs);
|
||||||
@@ -163,8 +166,8 @@ FSClipboardStopWatch(BMessenger target)
|
|||||||
if (dynamic_cast<TTracker*>(be_app) != NULL)
|
if (dynamic_cast<TTracker*>(be_app) != NULL)
|
||||||
((TTracker*)be_app)->ClipboardRefsWatcher()->AddToNotifyList(target);
|
((TTracker*)be_app)->ClipboardRefsWatcher()->AddToNotifyList(target);
|
||||||
else {
|
else {
|
||||||
// this code is used by external apps using objects using FSClipboard functions
|
// this code is used by external apps using objects using FSClipboard
|
||||||
// i.e: applications using FilePanel
|
// functions, i.e. applications using FilePanel
|
||||||
BMessenger messenger(kTrackerSignature);
|
BMessenger messenger(kTrackerSignature);
|
||||||
if (messenger.IsValid()) {
|
if (messenger.IsValid()) {
|
||||||
BMessage message(kStopWatchClipboardRefs);
|
BMessage message(kStopWatchClipboardRefs);
|
||||||
@@ -333,7 +336,8 @@ FSClipboardRemovePoses(const node_ref* directory, PoseList* list)
|
|||||||
MakeRefName(refName, &clipNode.node);
|
MakeRefName(refName, &clipNode.node);
|
||||||
MakeModeName(modeName);
|
MakeModeName(modeName);
|
||||||
|
|
||||||
if (clip->RemoveName(refName) == B_OK && clip->RemoveName(modeName)) {
|
if (clip->RemoveName(refName) == B_OK
|
||||||
|
&& clip->RemoveName(modeName)) {
|
||||||
updateMessage.AddData("tcnode", T_CLIPBOARD_NODE, &clipNode,
|
updateMessage.AddData("tcnode", T_CLIPBOARD_NODE, &clipNode,
|
||||||
sizeof(TClipboardNodeRef), true, listCount);
|
sizeof(TClipboardNodeRef), true, listCount);
|
||||||
refsRemoved++;
|
refsRemoved++;
|
||||||
@@ -353,7 +357,6 @@ FSClipboardRemovePoses(const node_ref* directory, PoseList* list)
|
|||||||
/** Pastes entries from the clipboard to the target model's directory.
|
/** Pastes entries from the clipboard to the target model's directory.
|
||||||
* Updates moveModes and notifies listeners if necessary.
|
* Updates moveModes and notifies listeners if necessary.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool
|
bool
|
||||||
FSClipboardPaste(Model* model, uint32 linksMode)
|
FSClipboardPaste(Model* model, uint32 linksMode)
|
||||||
{
|
{
|
||||||
@@ -588,7 +591,8 @@ FSClipboardRemove(Model* model)
|
|||||||
report->AddInt32("device", ref->device);
|
report->AddInt32("device", ref->device);
|
||||||
report->AddInt64("directory", ref->directory);
|
report->AddInt64("directory", ref->directory);
|
||||||
report->AddBool("clearClipboard", false);
|
report->AddBool("clearClipboard", false);
|
||||||
report->AddData("tcnode", T_CLIPBOARD_NODE, &tcnode, sizeof(tcnode), true);
|
report->AddData("tcnode", T_CLIPBOARD_NODE, &tcnode, sizeof(tcnode),
|
||||||
|
true);
|
||||||
messenger.SendMessage(report);
|
messenger.SendMessage(report);
|
||||||
delete report;
|
delete report;
|
||||||
}
|
}
|
||||||
@@ -624,7 +628,8 @@ BClipboardRefsWatcher::AddToNotifyList(BMessenger target)
|
|||||||
BMessenger* messenger;
|
BMessenger* messenger;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
for (int32 index = 0;(messenger = fNotifyList.ItemAt(index)) != NULL; index++) {
|
for (int32 index = 0; (messenger = fNotifyList.ItemAt(index)) != NULL;
|
||||||
|
index++) {
|
||||||
if (*messenger == target) {
|
if (*messenger == target) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
@@ -644,7 +649,8 @@ BClipboardRefsWatcher::RemoveFromNotifyList(BMessenger target)
|
|||||||
if (Lock()) {
|
if (Lock()) {
|
||||||
BMessenger* messenger;
|
BMessenger* messenger;
|
||||||
|
|
||||||
for (int32 index = 0;(messenger = fNotifyList.ItemAt(index)) != NULL; index++) {
|
for (int32 index = 0; (messenger = fNotifyList.ItemAt(index)) != NULL;
|
||||||
|
index++) {
|
||||||
if (*messenger == target) {
|
if (*messenger == target) {
|
||||||
delete fNotifyList.RemoveItemAt(index);
|
delete fNotifyList.RemoveItemAt(index);
|
||||||
break;
|
break;
|
||||||
@@ -802,7 +808,8 @@ BClipboardRefsWatcher::UpdatePoseViews(BMessage* reportMessage)
|
|||||||
int32 index = 0;
|
int32 index = 0;
|
||||||
TClipboardNodeRef* tcnode = NULL;
|
TClipboardNodeRef* tcnode = NULL;
|
||||||
ssize_t size;
|
ssize_t size;
|
||||||
while (reportMessage->FindData("tcnode", T_CLIPBOARD_NODE, index, (const void**)&tcnode, &size) == B_OK) {
|
while (reportMessage->FindData("tcnode", T_CLIPBOARD_NODE, index,
|
||||||
|
(const void**)&tcnode, &size) == B_OK) {
|
||||||
if (tcnode->moveMode == kDelete) {
|
if (tcnode->moveMode == kDelete) {
|
||||||
watch_node(&tcnode->node, B_STOP_WATCHING, this);
|
watch_node(&tcnode->node, B_STOP_WATCHING, this);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -239,8 +239,8 @@ UndoItemCopy::Undo()
|
|||||||
status_t
|
status_t
|
||||||
UndoItemCopy::Redo()
|
UndoItemCopy::Redo()
|
||||||
{
|
{
|
||||||
FSMoveToFolder(new BObjectList<entry_ref>(fSourceList), new BEntry(&fTargetRef),
|
FSMoveToFolder(new BObjectList<entry_ref>(fSourceList),
|
||||||
FSUndoMoveMode(fMoveMode), NULL);
|
new BEntry(&fTargetRef), FSUndoMoveMode(fMoveMode), NULL);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -388,7 +388,8 @@ UndoItemRename::Redo()
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
UndoItemRenameVolume::UndoItemRenameVolume(BVolume &volume, const char* newName)
|
UndoItemRenameVolume::UndoItemRenameVolume(BVolume &volume,
|
||||||
|
const char* newName)
|
||||||
:
|
:
|
||||||
fVolume(volume),
|
fVolume(volume),
|
||||||
fNewName(newName)
|
fNewName(newName)
|
||||||
|
|||||||
@@ -124,9 +124,10 @@ status_t MoveItem(BEntry* entry, BDirectory* destDir, BPoint* loc,
|
|||||||
ConflictCheckResult PreFlightNameCheck(BObjectList<entry_ref>* srcList,
|
ConflictCheckResult PreFlightNameCheck(BObjectList<entry_ref>* srcList,
|
||||||
const BDirectory* destDir, int32* collisionCount, uint32 moveMode);
|
const BDirectory* destDir, int32* collisionCount, uint32 moveMode);
|
||||||
status_t CheckName(uint32 moveMode, const BEntry* srcEntry,
|
status_t CheckName(uint32 moveMode, const BEntry* srcEntry,
|
||||||
const BDirectory* destDir, bool multipleCollisions, ConflictCheckResult &);
|
const BDirectory* destDir, bool multipleCollisions,
|
||||||
void CopyAttributes(CopyLoopControl* control, BNode* srcNode, BNode* destNode, void* buffer,
|
ConflictCheckResult &);
|
||||||
size_t bufsize);
|
void CopyAttributes(CopyLoopControl* control, BNode* srcNode,
|
||||||
|
BNode* destNode, void* buffer, size_t bufsize);
|
||||||
void CopyPoseLocation(BNode* src, BNode* dest);
|
void CopyPoseLocation(BNode* src, BNode* dest);
|
||||||
bool DirectoryMatchesOrContains(const BEntry*, directory_which);
|
bool DirectoryMatchesOrContains(const BEntry*, directory_which);
|
||||||
bool DirectoryMatchesOrContains(const BEntry*, const char* additionalPath,
|
bool DirectoryMatchesOrContains(const BEntry*, const char* additionalPath,
|
||||||
@@ -177,11 +178,13 @@ static const char* kFileDeleteErrorString =
|
|||||||
|
|
||||||
static const char* kReplaceManyStr =
|
static const char* kReplaceManyStr =
|
||||||
B_TRANSLATE_MARK("Some items already exist in this folder with "
|
B_TRANSLATE_MARK("Some items already exist in this folder with "
|
||||||
"the same names as the items you are %verb.\n \nWould you like to replace "
|
"the same names as the items you are %verb.\n \nWould you like to "
|
||||||
"them with the ones you are %verb or be prompted for each one?");
|
"replace them with the ones you are %verb or be prompted for each "
|
||||||
|
"one?");
|
||||||
|
|
||||||
static const char* kFindAlternativeStr =
|
static const char* kFindAlternativeStr =
|
||||||
B_TRANSLATE_MARK("Would you like to find some other suitable application?");
|
B_TRANSLATE_MARK("Would you like to find some other suitable "
|
||||||
|
"application?");
|
||||||
|
|
||||||
static const char* kFindApplicationStr =
|
static const char* kFindApplicationStr =
|
||||||
B_TRANSLATE_MARK("Would you like to find a suitable application "
|
B_TRANSLATE_MARK("Would you like to find a suitable application "
|
||||||
@@ -635,21 +638,21 @@ ConfirmChangeIfWellKnownDirectory(const BEntry* entry,
|
|||||||
if (DirectoryMatchesOrContains(entry, B_SYSTEM_DIRECTORY)) {
|
if (DirectoryMatchesOrContains(entry, B_SYSTEM_DIRECTORY)) {
|
||||||
warning.SetTo(
|
warning.SetTo(
|
||||||
B_TRANSLATE("If you %ifYouDoAction the system folder or its "
|
B_TRANSLATE("If you %ifYouDoAction the system folder or its "
|
||||||
"contents, you won't be able to boot %osName!\n\nAre you sure you "
|
"contents, you won't be able to boot %osName!\n\nAre you sure "
|
||||||
"want to do this?\n\nTo %toDoAction the system folder or its "
|
"you want to do this?\n\nTo %toDoAction the system folder or its "
|
||||||
"contents anyway, hold down the Shift key and click "
|
"contents anyway, hold down the Shift key and click "
|
||||||
"\"%toConfirmAction\"."));
|
"\"%toConfirmAction\"."));
|
||||||
} else if (DirectoryMatches(entry, B_COMMON_DIRECTORY)) {
|
} else if (DirectoryMatches(entry, B_COMMON_DIRECTORY)) {
|
||||||
warning.SetTo(
|
warning.SetTo(
|
||||||
B_TRANSLATE("If you %ifYouDoAction the common folder, %osName "
|
B_TRANSLATE("If you %ifYouDoAction the common folder, %osName "
|
||||||
"may not behave properly!\n\nAre you sure you want to do this?\n\n"
|
"may not behave properly!\n\nAre you sure you want to do this?"
|
||||||
"To %toDoAction the common folder anyway, hold down the "
|
"\n\nTo %toDoAction the common folder anyway, hold down the "
|
||||||
"Shift key and click \"%toConfirmAction\"."));
|
"Shift key and click \"%toConfirmAction\"."));
|
||||||
} else if (DirectoryMatches(entry, B_USER_DIRECTORY)) {
|
} else if (DirectoryMatches(entry, B_USER_DIRECTORY)) {
|
||||||
warning .SetTo(
|
warning .SetTo(
|
||||||
B_TRANSLATE("If you %ifYouDoAction the home folder, %osName "
|
B_TRANSLATE("If you %ifYouDoAction the home folder, %osName "
|
||||||
"may not behave properly!\n\nAre you sure you want to do this?\n\n"
|
"may not behave properly!\n\nAre you sure you want to do this?"
|
||||||
"To %toDoAction the home folder anyway, hold down the "
|
"\n\nTo %toDoAction the home folder anyway, hold down the "
|
||||||
"Shift key and click \"%toConfirmAction\"."));
|
"Shift key and click \"%toConfirmAction\"."));
|
||||||
} else if (DirectoryMatchesOrContains(entry, B_USER_CONFIG_DIRECTORY)
|
} else if (DirectoryMatchesOrContains(entry, B_USER_CONFIG_DIRECTORY)
|
||||||
|| DirectoryMatchesOrContains(entry, B_COMMON_SETTINGS_DIRECTORY)) {
|
|| DirectoryMatchesOrContains(entry, B_COMMON_SETTINGS_DIRECTORY)) {
|
||||||
@@ -660,21 +663,21 @@ ConfirmChangeIfWellKnownDirectory(const BEntry* entry,
|
|||||||
B_COMMON_SETTINGS_DIRECTORY)) {
|
B_COMMON_SETTINGS_DIRECTORY)) {
|
||||||
warning.SetTo(
|
warning.SetTo(
|
||||||
B_TRANSLATE("If you %ifYouDoAction the mime settings, "
|
B_TRANSLATE("If you %ifYouDoAction the mime settings, "
|
||||||
"%osName may not behave properly!\n\nAre you sure you want to "
|
"%osName may not behave properly!\n\nAre you sure you want "
|
||||||
"do this?"));
|
"to do this?"));
|
||||||
requireOverride = false;
|
requireOverride = false;
|
||||||
} else if (DirectoryMatches(entry, B_USER_CONFIG_DIRECTORY)) {
|
} else if (DirectoryMatches(entry, B_USER_CONFIG_DIRECTORY)) {
|
||||||
warning.SetTo(
|
warning.SetTo(
|
||||||
B_TRANSLATE("If you %ifYouDoAction the config folder, %osName "
|
B_TRANSLATE("If you %ifYouDoAction the config folder, "
|
||||||
"may not behave properly!\n\nAre you sure you want to do "
|
"%osName may not behave properly!\n\nAre you sure you want "
|
||||||
"this?"));
|
"to do this?"));
|
||||||
requireOverride = false;
|
requireOverride = false;
|
||||||
} else if (DirectoryMatches(entry, B_USER_SETTINGS_DIRECTORY)
|
} else if (DirectoryMatches(entry, B_USER_SETTINGS_DIRECTORY)
|
||||||
|| DirectoryMatches(entry, B_COMMON_SETTINGS_DIRECTORY)) {
|
|| DirectoryMatches(entry, B_COMMON_SETTINGS_DIRECTORY)) {
|
||||||
warning.SetTo(
|
warning.SetTo(
|
||||||
B_TRANSLATE("If you %ifYouDoAction the settings folder, "
|
B_TRANSLATE("If you %ifYouDoAction the settings folder, "
|
||||||
"%osName may not behave properly!\n\nAre you sure you want to "
|
"%osName may not behave properly!\n\nAre you sure you want "
|
||||||
"do this?"));
|
"to do this?"));
|
||||||
requireOverride = false;
|
requireOverride = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -752,11 +755,13 @@ InitCopy(CopyLoopControl* loopControl, uint32 moveMode,
|
|||||||
"directory."));
|
"directory."));
|
||||||
} else {
|
} else {
|
||||||
errorStr.SetTo(
|
errorStr.SetTo(
|
||||||
B_TRANSLATE("You cannot copy or move the root directory."));
|
B_TRANSLATE("You cannot copy or move the root "
|
||||||
|
"directory."));
|
||||||
}
|
}
|
||||||
|
|
||||||
BAlert* alert = new BAlert("", errorStr.String(),
|
BAlert* alert = new BAlert("", errorStr.String(),
|
||||||
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL,
|
||||||
|
B_WARNING_ALERT);
|
||||||
alert->SetShortcut(0, B_ESCAPE);
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
alert->Go();
|
alert->Go();
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
@@ -783,11 +788,13 @@ InitCopy(CopyLoopControl* loopControl, uint32 moveMode,
|
|||||||
*preflightResult = kPrompt;
|
*preflightResult = kPrompt;
|
||||||
*collisionCount = 0;
|
*collisionCount = 0;
|
||||||
|
|
||||||
*preflightResult = PreFlightNameCheck(srcList, destDir, collisionCount,
|
*preflightResult = PreFlightNameCheck(srcList, destDir,
|
||||||
moveMode);
|
collisionCount, moveMode);
|
||||||
if (*preflightResult == kCanceled) // user canceled
|
if (*preflightResult == kCanceled) {
|
||||||
|
// user canceled
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// set up the status display
|
// set up the status display
|
||||||
switch (moveMode) {
|
switch (moveMode) {
|
||||||
@@ -802,7 +809,8 @@ InitCopy(CopyLoopControl* loopControl, uint32 moveMode,
|
|||||||
off_t totalSize = 0;
|
off_t totalSize = 0;
|
||||||
if (needSizeCalculation) {
|
if (needSizeCalculation) {
|
||||||
if (CalcItemsAndSize(loopControl, srcList,
|
if (CalcItemsAndSize(loopControl, srcList,
|
||||||
dstVol->BlockSize(), &totalItems, &totalSize) != B_OK) {
|
dstVol->BlockSize(), &totalItems, &totalSize)
|
||||||
|
!= B_OK) {
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -997,7 +1005,8 @@ MoveTask(BObjectList<entry_ref>* srcList, BEntry* destEntry, BList* pointList,
|
|||||||
|
|
||||||
result = MoveEntryToTrash(&sourceEntry, loc, undo);
|
result = MoveEntryToTrash(&sourceEntry, loc, undo);
|
||||||
if (result != B_OK) {
|
if (result != B_OK) {
|
||||||
BString error(B_TRANSLATE("Error moving \"%name\" to Trash. (%error)"));
|
BString error(B_TRANSLATE("Error moving \"%name\" to Trash. "
|
||||||
|
"(%error)"));
|
||||||
error.ReplaceFirst("%name", srcRef->name);
|
error.ReplaceFirst("%name", srcRef->name);
|
||||||
error.ReplaceFirst("%error", strerror(result));
|
error.ReplaceFirst("%error", strerror(result));
|
||||||
BAlert* alert = new BAlert("", error.String(),
|
BAlert* alert = new BAlert("", error.String(),
|
||||||
@@ -1011,8 +1020,8 @@ MoveTask(BObjectList<entry_ref>* srcList, BEntry* destEntry, BList* pointList,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// resolve name collisions and hierarchy problems
|
// resolve name collisions and hierarchy problems
|
||||||
if (CheckName(moveMode, &sourceEntry, &destDir, collisionCount > 1,
|
if (CheckName(moveMode, &sourceEntry, &destDir,
|
||||||
conflictCheckResult) != B_OK) {
|
collisionCount > 1, conflictCheckResult) != B_OK) {
|
||||||
// we will skip the current item, because we got a conflict
|
// we will skip the current item, because we got a conflict
|
||||||
// and were asked to or because there was some conflict
|
// and were asked to or because there was some conflict
|
||||||
|
|
||||||
@@ -1160,8 +1169,9 @@ CopyFile(BEntry* srcFile, StatStruct* srcStat, BDirectory* destDir,
|
|||||||
throw (status_t)err;
|
throw (status_t)err;
|
||||||
|
|
||||||
if (err != B_OK) {
|
if (err != B_OK) {
|
||||||
if (!loopControl->FileError(B_TRANSLATE_NOCOLLECT(kFileErrorString),
|
if (!loopControl->FileError(
|
||||||
destName, err, true)) {
|
B_TRANSLATE_NOCOLLECT(kFileErrorString), destName, err,
|
||||||
|
true)) {
|
||||||
throw (status_t)err;
|
throw (status_t)err;
|
||||||
} else {
|
} else {
|
||||||
// user selected continue in spite of error, update status bar
|
// user selected continue in spite of error, update status bar
|
||||||
@@ -1176,7 +1186,8 @@ CopyFile(BEntry* srcFile, StatStruct* srcStat, BDirectory* destDir,
|
|||||||
static bool
|
static bool
|
||||||
CreateFileSystemCompatibleName(const BDirectory* destDir, char* destName)
|
CreateFileSystemCompatibleName(const BDirectory* destDir, char* destName)
|
||||||
{
|
{
|
||||||
// Is it a FAT32 file system? (this is the only one we currently now about)
|
// Is it a FAT32 file system?
|
||||||
|
// (this is the only one we currently know about)
|
||||||
|
|
||||||
BEntry target;
|
BEntry target;
|
||||||
destDir->GetEntry(&target);
|
destDir->GetEntry(&target);
|
||||||
@@ -1412,8 +1423,9 @@ CopyAttributes(CopyLoopControl* control, BNode* srcNode, BNode* destNode,
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
CopyFolder(BEntry* srcEntry, BDirectory* destDir, CopyLoopControl* loopControl,
|
CopyFolder(BEntry* srcEntry, BDirectory* destDir,
|
||||||
BPoint* loc, bool makeOriginalName, Undo &undo, bool removeSource = false)
|
CopyLoopControl* loopControl, BPoint* loc, bool makeOriginalName,
|
||||||
|
Undo &undo, bool removeSource = false)
|
||||||
{
|
{
|
||||||
BDirectory newDir;
|
BDirectory newDir;
|
||||||
BEntry entry;
|
BEntry entry;
|
||||||
@@ -1669,7 +1681,8 @@ MoveItem(BEntry* entry, BDirectory* destDir, BPoint* loc, uint32 moveMode,
|
|||||||
// else source and target are in the same dir
|
// else source and target are in the same dir
|
||||||
|
|
||||||
source.Append(path.Leaf());
|
source.Append(path.Leaf());
|
||||||
err = destDir->CreateSymLink(name, source.String(), &link);
|
err = destDir->CreateSymLink(name, source.String(),
|
||||||
|
&link);
|
||||||
|
|
||||||
chdir(oldwd);
|
chdir(oldwd);
|
||||||
// change working dir back to original
|
// change working dir back to original
|
||||||
@@ -1871,7 +1884,8 @@ MoveEntryToTrash(BEntry* entry, BPoint* loc, Undo &undo)
|
|||||||
if (volume == boot) {
|
if (volume == boot) {
|
||||||
char name[B_FILE_NAME_LENGTH];
|
char name[B_FILE_NAME_LENGTH];
|
||||||
volume.GetName(name);
|
volume.GetName(name);
|
||||||
BString buffer(B_TRANSLATE("Cannot unmount the boot volume \"%name\"."));
|
BString buffer(
|
||||||
|
B_TRANSLATE("Cannot unmount the boot volume \"%name\"."));
|
||||||
buffer.ReplaceFirst("%name", name);
|
buffer.ReplaceFirst("%name", name);
|
||||||
BAlert* alert = new BAlert("", buffer.String(),
|
BAlert* alert = new BAlert("", buffer.String(),
|
||||||
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL,
|
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL,
|
||||||
@@ -2060,7 +2074,8 @@ CheckName(uint32 moveMode, const BEntry* sourceEntry,
|
|||||||
&& moveMode != kCreateRelativeLink) {
|
&& moveMode != kCreateRelativeLink) {
|
||||||
(new BAlert("",
|
(new BAlert("",
|
||||||
B_TRANSLATE("You can't move or copy the trash."),
|
B_TRANSLATE("You can't move or copy the trash."),
|
||||||
B_TRANSLATE("OK"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT))->Go();
|
B_TRANSLATE("OK"), 0, 0, B_WIDTH_AS_USUAL,
|
||||||
|
B_WARNING_ALERT))->Go();
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2092,7 +2107,8 @@ CheckName(uint32 moveMode, const BEntry* sourceEntry,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure user isn't trying to replace a file with folder or vice versa.
|
// ensure that the user isn't trying to replace a file with folder
|
||||||
|
// or vice-versa
|
||||||
if (moveMode != kCreateLink
|
if (moveMode != kCreateLink
|
||||||
&& moveMode != kCreateRelativeLink
|
&& moveMode != kCreateRelativeLink
|
||||||
&& destIsDir != sourceIsDirectory) {
|
&& destIsDir != sourceIsDirectory) {
|
||||||
@@ -2107,7 +2123,6 @@ CheckName(uint32 moveMode, const BEntry* sourceEntry,
|
|||||||
|
|
||||||
if (replaceAll != kReplaceAll) {
|
if (replaceAll != kReplaceAll) {
|
||||||
// prompt user to determine whether to replace or not
|
// prompt user to determine whether to replace or not
|
||||||
|
|
||||||
BString replaceMsg;
|
BString replaceMsg;
|
||||||
|
|
||||||
if (moveMode == kCreateLink || moveMode == kCreateRelativeLink) {
|
if (moveMode == kCreateLink || moveMode == kCreateRelativeLink) {
|
||||||
@@ -2176,7 +2191,8 @@ CheckName(uint32 moveMode, const BEntry* sourceEntry,
|
|||||||
return B_OK;
|
return B_OK;
|
||||||
|
|
||||||
if (err != B_OK) {
|
if (err != B_OK) {
|
||||||
BString error(B_TRANSLATE("There was a problem trying to replace \"%name\". The item might be open or busy."));
|
BString error(B_TRANSLATE("There was a problem trying to replace "
|
||||||
|
"\"%name\". The item might be open or busy."));
|
||||||
error.ReplaceFirst("%name", name);;
|
error.ReplaceFirst("%name", name);;
|
||||||
BAlert* alert = new BAlert("", error.String(),
|
BAlert* alert = new BAlert("", error.String(),
|
||||||
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
||||||
@@ -2381,8 +2397,9 @@ FSRecursiveCalcSize(BInfoWindow* window, CopyLoopControl* loopControl,
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
CalcItemsAndSize(CopyLoopControl* loopControl, BObjectList<entry_ref>* refList,
|
CalcItemsAndSize(CopyLoopControl* loopControl,
|
||||||
ssize_t blockSize, int32* totalCount, off_t* totalSize)
|
BObjectList<entry_ref>* refList, ssize_t blockSize, int32* totalCount,
|
||||||
|
off_t* totalSize)
|
||||||
{
|
{
|
||||||
int32 fileCount = 0;
|
int32 fileCount = 0;
|
||||||
int32 dirCount = 0;
|
int32 dirCount = 0;
|
||||||
@@ -2488,8 +2505,8 @@ FSGetTrashDir(BDirectory* trashDir, dev_t dev)
|
|||||||
if (data != NULL)
|
if (data != NULL)
|
||||||
trashDir->WriteAttr(kAttrMiniIcon, 'MICN', 0, data, size);
|
trashDir->WriteAttr(kAttrMiniIcon, 'MICN', 0, data, size);
|
||||||
|
|
||||||
data = GetTrackerResources()->LoadResource(B_VECTOR_ICON_TYPE, R_TrashIcon,
|
data = GetTrackerResources()->LoadResource(B_VECTOR_ICON_TYPE,
|
||||||
&size);
|
R_TrashIcon, &size);
|
||||||
if (data != NULL)
|
if (data != NULL)
|
||||||
trashDir->WriteAttr(kAttrIcon, B_VECTOR_ICON_TYPE, 0, data, size);
|
trashDir->WriteAttr(kAttrIcon, B_VECTOR_ICON_TYPE, 0, data, size);
|
||||||
|
|
||||||
@@ -3228,14 +3245,15 @@ _TrackerLaunchAppWithDocuments(const entry_ref* appRef, const BMessage* refs,
|
|||||||
if (refs && openWithOK && error != B_SHUTTING_DOWN) {
|
if (refs && openWithOK && error != B_SHUTTING_DOWN) {
|
||||||
alertString << B_TRANSLATE_NOCOLLECT(kFindAlternativeStr);
|
alertString << B_TRANSLATE_NOCOLLECT(kFindAlternativeStr);
|
||||||
BAlert* alert = new BAlert("", alertString.String(),
|
BAlert* alert = new BAlert("", alertString.String(),
|
||||||
B_TRANSLATE("Cancel"), B_TRANSLATE("Find"), 0, B_WIDTH_AS_USUAL,
|
B_TRANSLATE("Cancel"), B_TRANSLATE("Find"), 0,
|
||||||
B_WARNING_ALERT);
|
B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
||||||
alert->SetShortcut(0, B_ESCAPE);
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
if (alert->Go() == 1)
|
if (alert->Go() == 1)
|
||||||
error = TrackerOpenWith(refs);
|
error = TrackerOpenWith(refs);
|
||||||
} else {
|
} else {
|
||||||
BAlert* alert = new BAlert("", alertString.String(),
|
BAlert* alert = new BAlert("", alertString.String(),
|
||||||
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL,
|
||||||
|
B_WARNING_ALERT);
|
||||||
alert->SetShortcut(0, B_ESCAPE);
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
alert->Go();
|
alert->Go();
|
||||||
}
|
}
|
||||||
@@ -3389,8 +3407,8 @@ _TrackerLaunchDocuments(const entry_ref* /*doNotUse*/, const BMessage* refs,
|
|||||||
} else {
|
} else {
|
||||||
BEntry appEntry(&app, true);
|
BEntry appEntry(&app, true);
|
||||||
for (int32 index = 0;;) {
|
for (int32 index = 0;;) {
|
||||||
// remove the app itself from the refs received so we don't try
|
// remove the app itself from the refs received so we don't
|
||||||
// to open ourselves
|
// try to open ourselves
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
if (copyOfRefs.FindRef("refs", index, &ref) != B_OK)
|
if (copyOfRefs.FindRef("refs", index, &ref) != B_OK)
|
||||||
break;
|
break;
|
||||||
@@ -3483,15 +3501,18 @@ _TrackerLaunchDocuments(const entry_ref* /*doNotUse*/, const BMessage* refs,
|
|||||||
&& LoaderErrorDetails(&app, loaderErrorString) == B_OK) {
|
&& LoaderErrorDetails(&app, loaderErrorString) == B_OK) {
|
||||||
if (openedDocuments) {
|
if (openedDocuments) {
|
||||||
alertString.SetTo(B_TRANSLATE("Could not open \"%document\" "
|
alertString.SetTo(B_TRANSLATE("Could not open \"%document\" "
|
||||||
"with application \"%app\" (Missing symbol: %symbol). \n"));
|
"with application \"%app\" (Missing symbol: %symbol). "
|
||||||
|
"\n"));
|
||||||
alertString.ReplaceFirst("%document", documentRef.name);
|
alertString.ReplaceFirst("%document", documentRef.name);
|
||||||
alertString.ReplaceFirst("%app", app.name);
|
alertString.ReplaceFirst("%app", app.name);
|
||||||
alertString.ReplaceFirst("%symbol", loaderErrorString.String());
|
alertString.ReplaceFirst("%symbol",
|
||||||
|
loaderErrorString.String());
|
||||||
} else {
|
} else {
|
||||||
alertString.SetTo(B_TRANSLATE("Could not open \"%document\" "
|
alertString.SetTo(B_TRANSLATE("Could not open \"%document\" "
|
||||||
"(Missing symbol: %symbol). \n"));
|
"(Missing symbol: %symbol). \n"));
|
||||||
alertString.ReplaceFirst("%document", documentRef.name);
|
alertString.ReplaceFirst("%document", documentRef.name);
|
||||||
alertString.ReplaceFirst("%symbol", loaderErrorString.String());
|
alertString.ReplaceFirst("%symbol",
|
||||||
|
loaderErrorString.String());
|
||||||
}
|
}
|
||||||
alternative = B_TRANSLATE_NOCOLLECT(kFindAlternativeStr);
|
alternative = B_TRANSLATE_NOCOLLECT(kFindAlternativeStr);
|
||||||
} else if (error == B_MISSING_LIBRARY
|
} else if (error == B_MISSING_LIBRARY
|
||||||
@@ -3502,12 +3523,14 @@ _TrackerLaunchDocuments(const entry_ref* /*doNotUse*/, const BMessage* refs,
|
|||||||
"\n"));
|
"\n"));
|
||||||
alertString.ReplaceFirst("%document", documentRef.name);
|
alertString.ReplaceFirst("%document", documentRef.name);
|
||||||
alertString.ReplaceFirst("%app", app.name);
|
alertString.ReplaceFirst("%app", app.name);
|
||||||
alertString.ReplaceFirst("%library", loaderErrorString.String());
|
alertString.ReplaceFirst("%library",
|
||||||
|
loaderErrorString.String());
|
||||||
} else {
|
} else {
|
||||||
alertString.SetTo(B_TRANSLATE("Could not open \"%document\" "
|
alertString.SetTo(B_TRANSLATE("Could not open \"%document\" "
|
||||||
"(Missing libraries: %library). \n"));
|
"(Missing libraries: %library). \n"));
|
||||||
alertString.ReplaceFirst("%document", documentRef.name);
|
alertString.ReplaceFirst("%document", documentRef.name);
|
||||||
alertString.ReplaceFirst("%library", loaderErrorString.String());
|
alertString.ReplaceFirst("%library",
|
||||||
|
loaderErrorString.String());
|
||||||
}
|
}
|
||||||
alternative = B_TRANSLATE_NOCOLLECT(kFindAlternativeStr);
|
alternative = B_TRANSLATE_NOCOLLECT(kFindAlternativeStr);
|
||||||
} else {
|
} else {
|
||||||
@@ -3525,14 +3548,15 @@ _TrackerLaunchDocuments(const entry_ref* /*doNotUse*/, const BMessage* refs,
|
|||||||
ASSERT(alternative);
|
ASSERT(alternative);
|
||||||
alertString << alternative;
|
alertString << alternative;
|
||||||
BAlert* alert = new BAlert("", alertString.String(),
|
BAlert* alert = new BAlert("", alertString.String(),
|
||||||
B_TRANSLATE("Cancel"), B_TRANSLATE("Find"), 0, B_WIDTH_AS_USUAL,
|
B_TRANSLATE("Cancel"), B_TRANSLATE("Find"), 0,
|
||||||
B_WARNING_ALERT);
|
B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
||||||
alert->SetShortcut(0, B_ESCAPE);
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
if (alert->Go() == 1)
|
if (alert->Go() == 1)
|
||||||
error = TrackerOpenWith(refs);
|
error = TrackerOpenWith(refs);
|
||||||
} else {
|
} else {
|
||||||
BAlert* alert = new BAlert("", alertString.String(),
|
BAlert* alert = new BAlert("", alertString.String(),
|
||||||
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL,
|
||||||
|
B_WARNING_ALERT);
|
||||||
alert->SetShortcut(0, B_ESCAPE);
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
alert->Go();
|
alert->Go();
|
||||||
}
|
}
|
||||||
@@ -3841,8 +3865,6 @@ WellKnowEntryList::WellKnowEntryList()
|
|||||||
AddOne((directory_which)B_USER_QUERIES_DIRECTORY, B_USER_DIRECTORY,
|
AddOne((directory_which)B_USER_QUERIES_DIRECTORY, B_USER_DIRECTORY,
|
||||||
"queries", "queries");
|
"queries", "queries");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AddOne(B_COMMON_DEVELOP_DIRECTORY, "develop");
|
AddOne(B_COMMON_DEVELOP_DIRECTORY, "develop");
|
||||||
AddOne((directory_which)B_USER_DESKBAR_DEVELOP_DIRECTORY,
|
AddOne((directory_which)B_USER_DESKBAR_DEVELOP_DIRECTORY,
|
||||||
B_USER_DESKBAR_DIRECTORY, "Development", "develop");
|
B_USER_DESKBAR_DIRECTORY, "Development", "develop");
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
kReplace, // remove entry before copying new one
|
kReplace, // remove entry before copying new one
|
||||||
kMerge // for folders: leave existing folder, update
|
kMerge // for folders: leave existing folder, update
|
||||||
// contents leaving nonconflicting items
|
// contents leaving nonconflicting items
|
||||||
// for files: save original attributes on file.
|
// for files: save original attributes on file
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Override to always overwrite, never overwrite, let user decide,
|
//! Override to always overwrite, never overwrite, let user decide,
|
||||||
|
|||||||
@@ -111,7 +111,8 @@ enum recent_type {
|
|||||||
|
|
||||||
class RecentsMenu : public BNavMenu {
|
class RecentsMenu : public BNavMenu {
|
||||||
public:
|
public:
|
||||||
RecentsMenu(const char* name,int32 which,uint32 what,BHandler* target);
|
RecentsMenu(const char* name, int32 which, uint32 what,
|
||||||
|
BHandler* target);
|
||||||
|
|
||||||
void DetachedFromWindow();
|
void DetachedFromWindow();
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,8 @@ public:
|
|||||||
void SetIsDesktop(bool);
|
void SetIsDesktop(bool);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// don't do any volume watching and memtamime watching in file panels for now
|
// don't do any volume watching and memtamime watching in file panels
|
||||||
|
// for now
|
||||||
virtual void StartWatching();
|
virtual void StartWatching();
|
||||||
virtual void StopWatching();
|
virtual void StopWatching();
|
||||||
|
|
||||||
|
|||||||
@@ -56,30 +56,41 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model* model)
|
|||||||
fModel(model)
|
fModel(model)
|
||||||
{
|
{
|
||||||
// Constants for the column labels: "User", "Group" and "Other".
|
// Constants for the column labels: "User", "Group" and "Other".
|
||||||
const float kColumnLabelMiddle = 77, kColumnLabelTop = 6, kColumnLabelSpacing = 37,
|
const float kColumnLabelMiddle = 77, kColumnLabelTop = 6,
|
||||||
kColumnLabelBottom = 20, kColumnLabelWidth = 35, kAttribFontHeight = 10;
|
kColumnLabelSpacing = 37, kColumnLabelBottom = 20,
|
||||||
|
kColumnLabelWidth = 35, kAttribFontHeight = 10;
|
||||||
|
|
||||||
BStringView* strView;
|
BStringView* strView;
|
||||||
|
|
||||||
strView = new BStringView(BRect(kColumnLabelMiddle - kColumnLabelWidth / 2,
|
strView = new BStringView(
|
||||||
kColumnLabelTop, kColumnLabelMiddle + kColumnLabelWidth / 2, kColumnLabelBottom),
|
BRect(kColumnLabelMiddle - kColumnLabelWidth / 2,
|
||||||
|
kColumnLabelTop,
|
||||||
|
kColumnLabelMiddle + kColumnLabelWidth / 2,
|
||||||
|
kColumnLabelBottom),
|
||||||
"", B_TRANSLATE("Owner"));
|
"", B_TRANSLATE("Owner"));
|
||||||
AddChild(strView);
|
AddChild(strView);
|
||||||
strView->SetAlignment(B_ALIGN_CENTER);
|
strView->SetAlignment(B_ALIGN_CENTER);
|
||||||
strView->SetFontSize(kAttribFontHeight);
|
strView->SetFontSize(kAttribFontHeight);
|
||||||
|
|
||||||
strView = new BStringView(BRect(kColumnLabelMiddle - kColumnLabelWidth / 2
|
strView = new BStringView(
|
||||||
+ kColumnLabelSpacing, kColumnLabelTop,
|
BRect(kColumnLabelMiddle - kColumnLabelWidth / 2
|
||||||
|
+ kColumnLabelSpacing,
|
||||||
|
kColumnLabelTop,
|
||||||
kColumnLabelMiddle + kColumnLabelWidth / 2 + kColumnLabelSpacing,
|
kColumnLabelMiddle + kColumnLabelWidth / 2 + kColumnLabelSpacing,
|
||||||
kColumnLabelBottom), "", B_TRANSLATE("Group"));
|
kColumnLabelBottom),
|
||||||
|
"", B_TRANSLATE("Group"));
|
||||||
AddChild(strView);
|
AddChild(strView);
|
||||||
strView->SetAlignment(B_ALIGN_CENTER);
|
strView->SetAlignment(B_ALIGN_CENTER);
|
||||||
strView->SetFontSize(kAttribFontHeight);
|
strView->SetFontSize(kAttribFontHeight);
|
||||||
|
|
||||||
strView = new BStringView(BRect(kColumnLabelMiddle - kColumnLabelWidth / 2
|
strView = new BStringView(
|
||||||
+ 2 * kColumnLabelSpacing, kColumnLabelTop,
|
BRect(kColumnLabelMiddle - kColumnLabelWidth / 2
|
||||||
kColumnLabelMiddle + kColumnLabelWidth / 2 + 2 * kColumnLabelSpacing,
|
+ 2 * kColumnLabelSpacing,
|
||||||
kColumnLabelBottom), "", B_TRANSLATE("Other"));
|
kColumnLabelTop,
|
||||||
|
kColumnLabelMiddle + kColumnLabelWidth / 2
|
||||||
|
+ 2 * kColumnLabelSpacing,
|
||||||
|
kColumnLabelBottom),
|
||||||
|
"", B_TRANSLATE("Other"));
|
||||||
AddChild(strView);
|
AddChild(strView);
|
||||||
strView->SetAlignment(B_ALIGN_CENTER);
|
strView->SetAlignment(B_ALIGN_CENTER);
|
||||||
strView->SetFontSize(kAttribFontHeight);
|
strView->SetFontSize(kAttribFontHeight);
|
||||||
@@ -89,8 +100,8 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model* model)
|
|||||||
kRowLabelVerticalSpacing = 18, kRowLabelRight = kColumnLabelMiddle
|
kRowLabelVerticalSpacing = 18, kRowLabelRight = kColumnLabelMiddle
|
||||||
- kColumnLabelWidth / 2 - 5, kRowLabelHeight = 14;
|
- kColumnLabelWidth / 2 - 5, kRowLabelHeight = 14;
|
||||||
|
|
||||||
strView = new BStringView(BRect(kRowLabelLeft, kRowLabelTop, kRowLabelRight,
|
strView = new BStringView(BRect(kRowLabelLeft, kRowLabelTop,
|
||||||
kRowLabelTop + kRowLabelHeight),
|
kRowLabelRight, kRowLabelTop + kRowLabelHeight),
|
||||||
"", B_TRANSLATE("Read"));
|
"", B_TRANSLATE("Read"));
|
||||||
AddChild(strView);
|
AddChild(strView);
|
||||||
strView->SetAlignment(B_ALIGN_RIGHT);
|
strView->SetAlignment(B_ALIGN_RIGHT);
|
||||||
@@ -113,14 +124,29 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model* model)
|
|||||||
strView->SetFontSize(kAttribFontHeight);
|
strView->SetFontSize(kAttribFontHeight);
|
||||||
|
|
||||||
// Constants for the 3x3 check box array.
|
// Constants for the 3x3 check box array.
|
||||||
const float kLeftMargin = kRowLabelRight + 15, kTopMargin = kRowLabelTop - 2,
|
const float kLeftMargin = kRowLabelRight + 15,
|
||||||
kHorizontalSpacing = kColumnLabelSpacing, kVerticalSpacing = kRowLabelVerticalSpacing,
|
kTopMargin = kRowLabelTop - 2,
|
||||||
|
kHorizontalSpacing = kColumnLabelSpacing,
|
||||||
|
kVerticalSpacing = kRowLabelVerticalSpacing,
|
||||||
kCheckBoxWidth = 18, kCheckBoxHeight = 18;
|
kCheckBoxWidth = 18, kCheckBoxHeight = 18;
|
||||||
|
|
||||||
FocusCheckBox** checkBoxArray[3][3] = {
|
FocusCheckBox** checkBoxArray[3][3] = {
|
||||||
{ &fReadUserCheckBox, &fReadGroupCheckBox, &fReadOtherCheckBox },
|
{
|
||||||
{ &fWriteUserCheckBox, &fWriteGroupCheckBox, &fWriteOtherCheckBox },
|
&fReadUserCheckBox,
|
||||||
{ &fExecuteUserCheckBox, &fExecuteGroupCheckBox, &fExecuteOtherCheckBox }};
|
&fReadGroupCheckBox,
|
||||||
|
&fReadOtherCheckBox
|
||||||
|
},
|
||||||
|
{
|
||||||
|
&fWriteUserCheckBox,
|
||||||
|
&fWriteGroupCheckBox,
|
||||||
|
&fWriteOtherCheckBox
|
||||||
|
},
|
||||||
|
{
|
||||||
|
&fExecuteUserCheckBox,
|
||||||
|
&fExecuteGroupCheckBox,
|
||||||
|
&fExecuteOtherCheckBox
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
for (int32 x = 0; x < 3; x++) {
|
for (int32 x = 0; x < 3; x++) {
|
||||||
for (int32 y = 0; y < 3; y++) {
|
for (int32 y = 0; y < 3; y++) {
|
||||||
@@ -135,7 +161,8 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model* model)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const float kTextControlLeft = 170, kTextControlRight = 270,
|
const float kTextControlLeft = 170, kTextControlRight = 270,
|
||||||
kTextControlTop = kColumnLabelTop, kTextControlHeight = 14, kTextControlSpacing = 16;
|
kTextControlTop = kColumnLabelTop, kTextControlHeight = 14,
|
||||||
|
kTextControlSpacing = 16;
|
||||||
|
|
||||||
strView = new BStringView(BRect(kTextControlLeft, kTextControlTop,
|
strView = new BStringView(BRect(kTextControlLeft, kTextControlTop,
|
||||||
kTextControlRight, kTextControlTop + kTextControlHeight), "",
|
kTextControlRight, kTextControlTop + kTextControlHeight), "",
|
||||||
@@ -144,25 +171,30 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model* model)
|
|||||||
strView->SetFontSize(kAttribFontHeight);
|
strView->SetFontSize(kAttribFontHeight);
|
||||||
AddChild(strView);
|
AddChild(strView);
|
||||||
|
|
||||||
fOwnerTextControl = new BTextControl(BRect(kTextControlLeft, kTextControlTop - 2
|
fOwnerTextControl = new BTextControl(
|
||||||
+ kTextControlSpacing, kTextControlRight, kTextControlTop + kTextControlHeight - 2
|
BRect(kTextControlLeft,
|
||||||
+ kTextControlSpacing), "", "", "", new BMessage(kNewOwnerEntered));
|
kTextControlTop - 2 + kTextControlSpacing,
|
||||||
|
kTextControlRight,
|
||||||
|
kTextControlTop + kTextControlHeight - 2 + kTextControlSpacing),
|
||||||
|
"", "", "", new BMessage(kNewOwnerEntered));
|
||||||
fOwnerTextControl->SetDivider(0);
|
fOwnerTextControl->SetDivider(0);
|
||||||
AddChild(fOwnerTextControl);
|
AddChild(fOwnerTextControl);
|
||||||
|
|
||||||
strView = new BStringView(BRect(kTextControlLeft,
|
strView = new BStringView(BRect(kTextControlLeft,
|
||||||
kTextControlTop + 5 + 2 * kTextControlSpacing,
|
kTextControlTop + 5 + 2 * kTextControlSpacing,
|
||||||
kTextControlRight,
|
kTextControlRight,
|
||||||
kTextControlTop + 2 + 2 * kTextControlSpacing + kTextControlHeight),
|
kTextControlTop + 2 + 2 * kTextControlSpacing
|
||||||
|
+ kTextControlHeight),
|
||||||
"", B_TRANSLATE("Group"));
|
"", B_TRANSLATE("Group"));
|
||||||
strView->SetAlignment(B_ALIGN_CENTER);
|
strView->SetAlignment(B_ALIGN_CENTER);
|
||||||
strView->SetFontSize(kAttribFontHeight);
|
strView->SetFontSize(kAttribFontHeight);
|
||||||
AddChild(strView);
|
AddChild(strView);
|
||||||
|
|
||||||
fGroupTextControl = new BTextControl(BRect(kTextControlLeft, kTextControlTop
|
fGroupTextControl = new BTextControl(BRect(kTextControlLeft,
|
||||||
+ 3 * kTextControlSpacing, kTextControlRight, kTextControlTop
|
kTextControlTop + 3 * kTextControlSpacing,
|
||||||
+ 3 * kTextControlSpacing + kTextControlHeight), "", "", "",
|
kTextControlRight,
|
||||||
new BMessage(kNewGroupEntered));
|
kTextControlTop + 3 * kTextControlSpacing + kTextControlHeight),
|
||||||
|
"", "", "", new BMessage(kNewGroupEntered));
|
||||||
fGroupTextControl->SetDivider(0);
|
fGroupTextControl->SetDivider(0);
|
||||||
AddChild(fGroupTextControl);
|
AddChild(fGroupTextControl);
|
||||||
|
|
||||||
@@ -277,7 +309,8 @@ FilePermissionsView::MessageReceived(BMessage* message)
|
|||||||
case kPermissionsChanged:
|
case kPermissionsChanged:
|
||||||
if (fModel != NULL) {
|
if (fModel != NULL) {
|
||||||
mode_t newPermissions = 0;
|
mode_t newPermissions = 0;
|
||||||
newPermissions = (mode_t)((fReadUserCheckBox->Value() ? S_IRUSR : 0)
|
newPermissions
|
||||||
|
= (mode_t)((fReadUserCheckBox->Value() ? S_IRUSR : 0)
|
||||||
| (fReadGroupCheckBox->Value() ? S_IRGRP : 0)
|
| (fReadGroupCheckBox->Value() ? S_IRGRP : 0)
|
||||||
| (fReadOtherCheckBox->Value() ? S_IROTH : 0)
|
| (fReadOtherCheckBox->Value() ? S_IROTH : 0)
|
||||||
|
|
||||||
|
|||||||
@@ -334,7 +334,8 @@ void
|
|||||||
FindWindow::GetPredicateString(BString &predicate, bool &dynamicDate)
|
FindWindow::GetPredicateString(BString &predicate, bool &dynamicDate)
|
||||||
{
|
{
|
||||||
BQuery query;
|
BQuery query;
|
||||||
BTextControl* textControl = dynamic_cast<BTextControl*>(FindView("TextControl"));
|
BTextControl* textControl
|
||||||
|
= dynamic_cast<BTextControl*>(FindView("TextControl"));
|
||||||
switch (fBackground->Mode()) {
|
switch (fBackground->Mode()) {
|
||||||
case kByNameItem:
|
case kByNameItem:
|
||||||
fBackground->GetByNamePredicate(&query);
|
fBackground->GetByNamePredicate(&query);
|
||||||
@@ -374,8 +375,8 @@ FindWindow::GetDefaultName(BString &result)
|
|||||||
void
|
void
|
||||||
FindWindow::SaveQueryAttributes(BNode* file, bool queryTemplate)
|
FindWindow::SaveQueryAttributes(BNode* file, bool queryTemplate)
|
||||||
{
|
{
|
||||||
ThrowOnError( BNodeInfo(file).SetType(
|
ThrowOnError(BNodeInfo(file).SetType(
|
||||||
queryTemplate ? B_QUERY_TEMPLATE_MIMETYPE : B_QUERY_MIMETYPE) );
|
queryTemplate ? B_QUERY_TEMPLATE_MIMETYPE : B_QUERY_MIMETYPE));
|
||||||
|
|
||||||
// save date/time info for recent query support and transient query killer
|
// save date/time info for recent query support and transient query killer
|
||||||
int32 currentTime = (int32)time(0);
|
int32 currentTime = (int32)time(0);
|
||||||
@@ -387,8 +388,9 @@ FindWindow::SaveQueryAttributes(BNode* file, bool queryTemplate)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FindWindow::SaveQueryAsAttributes(BNode* file, BEntry* entry, bool queryTemplate,
|
FindWindow::SaveQueryAsAttributes(BNode* file, BEntry* entry,
|
||||||
const BMessage* oldAttributes, const BPoint* oldLocation)
|
bool queryTemplate, const BMessage* oldAttributes,
|
||||||
|
const BPoint* oldLocation)
|
||||||
{
|
{
|
||||||
if (oldAttributes)
|
if (oldAttributes)
|
||||||
// revive old window settings
|
// revive old window settings
|
||||||
@@ -613,7 +615,8 @@ FindWindow::MessageReceived(BMessage* message)
|
|||||||
bool queryTemplate;
|
bool queryTemplate;
|
||||||
if (message->FindString("name", &name) == B_OK
|
if (message->FindString("name", &name) == B_OK
|
||||||
&& message->FindRef("directory", &dir) == B_OK
|
&& message->FindRef("directory", &dir) == B_OK
|
||||||
&& message->FindBool("template", &queryTemplate) == B_OK) {
|
&& message->FindBool("template", &queryTemplate)
|
||||||
|
== B_OK) {
|
||||||
delete fFile;
|
delete fFile;
|
||||||
fFile = NULL;
|
fFile = NULL;
|
||||||
BDirectory directory(&dir);
|
BDirectory directory(&dir);
|
||||||
@@ -623,7 +626,8 @@ FindWindow::MessageReceived(BMessage* message)
|
|||||||
fFile = TryOpening(&tmpRef);
|
fFile = TryOpening(&tmpRef);
|
||||||
if (fFile) {
|
if (fFile) {
|
||||||
fRef = tmpRef;
|
fRef = tmpRef;
|
||||||
SaveQueryAsAttributes(fFile, &entry, queryTemplate, 0, 0);
|
SaveQueryAsAttributes(fFile, &entry, queryTemplate,
|
||||||
|
0, 0);
|
||||||
// try to save whatever state we aleady have
|
// try to save whatever state we aleady have
|
||||||
// to the new query so that if the user
|
// to the new query so that if the user
|
||||||
// opens it before runing it from the find panel,
|
// opens it before runing it from the find panel,
|
||||||
@@ -705,7 +709,8 @@ FindPanel::FindPanel(BRect frame, BFile* node, FindWindow* parent,
|
|||||||
rect.right = rect.left + 150;
|
rect.right = rect.left + 150;
|
||||||
fMimeTypeField = new BMenuField(rect, "MimeTypeMenu", "", fMimeTypeMenu);
|
fMimeTypeField = new BMenuField(rect, "MimeTypeMenu", "", fMimeTypeMenu);
|
||||||
fMimeTypeField->SetDivider(0.0f);
|
fMimeTypeField->SetDivider(0.0f);
|
||||||
fMimeTypeField->MenuItem()->SetLabel(B_TRANSLATE("All files and folders"));
|
fMimeTypeField->MenuItem()->SetLabel(
|
||||||
|
B_TRANSLATE("All files and folders"));
|
||||||
AddChild(fMimeTypeField);
|
AddChild(fMimeTypeField);
|
||||||
|
|
||||||
// add popup for search criteria
|
// add popup for search criteria
|
||||||
@@ -853,12 +858,14 @@ FindPanel::AttachedToWindow()
|
|||||||
|
|
||||||
if (!Window()->CurrentFocus()) {
|
if (!Window()->CurrentFocus()) {
|
||||||
// try to pick a good focus if we restore to one already
|
// try to pick a good focus if we restore to one already
|
||||||
BTextControl* textControl = dynamic_cast<BTextControl*>(FindView("TextControl"));
|
BTextControl* textControl
|
||||||
|
= dynamic_cast<BTextControl*>(FindView("TextControl"));
|
||||||
if (!textControl) {
|
if (!textControl) {
|
||||||
// pick the last text control in the attribute view
|
// pick the last text control in the attribute view
|
||||||
BString title("TextEntry");
|
BString title("TextEntry");
|
||||||
title << (fAttrViewList.CountItems() - 1);
|
title << (fAttrViewList.CountItems() - 1);
|
||||||
textControl = dynamic_cast<BTextControl*>(FindView(title.String()));
|
textControl
|
||||||
|
= dynamic_cast<BTextControl*>(FindView(title.String()));
|
||||||
}
|
}
|
||||||
if (textControl)
|
if (textControl)
|
||||||
textControl->MakeFocus();
|
textControl->MakeFocus();
|
||||||
@@ -982,7 +989,7 @@ FindPanel::ShowVolumeMenuLabel()
|
|||||||
|
|
||||||
if (countSelected == 0) {
|
if (countSelected == 0) {
|
||||||
// no disk selected, for now revert to search all disks
|
// no disk selected, for now revert to search all disks
|
||||||
// TODO:
|
// ToDo:
|
||||||
// show no disks here and add a check that will not let the
|
// show no disks here and add a check that will not let the
|
||||||
// query go if the user doesn't pick at least one
|
// query go if the user doesn't pick at least one
|
||||||
fVolMenu->ItemAt(0)->SetMarked(true);
|
fVolMenu->ItemAt(0)->SetMarked(true);
|
||||||
@@ -1295,7 +1302,8 @@ FindPanel::BuildAttrQuery(BQuery* query, bool &dynamicDate) const
|
|||||||
case B_FLOAT_TYPE:
|
case B_FLOAT_TYPE:
|
||||||
{
|
{
|
||||||
float floatVal;
|
float floatVal;
|
||||||
sscanf(textControl->TextView()->Text(), "%f", &floatVal);
|
sscanf(textControl->TextView()->Text(), "%f",
|
||||||
|
&floatVal);
|
||||||
query->PushFloat(floatVal);
|
query->PushFloat(floatVal);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1303,7 +1311,8 @@ FindPanel::BuildAttrQuery(BQuery* query, bool &dynamicDate) const
|
|||||||
case B_DOUBLE_TYPE:
|
case B_DOUBLE_TYPE:
|
||||||
{
|
{
|
||||||
double doubleVal;
|
double doubleVal;
|
||||||
sscanf(textControl->TextView()->Text(), "%lf", &doubleVal);
|
sscanf(textControl->TextView()->Text(), "%lf",
|
||||||
|
&doubleVal);
|
||||||
query->PushDouble(doubleVal);
|
query->PushDouble(doubleVal);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1428,7 +1437,7 @@ FindPanel::GetByNamePredicate(BQuery* query) const
|
|||||||
query->PushString(textControl->TextView()->Text(), true);
|
query->PushString(textControl->TextView()->Text(), true);
|
||||||
|
|
||||||
if (strstr(textControl->TextView()->Text(), "*")) {
|
if (strstr(textControl->TextView()->Text(), "*")) {
|
||||||
// assume pattern is a regular expression and try doing an exact match
|
// assume pattern is a regular expression, try doing an exact match
|
||||||
query->PushOp(B_EQ);
|
query->PushOp(B_EQ);
|
||||||
} else
|
} else
|
||||||
query->PushOp(B_CONTAINS);
|
query->PushOp(B_CONTAINS);
|
||||||
@@ -1452,6 +1461,7 @@ FindPanel::SwitchMode(uint32 mode)
|
|||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case kByFormulaItem:
|
case kByFormulaItem:
|
||||||
|
{
|
||||||
if (oldMode == kByAttributeItem || oldMode == kByNameItem) {
|
if (oldMode == kByAttributeItem || oldMode == kByNameItem) {
|
||||||
BQuery query;
|
BQuery query;
|
||||||
if (oldMode == kByAttributeItem) {
|
if (oldMode == kByAttributeItem) {
|
||||||
@@ -1462,8 +1472,7 @@ FindPanel::SwitchMode(uint32 mode)
|
|||||||
|
|
||||||
query.GetPredicate(&buffer);
|
query.GetPredicate(&buffer);
|
||||||
}
|
}
|
||||||
// fall thru
|
} // fall thru
|
||||||
|
|
||||||
case kByNameItem:
|
case kByNameItem:
|
||||||
{
|
{
|
||||||
fMode = mode;
|
fMode = mode;
|
||||||
@@ -1484,8 +1493,8 @@ FindPanel::SwitchMode(uint32 mode)
|
|||||||
if (buffer.Length()) {
|
if (buffer.Length()) {
|
||||||
ASSERT(mode == kByFormulaItem
|
ASSERT(mode == kByFormulaItem
|
||||||
|| oldMode == kByAttributeItem);
|
|| oldMode == kByAttributeItem);
|
||||||
BTextControl* textControl = dynamic_cast<BTextControl*>
|
BTextControl* textControl
|
||||||
(FindView("TextControl"));
|
= dynamic_cast<BTextControl*>(FindView("TextControl"));
|
||||||
textControl->SetText(buffer.String());
|
textControl->SetText(buffer.String());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1500,9 +1509,8 @@ FindPanel::SwitchMode(uint32 mode)
|
|||||||
Window()->ResizeTo(Window()->Frame().Width(),
|
Window()->ResizeTo(Window()->Frame().Width(),
|
||||||
ViewHeightForMode(mode, fLatch->Value() != 0));
|
ViewHeightForMode(mode, fLatch->Value() != 0));
|
||||||
|
|
||||||
BTextControl* textControl = dynamic_cast<BTextControl*>
|
BTextControl* textControl
|
||||||
(FindView("TextControl"));
|
= dynamic_cast<BTextControl*>(FindView("TextControl"));
|
||||||
|
|
||||||
if (textControl) {
|
if (textControl) {
|
||||||
textControl->RemoveSelf();
|
textControl->RemoveSelf();
|
||||||
delete textControl;
|
delete textControl;
|
||||||
@@ -2206,8 +2214,8 @@ FindPanel::RestoreWindowState(const BNode* node)
|
|||||||
FillCurrentQueryName(fQueryName, dynamic_cast<FindWindow*>(Window()));
|
FillCurrentQueryName(fQueryName, dynamic_cast<FindWindow*>(Window()));
|
||||||
|
|
||||||
// set modification message after checking the temporary check box,
|
// set modification message after checking the temporary check box,
|
||||||
// and filling out the text control so that we do not
|
// and filling out the text control so that we do not always trigger
|
||||||
// always trigger clearing of the temporary check box.
|
// clearing of the temporary check box.
|
||||||
fQueryName->SetModificationMessage(
|
fQueryName->SetModificationMessage(
|
||||||
new BMessage(kNameModifiedMessage));
|
new BMessage(kNameModifiedMessage));
|
||||||
}
|
}
|
||||||
@@ -2227,8 +2235,8 @@ FindPanel::RestoreWindowState(const BNode* node)
|
|||||||
BVolume volume;
|
BVolume volume;
|
||||||
// match a volume with the info embedded in
|
// match a volume with the info embedded in
|
||||||
// the message
|
// the message
|
||||||
status_t result = MatchArchivedVolume(&volume, &message,
|
status_t result
|
||||||
index);
|
= MatchArchivedVolume(&volume, &message, index);
|
||||||
if (result == B_OK) {
|
if (result == B_OK) {
|
||||||
char name[256];
|
char name[256];
|
||||||
volume.GetName(name);
|
volume.GetName(name);
|
||||||
|
|||||||
@@ -129,8 +129,8 @@ class FindWindow : public BWindow {
|
|||||||
{ return fFile; }
|
{ return fFile; }
|
||||||
|
|
||||||
const char* QueryName() const;
|
const char* QueryName() const;
|
||||||
// reads in the query name from either a saved name in a template or
|
// reads in the query name from either a saved name in a template
|
||||||
// form a saved query name
|
// or form a saved query name
|
||||||
|
|
||||||
static bool IsQueryTemplate(BNode* file);
|
static bool IsQueryTemplate(BNode* file);
|
||||||
|
|
||||||
@@ -140,7 +140,8 @@ class FindWindow : public BWindow {
|
|||||||
private:
|
private:
|
||||||
static BFile* TryOpening(const entry_ref* ref);
|
static BFile* TryOpening(const entry_ref* ref);
|
||||||
static void GetDefaultQuery(BEntry &entry);
|
static void GetDefaultQuery(BEntry &entry);
|
||||||
// when opening an empty panel, use the default query to set the panel up
|
// when opening an empty panel, use the default query to set the
|
||||||
|
// panel up
|
||||||
void SaveQueryAttributes(BNode* file, bool templateQuery);
|
void SaveQueryAttributes(BNode* file, bool templateQuery);
|
||||||
|
|
||||||
void Find();
|
void Find();
|
||||||
@@ -242,10 +243,12 @@ class FindPanel : public BView {
|
|||||||
void RemoveByAttributeItems();
|
void RemoveByAttributeItems();
|
||||||
void RemoveAttrViewItems();
|
void RemoveAttrViewItems();
|
||||||
void ShowOrHideMimeTypeMenu();
|
void ShowOrHideMimeTypeMenu();
|
||||||
// MimeTypeWindow is only shown in kByNameItem and kByAttributeItem modes
|
// MimeTypeWindow is only shown in kByNameItem and
|
||||||
|
// kByAttributeItem modes
|
||||||
|
|
||||||
void ShowOrHideMoreOptions(bool show);
|
void ShowOrHideMoreOptions(bool show);
|
||||||
// fMode gets set by this and the call relies on it being up-to-date
|
// fMode gets set by this and the call relies on it being
|
||||||
|
// up-to-date
|
||||||
static int32 InitialAttrCount(const BNode*);
|
static int32 InitialAttrCount(const BNode*);
|
||||||
void FillCurrentQueryName(BTextControl*, FindWindow*);
|
void FillCurrentQueryName(BTextControl*, FindWindow*);
|
||||||
void AddByNameOrFormulaItems();
|
void AddByNameOrFormulaItems();
|
||||||
@@ -348,7 +351,8 @@ class DeleteTransientQueriesTask {
|
|||||||
|
|
||||||
class RecentFindItemsMenu : public BMenu {
|
class RecentFindItemsMenu : public BMenu {
|
||||||
public:
|
public:
|
||||||
RecentFindItemsMenu(const char* title, const BMessenger* target, uint32 what);
|
RecentFindItemsMenu(const char* title, const BMessenger* target,
|
||||||
|
uint32 what);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void AttachedToWindow();
|
virtual void AttachedToWindow();
|
||||||
@@ -362,8 +366,9 @@ class RecentFindItemsMenu : public BMenu {
|
|||||||
class DraggableQueryIcon : public DraggableIcon {
|
class DraggableQueryIcon : public DraggableIcon {
|
||||||
// query/query template drag&drop helper
|
// query/query template drag&drop helper
|
||||||
public:
|
public:
|
||||||
DraggableQueryIcon(BRect frame, const char* name, const BMessage* message,
|
DraggableQueryIcon(BRect frame, const char* name,
|
||||||
BMessenger target, uint32 resizeFlags = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
const BMessage* message, BMessenger target,
|
||||||
|
uint32 resizeFlags = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||||
uint32 flags = B_WILL_DRAW);
|
uint32 flags = B_WILL_DRAW);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -252,9 +252,11 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
template <class Result, class Param1, class Param2, class Param3>
|
template <class Result, class Param1, class Param2, class Param3>
|
||||||
class ThreeParamFunctionObjectWithResult : public FunctionObjectWithResult<Result> {
|
class ThreeParamFunctionObjectWithResult : public
|
||||||
|
FunctionObjectWithResult<Result> {
|
||||||
public:
|
public:
|
||||||
ThreeParamFunctionObjectWithResult(Result (*callThis)(Param1, Param2, Param3),
|
ThreeParamFunctionObjectWithResult(
|
||||||
|
Result (*callThis)(Param1, Param2, Param3),
|
||||||
Param1 p1, Param2 p2, Param3 p3)
|
Param1 p1, Param2 p2, Param3 p3)
|
||||||
: function(callThis),
|
: function(callThis),
|
||||||
p1(p1),
|
p1(p1),
|
||||||
@@ -300,10 +302,13 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <class Result, class Param1, class Param2, class Param3, class Param4>
|
template <class Result, class Param1, class Param2, class Param3,
|
||||||
class FourParamFunctionObjectWithResult : public FunctionObjectWithResult<Result> {
|
class Param4>
|
||||||
|
class FourParamFunctionObjectWithResult : public
|
||||||
|
FunctionObjectWithResult<Result> {
|
||||||
public:
|
public:
|
||||||
FourParamFunctionObjectWithResult(Result (*callThis)(Param1, Param2, Param3, Param4),
|
FourParamFunctionObjectWithResult(
|
||||||
|
Result (*callThis)(Param1, Param2, Param3, Param4),
|
||||||
Param1 p1, Param2 p2, Param3 p3, Param4 p4)
|
Param1 p1, Param2 p2, Param3 p3, Param4 p4)
|
||||||
: function(callThis),
|
: function(callThis),
|
||||||
p1(p1),
|
p1(p1),
|
||||||
@@ -369,7 +374,8 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
template<class T, class R>
|
template<class T, class R>
|
||||||
class PlainMemberFunctionObjectWithResult : public FunctionObjectWithResult<R> {
|
class PlainMemberFunctionObjectWithResult : public
|
||||||
|
FunctionObjectWithResult<R> {
|
||||||
public:
|
public:
|
||||||
PlainMemberFunctionObjectWithResult(R (T::*function)(), T* onThis)
|
PlainMemberFunctionObjectWithResult(R (T::*function)(), T* onThis)
|
||||||
: function(function),
|
: function(function),
|
||||||
@@ -390,7 +396,8 @@ private:
|
|||||||
template<class T, class Param1>
|
template<class T, class Param1>
|
||||||
class SingleParamMemberFunctionObject : public FunctionObject {
|
class SingleParamMemberFunctionObject : public FunctionObject {
|
||||||
public:
|
public:
|
||||||
SingleParamMemberFunctionObject(void (T::*function)(Param1), T* onThis, Param1 p1)
|
SingleParamMemberFunctionObject(void (T::*function)(Param1),
|
||||||
|
T* onThis, Param1 p1)
|
||||||
: function(function),
|
: function(function),
|
||||||
target(onThis),
|
target(onThis),
|
||||||
p1(p1)
|
p1(p1)
|
||||||
@@ -410,8 +417,8 @@ private:
|
|||||||
template<class T, class Param1, class Param2>
|
template<class T, class Param1, class Param2>
|
||||||
class TwoParamMemberFunctionObject : public FunctionObject {
|
class TwoParamMemberFunctionObject : public FunctionObject {
|
||||||
public:
|
public:
|
||||||
TwoParamMemberFunctionObject(void (T::*function)(Param1, Param2), T* onThis,
|
TwoParamMemberFunctionObject(void (T::*function)(Param1, Param2),
|
||||||
Param1 p1, Param2 p2)
|
T* onThis, Param1 p1, Param2 p2)
|
||||||
: function(function),
|
: function(function),
|
||||||
target(onThis),
|
target(onThis),
|
||||||
p1(p1),
|
p1(p1),
|
||||||
@@ -432,10 +439,11 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
template<class T, class R, class Param1>
|
template<class T, class R, class Param1>
|
||||||
class SingleParamMemberFunctionObjectWithResult : public FunctionObjectWithResult<R> {
|
class SingleParamMemberFunctionObjectWithResult : public
|
||||||
|
FunctionObjectWithResult<R> {
|
||||||
public:
|
public:
|
||||||
SingleParamMemberFunctionObjectWithResult(R (T::*function)(Param1), T* onThis,
|
SingleParamMemberFunctionObjectWithResult(R (T::*function)(Param1),
|
||||||
Param1 p1)
|
T* onThis, Param1 p1)
|
||||||
: function(function),
|
: function(function),
|
||||||
target(onThis),
|
target(onThis),
|
||||||
p1(p1)
|
p1(p1)
|
||||||
@@ -443,7 +451,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void operator()()
|
virtual void operator()()
|
||||||
{ FunctionObjectWithResult<R>::result = (target->*function)(p1.Pass()); }
|
{ FunctionObjectWithResult<R>::result
|
||||||
|
= (target->*function)(p1.Pass()); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
R (T::*function)(Param1);
|
R (T::*function)(Param1);
|
||||||
@@ -453,10 +462,11 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
template<class T, class R, class Param1, class Param2>
|
template<class T, class R, class Param1, class Param2>
|
||||||
class TwoParamMemberFunctionObjectWithResult : public FunctionObjectWithResult<R> {
|
class TwoParamMemberFunctionObjectWithResult : public
|
||||||
|
FunctionObjectWithResult<R> {
|
||||||
public:
|
public:
|
||||||
TwoParamMemberFunctionObjectWithResult(R (T::*function)(Param1, Param2), T* onThis,
|
TwoParamMemberFunctionObjectWithResult(R (T::*function)(Param1, Param2),
|
||||||
Param1 p1, Param2 p2)
|
T* onThis, Param1 p1, Param2 p2)
|
||||||
: function(function),
|
: function(function),
|
||||||
target(onThis),
|
target(onThis),
|
||||||
p1(p1),
|
p1(p1),
|
||||||
@@ -505,7 +515,8 @@ ThreeParamFunctionObject<Param1, Param2, Param3>*
|
|||||||
NewFunctionObject(void (*function)(Param1, Param2, Param3),
|
NewFunctionObject(void (*function)(Param1, Param2, Param3),
|
||||||
Param1 p1, Param2 p2, Param3 p3)
|
Param1 p1, Param2 p2, Param3 p3)
|
||||||
{
|
{
|
||||||
return new ThreeParamFunctionObject<Param1, Param2, Param3>(function, p1, p2, p3);
|
return new ThreeParamFunctionObject<Param1, Param2, Param3>
|
||||||
|
(function, p1, p2, p3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -521,7 +532,8 @@ template<class T, class Param1>
|
|||||||
SingleParamMemberFunctionObject<T, Param1>*
|
SingleParamMemberFunctionObject<T, Param1>*
|
||||||
NewMemberFunctionObject(void (T::*function)(Param1), T* onThis, Param1 p1)
|
NewMemberFunctionObject(void (T::*function)(Param1), T* onThis, Param1 p1)
|
||||||
{
|
{
|
||||||
return new SingleParamMemberFunctionObject<T, Param1>(function, onThis, p1);
|
return new SingleParamMemberFunctionObject<T, Param1>
|
||||||
|
(function, onThis, p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -530,8 +542,8 @@ TwoParamMemberFunctionObject<T, Param1, Param2>*
|
|||||||
NewMemberFunctionObject(void (T::*function)(Param1, Param2), T* onThis,
|
NewMemberFunctionObject(void (T::*function)(Param1, Param2), T* onThis,
|
||||||
Param1 p1, Param2 p2)
|
Param1 p1, Param2 p2)
|
||||||
{
|
{
|
||||||
return new TwoParamMemberFunctionObject<T, Param1, Param2>(function, onThis,
|
return new TwoParamMemberFunctionObject<T, Param1, Param2>
|
||||||
p1, p2);
|
(function, onThis, p1, p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -550,7 +562,8 @@ PlainLockingMemberFunctionObject<HandlerOrSubclass>*
|
|||||||
NewLockingMemberFunctionObject(void (HandlerOrSubclass::*function)(),
|
NewLockingMemberFunctionObject(void (HandlerOrSubclass::*function)(),
|
||||||
HandlerOrSubclass* onThis)
|
HandlerOrSubclass* onThis)
|
||||||
{
|
{
|
||||||
return new PlainLockingMemberFunctionObject<HandlerOrSubclass>(function, onThis);
|
return new PlainLockingMemberFunctionObject<HandlerOrSubclass>
|
||||||
|
(function, onThis);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ class TGroupedMenu : public BMenu {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
friend class TMenuItemGroup;
|
friend class TMenuItemGroup;
|
||||||
void AddGroupItem(TMenuItemGroup* group, BMenuItem* item, int32 atIndex);
|
void AddGroupItem(TMenuItemGroup* group, BMenuItem* item,
|
||||||
|
int32 atIndex);
|
||||||
void RemoveGroupItem(TMenuItemGroup* group, BMenuItem* item);
|
void RemoveGroupItem(TMenuItemGroup* group, BMenuItem* item);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -52,11 +52,12 @@ const bigtime_t kSynchMenuInvokeTimeout = 5000000;
|
|||||||
class IconMenuItem : public PositionPassingMenuItem {
|
class IconMenuItem : public PositionPassingMenuItem {
|
||||||
public:
|
public:
|
||||||
IconMenuItem(const char* label, BMessage* message, BBitmap* icon);
|
IconMenuItem(const char* label, BMessage* message, BBitmap* icon);
|
||||||
IconMenuItem(const char* label, BMessage* message, const char* iconType,
|
IconMenuItem(const char* label, BMessage* message,
|
||||||
icon_size which);
|
const char* iconType, icon_size which);
|
||||||
IconMenuItem(const char* label, BMessage* message,
|
IconMenuItem(const char* label, BMessage* message,
|
||||||
const BNodeInfo* nodeInfo, icon_size which);
|
const BNodeInfo* nodeInfo, icon_size which);
|
||||||
IconMenuItem(BMenu*, BMessage*, const char* iconType, icon_size which);
|
IconMenuItem(BMenu*, BMessage*, const char* iconType,
|
||||||
|
icon_size which);
|
||||||
virtual ~IconMenuItem();
|
virtual ~IconMenuItem();
|
||||||
|
|
||||||
virtual void GetContentSize(float* width, float* height);
|
virtual void GetContentSize(float* width, float* height);
|
||||||
@@ -72,9 +73,11 @@ class IconMenuItem : public PositionPassingMenuItem {
|
|||||||
|
|
||||||
class ModelMenuItem : public BMenuItem {
|
class ModelMenuItem : public BMenuItem {
|
||||||
public:
|
public:
|
||||||
ModelMenuItem(const Model*, const char* title, BMessage*, char shortcut = '\0',
|
ModelMenuItem(const Model*, const char* title, BMessage*,
|
||||||
uint32 modifiers = 0, bool drawText = true, bool extraPad = false);
|
char shortcut = '\0', uint32 modifiers = 0,
|
||||||
ModelMenuItem(const Model*, BMenu*, bool drawText = true, bool extraPad = false);
|
bool drawText = true, bool extraPad = false);
|
||||||
|
ModelMenuItem(const Model*, BMenu*, bool drawText = true,
|
||||||
|
bool extraPad = false);
|
||||||
virtual ~ModelMenuItem();
|
virtual ~ModelMenuItem();
|
||||||
|
|
||||||
virtual status_t SetEntry(const BEntry*);
|
virtual status_t SetEntry(const BEntry*);
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ class AttributeView;
|
|||||||
|
|
||||||
class BInfoWindow : public BWindow {
|
class BInfoWindow : public BWindow {
|
||||||
public:
|
public:
|
||||||
BInfoWindow(Model*, int32 groupIndex, LockingList<BWindow>* list = NULL);
|
BInfoWindow(Model*, int32 groupIndex,
|
||||||
|
LockingList<BWindow>* list = NULL);
|
||||||
~BInfoWindow();
|
~BInfoWindow();
|
||||||
|
|
||||||
virtual bool IsShowing(const node_ref*) const;
|
virtual bool IsShowing(const node_ref*) const;
|
||||||
@@ -64,7 +65,8 @@ class BInfoWindow : public BWindow {
|
|||||||
bool StopCalc();
|
bool StopCalc();
|
||||||
void OpenFilePanel(const entry_ref*);
|
void OpenFilePanel(const entry_ref*);
|
||||||
|
|
||||||
static void GetSizeString(BString &result, off_t size, int32 fileCount);
|
static void GetSizeString(BString &result, off_t size,
|
||||||
|
int32 fileCount);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Quit();
|
virtual void Quit();
|
||||||
|
|||||||
+156
-73
@@ -104,7 +104,8 @@ const uint32 kCheckTypeahead = 'Tcty';
|
|||||||
|
|
||||||
class BPoseView : public BView {
|
class BPoseView : public BView {
|
||||||
public:
|
public:
|
||||||
BPoseView(Model*, BRect, uint32 viewMode, uint32 resizeMask = B_FOLLOW_ALL);
|
BPoseView(Model*, BRect, uint32 viewMode,
|
||||||
|
uint32 resizeMask = B_FOLLOW_ALL);
|
||||||
virtual ~BPoseView();
|
virtual ~BPoseView();
|
||||||
|
|
||||||
// setup, teardown
|
// setup, teardown
|
||||||
@@ -113,8 +114,8 @@ class BPoseView : public BView {
|
|||||||
void InitCommon();
|
void InitCommon();
|
||||||
virtual void DetachedFromWindow();
|
virtual void DetachedFromWindow();
|
||||||
|
|
||||||
// Returns true if for instance, node ref is a remote desktop directory and
|
// Returns true if for instance, node ref is a remote desktop
|
||||||
// this is a desktop pose view.
|
// directory and this is a desktop pose view.
|
||||||
virtual bool Represents(const node_ref*) const;
|
virtual bool Represents(const node_ref*) const;
|
||||||
virtual bool Represents(const entry_ref*) const;
|
virtual bool Represents(const entry_ref*) const;
|
||||||
|
|
||||||
@@ -151,9 +152,9 @@ class BPoseView : public BView {
|
|||||||
virtual void SwitchDir(const entry_ref*,
|
virtual void SwitchDir(const entry_ref*,
|
||||||
AttributeStreamNode* node = NULL);
|
AttributeStreamNode* node = NULL);
|
||||||
|
|
||||||
// in the rare cases where a pose view needs to be explicitly refreshed
|
// in the rare cases where a pose view needs to be explicitly
|
||||||
// (for instance in a query window with a dynamic date query), this is
|
// refreshed (for instance in a query window with a dynamic
|
||||||
// used
|
// date query), this is used
|
||||||
virtual void Refresh();
|
virtual void Refresh();
|
||||||
|
|
||||||
// callbacks
|
// callbacks
|
||||||
@@ -228,7 +229,8 @@ class BPoseView : public BView {
|
|||||||
icon_size IconSize() const;
|
icon_size IconSize() const;
|
||||||
|
|
||||||
BRect Extent() const;
|
BRect Extent() const;
|
||||||
void GetLayoutInfo(uint32 viewMode, BPoint* grid, BPoint* offset) const;
|
void GetLayoutInfo(uint32 viewMode, BPoint* grid,
|
||||||
|
BPoint* offset) const;
|
||||||
|
|
||||||
int32 CountItems() const;
|
int32 CountItems() const;
|
||||||
void UpdateCount();
|
void UpdateCount();
|
||||||
@@ -250,8 +252,8 @@ class BPoseView : public BView {
|
|||||||
BPoint ResizeColumn(BColumn*, float, float* lastLineDrawPos = NULL,
|
BPoint ResizeColumn(BColumn*, float, float* lastLineDrawPos = NULL,
|
||||||
void (*drawLineFunc)(BPoseView*, BPoint, BPoint) = 0,
|
void (*drawLineFunc)(BPoseView*, BPoint, BPoint) = 0,
|
||||||
void (*undrawLineFunc)(BPoseView*, BPoint, BPoint) = 0);
|
void (*undrawLineFunc)(BPoseView*, BPoint, BPoint) = 0);
|
||||||
// returns the bottom right of the last pose drawn or bottom right of
|
// returns the bottom right of the last pose drawn or
|
||||||
// bounds
|
// the bottom right of bounds
|
||||||
|
|
||||||
BColumn* ColumnAt(int32 index) const;
|
BColumn* ColumnAt(int32 index) const;
|
||||||
BColumn* ColumnFor(uint32 attribute_hash) const;
|
BColumn* ColumnFor(uint32 attribute_hash) const;
|
||||||
@@ -265,14 +267,16 @@ class BPoseView : public BView {
|
|||||||
BPose* PoseAtIndex(int32 index) const;
|
BPose* PoseAtIndex(int32 index) const;
|
||||||
|
|
||||||
BPose* FindPose(BPoint where, int32* index = NULL) const;
|
BPose* FindPose(BPoint where, int32* index = NULL) const;
|
||||||
// return pose at location h, v (search list starting from bottom so
|
// return pose at location h, v (search list starting from
|
||||||
// drawing and hit detection reflect the same pose ordering)
|
// bottom so drawing and hit detection reflect the same pose
|
||||||
|
// ordering)
|
||||||
BPose* FindPose(const Model*, int32* index = NULL) const;
|
BPose* FindPose(const Model*, int32* index = NULL) const;
|
||||||
BPose* FindPose(const node_ref*, int32* index = NULL) const;
|
BPose* FindPose(const node_ref*, int32* index = NULL) const;
|
||||||
BPose* FindPose(const entry_ref*, int32* index = NULL) const;
|
BPose* FindPose(const entry_ref*, int32* index = NULL) const;
|
||||||
BPose* FindPose(const entry_ref*, int32 specifierForm, int32* index) const;
|
BPose* FindPose(const entry_ref*, int32 specifierForm,
|
||||||
// special form of FindPose used for scripting, <specifierForm> may
|
int32* index) const;
|
||||||
// ask for previous or next pose
|
// special form of FindPose used for scripting,
|
||||||
|
// <specifierForm> may ask for previous or next pose
|
||||||
BPose* DeepFindPose(const node_ref* node, int32* index = NULL) const;
|
BPose* DeepFindPose(const node_ref* node, int32* index = NULL) const;
|
||||||
// same as FindPose, node can be a target of the actual
|
// same as FindPose, node can be a target of the actual
|
||||||
// pose if the pose is a symlink
|
// pose if the pose is a symlink
|
||||||
@@ -284,17 +288,22 @@ class BPoseView : public BView {
|
|||||||
void UnmountSelectedVolumes();
|
void UnmountSelectedVolumes();
|
||||||
virtual void OpenParent();
|
virtual void OpenParent();
|
||||||
|
|
||||||
virtual void OpenSelection(BPose* clicked_pose = NULL, int32* index = NULL);
|
virtual void OpenSelection(BPose* clicked_pose = NULL,
|
||||||
void OpenSelectionUsing(BPose* clicked_pose = NULL, int32* index = NULL);
|
int32* index = NULL);
|
||||||
|
void OpenSelectionUsing(BPose* clicked_pose = NULL,
|
||||||
|
int32* index = NULL);
|
||||||
// launches the open with window
|
// launches the open with window
|
||||||
virtual void MoveSelectionTo(BPoint, BPoint, BContainerWindow*);
|
virtual void MoveSelectionTo(BPoint, BPoint, BContainerWindow*);
|
||||||
void DuplicateSelection(BPoint* dropStart = NULL, BPoint* dropEnd = NULL);
|
void DuplicateSelection(BPoint* dropStart = NULL,
|
||||||
|
BPoint* dropEnd = NULL);
|
||||||
|
|
||||||
// Move to trash calls try to select the next pose in the view when they
|
// Move to trash calls try to select the next pose in the view
|
||||||
// are dones
|
// when they are dones
|
||||||
virtual void MoveSelectionToTrash(bool selectNext = true);
|
virtual void MoveSelectionToTrash(bool selectNext = true);
|
||||||
virtual void DeleteSelection(bool selectNext = true, bool askUser = true);
|
virtual void DeleteSelection(bool selectNext = true,
|
||||||
virtual void MoveEntryToTrash(const entry_ref*, bool selectNext = true);
|
bool askUser = true);
|
||||||
|
virtual void MoveEntryToTrash(const entry_ref*,
|
||||||
|
bool selectNext = true);
|
||||||
|
|
||||||
void RestoreSelectionFromTrash(bool selectNext = true);
|
void RestoreSelectionFromTrash(bool selectNext = true);
|
||||||
|
|
||||||
@@ -306,7 +315,8 @@ class BPoseView : public BView {
|
|||||||
void ShowSelectionWindow();
|
void ShowSelectionWindow();
|
||||||
void ClearSelection();
|
void ClearSelection();
|
||||||
void ShowSelection(bool);
|
void ShowSelection(bool);
|
||||||
void AddRemovePoseFromSelection(BPose* pose, int32 index, bool select);
|
void AddRemovePoseFromSelection(BPose* pose, int32 index,
|
||||||
|
bool select);
|
||||||
|
|
||||||
BLooper* SelectionHandler();
|
BLooper* SelectionHandler();
|
||||||
void SetSelectionHandler(BLooper*);
|
void SetSelectionHandler(BLooper*);
|
||||||
@@ -339,7 +349,8 @@ class BPoseView : public BView {
|
|||||||
inline bool HasPosesInClipboard();
|
inline bool HasPosesInClipboard();
|
||||||
inline void SetHasPosesInClipboard(bool hasPoses);
|
inline void SetHasPosesInClipboard(bool hasPoses);
|
||||||
void SetPosesClipboardMode(uint32 clipboardMode);
|
void SetPosesClipboardMode(uint32 clipboardMode);
|
||||||
void UpdatePosesClipboardModeFromClipboard(BMessage* clipboardReport = NULL);
|
void UpdatePosesClipboardModeFromClipboard(
|
||||||
|
BMessage* clipboardReport = NULL);
|
||||||
|
|
||||||
// filtering
|
// filtering
|
||||||
void SetRefFilter(BRefFilter*);
|
void SetRefFilter(BRefFilter*);
|
||||||
@@ -353,21 +364,25 @@ class BPoseView : public BView {
|
|||||||
|
|
||||||
// drag&drop handling
|
// drag&drop handling
|
||||||
virtual bool HandleMessageDropped(BMessage*);
|
virtual bool HandleMessageDropped(BMessage*);
|
||||||
static bool HandleDropCommon(BMessage* dragMessage, Model* target, BPose*,
|
static bool HandleDropCommon(BMessage* dragMessage, Model* target,
|
||||||
BView* view, BPoint dropPt);
|
BPose*, BView* view, BPoint dropPt);
|
||||||
// used by pose views and info windows
|
// used by pose views and info windows
|
||||||
static bool CanHandleDragSelection(const Model* target,
|
static bool CanHandleDragSelection(const Model* target,
|
||||||
const BMessage* dragMessage, bool ignoreTypes);
|
const BMessage* dragMessage, bool ignoreTypes);
|
||||||
virtual void DragSelectedPoses(const BPose* clickedPose, BPoint);
|
virtual void DragSelectedPoses(const BPose* clickedPose, BPoint);
|
||||||
|
|
||||||
void MoveSelectionInto(Model* destFolder, BContainerWindow* srcWindow,
|
void MoveSelectionInto(Model* destFolder, BContainerWindow* srcWindow,
|
||||||
bool forceCopy, bool forceMove = false, bool createLink = false, bool relativeLink = false);
|
bool forceCopy, bool forceMove = false, bool createLink = false,
|
||||||
static void MoveSelectionInto(Model* destFolder, BContainerWindow* srcWindow,
|
bool relativeLink = false);
|
||||||
BContainerWindow* destWindow, uint32 buttons, BPoint loc,
|
static void MoveSelectionInto(Model* destFolder,
|
||||||
bool forceCopy, bool forceMove = false, bool createLink = false, bool relativeLink = false,
|
BContainerWindow* srcWindow, BContainerWindow* destWindow,
|
||||||
BPoint clickPt = BPoint(0, 0), bool pinToGrid = false);
|
uint32 buttons, BPoint loc, bool forceCopy,
|
||||||
|
bool forceMove = false, bool createLink = false,
|
||||||
|
bool relativeLink = false, BPoint clickPt = BPoint(0, 0),
|
||||||
|
bool pinToGrid = false);
|
||||||
|
|
||||||
bool UpdateDropTarget(BPoint, const BMessage*, bool trackingContextMenu);
|
bool UpdateDropTarget(BPoint, const BMessage*,
|
||||||
|
bool trackingContextMenu);
|
||||||
// return true if drop target changed
|
// return true if drop target changed
|
||||||
void HiliteDropTarget(bool hiliteState);
|
void HiliteDropTarget(bool hiliteState);
|
||||||
|
|
||||||
@@ -390,7 +405,8 @@ class BPoseView : public BView {
|
|||||||
// easy to have the right StringWidth picked up by
|
// easy to have the right StringWidth picked up by
|
||||||
// template instantiation, as used by WidgetAttributeText
|
// template instantiation, as used by WidgetAttributeText
|
||||||
|
|
||||||
// show/hide barberpole while a background task is filling up the view, etc.
|
// show/hide barberpole while a background task is filling
|
||||||
|
// up the view, etc.
|
||||||
void ShowBarberPole();
|
void ShowBarberPole();
|
||||||
void HideBarberPole();
|
void HideBarberPole();
|
||||||
|
|
||||||
@@ -423,7 +439,8 @@ class BPoseView : public BView {
|
|||||||
// create a new folder, optionally specify a location
|
// create a new folder, optionally specify a location
|
||||||
|
|
||||||
void NewFileFromTemplate(const BMessage*);
|
void NewFileFromTemplate(const BMessage*);
|
||||||
// create a new file based on a template, optionally specify a location
|
// create a new file based on a template, optionally specify
|
||||||
|
// a location
|
||||||
|
|
||||||
void ShowContextMenu(BPoint);
|
void ShowContextMenu(BPoint);
|
||||||
|
|
||||||
@@ -434,7 +451,8 @@ class BPoseView : public BView {
|
|||||||
bool GetProperty(BMessage*, int32, const char*, BMessage*);
|
bool GetProperty(BMessage*, int32, const char*, BMessage*);
|
||||||
bool CreateProperty(BMessage* message, BMessage* specifier, int32,
|
bool CreateProperty(BMessage* message, BMessage* specifier, int32,
|
||||||
const char*, BMessage* reply);
|
const char*, BMessage* reply);
|
||||||
bool ExecuteProperty(BMessage* specifier, int32, const char*, BMessage* reply);
|
bool ExecuteProperty(BMessage* specifier, int32, const char*,
|
||||||
|
BMessage* reply);
|
||||||
bool CountProperty(BMessage*, int32, const char*, BMessage*);
|
bool CountProperty(BMessage*, int32, const char*, BMessage*);
|
||||||
bool DeleteProperty(BMessage*, int32, const char*, BMessage*);
|
bool DeleteProperty(BMessage*, int32, const char*, BMessage*);
|
||||||
|
|
||||||
@@ -448,16 +466,18 @@ class BPoseView : public BView {
|
|||||||
void _CheckPoseSortOrder(PoseList* list, BPose*, int32 index);
|
void _CheckPoseSortOrder(PoseList* list, BPose*, int32 index);
|
||||||
|
|
||||||
// pose creation
|
// pose creation
|
||||||
BPose* EntryCreated(const node_ref*, const node_ref*, const char*, int32* index = 0);
|
BPose* EntryCreated(const node_ref*, const node_ref*, const char*,
|
||||||
|
int32* index = 0);
|
||||||
|
|
||||||
void AddPoseToList(PoseList* list, bool visibleList, bool insertionSort,
|
void AddPoseToList(PoseList* list, bool visibleList,
|
||||||
BPose* pose, BRect&viewBounds, float&listViewScrollBy,
|
bool insertionSort, BPose* pose, BRect&viewBounds,
|
||||||
bool forceDraw, int32* indexPtr = NULL);
|
float& listViewScrollBy, bool forceDraw, int32* indexPtr = NULL);
|
||||||
BPose* CreatePose(Model*, PoseInfo*, bool insertionSort = true,
|
BPose* CreatePose(Model*, PoseInfo*, bool insertionSort = true,
|
||||||
int32* index = 0, BRect* boundsPtr = 0, bool forceDraw = true);
|
int32* index = 0, BRect* boundsPtr = 0, bool forceDraw = true);
|
||||||
virtual void CreatePoses(Model**models, PoseInfo* poseInfoArray, int32 count,
|
virtual void CreatePoses(Model**models, PoseInfo* poseInfoArray,
|
||||||
BPose**resultingPoses, bool insertionSort = true, int32* lastPoseIndexPtr = 0,
|
int32 count, BPose** resultingPoses, bool insertionSort = true,
|
||||||
BRect* boundsPtr = 0, bool forceDraw = false);
|
int32* lastPoseIndexPtr = 0, BRect* boundsPtr = 0,
|
||||||
|
bool forceDraw = false);
|
||||||
virtual bool ShouldShowPose(const Model*, const PoseInfo*);
|
virtual bool ShouldShowPose(const Model*, const PoseInfo*);
|
||||||
// filter, subclasses override to control which poses show up
|
// filter, subclasses override to control which poses show up
|
||||||
// subclasses should always call inherited
|
// subclasses should always call inherited
|
||||||
@@ -468,28 +488,29 @@ class BPoseView : public BView {
|
|||||||
virtual bool AddPosesThreadValid(const entry_ref*) const;
|
virtual bool AddPosesThreadValid(const entry_ref*) const;
|
||||||
// verifies whether or not the current set of AddPoses threads
|
// verifies whether or not the current set of AddPoses threads
|
||||||
// are valid and allowed to be adding poses -- returns false
|
// are valid and allowed to be adding poses -- returns false
|
||||||
// in the case where the directory has been switched while populating
|
// in the case where the directory has been switched while
|
||||||
// the view
|
// populating the view
|
||||||
|
|
||||||
virtual void AddPoses(Model* model = NULL);
|
virtual void AddPoses(Model* model = NULL);
|
||||||
// if <model> is zero, PoseView has other means of iterating through all
|
// if <model> is zero, PoseView has other means of iterating
|
||||||
// the entries thaat it adds
|
// through all the entries thaat it adds
|
||||||
|
|
||||||
virtual void AddRootPoses(bool watchIndividually, bool mountShared);
|
virtual void AddRootPoses(bool watchIndividually, bool mountShared);
|
||||||
// watchIndividually is used when placing a volume pose onto the Desktop
|
// watchIndividually is used when placing a volume pose onto
|
||||||
// where unlike in the Root window it will not be watched by the folder
|
// the Desktop where unlike in the Root window it will not be
|
||||||
// representing root. If set, each volume will therefore be watched
|
// watched by the folder representing root. If set, each volume
|
||||||
// individually
|
// will therefore be watched individually
|
||||||
virtual void RemoveRootPoses();
|
virtual void RemoveRootPoses();
|
||||||
virtual void AddTrashPoses();
|
virtual void AddTrashPoses();
|
||||||
|
|
||||||
virtual bool DeletePose(const node_ref*, BPose* pose = NULL, int32 index = 0);
|
virtual bool DeletePose(const node_ref*, BPose* pose = NULL,
|
||||||
virtual void DeleteSymLinkPoseTarget(const node_ref* itemNode, BPose* pose,
|
int32 index = 0);
|
||||||
int32 index);
|
virtual void DeleteSymLinkPoseTarget(const node_ref* itemNode,
|
||||||
|
BPose* pose, int32 index);
|
||||||
// the pose itself wasn't deleted but it's target node was - the
|
// the pose itself wasn't deleted but it's target node was - the
|
||||||
// pose must be a symlink
|
// pose must be a symlink
|
||||||
static void PoseHandleDeviceUnmounted(BPose* pose, Model* model, int32 index,
|
static void PoseHandleDeviceUnmounted(BPose* pose, Model* model,
|
||||||
BPoseView* poseView, dev_t device);
|
int32 index, BPoseView* poseView, dev_t device);
|
||||||
static void RemoveNonBootDesktopModels(BPose*, Model* model, int32,
|
static void RemoveNonBootDesktopModels(BPose*, Model* model, int32,
|
||||||
BPoseView* poseView, dev_t);
|
BPoseView* poseView, dev_t);
|
||||||
|
|
||||||
@@ -497,7 +518,8 @@ class BPoseView : public BView {
|
|||||||
void CheckAutoPlacedPoses();
|
void CheckAutoPlacedPoses();
|
||||||
// find poses that need placing and place them in a new spot
|
// find poses that need placing and place them in a new spot
|
||||||
void PlacePose(BPose*, BRect&);
|
void PlacePose(BPose*, BRect&);
|
||||||
// find a new place for a pose, starting at fHintLocation and place it
|
// find a new place for a pose, starting at fHintLocation
|
||||||
|
// and place it
|
||||||
bool IsValidLocation(const BPose* pose);
|
bool IsValidLocation(const BPose* pose);
|
||||||
bool IsValidLocation(const BRect& rect);
|
bool IsValidLocation(const BRect& rect);
|
||||||
status_t GetDeskbarFrame(BRect* frame);
|
status_t GetDeskbarFrame(BRect* frame);
|
||||||
@@ -539,14 +561,15 @@ class BPoseView : public BView {
|
|||||||
virtual void StopWatching();
|
virtual void StopWatching();
|
||||||
|
|
||||||
status_t WatchNewNode(const node_ref* item);
|
status_t WatchNewNode(const node_ref* item);
|
||||||
// the above would ideally be the only call of these three and it would
|
// the above would ideally be the only call of these three and
|
||||||
// be a virtual, overriding the specific watch mask in query pose view, etc.
|
// it would be a virtual, overriding the specific watch mask in
|
||||||
// however we need to call WatchNewNode from inside AddPosesTask while
|
// query pose view, etc. however we need to call WatchNewNode
|
||||||
// the window is unlocked - we have to use the static and a cached
|
// from inside AddPosesTask while the window is unlocked - we
|
||||||
// messenger and masks.
|
// have to use the static and a cached messenger and masks.
|
||||||
static status_t WatchNewNode(const node_ref*, uint32, BMessenger);
|
static status_t WatchNewNode(const node_ref*, uint32, BMessenger);
|
||||||
virtual uint32 WatchNewNodeMask();
|
virtual uint32 WatchNewNodeMask();
|
||||||
// override to change different watch modes for query pose view, etc.
|
// override to change different watch modes for query pose
|
||||||
|
// view, etc.
|
||||||
|
|
||||||
// drag&drop handling
|
// drag&drop handling
|
||||||
static bool EachItemInDraggedSelection(const BMessage* message,
|
static bool EachItemInDraggedSelection(const BMessage* message,
|
||||||
@@ -556,21 +579,25 @@ class BPoseView : public BView {
|
|||||||
// window of the current drag message; locks the window
|
// window of the current drag message; locks the window
|
||||||
// add const version
|
// add const version
|
||||||
BRect GetDragRect(int32 clickedPoseIndex);
|
BRect GetDragRect(int32 clickedPoseIndex);
|
||||||
BBitmap* MakeDragBitmap(BRect dragRect, BPoint clickedPoint, int32 clickedPoseIndex, BPoint&offset);
|
BBitmap* MakeDragBitmap(BRect dragRect, BPoint clickedPoint,
|
||||||
static bool FindDragNDropAction(const BMessage* dragMessage, bool&canCopy,
|
int32 clickedPoseIndex, BPoint&offset);
|
||||||
bool&canMove, bool&canLink, bool&canErase);
|
static bool FindDragNDropAction(const BMessage* dragMessage,
|
||||||
|
bool&canCopy, bool&canMove, bool&canLink, bool&canErase);
|
||||||
|
|
||||||
static bool CanTrashForeignDrag(const Model*);
|
static bool CanTrashForeignDrag(const Model*);
|
||||||
static bool CanCopyOrMoveForeignDrag(const Model*, const BMessage*);
|
static bool CanCopyOrMoveForeignDrag(const Model*, const BMessage*);
|
||||||
static bool DragSelectionContains(const BPose* target, const BMessage* dragMessage);
|
static bool DragSelectionContains(const BPose* target,
|
||||||
|
const BMessage* dragMessage);
|
||||||
static status_t CreateClippingFile(BPoseView* poseView, BFile&result,
|
static status_t CreateClippingFile(BPoseView* poseView, BFile&result,
|
||||||
char* resultingName, BDirectory* dir, BMessage* message, const char* fallbackName,
|
char* resultingName, BDirectory* dir, BMessage* message,
|
||||||
bool setLocation = false, BPoint dropPoint = BPoint(0, 0));
|
const char* fallbackName, bool setLocation = false,
|
||||||
|
BPoint dropPoint = BPoint(0, 0));
|
||||||
|
|
||||||
// opening files, lanunching
|
// opening files, lanunching
|
||||||
void OpenSelectionCommon(BPose*, int32*, bool);
|
void OpenSelectionCommon(BPose*, int32*, bool);
|
||||||
// used by OpenSelection and OpenSelectionUsing
|
// used by OpenSelection and OpenSelectionUsing
|
||||||
static void LaunchAppWithSelection(Model*, const BMessage*, bool checkTypes = true);
|
static void LaunchAppWithSelection(Model*, const BMessage*,
|
||||||
|
bool checkTypes = true);
|
||||||
|
|
||||||
// node monitoring calls
|
// node monitoring calls
|
||||||
virtual bool EntryMoved(const BMessage*);
|
virtual bool EntryMoved(const BMessage*);
|
||||||
@@ -585,7 +612,8 @@ class BPoseView : public BView {
|
|||||||
// selection
|
// selection
|
||||||
void SelectPosesListMode(BRect, BList**);
|
void SelectPosesListMode(BRect, BList**);
|
||||||
void SelectPosesIconMode(BRect, BList**);
|
void SelectPosesIconMode(BRect, BList**);
|
||||||
void AddRemoveSelectionRange(BPoint where, bool extendSelection, BPose*);
|
void AddRemoveSelectionRange(BPoint where, bool extendSelection,
|
||||||
|
BPose*);
|
||||||
|
|
||||||
void _BeginSelectionRect(const BPoint& point, bool extendSelection);
|
void _BeginSelectionRect(const BPoint& point, bool extendSelection);
|
||||||
void _UpdateSelectionRect(const BPoint& point);
|
void _UpdateSelectionRect(const BPoint& point);
|
||||||
@@ -637,10 +665,11 @@ class BPoseView : public BView {
|
|||||||
PoseList* CurrentPoseList() const;
|
PoseList* CurrentPoseList() const;
|
||||||
|
|
||||||
// misc
|
// misc
|
||||||
BList* GetDropPointList(BPoint dropPoint, BPoint startPoint, const PoseList*,
|
BList* GetDropPointList(BPoint dropPoint, BPoint startPoint,
|
||||||
bool sourceInListMode, bool dropOnGrid) const;
|
const PoseList*, bool sourceInListMode, bool dropOnGrid) const;
|
||||||
void SendSelectionAsRefs(uint32 what, bool onlyQueries = false);
|
void SendSelectionAsRefs(uint32 what, bool onlyQueries = false);
|
||||||
void MoveListToTrash(BObjectList<entry_ref>*, bool selectNext, bool deleteDirectly);
|
void MoveListToTrash(BObjectList<entry_ref>*, bool selectNext,
|
||||||
|
bool deleteDirectly);
|
||||||
void Delete(BObjectList<entry_ref>*, bool selectNext, bool askUser);
|
void Delete(BObjectList<entry_ref>*, bool selectNext, bool askUser);
|
||||||
void Delete(const entry_ref&ref, bool selectNext, bool askUser);
|
void Delete(const entry_ref&ref, bool selectNext, bool askUser);
|
||||||
void RestoreItemsFromTrash(BObjectList<entry_ref>*, bool selectNext);
|
void RestoreItemsFromTrash(BObjectList<entry_ref>*, bool selectNext);
|
||||||
@@ -779,226 +808,265 @@ class TPoseViewFilter : public BMessageFilter {
|
|||||||
|
|
||||||
|
|
||||||
extern bool
|
extern bool
|
||||||
ClearViewOriginOne(const char* name, uint32 type, off_t size, void* data, void* params);
|
ClearViewOriginOne(const char* name, uint32 type, off_t size, void* data,
|
||||||
|
void* params);
|
||||||
|
|
||||||
|
|
||||||
// inlines follow
|
// inlines follow
|
||||||
|
|
||||||
|
|
||||||
inline BContainerWindow*
|
inline BContainerWindow*
|
||||||
BPoseView::ContainerWindow() const
|
BPoseView::ContainerWindow() const
|
||||||
{
|
{
|
||||||
return dynamic_cast<BContainerWindow*>(Window());
|
return dynamic_cast<BContainerWindow*>(Window());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Model*
|
inline Model*
|
||||||
BPoseView::TargetModel() const
|
BPoseView::TargetModel() const
|
||||||
{
|
{
|
||||||
return fModel;
|
return fModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline float
|
inline float
|
||||||
BPoseView::ListElemHeight() const
|
BPoseView::ListElemHeight() const
|
||||||
{
|
{
|
||||||
return fListElemHeight;
|
return fListElemHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline float
|
inline float
|
||||||
BPoseView::IconPoseHeight() const
|
BPoseView::IconPoseHeight() const
|
||||||
{
|
{
|
||||||
return fIconPoseHeight;
|
return fIconPoseHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint32
|
inline uint32
|
||||||
BPoseView::IconSizeInt() const
|
BPoseView::IconSizeInt() const
|
||||||
{
|
{
|
||||||
return fViewState->IconSize();
|
return fViewState->IconSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline icon_size
|
inline icon_size
|
||||||
BPoseView::IconSize() const
|
BPoseView::IconSize() const
|
||||||
{
|
{
|
||||||
return (icon_size)fViewState->IconSize();
|
return (icon_size)fViewState->IconSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline PoseList*
|
inline PoseList*
|
||||||
BPoseView::SelectionList() const
|
BPoseView::SelectionList() const
|
||||||
{
|
{
|
||||||
return fSelectionList;
|
return fSelectionList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BObjectList<BString>*
|
inline BObjectList<BString>*
|
||||||
BPoseView::MimeTypesInSelection()
|
BPoseView::MimeTypesInSelection()
|
||||||
{
|
{
|
||||||
return&fMimeTypesInSelectionCache;
|
return&fMimeTypesInSelectionCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BHScrollBar*
|
inline BHScrollBar*
|
||||||
BPoseView::HScrollBar() const
|
BPoseView::HScrollBar() const
|
||||||
{
|
{
|
||||||
return fHScrollBar;
|
return fHScrollBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BScrollBar*
|
inline BScrollBar*
|
||||||
BPoseView::VScrollBar() const
|
BPoseView::VScrollBar() const
|
||||||
{
|
{
|
||||||
return fVScrollBar;
|
return fVScrollBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BCountView*
|
inline BCountView*
|
||||||
BPoseView::CountView() const
|
BPoseView::CountView() const
|
||||||
{
|
{
|
||||||
return fCountView;
|
return fCountView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
BPoseView::StateNeedsSaving()
|
BPoseView::StateNeedsSaving()
|
||||||
{
|
{
|
||||||
return fStateNeedsSaving || fViewState->StateNeedsSaving();
|
return fStateNeedsSaving || fViewState->StateNeedsSaving();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint32
|
inline uint32
|
||||||
BPoseView::ViewMode() const
|
BPoseView::ViewMode() const
|
||||||
{
|
{
|
||||||
return fViewState->ViewMode();
|
return fViewState->ViewMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline font_height
|
inline font_height
|
||||||
BPoseView::FontInfo() const
|
BPoseView::FontInfo() const
|
||||||
{
|
{
|
||||||
return sFontInfo;
|
return sFontInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline float
|
inline float
|
||||||
BPoseView::FontHeight() const
|
BPoseView::FontHeight() const
|
||||||
{
|
{
|
||||||
return sFontHeight;
|
return sFontHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BPose*
|
inline BPose*
|
||||||
BPoseView::ActivePose() const
|
BPoseView::ActivePose() const
|
||||||
{
|
{
|
||||||
return fActivePose;
|
return fActivePose;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::DisableSaveLocation()
|
BPoseView::DisableSaveLocation()
|
||||||
{
|
{
|
||||||
fSavePoseLocations = false;
|
fSavePoseLocations = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
BPoseView::IsFilePanel() const
|
BPoseView::IsFilePanel() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
BPoseView::IsDesktopWindow() const
|
BPoseView::IsDesktopWindow() const
|
||||||
{
|
{
|
||||||
return fIsDesktopWindow;
|
return fIsDesktopWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
BPoseView::IsDesktopView() const
|
BPoseView::IsDesktopView() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint32
|
inline uint32
|
||||||
BPoseView::PrimarySort() const
|
BPoseView::PrimarySort() const
|
||||||
{
|
{
|
||||||
return fViewState->PrimarySort();
|
return fViewState->PrimarySort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint32
|
inline uint32
|
||||||
BPoseView::PrimarySortType() const
|
BPoseView::PrimarySortType() const
|
||||||
{
|
{
|
||||||
return fViewState->PrimarySortType();
|
return fViewState->PrimarySortType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint32
|
inline uint32
|
||||||
BPoseView::SecondarySort() const
|
BPoseView::SecondarySort() const
|
||||||
{
|
{
|
||||||
return fViewState->SecondarySort();
|
return fViewState->SecondarySort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline uint32
|
inline uint32
|
||||||
BPoseView::SecondarySortType() const
|
BPoseView::SecondarySortType() const
|
||||||
{
|
{
|
||||||
return fViewState->SecondarySortType();
|
return fViewState->SecondarySortType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
BPoseView::ReverseSort() const
|
BPoseView::ReverseSort() const
|
||||||
{
|
{
|
||||||
return fViewState->ReverseSort();
|
return fViewState->ReverseSort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetShowHideSelection(bool on)
|
BPoseView::SetShowHideSelection(bool on)
|
||||||
{
|
{
|
||||||
fShowHideSelection = on;
|
fShowHideSelection = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetIconMapping(bool on)
|
BPoseView::SetIconMapping(bool on)
|
||||||
{
|
{
|
||||||
fOkToMapIcons = on;
|
fOkToMapIcons = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::AddToExtent(const BRect&rect)
|
BPoseView::AddToExtent(const BRect&rect)
|
||||||
{
|
{
|
||||||
fExtent = fExtent | rect;
|
fExtent = fExtent | rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::ClearExtent()
|
BPoseView::ClearExtent()
|
||||||
{
|
{
|
||||||
fExtent.Set(LONG_MAX, LONG_MAX, LONG_MIN, LONG_MIN);
|
fExtent.Set(LONG_MAX, LONG_MAX, LONG_MIN, LONG_MIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int32
|
inline int32
|
||||||
BPoseView::CountColumns() const
|
BPoseView::CountColumns() const
|
||||||
{
|
{
|
||||||
return fColumnList->CountItems();
|
return fColumnList->CountItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int32
|
inline int32
|
||||||
BPoseView::IndexOfColumn(const BColumn* column) const
|
BPoseView::IndexOfColumn(const BColumn* column) const
|
||||||
{
|
{
|
||||||
return fColumnList->IndexOf(const_cast<BColumn*>(column));
|
return fColumnList->IndexOf(const_cast<BColumn*>(column));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int32
|
inline int32
|
||||||
BPoseView::IndexOfPose(const BPose* pose) const
|
BPoseView::IndexOfPose(const BPose* pose) const
|
||||||
{
|
{
|
||||||
return CurrentPoseList()->IndexOf(pose);
|
return CurrentPoseList()->IndexOf(pose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BPose*
|
inline BPose*
|
||||||
BPoseView::PoseAtIndex(int32 index) const
|
BPoseView::PoseAtIndex(int32 index) const
|
||||||
{
|
{
|
||||||
return CurrentPoseList()->ItemAt(index);
|
return CurrentPoseList()->ItemAt(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BColumn*
|
inline BColumn*
|
||||||
BPoseView::ColumnAt(int32 index) const
|
BPoseView::ColumnAt(int32 index) const
|
||||||
{
|
{
|
||||||
return fColumnList->ItemAt(index);
|
return fColumnList->ItemAt(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BColumn*
|
inline BColumn*
|
||||||
BPoseView::FirstColumn() const
|
BPoseView::FirstColumn() const
|
||||||
{
|
{
|
||||||
return fColumnList->FirstItem();
|
return fColumnList->FirstItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BColumn*
|
inline BColumn*
|
||||||
BPoseView::LastColumn() const
|
BPoseView::LastColumn() const
|
||||||
{
|
{
|
||||||
return fColumnList->LastItem();
|
return fColumnList->LastItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int32
|
inline int32
|
||||||
BPoseView::CountItems() const
|
BPoseView::CountItems() const
|
||||||
{
|
{
|
||||||
@@ -1012,90 +1080,105 @@ BPoseView::SetMultipleSelection(bool state)
|
|||||||
fMultipleSelection = state;
|
fMultipleSelection = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetSelectionChangedHook(bool state)
|
BPoseView::SetSelectionChangedHook(bool state)
|
||||||
{
|
{
|
||||||
fSelectionChangedHook = state;
|
fSelectionChangedHook = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetAutoScroll(bool state)
|
BPoseView::SetAutoScroll(bool state)
|
||||||
{
|
{
|
||||||
fShouldAutoScroll = state;
|
fShouldAutoScroll = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetPoseEditing(bool state)
|
BPoseView::SetPoseEditing(bool state)
|
||||||
{
|
{
|
||||||
fAllowPoseEditing = state;
|
fAllowPoseEditing = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetDragEnabled(bool state)
|
BPoseView::SetDragEnabled(bool state)
|
||||||
{
|
{
|
||||||
fDragEnabled = state;
|
fDragEnabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetDropEnabled(bool state)
|
BPoseView::SetDropEnabled(bool state)
|
||||||
{
|
{
|
||||||
fDropEnabled = state;
|
fDropEnabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetSelectionRectEnabled(bool state)
|
BPoseView::SetSelectionRectEnabled(bool state)
|
||||||
{
|
{
|
||||||
fSelectionRectEnabled = state;
|
fSelectionRectEnabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetAlwaysAutoPlace(bool state)
|
BPoseView::SetAlwaysAutoPlace(bool state)
|
||||||
{
|
{
|
||||||
fAlwaysAutoPlace = state;
|
fAlwaysAutoPlace = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetEnsurePosesVisible(bool state)
|
BPoseView::SetEnsurePosesVisible(bool state)
|
||||||
{
|
{
|
||||||
fEnsurePosesVisible = state;
|
fEnsurePosesVisible = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetSelectionHandler(BLooper* looper)
|
BPoseView::SetSelectionHandler(BLooper* looper)
|
||||||
{
|
{
|
||||||
fSelectionHandler = looper;
|
fSelectionHandler = looper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BPoseView::SetRefFilter(BRefFilter* filter)
|
BPoseView::SetRefFilter(BRefFilter* filter)
|
||||||
{
|
{
|
||||||
fRefFilter = filter;
|
fRefFilter = filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BRefFilter*
|
inline BRefFilter*
|
||||||
BPoseView::RefFilter() const
|
BPoseView::RefFilter() const
|
||||||
{
|
{
|
||||||
return fRefFilter;
|
return fRefFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
BHScrollBar::SetTitleView(BView* view)
|
BHScrollBar::SetTitleView(BView* view)
|
||||||
{
|
{
|
||||||
fTitleView = view;
|
fTitleView = view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BPose*
|
inline BPose*
|
||||||
BPoseView::FindPose(const Model* model, int32* index) const
|
BPoseView::FindPose(const Model* model, int32* index) const
|
||||||
{
|
{
|
||||||
return CurrentPoseList()->FindPose(model, index);
|
return CurrentPoseList()->FindPose(model, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BPose*
|
inline BPose*
|
||||||
BPoseView::FindPose(const node_ref* node, int32* index) const
|
BPoseView::FindPose(const node_ref* node, int32* index) const
|
||||||
{
|
{
|
||||||
return CurrentPoseList()->FindPose(node, index);
|
return CurrentPoseList()->FindPose(node, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline BPose*
|
inline BPose*
|
||||||
BPoseView::FindPose(const entry_ref* entry, int32* index) const
|
BPoseView::FindPose(const entry_ref* entry, int32* index) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -63,12 +63,12 @@ All rights reserved.
|
|||||||
// and previous/next specifiers the current PoseView sort order is used.
|
// and previous/next specifiers the current PoseView sort order is used.
|
||||||
// If PoseView is not in list view mode, the order in which poses are indexed
|
// If PoseView is not in list view mode, the order in which poses are indexed
|
||||||
// is arbitrary.
|
// is arbitrary.
|
||||||
// Both of these specifiers, but indices more so, are likely to be accurate only
|
// Both of these specifiers, but indices more so, are likely to be accurate
|
||||||
// till a next change to the PoseView (a change may be adding, removing a pose, changing
|
// only untill a next change to the PoseView (a change may be adding,
|
||||||
// an attribute or stat resulting in a sort ordering change, changing the sort ordering
|
// removing a pose, changing an attribute or stat resulting in a sort ordering
|
||||||
// rule. When getting a selected item, there is no guarantee that the item will still
|
// change, changing the sort ordering rule. When getting a selected item,
|
||||||
// be selected after the operation. The client must be able to deal with these
|
// there is no guarantee that the item will still be selected after the
|
||||||
// inaccuracies.
|
// operation. The client must be able to deal with these inaccuracies.
|
||||||
// Specifying an index/entry_ref that no longer exists will be handled well.
|
// Specifying an index/entry_ref that no longer exists will be handled well.
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@@ -128,7 +128,8 @@ const property_info kPosesPropertyList[] = {
|
|||||||
},
|
},
|
||||||
{ kPropertyEntry,
|
{ kPropertyEntry,
|
||||||
{ B_GET_PROPERTY },
|
{ B_GET_PROPERTY },
|
||||||
{ B_DIRECT_SPECIFIER, B_INDEX_SPECIFIER, kPreviousSpecifier, kNextSpecifier },
|
{ B_DIRECT_SPECIFIER, B_INDEX_SPECIFIER, kPreviousSpecifier,
|
||||||
|
kNextSpecifier },
|
||||||
"get Entry [next|previous|index] # returns specified entries",
|
"get Entry [next|previous|index] # returns specified entries",
|
||||||
0,
|
0,
|
||||||
{ B_REF_TYPE },
|
{ B_REF_TYPE },
|
||||||
@@ -156,7 +157,8 @@ const property_info kPosesPropertyList[] = {
|
|||||||
{ kPropertySelection,
|
{ kPropertySelection,
|
||||||
{ B_SET_PROPERTY },
|
{ B_SET_PROPERTY },
|
||||||
{ B_DIRECT_SPECIFIER, kPreviousSpecifier, kNextSpecifier },
|
{ B_DIRECT_SPECIFIER, kPreviousSpecifier, kNextSpecifier },
|
||||||
"set Selection of ... to {next|previous|entry} # selects specified entries",
|
"set Selection of ... to {next|previous|entry} # selects specified "
|
||||||
|
"entries",
|
||||||
0,
|
0,
|
||||||
{},
|
{},
|
||||||
{},
|
{},
|
||||||
@@ -191,7 +193,7 @@ const property_info kPosesPropertyList[] = {
|
|||||||
{},
|
{},
|
||||||
{}
|
{}
|
||||||
},
|
},
|
||||||
{NULL,
|
{ NULL,
|
||||||
{},
|
{},
|
||||||
{},
|
{},
|
||||||
NULL, 0,
|
NULL, 0,
|
||||||
@@ -209,7 +211,8 @@ BPoseView::GetSupportedSuites(BMessage* _SCRIPTING_ONLY(data))
|
|||||||
{
|
{
|
||||||
#if _SUPPORTS_FEATURE_SCRIPTING
|
#if _SUPPORTS_FEATURE_SCRIPTING
|
||||||
data->AddString("suites", kPosesSuites);
|
data->AddString("suites", kPosesSuites);
|
||||||
BPropertyInfo propertyInfo(const_cast<property_info*>(kPosesPropertyList));
|
BPropertyInfo propertyInfo(
|
||||||
|
const_cast<property_info*>(kPosesPropertyList));
|
||||||
data->AddFlat("messages", &propertyInfo);
|
data->AddFlat("messages", &propertyInfo);
|
||||||
|
|
||||||
return _inherited::GetSupportedSuites(data);
|
return _inherited::GetSupportedSuites(data);
|
||||||
@@ -249,7 +252,8 @@ BPoseView::HandleScriptingMessage(BMessage* _SCRIPTING_ONLY(message))
|
|||||||
|
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case B_CREATE_PROPERTY:
|
case B_CREATE_PROPERTY:
|
||||||
handled = CreateProperty(message, &specifier, form, property, &reply);
|
handled = CreateProperty(message, &specifier, form, property,
|
||||||
|
&reply);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_GET_PROPERTY:
|
case B_GET_PROPERTY:
|
||||||
@@ -257,7 +261,8 @@ BPoseView::HandleScriptingMessage(BMessage* _SCRIPTING_ONLY(message))
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case B_SET_PROPERTY:
|
case B_SET_PROPERTY:
|
||||||
handled = SetProperty(message, &specifier, form, property, &reply);
|
handled = SetProperty(message, &specifier, form, property,
|
||||||
|
&reply);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_COUNT_PROPERTIES:
|
case B_COUNT_PROPERTIES:
|
||||||
@@ -302,7 +307,6 @@ BPoseView::ExecuteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
for (int32 index = 0; specifier->FindRef("refs", index, &ref)
|
for (int32 index = 0; specifier->FindRef("refs", index, &ref)
|
||||||
== B_OK; index++)
|
== B_OK; index++)
|
||||||
launchMessage.AddRef("refs", &ref);
|
launchMessage.AddRef("refs", &ref);
|
||||||
|
|
||||||
} else if (form == (int32)B_INDEX_SPECIFIER) {
|
} else if (form == (int32)B_INDEX_SPECIFIER) {
|
||||||
// move all poses specified by index to Trash
|
// move all poses specified by index to Trash
|
||||||
int32 specifyingIndex;
|
int32 specifyingIndex;
|
||||||
@@ -323,7 +327,8 @@ BPoseView::ExecuteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
if (error == B_OK) {
|
if (error == B_OK) {
|
||||||
// add a messenger to the launch message that will be used to
|
// add a messenger to the launch message that will be used to
|
||||||
// dispatch scripting calls from apps to the PoseView
|
// dispatch scripting calls from apps to the PoseView
|
||||||
launchMessage.AddMessenger("TrackerViewToken", BMessenger(this, 0, 0));
|
launchMessage.AddMessenger("TrackerViewToken",
|
||||||
|
BMessenger(this, 0, 0));
|
||||||
if (fSelectionHandler)
|
if (fSelectionHandler)
|
||||||
fSelectionHandler->PostMessage(&launchMessage);
|
fSelectionHandler->PostMessage(&launchMessage);
|
||||||
}
|
}
|
||||||
@@ -413,8 +418,8 @@ BPoseView::DeleteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
bool handled = false;
|
bool handled = false;
|
||||||
|
|
||||||
if (strcmp(property, kPropertySelection) == 0) {
|
if (strcmp(property, kPropertySelection) == 0) {
|
||||||
// deleting on a selection is handled as removing a part of the selection
|
// deleting on a selection is handled as removing a part of the
|
||||||
// not to be confused with deleting a selected item
|
// selection not to be confused with deleting a selected item
|
||||||
|
|
||||||
if (form == (int32)B_ENTRY_SPECIFIER) {
|
if (form == (int32)B_ENTRY_SPECIFIER) {
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
@@ -469,8 +474,8 @@ BPoseView::DeleteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
} else if (form == (int32)B_INDEX_SPECIFIER) {
|
} else if (form == (int32)B_INDEX_SPECIFIER) {
|
||||||
// move all poses specified by index to Trash
|
// move all poses specified by index to Trash
|
||||||
int32 specifyingIndex;
|
int32 specifyingIndex;
|
||||||
for (int32 index = 0; specifier->FindInt32("index", index, &specifyingIndex)
|
for (int32 index = 0; specifier->FindInt32("index", index,
|
||||||
== B_OK; index++) {
|
&specifyingIndex) == B_OK; index++) {
|
||||||
BPose* pose = PoseAtIndex(specifyingIndex);
|
BPose* pose = PoseAtIndex(specifyingIndex);
|
||||||
|
|
||||||
if (!pose) {
|
if (!pose) {
|
||||||
@@ -478,7 +483,8 @@ BPoseView::DeleteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
entryList->AddItem(new entry_ref(*pose->TargetModel()->EntryRef()));
|
entryList->AddItem(
|
||||||
|
new entry_ref(*pose->TargetModel()->EntryRef()));
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
@@ -486,8 +492,8 @@ BPoseView::DeleteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
if (error == B_OK) {
|
if (error == B_OK) {
|
||||||
TrackerSettings settings;
|
TrackerSettings settings;
|
||||||
if (!settings.DontMoveFilesToTrash()) {
|
if (!settings.DontMoveFilesToTrash()) {
|
||||||
// move the list we build into trash, don't make the trashing task
|
// move the list we build into trash, don't make the
|
||||||
// select the next item
|
// trashing task select the next item
|
||||||
MoveListToTrash(entryList, false, false);
|
MoveListToTrash(entryList, false, false);
|
||||||
} else
|
} else
|
||||||
Delete(entryList, false, settings.AskBeforeDeleteFile());
|
Delete(entryList, false, settings.AskBeforeDeleteFile());
|
||||||
@@ -507,12 +513,13 @@ BPoseView::DeleteProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BPoseView::CountProperty(BMessage*, int32, const char* _SCRIPTING_ONLY(property),
|
BPoseView::CountProperty(BMessage*, int32,
|
||||||
|
const char* _SCRIPTING_ONLY(property),
|
||||||
BMessage* _SCRIPTING_ONLY(reply))
|
BMessage* _SCRIPTING_ONLY(reply))
|
||||||
{
|
{
|
||||||
#if _SUPPORTS_FEATURE_SCRIPTING
|
#if _SUPPORTS_FEATURE_SCRIPTING
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
// PRINT(("BPoseView::CountProperty, %s\n", property));
|
//PRINT(("BPoseView::CountProperty, %s\n", property));
|
||||||
|
|
||||||
// just return the respecitve counts
|
// just return the respecitve counts
|
||||||
if (strcmp(property, kPropertySelection) == 0) {
|
if (strcmp(property, kPropertySelection) == 0) {
|
||||||
@@ -583,7 +590,8 @@ BPoseView::GetProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pose->IsSelected()) {
|
if (pose->IsSelected()) {
|
||||||
reply->AddRef("result", pose->TargetModel()->EntryRef());
|
reply->AddRef("result",
|
||||||
|
pose->TargetModel()->EntryRef());
|
||||||
reply->AddInt32("index", IndexOfPose(pose));
|
reply->AddInt32("index", IndexOfPose(pose));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -599,8 +607,10 @@ BPoseView::GetProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
case B_DIRECT_SPECIFIER:
|
case B_DIRECT_SPECIFIER:
|
||||||
{
|
{
|
||||||
// return all entries of all poses in PoseView
|
// return all entries of all poses in PoseView
|
||||||
for (int32 index = 0; index < count; index++)
|
for (int32 index = 0; index < count; index++) {
|
||||||
reply->AddRef("result", PoseAtIndex(index)->TargetModel()->EntryRef());
|
reply->AddRef("result",
|
||||||
|
PoseAtIndex(index)->TargetModel()->EntryRef());
|
||||||
|
}
|
||||||
|
|
||||||
handled = true;
|
handled = true;
|
||||||
break;
|
break;
|
||||||
@@ -618,7 +628,8 @@ BPoseView::GetProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
handled = true;
|
handled = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
reply->AddRef("result", PoseAtIndex(index)->TargetModel()->EntryRef());
|
reply->AddRef("result",
|
||||||
|
PoseAtIndex(index)->TargetModel()->EntryRef());
|
||||||
|
|
||||||
handled = true;
|
handled = true;
|
||||||
break;
|
break;
|
||||||
@@ -627,7 +638,8 @@ BPoseView::GetProperty(BMessage* _SCRIPTING_ONLY(specifier),
|
|||||||
case kPreviousSpecifier:
|
case kPreviousSpecifier:
|
||||||
case kNextSpecifier:
|
case kNextSpecifier:
|
||||||
{
|
{
|
||||||
// return entry and index of pose before or after specified pose
|
// return entry and index of pose before or after
|
||||||
|
// specified pose
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
if (specifier->FindRef("data", &ref) != B_OK)
|
if (specifier->FindRef("data", &ref) != B_OK)
|
||||||
break;
|
break;
|
||||||
@@ -711,8 +723,8 @@ BPoseView::SetProperty(BMessage* _SCRIPTING_ONLY(message), BMessage*,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (clearSelection) {
|
if (clearSelection) {
|
||||||
// first selected item must call SelectPose so the selection
|
// first selected item must call SelectPose so the
|
||||||
// gets cleared first
|
// selection gets cleared first
|
||||||
SelectPose(pose, poseIndex);
|
SelectPose(pose, poseIndex);
|
||||||
clearSelection = false;
|
clearSelection = false;
|
||||||
} else
|
} else
|
||||||
@@ -741,11 +753,13 @@ BPoseView::ResolveSpecifier(BMessage* _SCRIPTING_ONLY(message),
|
|||||||
int32 _SCRIPTING_ONLY(form), const char* _SCRIPTING_ONLY(property))
|
int32 _SCRIPTING_ONLY(form), const char* _SCRIPTING_ONLY(property))
|
||||||
{
|
{
|
||||||
#if _SUPPORTS_FEATURE_SCRIPTING
|
#if _SUPPORTS_FEATURE_SCRIPTING
|
||||||
BPropertyInfo propertyInfo(const_cast<property_info*>(kPosesPropertyList));
|
BPropertyInfo propertyInfo(
|
||||||
|
const_cast<property_info*>(kPosesPropertyList));
|
||||||
|
|
||||||
int32 result = propertyInfo.FindMatch(message, index, specifier, form, property);
|
int32 result = propertyInfo.FindMatch(message, index, specifier, form,
|
||||||
|
property);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
// PRINT(("FindMatch result %d \n"));
|
//PRINT(("FindMatch result %d \n"));
|
||||||
return _inherited::ResolveSpecifier(message, index, specifier,
|
return _inherited::ResolveSpecifier(message, index, specifier,
|
||||||
form, property);
|
form, property);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,12 +46,15 @@ const uint32 kSaveButton = 'Tsav';
|
|||||||
const uint32 kShowSplash = 'Spls';
|
const uint32 kShowSplash = 'Spls';
|
||||||
|
|
||||||
const uint32 kStartWatchClipboardRefs = 'TCbw';
|
const uint32 kStartWatchClipboardRefs = 'TCbw';
|
||||||
// StartWatching() clipboard changes. Changes will be sent to given BMessenger "target"
|
// StartWatching() clipboard changes. Changes will be sent to given
|
||||||
|
// BMessenger "target"
|
||||||
const uint32 kStopWatchClipboardRefs = 'TCfw';
|
const uint32 kStopWatchClipboardRefs = 'TCfw';
|
||||||
// StopWatching() given BMessenger "target"
|
// StopWatching() given BMessenger "target"
|
||||||
const uint32 kFSClipboardChanges = 'TCch';
|
const uint32 kFSClipboardChanges = 'TCch';
|
||||||
// Used by FSClipboard functions which change refs in clipboard and are used outside Tracker (like BFilePanel called in another app)
|
// Used by FSClipboard functions which change refs in clipboard and are
|
||||||
// Contains movemodes named as in FSClipboard operations and in Clipboard (look into FSClipboard files)
|
// used outside Tracker (like BFilePanel called in another app)
|
||||||
|
// Contains movemodes named as in FSClipboard operations and in Clipboard
|
||||||
|
// (look into FSClipboard files)
|
||||||
|
|
||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|
||||||
|
|||||||
@@ -101,8 +101,8 @@ BQueryContainerWindow::AddWindowMenu(BMenu* menu)
|
|||||||
item->SetTarget(PoseView());
|
item->SetTarget(PoseView());
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Select all"), new BMessage(B_SELECT_ALL),
|
item = new BMenuItem(B_TRANSLATE("Select all"),
|
||||||
'A');
|
new BMessage(B_SELECT_ALL), 'A');
|
||||||
item->SetTarget(PoseView());
|
item->SetTarget(PoseView());
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
@@ -111,8 +111,8 @@ BQueryContainerWindow::AddWindowMenu(BMenu* menu)
|
|||||||
item->SetTarget(PoseView());
|
item->SetTarget(PoseView());
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Close"), new BMessage(B_QUIT_REQUESTED),
|
item = new BMenuItem(B_TRANSLATE("Close"),
|
||||||
'W');
|
new BMessage(B_QUIT_REQUESTED), 'W');
|
||||||
item->SetTarget(this);
|
item->SetTarget(this);
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
}
|
}
|
||||||
@@ -161,9 +161,11 @@ BQueryContainerWindow::SetUpDefaultState()
|
|||||||
|
|
||||||
defaultStatePath += sanitizedType;
|
defaultStatePath += sanitizedType;
|
||||||
|
|
||||||
PRINT(("looking for default query state at %s\n", defaultStatePath.String()));
|
PRINT(("looking for default query state at %s\n",
|
||||||
|
defaultStatePath.String()));
|
||||||
|
|
||||||
if (!DefaultStateSourceNode(defaultStatePath.String(), &defaultingNode, false)) {
|
if (!DefaultStateSourceNode(defaultStatePath.String(), &defaultingNode,
|
||||||
|
false)) {
|
||||||
TRACE();
|
TRACE();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,7 +261,8 @@ BQueryPoseView::InitDirentIterator(const entry_ref* ref)
|
|||||||
oldPoseList->AddList(fPoseList);
|
oldPoseList->AddList(fPoseList);
|
||||||
}
|
}
|
||||||
|
|
||||||
fQueryListContainer = new QueryEntryListCollection(&sourceModel, this, oldPoseList);
|
fQueryListContainer = new QueryEntryListCollection(&sourceModel, this,
|
||||||
|
oldPoseList);
|
||||||
fCreateOldPoseList = false;
|
fCreateOldPoseList = false;
|
||||||
|
|
||||||
if (fQueryListContainer->InitCheck() != B_OK) {
|
if (fQueryListContainer->InitCheck() != B_OK) {
|
||||||
@@ -298,8 +299,8 @@ BQueryPoseView::InitDirentIterator(const entry_ref* ref)
|
|||||||
timeData.tm_min = 0;
|
timeData.tm_min = 0;
|
||||||
nextHour = mktime(&timeData);
|
nextHour = mktime(&timeData);
|
||||||
|
|
||||||
PRINT(("%ld minutes, %ld seconds till next hour\n", (nextHour - now) / 60,
|
PRINT(("%ld minutes, %ld seconds till next hour\n",
|
||||||
(nextHour - now) % 60));
|
(nextHour - now) / 60, (nextHour - now) % 60));
|
||||||
|
|
||||||
time_t nextMinute = now + 60;
|
time_t nextMinute = now + 60;
|
||||||
// move ahead by a minute
|
// move ahead by a minute
|
||||||
@@ -342,7 +343,8 @@ BQueryPoseView::InitDirentIterator(const entry_ref* ref)
|
|||||||
TTracker* tracker = dynamic_cast<TTracker*>(be_app);
|
TTracker* tracker = dynamic_cast<TTracker*>(be_app);
|
||||||
ASSERT(tracker);
|
ASSERT(tracker);
|
||||||
tracker->MainTaskLoop()->RunLater(
|
tracker->MainTaskLoop()->RunLater(
|
||||||
NewLockingMemberFunctionObject(&BQueryPoseView::Refresh, this), delta);
|
NewLockingMemberFunctionObject(&BQueryPoseView::Refresh, this),
|
||||||
|
delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fQueryListContainer->Clone();
|
return fQueryListContainer->Clone();
|
||||||
@@ -365,14 +367,19 @@ BQueryPoseView::SearchForType() const
|
|||||||
attr_info attrInfo;
|
attr_info attrInfo;
|
||||||
|
|
||||||
// read the type of files we are looking for
|
// read the type of files we are looking for
|
||||||
status_t status = TargetModel()->Node()->GetAttrInfo(kAttrQueryInitialMime, &attrInfo);
|
status_t status
|
||||||
if (status == B_OK)
|
= TargetModel()->Node()->GetAttrInfo(kAttrQueryInitialMime,
|
||||||
TargetModel()->Node()->ReadAttrString(kAttrQueryInitialMime, &buffer);
|
&attrInfo);
|
||||||
|
if (status == B_OK) {
|
||||||
|
TargetModel()->Node()->ReadAttrString(kAttrQueryInitialMime,
|
||||||
|
&buffer);
|
||||||
|
}
|
||||||
|
|
||||||
if (buffer.Length()) {
|
if (buffer.Length()) {
|
||||||
TTracker* tracker = dynamic_cast<TTracker*>(be_app);
|
TTracker* tracker = dynamic_cast<TTracker*>(be_app);
|
||||||
if (tracker) {
|
if (tracker) {
|
||||||
const ShortMimeInfo* info = tracker->MimeTypes()->FindMimeType(buffer.String());
|
const ShortMimeInfo* info
|
||||||
|
= tracker->MimeTypes()->FindMimeType(buffer.String());
|
||||||
if (info)
|
if (info)
|
||||||
fSearchForMimeType = info->InternalName();
|
fSearchForMimeType = info->InternalName();
|
||||||
}
|
}
|
||||||
@@ -401,8 +408,8 @@ BQueryPoseView::ActiveOnDevice(dev_t device) const
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
QueryEntryListCollection::QueryEntryListCollection(Model* model, BHandler* target,
|
QueryEntryListCollection::QueryEntryListCollection(Model* model,
|
||||||
PoseList* oldPoseList)
|
BHandler* target, PoseList* oldPoseList)
|
||||||
: fQueryListRep(new QueryListRep(new BObjectList<BQuery>(5, true)))
|
: fQueryListRep(new QueryListRep(new BObjectList<BQuery>(5, true)))
|
||||||
{
|
{
|
||||||
Rewind();
|
Rewind();
|
||||||
@@ -421,7 +428,8 @@ QueryEntryListCollection::QueryEntryListCollection(Model* model, BHandler* targe
|
|||||||
|
|
||||||
BString buffer;
|
BString buffer;
|
||||||
if (model->Node()->ReadAttr(kAttrQueryString, B_STRING_TYPE, 0,
|
if (model->Node()->ReadAttr(kAttrQueryString, B_STRING_TYPE, 0,
|
||||||
buffer.LockBuffer((int32)info.size), (size_t)info.size) != info.size) {
|
buffer.LockBuffer((int32)info.size),
|
||||||
|
(size_t)info.size) != info.size) {
|
||||||
fStatus = B_ERROR;
|
fStatus = B_ERROR;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -430,8 +438,9 @@ QueryEntryListCollection::QueryEntryListCollection(Model* model, BHandler* targe
|
|||||||
|
|
||||||
// read the extra options
|
// read the extra options
|
||||||
MoreOptionsStruct saveMoreOptions;
|
MoreOptionsStruct saveMoreOptions;
|
||||||
if (ReadAttr(model->Node(), kAttrQueryMoreOptions, kAttrQueryMoreOptionsForeign,
|
if (ReadAttr(model->Node(), kAttrQueryMoreOptions,
|
||||||
B_RAW_TYPE, 0, &saveMoreOptions, sizeof(MoreOptionsStruct),
|
kAttrQueryMoreOptionsForeign, B_RAW_TYPE, 0, &saveMoreOptions,
|
||||||
|
sizeof(MoreOptionsStruct),
|
||||||
&MoreOptionsStruct::EndianSwap) != kReadAttrFailed) {
|
&MoreOptionsStruct::EndianSwap) != kReadAttrFailed) {
|
||||||
fQueryListRep->fShowResultsFromTrash = saveMoreOptions.searchTrash;
|
fQueryListRep->fShowResultsFromTrash = saveMoreOptions.searchTrash;
|
||||||
}
|
}
|
||||||
@@ -445,7 +454,8 @@ QueryEntryListCollection::QueryEntryListCollection(Model* model, BHandler* targe
|
|||||||
fQueryListRep->fRefreshEveryMinute = false;
|
fQueryListRep->fRefreshEveryMinute = false;
|
||||||
|
|
||||||
if (model->Node()->ReadAttr(kAttrDynamicDateQuery, B_BOOL_TYPE, 0,
|
if (model->Node()->ReadAttr(kAttrDynamicDateQuery, B_BOOL_TYPE, 0,
|
||||||
&fQueryListRep->fDynamicDateQuery, sizeof(bool)) != sizeof(bool)) {
|
&fQueryListRep->fDynamicDateQuery,
|
||||||
|
sizeof(bool)) != sizeof(bool)) {
|
||||||
fQueryListRep->fDynamicDateQuery = false;
|
fQueryListRep->fDynamicDateQuery = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,15 +483,16 @@ QueryEntryListCollection::QueryEntryListCollection(Model* model, BHandler* targe
|
|||||||
char* buffer = NULL;
|
char* buffer = NULL;
|
||||||
|
|
||||||
if ((buffer = (char*)malloc((size_t)info.size)) != NULL
|
if ((buffer = (char*)malloc((size_t)info.size)) != NULL
|
||||||
&& model->Node()->ReadAttr(kAttrQueryVolume, B_MESSAGE_TYPE, 0, buffer,
|
&& model->Node()->ReadAttr(kAttrQueryVolume, B_MESSAGE_TYPE, 0,
|
||||||
(size_t)info.size) == info.size) {
|
buffer, (size_t)info.size) == info.size) {
|
||||||
|
|
||||||
BMessage message;
|
BMessage message;
|
||||||
if (message.Unflatten(buffer) == B_OK) {
|
if (message.Unflatten(buffer) == B_OK) {
|
||||||
for (int32 index = 0; ;index++) {
|
for (int32 index = 0; ;index++) {
|
||||||
ASSERT(index < 100);
|
ASSERT(index < 100);
|
||||||
BVolume volume;
|
BVolume volume;
|
||||||
// match a volume with the info embedded in the message
|
// match a volume with the info embedded in
|
||||||
|
// the message
|
||||||
result = MatchArchivedVolume(&volume, &message, index);
|
result = MatchArchivedVolume(&volume, &message, index);
|
||||||
if (result == B_OK) {
|
if (result == B_OK) {
|
||||||
// start the query on this volume
|
// start the query on this volume
|
||||||
@@ -492,8 +503,8 @@ QueryEntryListCollection::QueryEntryListCollection(Model* model, BHandler* targe
|
|||||||
|
|
||||||
searchAllVolumes = false;
|
searchAllVolumes = false;
|
||||||
} else if (result != B_DEV_BAD_DRIVE_NUM) {
|
} else if (result != B_DEV_BAD_DRIVE_NUM) {
|
||||||
// if B_DEV_BAD_DRIVE_NUM, the volume just isn't mounted this
|
// if B_DEV_BAD_DRIVE_NUM, the volume just isn't
|
||||||
// time around, keep looking for more
|
// mounted this time around, keep looking for more
|
||||||
// if other error, bail
|
// if other error, bail
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -594,7 +605,8 @@ QueryEntryListCollection::GetNextEntry(BEntry* entry, bool traverse)
|
|||||||
for (int32 count = fQueryListRep->fQueryList->CountItems();
|
for (int32 count = fQueryListRep->fQueryList->CountItems();
|
||||||
fQueryListRep->fQueryListIndex < count;
|
fQueryListRep->fQueryListIndex < count;
|
||||||
fQueryListRep->fQueryListIndex++) {
|
fQueryListRep->fQueryListIndex++) {
|
||||||
result = fQueryListRep->fQueryList->ItemAt(fQueryListRep->fQueryListIndex)
|
result = fQueryListRep->fQueryList->
|
||||||
|
ItemAt(fQueryListRep->fQueryListIndex)
|
||||||
->GetNextEntry(entry, traverse);
|
->GetNextEntry(entry, traverse);
|
||||||
if (result == B_OK)
|
if (result == B_OK)
|
||||||
break;
|
break;
|
||||||
@@ -613,8 +625,9 @@ QueryEntryListCollection::GetNextDirents(struct dirent* buffer, size_t length,
|
|||||||
fQueryListRep->fQueryListIndex < queryCount;
|
fQueryListRep->fQueryListIndex < queryCount;
|
||||||
fQueryListRep->fQueryListIndex++) {
|
fQueryListRep->fQueryListIndex++) {
|
||||||
|
|
||||||
result = fQueryListRep->fQueryList->ItemAt(fQueryListRep->fQueryListIndex)
|
result = fQueryListRep->fQueryList->
|
||||||
->GetNextDirents(buffer, length, count);
|
ItemAt(fQueryListRep->fQueryListIndex)->GetNextDirents(buffer,
|
||||||
|
length, count);
|
||||||
if (result > 0)
|
if (result > 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -631,8 +644,8 @@ QueryEntryListCollection::GetNextRef(entry_ref* ref)
|
|||||||
fQueryListRep->fQueryListIndex < count;
|
fQueryListRep->fQueryListIndex < count;
|
||||||
fQueryListRep->fQueryListIndex++) {
|
fQueryListRep->fQueryListIndex++) {
|
||||||
|
|
||||||
result = fQueryListRep->fQueryList->ItemAt(fQueryListRep->fQueryListIndex)
|
result = fQueryListRep->fQueryList->
|
||||||
->GetNextRef(ref);
|
ItemAt(fQueryListRep->fQueryListIndex)->GetNextRef(ref);
|
||||||
if (result == B_OK)
|
if (result == B_OK)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,11 +137,13 @@ class QueryEntryListCollection : public EntryListBase {
|
|||||||
|
|
||||||
PoseList* fOldPoseList;
|
PoseList* fOldPoseList;
|
||||||
// when doing a Refresh, this list is used to detect poses that
|
// when doing a Refresh, this list is used to detect poses that
|
||||||
// are no longer a part of a fDynamicDateQuery and need to be removed
|
// are no longer a part of a fDynamicDateQuery and need to be
|
||||||
|
// removed
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QueryEntryListCollection(Model*, BHandler* = NULL, PoseList* oldPoseList = NULL);
|
QueryEntryListCollection(Model*, BHandler* = NULL,
|
||||||
|
PoseList* oldPoseList = NULL);
|
||||||
virtual ~QueryEntryListCollection();
|
virtual ~QueryEntryListCollection();
|
||||||
|
|
||||||
QueryEntryListCollection* Clone();
|
QueryEntryListCollection* Clone();
|
||||||
|
|||||||
@@ -363,7 +363,8 @@ BRecentFilesList::BRecentFilesList(int32 maxItems, bool navMenuFolders,
|
|||||||
|
|
||||||
|
|
||||||
BRecentFilesList::BRecentFilesList(int32 maxItems, bool navMenuFolders,
|
BRecentFilesList::BRecentFilesList(int32 maxItems, bool navMenuFolders,
|
||||||
const char* ofTypeList[], int32 ofTypeListCount, const char* openedByAppSig)
|
const char* ofTypeList[], int32 ofTypeListCount,
|
||||||
|
const char* openedByAppSig)
|
||||||
:
|
:
|
||||||
BRecentItemsList(maxItems, navMenuFolders),
|
BRecentItemsList(maxItems, navMenuFolders),
|
||||||
fType(NULL),
|
fType(NULL),
|
||||||
@@ -415,15 +416,17 @@ BRecentFilesList::NewFileListMenu(const char* title,
|
|||||||
const char* openedByAppSig)
|
const char* openedByAppSig)
|
||||||
{
|
{
|
||||||
return new RecentFilesMenu(title, openFileMessage,
|
return new RecentFilesMenu(title, openFileMessage,
|
||||||
openFolderMessage, target, maxItems, navMenuFolders, ofType, openedByAppSig);
|
openFolderMessage, target, maxItems, navMenuFolders, ofType,
|
||||||
|
openedByAppSig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BMenu*
|
BMenu*
|
||||||
BRecentFilesList::NewFileListMenu(const char* title,
|
BRecentFilesList::NewFileListMenu(const char* title,
|
||||||
BMessage* openFileMessage, BMessage* openFolderMessage,
|
BMessage* openFileMessage, BMessage* openFolderMessage,
|
||||||
BHandler* target, int32 maxItems, bool navMenuFolders, const char* ofTypeList[],
|
BHandler* target, int32 maxItems, bool navMenuFolders,
|
||||||
int32 ofTypeListCount, const char* openedByAppSig)
|
const char* ofTypeList[], int32 ofTypeListCount,
|
||||||
|
const char* openedByAppSig)
|
||||||
{
|
{
|
||||||
return new RecentFilesMenu(title, openFileMessage,
|
return new RecentFilesMenu(title, openFileMessage,
|
||||||
openFolderMessage, target, maxItems, navMenuFolders, ofTypeList,
|
openFolderMessage, target, maxItems, navMenuFolders, ofTypeList,
|
||||||
|
|||||||
@@ -63,12 +63,12 @@ public:
|
|||||||
virtual BMenuItem* GetNextMenuItem(const BMessage* fileOpenMessage = NULL,
|
virtual BMenuItem* GetNextMenuItem(const BMessage* fileOpenMessage = NULL,
|
||||||
const BMessage* containerOpenMessage = NULL,
|
const BMessage* containerOpenMessage = NULL,
|
||||||
BHandler* target = NULL, entry_ref* currentItemRef = NULL);
|
BHandler* target = NULL, entry_ref* currentItemRef = NULL);
|
||||||
// if <fileOpenMessage> specified, the item for a file gets a copy with
|
// if <fileOpenMessage> specified, the item for a file gets a copy
|
||||||
// the item ref attached as "refs", otherwise a default B_REFS_RECEIVED
|
// with the item ref attached as "refs", otherwise a default
|
||||||
// message message gets attached
|
|
||||||
// if <containerOpenMessage> specified, the item for a folder, volume or query
|
|
||||||
// gets a copy with the item ref attached as "refs", otherwise a default
|
|
||||||
// B_REFS_RECEIVED message message gets attached
|
// B_REFS_RECEIVED message message gets attached
|
||||||
|
// if <containerOpenMessage> specified, the item for a folder, volume
|
||||||
|
// or query gets a copy with the item ref attached as "refs",
|
||||||
|
// otherwise a default B_REFS_RECEIVED message message gets attached
|
||||||
// if <currentItemRef> gets passed, the caller gets to look at the
|
// if <currentItemRef> gets passed, the caller gets to look at the
|
||||||
// entry_ref corresponding to the item
|
// entry_ref corresponding to the item
|
||||||
|
|
||||||
@@ -101,8 +101,9 @@ public:
|
|||||||
// use one of the two constructors to set up next item iteration
|
// use one of the two constructors to set up next item iteration
|
||||||
BRecentFilesList(int32 maxItems = 10, bool navMenuFolders = false,
|
BRecentFilesList(int32 maxItems = 10, bool navMenuFolders = false,
|
||||||
const char* ofType = NULL, const char* openedByAppSig = NULL);
|
const char* ofType = NULL, const char* openedByAppSig = NULL);
|
||||||
BRecentFilesList(int32 maxItems, bool navMenuFolders, const char* ofTypeList[],
|
BRecentFilesList(int32 maxItems, bool navMenuFolders,
|
||||||
int32 ofTypeListCount, const char* openedByAppSig = NULL);
|
const char* ofTypeList[], int32 ofTypeListCount,
|
||||||
|
const char* openedByAppSig = NULL);
|
||||||
virtual ~BRecentFilesList();
|
virtual ~BRecentFilesList();
|
||||||
|
|
||||||
// use one of the two NewFileListMenu calls to get an entire menu
|
// use one of the two NewFileListMenu calls to get an entire menu
|
||||||
|
|||||||
+43
-31
@@ -91,8 +91,8 @@ const uint8 kRegExpMagic = 0234;
|
|||||||
// that Compile() supplies a regmust only if the r.e. contains something
|
// that Compile() supplies a regmust only if the r.e. contains something
|
||||||
// potentially expensive (at present, the only such thing detected is * or +
|
// potentially expensive (at present, the only such thing detected is * or +
|
||||||
// at the start of the r.e., which can involve a lot of backup). Regmlen is
|
// at the start of the r.e., which can involve a lot of backup). Regmlen is
|
||||||
// supplied because the test in RunMatcher() needs it and Compile() is computing
|
// supplied because the test in RunMatcher() needs it and Compile() is
|
||||||
// it anyway.
|
// computing it anyway.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -100,15 +100,16 @@ const uint8 kRegExpMagic = 0234;
|
|||||||
// of a nondeterministic finite-state machine (aka syntax charts or
|
// of a nondeterministic finite-state machine (aka syntax charts or
|
||||||
// "railroad normal form" in parsing technology). Each node is an opcode
|
// "railroad normal form" in parsing technology). Each node is an opcode
|
||||||
// plus a "next" pointer, possibly plus an operand. "Next" pointers of
|
// plus a "next" pointer, possibly plus an operand. "Next" pointers of
|
||||||
// all nodes except kRegExpBranch implement concatenation; a "next" pointer with
|
// all nodes except kRegExpBranch implement concatenation; a "next" pointer
|
||||||
// a kRegExpBranch on both ends of it is connecting two alternatives. (Here we
|
// with a kRegExpBranch on both ends of it is connecting two alternatives.
|
||||||
// have one of the subtle syntax dependencies: an individual kRegExpBranch (as
|
// (Here we have one of the subtle syntax dependencies: an individual
|
||||||
// opposed to a collection of them) is never concatenated with anything
|
// kRegExpBranch (as opposed to a collection of them) is never concatenated
|
||||||
// because of operator precedence.) The operand of some types of node is
|
// with anything because of operator precedence.) The operand of some types
|
||||||
// a literal string; for others, it is a node leading into a sub-FSM. In
|
// of node is a literal string; for others, it is a node leading into a
|
||||||
// particular, the operand of a kRegExpBranch node is the first node of the branch.
|
// sub-FSM. In particular, the operand of a kRegExpBranch node is the first
|
||||||
// (NB this is* not* a tree structure: the tail of the branch connects
|
// node of the branch. (NB this is* not* a tree structure: the tail of the
|
||||||
// to the thing following the set of kRegExpBranches.) The opcodes are:
|
// branch connects to the thing following the set of kRegExpBranches).
|
||||||
|
// The opcodes are:
|
||||||
//
|
//
|
||||||
|
|
||||||
// definition number opnd? meaning
|
// definition number opnd? meaning
|
||||||
@@ -133,21 +134,21 @@ enum {
|
|||||||
//
|
//
|
||||||
// Opcode notes:
|
// Opcode notes:
|
||||||
//
|
//
|
||||||
// kRegExpBranch The set of branches constituting a single choice are hooked
|
// kRegExpBranch The set of branches constituting a single choice are
|
||||||
// together with their "next" pointers, since precedence prevents
|
// hooked together with their "next" pointers, since precedence prevents
|
||||||
// anything being concatenated to any individual branch. The
|
// anything being concatenated to any individual branch. The
|
||||||
// "next" pointer of the last kRegExpBranch in a choice points to the
|
// "next" pointer of the last kRegExpBranch in a choice points to the
|
||||||
// thing following the whole choice. This is also where the
|
// thing following the whole choice. This is also where the
|
||||||
// final "next" pointer of each individual branch points; each
|
// final "next" pointer of each individual branch points; each
|
||||||
// branch starts with the operand node of a kRegExpBranch node.
|
// branch starts with the operand node of a kRegExpBranch node.
|
||||||
//
|
//
|
||||||
// kRegExpBack Normal "next" pointers all implicitly point forward; kRegExpBack
|
// kRegExpBack Normal "next" pointers all implicitly point forward;
|
||||||
// exists to make loop structures possible.
|
// kRegExpBack exists to make loop structures possible.
|
||||||
//
|
//
|
||||||
// kRegExpStar,kRegExpPlus '?', and complex '*' and '+', are implemented as circular
|
// kRegExpStar,kRegExpPlus '?', and complex '*' and '+', are implemented as
|
||||||
// kRegExpBranch structures using kRegExpBack. Simple cases (one character
|
// circular kRegExpBranch structures using kRegExpBack. Simple cases
|
||||||
// per match) are implemented with kRegExpStar and kRegExpPlus for speed
|
// (one character per match) are implemented with kRegExpStar and
|
||||||
// and to minimize recursive plunges.
|
// kRegExpPlus for speed and to minimize recursive plunges.
|
||||||
//
|
//
|
||||||
// kRegExpOpen,kRegExpClose ...are numbered at compile time.
|
// kRegExpOpen,kRegExpClose ...are numbered at compile time.
|
||||||
//
|
//
|
||||||
@@ -164,7 +165,8 @@ enum {
|
|||||||
//
|
//
|
||||||
|
|
||||||
const char* kMeta = "^$.[()|?+*\\";
|
const char* kMeta = "^$.[()|?+*\\";
|
||||||
const int32 kMaxSize = 32767L; // Probably could be 65535L.
|
const int32 kMaxSize = 32767L;
|
||||||
|
// Probably could be 65535L.
|
||||||
|
|
||||||
// Flags to be passed up and down:
|
// Flags to be passed up and down:
|
||||||
enum {
|
enum {
|
||||||
@@ -360,7 +362,8 @@ RegExp::Compile(const char* exp)
|
|||||||
longest = NULL;
|
longest = NULL;
|
||||||
len = 0;
|
len = 0;
|
||||||
for (; scan != NULL; scan = Next((char*)scan))
|
for (; scan != NULL; scan = Next((char*)scan))
|
||||||
if (*scan == kRegExpExactly && (int32)strlen(Operand(scan)) >= len) {
|
if (*scan == kRegExpExactly
|
||||||
|
&& (int32)strlen(Operand(scan)) >= len) {
|
||||||
longest = Operand(scan);
|
longest = Operand(scan);
|
||||||
len = (int32)strlen(Operand(scan));
|
len = (int32)strlen(Operand(scan));
|
||||||
}
|
}
|
||||||
@@ -520,10 +523,10 @@ RegExp::Branch(int32* flagp)
|
|||||||
// - Piece - something followed by possible [*+?]
|
// - Piece - something followed by possible [*+?]
|
||||||
//
|
//
|
||||||
// Note that the branching code sequences used for ? and the general cases
|
// Note that the branching code sequences used for ? and the general cases
|
||||||
// of * and + are somewhat optimized: they use the same kRegExpNothing node as
|
// of * and + are somewhat optimized: they use the same kRegExpNothing node
|
||||||
// both the endmarker for their branch list and the body of the last branch.
|
// as both the endmarker for their branch list and the body of the last
|
||||||
// It might seem that this node could be dispensed with entirely, but the
|
// branch. It might seem that this node could be dispensed with entirely,
|
||||||
// endmarker role is not redundant.
|
// but the endmarker role is not redundant.
|
||||||
//
|
//
|
||||||
char*
|
char*
|
||||||
RegExp::Piece(int32* flagp)
|
RegExp::Piece(int32* flagp)
|
||||||
@@ -623,12 +626,14 @@ RegExp::Atom(int32* flagp)
|
|||||||
ret = Node(kRegExpAnyOf);
|
ret = Node(kRegExpAnyOf);
|
||||||
if (*fInputScanPointer == ']' || *fInputScanPointer == '-')
|
if (*fInputScanPointer == ']' || *fInputScanPointer == '-')
|
||||||
Char(*fInputScanPointer++);
|
Char(*fInputScanPointer++);
|
||||||
while (*fInputScanPointer != '\0' && *fInputScanPointer != ']') {
|
while (*fInputScanPointer != '\0'
|
||||||
|
&& *fInputScanPointer != ']') {
|
||||||
if (*fInputScanPointer == '-') {
|
if (*fInputScanPointer == '-') {
|
||||||
fInputScanPointer++;
|
fInputScanPointer++;
|
||||||
if (*fInputScanPointer == ']' || *fInputScanPointer == '\0')
|
if (*fInputScanPointer == ']'
|
||||||
|
|| *fInputScanPointer == '\0') {
|
||||||
Char('-');
|
Char('-');
|
||||||
else {
|
} else {
|
||||||
cclass = UCharAt(fInputScanPointer - 2) + 1;
|
cclass = UCharAt(fInputScanPointer - 2) + 1;
|
||||||
classend = UCharAt(fInputScanPointer);
|
classend = UCharAt(fInputScanPointer);
|
||||||
if (cclass > classend + 1) {
|
if (cclass > classend + 1) {
|
||||||
@@ -688,21 +693,25 @@ RegExp::Atom(int32* flagp)
|
|||||||
SetError(REGEXP_INTERNAL_ERROR);
|
SetError(REGEXP_INTERNAL_ERROR);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ender = *(fInputScanPointer + len);
|
ender = *(fInputScanPointer + len);
|
||||||
if (len > 1 && IsMult(ender))
|
if (len > 1 && IsMult(ender))
|
||||||
len--; // Back off clear of ?+* operand.
|
len--; // Back off clear of ?+* operand.
|
||||||
|
|
||||||
*flagp |= kHasWidth;
|
*flagp |= kHasWidth;
|
||||||
if (len == 1)
|
if (len == 1)
|
||||||
*flagp |= kSimple;
|
*flagp |= kSimple;
|
||||||
|
|
||||||
ret = Node(kRegExpExactly);
|
ret = Node(kRegExpExactly);
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
Char(*fInputScanPointer++);
|
Char(*fInputScanPointer++);
|
||||||
len--;
|
len--;
|
||||||
}
|
}
|
||||||
|
|
||||||
Char('\0');
|
Char('\0');
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -964,8 +973,10 @@ RegExp::Match(const char* prog) const
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
uint32 len = strlen(opnd);
|
uint32 len = strlen(opnd);
|
||||||
if (len > 1 && strncmp(opnd, fStringInputPointer, len) != 0)
|
if (len > 1
|
||||||
|
&& strncmp(opnd, fStringInputPointer, len) != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
fStringInputPointer += len;
|
fStringInputPointer += len;
|
||||||
}
|
}
|
||||||
@@ -1255,7 +1266,8 @@ RegExp::Dump()
|
|||||||
else
|
else
|
||||||
printf("(%ld)", (s - fRegExp->program) + (next - s));
|
printf("(%ld)", (s - fRegExp->program) + (next - s));
|
||||||
s += 3;
|
s += 3;
|
||||||
if (op == kRegExpAnyOf || op == kRegExpAnyBut || op == kRegExpExactly) {
|
if (op == kRegExpAnyOf || op == kRegExpAnyBut
|
||||||
|
|| op == kRegExpExactly) {
|
||||||
// Literal string, where present.
|
// Literal string, where present.
|
||||||
while (*s != '\0') {
|
while (*s != '\0') {
|
||||||
putchar(*s);
|
putchar(*s);
|
||||||
|
|||||||
@@ -63,14 +63,16 @@ SelectionWindow::SelectionWindow(BContainerWindow* window)
|
|||||||
fParentWindow(window)
|
fParentWindow(window)
|
||||||
{
|
{
|
||||||
if (window->Feel() & kPrivateDesktopWindowFeel) {
|
if (window->Feel() & kPrivateDesktopWindowFeel) {
|
||||||
// The window will not show up if we have B_FLOATING_SUBSET_WINDOW_FEEL
|
// The window will not show up if we have
|
||||||
// and use it with the desktop window since it's never in front.
|
// B_FLOATING_SUBSET_WINDOW_FEEL and use it with the desktop window
|
||||||
|
// since it's never in front.
|
||||||
SetFeel(B_NORMAL_WINDOW_FEEL);
|
SetFeel(B_NORMAL_WINDOW_FEEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
AddToSubset(fParentWindow);
|
AddToSubset(fParentWindow);
|
||||||
|
|
||||||
BView* backgroundView = new BView(Bounds(), "bgView", B_FOLLOW_ALL, B_WILL_DRAW);
|
BView* backgroundView = new BView(Bounds(), "bgView", B_FOLLOW_ALL,
|
||||||
|
B_WILL_DRAW);
|
||||||
backgroundView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
backgroundView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||||
AddChild(backgroundView);
|
AddChild(backgroundView);
|
||||||
|
|
||||||
@@ -88,17 +90,18 @@ SelectionWindow::SelectionWindow(BContainerWindow* window)
|
|||||||
// Set wildcard matching to default.
|
// Set wildcard matching to default.
|
||||||
|
|
||||||
// Set up the menu field
|
// Set up the menu field
|
||||||
fMatchingTypeMenuField = new BMenuField(BRect(7, 6, Bounds().right - 5, 0),
|
fMatchingTypeMenuField = new BMenuField(BRect(7, 6,
|
||||||
NULL, B_TRANSLATE("Name"), menu);
|
Bounds().right - 5, 0), NULL, B_TRANSLATE("Name"), menu);
|
||||||
backgroundView->AddChild(fMatchingTypeMenuField);
|
backgroundView->AddChild(fMatchingTypeMenuField);
|
||||||
fMatchingTypeMenuField->SetDivider(fMatchingTypeMenuField->StringWidth(
|
fMatchingTypeMenuField->SetDivider(fMatchingTypeMenuField->StringWidth(
|
||||||
B_TRANSLATE("Name")) + 8);
|
B_TRANSLATE("Name")) + 8);
|
||||||
fMatchingTypeMenuField->ResizeToPreferred();
|
fMatchingTypeMenuField->ResizeToPreferred();
|
||||||
|
|
||||||
// Set up the expression text control
|
// Set up the expression text control
|
||||||
fExpressionTextControl = new BTextControl(BRect(7, fMatchingTypeMenuField->
|
fExpressionTextControl = new BTextControl(BRect(7,
|
||||||
Bounds().bottom + 11, Bounds().right - 6, 0), NULL, NULL, NULL, NULL,
|
fMatchingTypeMenuField->Bounds().bottom + 11,
|
||||||
B_FOLLOW_LEFT_RIGHT);
|
Bounds().right - 6, 0),
|
||||||
|
NULL, NULL, NULL, NULL, B_FOLLOW_LEFT_RIGHT);
|
||||||
backgroundView->AddChild(fExpressionTextControl);
|
backgroundView->AddChild(fExpressionTextControl);
|
||||||
fExpressionTextControl->ResizeToPreferred();
|
fExpressionTextControl->ResizeToPreferred();
|
||||||
fExpressionTextControl->MakeFocus(true);
|
fExpressionTextControl->MakeFocus(true);
|
||||||
@@ -113,15 +116,16 @@ SelectionWindow::SelectionWindow(BContainerWindow* window)
|
|||||||
// Set up the Ignore Case checkbox
|
// Set up the Ignore Case checkbox
|
||||||
fIgnoreCaseCheckBox = new BCheckBox(
|
fIgnoreCaseCheckBox = new BCheckBox(
|
||||||
BRect(fInverseCheckBox->Frame().right + 10,
|
BRect(fInverseCheckBox->Frame().right + 10,
|
||||||
fInverseCheckBox->Frame().top, 6, 6), NULL, B_TRANSLATE("Ignore case"),
|
fInverseCheckBox->Frame().top, 6, 6),
|
||||||
NULL);
|
NULL, B_TRANSLATE("Ignore case"), NULL);
|
||||||
fIgnoreCaseCheckBox->SetValue(1);
|
fIgnoreCaseCheckBox->SetValue(1);
|
||||||
backgroundView->AddChild(fIgnoreCaseCheckBox);
|
backgroundView->AddChild(fIgnoreCaseCheckBox);
|
||||||
fIgnoreCaseCheckBox->ResizeToPreferred();
|
fIgnoreCaseCheckBox->ResizeToPreferred();
|
||||||
|
|
||||||
// Set up the Select button
|
// Set up the Select button
|
||||||
fSelectButton = new BButton(BRect(0, 0, 5, 5), NULL, B_TRANSLATE("Select"),
|
fSelectButton = new BButton(BRect(0, 0, 5, 5), NULL,
|
||||||
new BMessage(kSelectButtonPressed), B_FOLLOW_RIGHT);
|
B_TRANSLATE("Select"), new BMessage(kSelectButtonPressed),
|
||||||
|
B_FOLLOW_RIGHT);
|
||||||
|
|
||||||
backgroundView->AddChild(fSelectButton);
|
backgroundView->AddChild(fSelectButton);
|
||||||
fSelectButton->ResizeToPreferred();
|
fSelectButton->ResizeToPreferred();
|
||||||
@@ -138,16 +142,19 @@ SelectionWindow::SelectionWindow(BContainerWindow* window)
|
|||||||
// Center the checkboxes vertically to the button
|
// Center the checkboxes vertically to the button
|
||||||
float topMiddleButton =
|
float topMiddleButton =
|
||||||
(fSelectButton->Bounds().Height() / 2 -
|
(fSelectButton->Bounds().Height() / 2 -
|
||||||
(fh.ascent + fh.descent + fh.leading + 4) / 2) + fSelectButton->Frame().top;
|
(fh.ascent + fh.descent + fh.leading + 4) / 2)
|
||||||
|
+ fSelectButton->Frame().top;
|
||||||
fInverseCheckBox->MoveTo(fInverseCheckBox->Frame().left, topMiddleButton);
|
fInverseCheckBox->MoveTo(fInverseCheckBox->Frame().left, topMiddleButton);
|
||||||
fIgnoreCaseCheckBox->MoveTo(fIgnoreCaseCheckBox->Frame().left,
|
fIgnoreCaseCheckBox->MoveTo(fIgnoreCaseCheckBox->Frame().left,
|
||||||
topMiddleButton);
|
topMiddleButton);
|
||||||
|
|
||||||
float bottomMinWidth = 32 + fSelectButton->Bounds().Width() +
|
float bottomMinWidth = 32 + fSelectButton->Bounds().Width()
|
||||||
fInverseCheckBox->Bounds().Width() + fIgnoreCaseCheckBox->Bounds().Width();
|
+ fInverseCheckBox->Bounds().Width()
|
||||||
|
+ fIgnoreCaseCheckBox->Bounds().Width();
|
||||||
float topMinWidth = be_plain_font->StringWidth(
|
float topMinWidth = be_plain_font->StringWidth(
|
||||||
B_TRANSLATE("Name matches wildcard expression:###"));
|
B_TRANSLATE("Name matches wildcard expression:###"));
|
||||||
float minWidth = bottomMinWidth > topMinWidth ? bottomMinWidth : topMinWidth;
|
float minWidth = bottomMinWidth > topMinWidth
|
||||||
|
? bottomMinWidth : topMinWidth;
|
||||||
|
|
||||||
class EscapeFilter : public BMessageFilter {
|
class EscapeFilter : public BMessageFilter {
|
||||||
public:
|
public:
|
||||||
@@ -240,7 +247,8 @@ SelectionWindow::MoveCloseToMouse()
|
|||||||
|
|
||||||
// ... unless that's outside of the current screen size:
|
// ... unless that's outside of the current screen size:
|
||||||
BScreen screen;
|
BScreen screen;
|
||||||
windowPosition.x = MAX(20, MIN(screen.Frame().right - 20 - Frame().Width(),
|
windowPosition.x
|
||||||
|
= MAX(20, MIN(screen.Frame().right - 20 - Frame().Width(),
|
||||||
windowPosition.x));
|
windowPosition.x));
|
||||||
windowPosition.y = MAX(20,
|
windowPosition.y = MAX(20,
|
||||||
MIN(screen.Frame().bottom - 20 - Frame().Height(), windowPosition.y));
|
MIN(screen.Frame().bottom - 20 - Frame().Height(), windowPosition.y));
|
||||||
|
|||||||
@@ -46,8 +46,9 @@ Settings* settings = NULL;
|
|||||||
|
|
||||||
// generic setting handler classes
|
// generic setting handler classes
|
||||||
|
|
||||||
StringValueSetting::StringValueSetting(const char* name, const char* defaultValue,
|
StringValueSetting::StringValueSetting(const char* name,
|
||||||
const char* valueExpectedErrorString, const char* wrongValueErrorString)
|
const char* defaultValue, const char* valueExpectedErrorString,
|
||||||
|
const char* wrongValueErrorString)
|
||||||
: SettingsArgvDispatcher(name),
|
: SettingsArgvDispatcher(name),
|
||||||
fDefaultValue(defaultValue),
|
fDefaultValue(defaultValue),
|
||||||
fValueExpectedErrorString(valueExpectedErrorString),
|
fValueExpectedErrorString(valueExpectedErrorString),
|
||||||
@@ -240,9 +241,9 @@ ScalarValueSetting::NeedsSaving() const
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
HexScalarValueSetting::HexScalarValueSetting(const char* name, int32 defaultValue,
|
HexScalarValueSetting::HexScalarValueSetting(const char* name,
|
||||||
const char* valueExpectedErrorString, const char* wrongValueErrorString,
|
int32 defaultValue, const char* valueExpectedErrorString,
|
||||||
int32 min, int32 max)
|
const char* wrongValueErrorString, int32 min, int32 max)
|
||||||
: ScalarValueSetting(name, defaultValue, valueExpectedErrorString,
|
: ScalarValueSetting(name, defaultValue, valueExpectedErrorString,
|
||||||
wrongValueErrorString, min, max)
|
wrongValueErrorString, min, max)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -85,8 +85,9 @@ class ScalarValueSetting : public SettingsArgvDispatcher {
|
|||||||
// simple int32 setting
|
// simple int32 setting
|
||||||
public:
|
public:
|
||||||
ScalarValueSetting(const char* name, int32 defaultValue,
|
ScalarValueSetting(const char* name, int32 defaultValue,
|
||||||
const char* valueExpectedErrorString, const char* wrongValueErrorString,
|
const char* valueExpectedErrorString,
|
||||||
int32 min = LONG_MIN, int32 max = LONG_MAX);
|
const char* wrongValueErrorString, int32 min = LONG_MIN,
|
||||||
|
int32 max = LONG_MAX);
|
||||||
|
|
||||||
void ValueChanged(int32 newValue);
|
void ValueChanged(int32 newValue);
|
||||||
int32 Value() const;
|
int32 Value() const;
|
||||||
@@ -110,8 +111,9 @@ class HexScalarValueSetting : public ScalarValueSetting {
|
|||||||
// hexadecimal int32 setting
|
// hexadecimal int32 setting
|
||||||
public:
|
public:
|
||||||
HexScalarValueSetting(const char* name, int32 defaultValue,
|
HexScalarValueSetting(const char* name, int32 defaultValue,
|
||||||
const char* valueExpectedErrorString, const char* wrongValueErrorString,
|
const char* valueExpectedErrorString,
|
||||||
int32 min = LONG_MIN, int32 max = LONG_MAX);
|
const char* wrongValueErrorString, int32 min = LONG_MIN,
|
||||||
|
int32 max = LONG_MAX);
|
||||||
|
|
||||||
void GetValueAsString(char* buffer) const;
|
void GetValueAsString(char* buffer) const;
|
||||||
|
|
||||||
|
|||||||
@@ -188,7 +188,8 @@ ArgvParser::EachArgvPrivate(const char* name, ArgvHandler argvHandlerFunc,
|
|||||||
// handle new line
|
// handle new line
|
||||||
fEatComment = false;
|
fEatComment = false;
|
||||||
if (!fSawBackslash && (fInDoubleQuote || fInSingleQuote)) {
|
if (!fSawBackslash && (fInDoubleQuote || fInSingleQuote)) {
|
||||||
printf("File %s ; Line %ld # unterminated quote\n", name, fLineNo);
|
printf("File %s ; Line %ld # unterminated quote\n", name,
|
||||||
|
fLineNo);
|
||||||
result = B_ERROR;
|
result = B_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -211,7 +212,8 @@ ArgvParser::EachArgvPrivate(const char* name, ArgvHandler argvHandlerFunc,
|
|||||||
if (!fSawBackslash) {
|
if (!fSawBackslash) {
|
||||||
if (!fInDoubleQuote && !fInSingleQuote) {
|
if (!fInDoubleQuote && !fInSingleQuote) {
|
||||||
if (ch == ';') {
|
if (ch == ';') {
|
||||||
// semicolon is a command separator, pass on the whole argv
|
// semicolon is a command separator, pass on
|
||||||
|
// the whole argv
|
||||||
result = SendArgv(argvHandlerFunc, passThru);
|
result = SendArgv(argvHandlerFunc, passThru);
|
||||||
if (result != B_OK)
|
if (result != B_OK)
|
||||||
break;
|
break;
|
||||||
@@ -259,7 +261,8 @@ SettingsArgvDispatcher::SettingsArgvDispatcher(const char* name)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsArgvDispatcher::SaveSettings(Settings* settings, bool onlyIfNonDefault)
|
SettingsArgvDispatcher::SaveSettings(Settings* settings,
|
||||||
|
bool onlyIfNonDefault)
|
||||||
{
|
{
|
||||||
if (!onlyIfNonDefault || NeedsSaving()) {
|
if (!onlyIfNonDefault || NeedsSaving()) {
|
||||||
settings->Write("%s ", Name());
|
settings->Write("%s ", Name());
|
||||||
@@ -270,8 +273,8 @@ SettingsArgvDispatcher::SaveSettings(Settings* settings, bool onlyIfNonDefault)
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SettingsArgvDispatcher::HandleRectValue(BRect &result, const char* const* argv,
|
SettingsArgvDispatcher::HandleRectValue(BRect &result,
|
||||||
bool printError)
|
const char* const* argv, bool printError)
|
||||||
{
|
{
|
||||||
if (!*argv) {
|
if (!*argv) {
|
||||||
if (printError)
|
if (printError)
|
||||||
|
|||||||
@@ -50,7 +50,8 @@ namespace BPrivate {
|
|||||||
|
|
||||||
class Settings;
|
class Settings;
|
||||||
|
|
||||||
typedef const char* (*ArgvHandler)(int argc, const char* const *argv, void* params);
|
typedef const char* (*ArgvHandler)(int argc, const char* const *argv,
|
||||||
|
void* params);
|
||||||
// return 0 or error string if parsing failed
|
// return 0 or error string if parsing failed
|
||||||
|
|
||||||
const int32 kBufferSize = 1024;
|
const int32 kBufferSize = 1024;
|
||||||
@@ -117,7 +118,8 @@ public:
|
|||||||
// return a pointer to an error message or null if parsed OK
|
// return a pointer to an error message or null if parsed OK
|
||||||
|
|
||||||
// some handy reader/writer calls
|
// some handy reader/writer calls
|
||||||
bool HandleRectValue(BRect&, const char* const *argv, bool printError = true);
|
bool HandleRectValue(BRect&, const char* const *argv,
|
||||||
|
bool printError = true);
|
||||||
void WriteRectValue(Settings*, BRect);
|
void WriteRectValue(Settings*, BRect);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -59,11 +59,14 @@ static const float kIndentSpacing = 12.0f;
|
|||||||
|
|
||||||
//TODO: defaults should be set in one place only (TrackerSettings.cpp) while
|
//TODO: defaults should be set in one place only (TrackerSettings.cpp) while
|
||||||
// being accessible from here.
|
// being accessible from here.
|
||||||
// What about adding DefaultValue(), IsDefault() etc... methods to xxxValueSetting ?
|
// What about adding DefaultValue(), IsDefault() etc... methods to
|
||||||
|
// xxxValueSetting ?
|
||||||
static const uint8 kSpaceBarAlpha = 192;
|
static const uint8 kSpaceBarAlpha = 192;
|
||||||
static const rgb_color kDefaultUsedSpaceColor = {0, 203, 0, kSpaceBarAlpha};
|
static const rgb_color kDefaultUsedSpaceColor = {0, 203, 0, kSpaceBarAlpha};
|
||||||
static const rgb_color kDefaultFreeSpaceColor = {255, 255, 255, kSpaceBarAlpha};
|
static const rgb_color kDefaultFreeSpaceColor
|
||||||
static const rgb_color kDefaultWarningSpaceColor = {203, 0, 0, kSpaceBarAlpha};
|
= {255, 255, 255, kSpaceBarAlpha};
|
||||||
|
static const rgb_color kDefaultWarningSpaceColor
|
||||||
|
= {203, 0, 0, kSpaceBarAlpha};
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -370,10 +373,13 @@ DesktopSettingsView::ShowCurrentSettings()
|
|||||||
TrackerSettings settings;
|
TrackerSettings settings;
|
||||||
|
|
||||||
fShowDisksIconRadioButton->SetValue(settings.ShowDisksIcon());
|
fShowDisksIconRadioButton->SetValue(settings.ShowDisksIcon());
|
||||||
fMountVolumesOntoDesktopRadioButton->SetValue(settings.MountVolumesOntoDesktop());
|
fMountVolumesOntoDesktopRadioButton->SetValue(
|
||||||
|
settings.MountVolumesOntoDesktop());
|
||||||
|
|
||||||
fMountSharedVolumesOntoDesktopCheckBox->SetValue(settings.MountSharedVolumesOntoDesktop());
|
fMountSharedVolumesOntoDesktopCheckBox->SetValue(
|
||||||
fMountSharedVolumesOntoDesktopCheckBox->SetEnabled(settings.MountVolumesOntoDesktop());
|
settings.MountSharedVolumesOntoDesktop());
|
||||||
|
fMountSharedVolumesOntoDesktopCheckBox->SetEnabled(
|
||||||
|
settings.MountVolumesOntoDesktop());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -476,19 +482,22 @@ WindowsSettingsView::MessageReceived(BMessage* message)
|
|||||||
|
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case kWindowsShowFullPathChanged:
|
case kWindowsShowFullPathChanged:
|
||||||
settings.SetShowFullPathInTitleBar(fShowFullPathInTitleBarCheckBox->Value() == 1);
|
settings.SetShowFullPathInTitleBar(
|
||||||
|
fShowFullPathInTitleBarCheckBox->Value() == 1);
|
||||||
tracker->SendNotices(kWindowsShowFullPathChanged);
|
tracker->SendNotices(kWindowsShowFullPathChanged);
|
||||||
Window()->PostMessage(kSettingsContentsModified);
|
Window()->PostMessage(kSettingsContentsModified);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kSingleWindowBrowseChanged:
|
case kSingleWindowBrowseChanged:
|
||||||
settings.SetSingleWindowBrowse(fSingleWindowBrowseCheckBox->Value() == 1);
|
settings.SetSingleWindowBrowse(
|
||||||
|
fSingleWindowBrowseCheckBox->Value() == 1);
|
||||||
if (fSingleWindowBrowseCheckBox->Value() == 0) {
|
if (fSingleWindowBrowseCheckBox->Value() == 0) {
|
||||||
fShowNavigatorCheckBox->SetEnabled(false);
|
fShowNavigatorCheckBox->SetEnabled(false);
|
||||||
settings.SetShowNavigator(0);
|
settings.SetShowNavigator(0);
|
||||||
} else {
|
} else {
|
||||||
fShowNavigatorCheckBox->SetEnabled(true);
|
fShowNavigatorCheckBox->SetEnabled(true);
|
||||||
settings.SetShowNavigator(fShowNavigatorCheckBox->Value() != 0);
|
settings.SetShowNavigator(
|
||||||
|
fShowNavigatorCheckBox->Value() != 0);
|
||||||
}
|
}
|
||||||
tracker->SendNotices(kShowNavigatorChanged);
|
tracker->SendNotices(kShowNavigatorChanged);
|
||||||
tracker->SendNotices(kSingleWindowBrowseChanged);
|
tracker->SendNotices(kSingleWindowBrowseChanged);
|
||||||
@@ -516,10 +525,12 @@ WindowsSettingsView::MessageReceived(BMessage* message)
|
|||||||
|
|
||||||
case kSortFolderNamesFirstChanged:
|
case kSortFolderNamesFirstChanged:
|
||||||
{
|
{
|
||||||
settings.SetSortFolderNamesFirst(fSortFolderNamesFirstCheckBox->Value() == 1);
|
settings.SetSortFolderNamesFirst(
|
||||||
|
fSortFolderNamesFirstCheckBox->Value() == 1);
|
||||||
|
|
||||||
// Make the notification message and send it to the tracker:
|
// Make the notification message and send it to the tracker:
|
||||||
send_bool_notices(kSortFolderNamesFirstChanged, "SortFolderNamesFirst",
|
send_bool_notices(kSortFolderNamesFirstChanged,
|
||||||
|
"SortFolderNamesFirst",
|
||||||
fSortFolderNamesFirstCheckBox->Value() == 1);
|
fSortFolderNamesFirstCheckBox->Value() == 1);
|
||||||
|
|
||||||
Window()->PostMessage(kSettingsContentsModified);
|
Window()->PostMessage(kSettingsContentsModified);
|
||||||
@@ -528,8 +539,10 @@ WindowsSettingsView::MessageReceived(BMessage* message)
|
|||||||
|
|
||||||
case kTypeAheadFilteringChanged:
|
case kTypeAheadFilteringChanged:
|
||||||
{
|
{
|
||||||
settings.SetTypeAheadFiltering(fTypeAheadFilteringCheckBox->Value() == 1);
|
settings.SetTypeAheadFiltering(
|
||||||
send_bool_notices(kTypeAheadFilteringChanged, "TypeAheadFiltering",
|
fTypeAheadFilteringCheckBox->Value() == 1);
|
||||||
|
send_bool_notices(kTypeAheadFilteringChanged,
|
||||||
|
"TypeAheadFiltering",
|
||||||
fTypeAheadFilteringCheckBox->Value() == 1);
|
fTypeAheadFilteringCheckBox->Value() == 1);
|
||||||
Window()->PostMessage(kSettingsContentsModified);
|
Window()->PostMessage(kSettingsContentsModified);
|
||||||
break;
|
break;
|
||||||
@@ -653,7 +666,8 @@ WindowsSettingsView::ShowCurrentSettings()
|
|||||||
{
|
{
|
||||||
TrackerSettings settings;
|
TrackerSettings settings;
|
||||||
|
|
||||||
fShowFullPathInTitleBarCheckBox->SetValue(settings.ShowFullPathInTitleBar());
|
fShowFullPathInTitleBarCheckBox->SetValue(
|
||||||
|
settings.ShowFullPathInTitleBar());
|
||||||
fSingleWindowBrowseCheckBox->SetValue(settings.SingleWindowBrowse());
|
fSingleWindowBrowseCheckBox->SetValue(settings.SingleWindowBrowse());
|
||||||
fShowNavigatorCheckBox->SetEnabled(settings.SingleWindowBrowse());
|
fShowNavigatorCheckBox->SetEnabled(settings.SingleWindowBrowse());
|
||||||
fShowNavigatorCheckBox->SetValue(settings.ShowNavigator());
|
fShowNavigatorCheckBox->SetValue(settings.ShowNavigator());
|
||||||
@@ -722,9 +736,10 @@ SpaceBarSettingsView::SpaceBarSettingsView()
|
|||||||
BBox* box = new BBox("box");
|
BBox* box = new BBox("box");
|
||||||
box->SetLabel(fColorPicker = new BMenuField("menu", NULL, menu));
|
box->SetLabel(fColorPicker = new BMenuField("menu", NULL, menu));
|
||||||
|
|
||||||
fColorControl = new BColorControl(BPoint(8, fColorPicker->Bounds().Height()
|
fColorControl = new BColorControl(BPoint(8,
|
||||||
+ 8 + kItemExtraSpacing),
|
fColorPicker->Bounds().Height() + 8 + kItemExtraSpacing),
|
||||||
B_CELLS_16x16, 1, "SpaceColorControl", new BMessage(kSpaceBarColorChanged));
|
B_CELLS_16x16, 1, "SpaceColorControl",
|
||||||
|
new BMessage(kSpaceBarColorChanged));
|
||||||
fColorControl->SetValue(TrackerSettings().UsedSpaceColor());
|
fColorControl->SetValue(TrackerSettings().UsedSpaceColor());
|
||||||
box->AddChild(fColorControl);
|
box->AddChild(fColorControl);
|
||||||
|
|
||||||
@@ -767,7 +782,8 @@ SpaceBarSettingsView::MessageReceived(BMessage* message)
|
|||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case kUpdateVolumeSpaceBar:
|
case kUpdateVolumeSpaceBar:
|
||||||
{
|
{
|
||||||
settings.SetShowVolumeSpaceBar(fSpaceBarShowCheckBox->Value() == 1);
|
settings.SetShowVolumeSpaceBar(
|
||||||
|
fSpaceBarShowCheckBox->Value() == 1);
|
||||||
Window()->PostMessage(kSettingsContentsModified);
|
Window()->PostMessage(kSettingsContentsModified);
|
||||||
tracker->PostMessage(kShowVolumeSpaceBar);
|
tracker->PostMessage(kShowVolumeSpaceBar);
|
||||||
break;
|
break;
|
||||||
@@ -794,7 +810,8 @@ SpaceBarSettingsView::MessageReceived(BMessage* message)
|
|||||||
{
|
{
|
||||||
rgb_color color = fColorControl->ValueAsColor();
|
rgb_color color = fColorControl->ValueAsColor();
|
||||||
color.alpha = kSpaceBarAlpha;
|
color.alpha = kSpaceBarAlpha;
|
||||||
//alpha is ignored by BColorControl but is checked in equalities
|
// alpha is ignored by BColorControl but is checked
|
||||||
|
// in equalities
|
||||||
|
|
||||||
switch (fCurrentColor) {
|
switch (fCurrentColor) {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -870,7 +887,8 @@ SpaceBarSettingsView::Revert()
|
|||||||
|
|
||||||
if (settings.ShowVolumeSpaceBar() != fSpaceBarShow) {
|
if (settings.ShowVolumeSpaceBar() != fSpaceBarShow) {
|
||||||
settings.SetShowVolumeSpaceBar(fSpaceBarShow);
|
settings.SetShowVolumeSpaceBar(fSpaceBarShow);
|
||||||
send_bool_notices(kShowVolumeSpaceBar, "ShowVolumeSpaceBar", fSpaceBarShow);
|
send_bool_notices(kShowVolumeSpaceBar, "ShowVolumeSpaceBar",
|
||||||
|
fSpaceBarShow);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.UsedSpaceColor() != fUsedSpaceColor
|
if (settings.UsedSpaceColor() != fUsedSpaceColor
|
||||||
@@ -978,14 +996,16 @@ TrashSettingsView::MessageReceived(BMessage* message)
|
|||||||
|
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case kDontMoveFilesToTrashChanged:
|
case kDontMoveFilesToTrashChanged:
|
||||||
settings.SetDontMoveFilesToTrash(fDontMoveFilesToTrashCheckBox->Value() == 1);
|
settings.SetDontMoveFilesToTrash(
|
||||||
|
fDontMoveFilesToTrashCheckBox->Value() == 1);
|
||||||
|
|
||||||
tracker->SendNotices(kDontMoveFilesToTrashChanged);
|
tracker->SendNotices(kDontMoveFilesToTrashChanged);
|
||||||
Window()->PostMessage(kSettingsContentsModified);
|
Window()->PostMessage(kSettingsContentsModified);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kAskBeforeDeleteFileChanged:
|
case kAskBeforeDeleteFileChanged:
|
||||||
settings.SetAskBeforeDeleteFile(fAskBeforeDeleteFileCheckBox->Value() == 1);
|
settings.SetAskBeforeDeleteFile(
|
||||||
|
fAskBeforeDeleteFileCheckBox->Value() == 1);
|
||||||
|
|
||||||
tracker->SendNotices(kAskBeforeDeleteFileChanged);
|
tracker->SendNotices(kAskBeforeDeleteFileChanged);
|
||||||
Window()->PostMessage(kSettingsContentsModified);
|
Window()->PostMessage(kSettingsContentsModified);
|
||||||
@@ -1069,7 +1089,9 @@ TrashSettingsView::RecordRevertSettings()
|
|||||||
bool
|
bool
|
||||||
TrashSettingsView::IsRevertable() const
|
TrashSettingsView::IsRevertable() const
|
||||||
{
|
{
|
||||||
return fDontMoveFilesToTrash != (fDontMoveFilesToTrashCheckBox->Value() > 0)
|
return fDontMoveFilesToTrash
|
||||||
|| fAskBeforeDeleteFile != (fAskBeforeDeleteFileCheckBox->Value() > 0);
|
!= (fDontMoveFilesToTrashCheckBox->Value() > 0)
|
||||||
|
|| fAskBeforeDeleteFile
|
||||||
|
!= (fAskBeforeDeleteFileCheckBox->Value() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -462,8 +462,8 @@ BSlowContextMenu::BuildVolumeMenu()
|
|||||||
fMessenger, fParentWindow, fTypesList);
|
fMessenger, fParentWindow, fTypesList);
|
||||||
|
|
||||||
menu->SetNavDir(model->EntryRef());
|
menu->SetNavDir(model->EntryRef());
|
||||||
menu->InitTrackingHook(fTrackingHook.fTrackingHook, &(fTrackingHook.fTarget),
|
menu->InitTrackingHook(fTrackingHook.fTrackingHook,
|
||||||
fTrackingHook.fDragMessage);
|
&(fTrackingHook.fTarget), fTrackingHook.fDragMessage);
|
||||||
|
|
||||||
ASSERT(menu->Name());
|
ASSERT(menu->Name());
|
||||||
|
|
||||||
@@ -519,8 +519,8 @@ BSlowContextMenu::SetTarget(const BMessenger &target)
|
|||||||
|
|
||||||
|
|
||||||
TrackingHookData*
|
TrackingHookData*
|
||||||
BSlowContextMenu::InitTrackingHook(bool (*hook)(BMenu*, void*), const BMessenger* target,
|
BSlowContextMenu::InitTrackingHook(bool (*hook)(BMenu*, void*),
|
||||||
const BMessage* dragMessage)
|
const BMessenger* target, const BMessage* dragMessage)
|
||||||
{
|
{
|
||||||
fTrackingHook.fTrackingHook = hook;
|
fTrackingHook.fTrackingHook = hook;
|
||||||
if (target)
|
if (target)
|
||||||
@@ -532,7 +532,8 @@ BSlowContextMenu::InitTrackingHook(bool (*hook)(BMenu*, void*), const BMessenger
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BSlowContextMenu::SetTrackingHookDeep(BMenu* menu, bool (*func)(BMenu*, void*), void* state)
|
BSlowContextMenu::SetTrackingHookDeep(BMenu* menu,
|
||||||
|
bool (*func)(BMenu*, void*), void* state)
|
||||||
{
|
{
|
||||||
menu->SetTrackingHook(func, state);
|
menu->SetTrackingHook(func, state);
|
||||||
int32 count = menu->CountItems();
|
int32 count = menu->CountItems();
|
||||||
|
|||||||
@@ -63,8 +63,9 @@ public:
|
|||||||
void SetTypesList(const BObjectList<BString>* list);
|
void SetTypesList(const BObjectList<BString>* list);
|
||||||
const BObjectList<BString>* TypesList() const;
|
const BObjectList<BString>* TypesList() const;
|
||||||
|
|
||||||
static ModelMenuItem* NewModelItem(Model*, const BMessage*, const BMessenger&,
|
static ModelMenuItem* NewModelItem(Model*, const BMessage*,
|
||||||
bool suppressFolderHierarchy = false, BContainerWindow* = NULL,
|
const BMessenger&, bool suppressFolderHierarchy = false,
|
||||||
|
BContainerWindow* = NULL,
|
||||||
const BObjectList<BString>* typeslist = NULL,
|
const BObjectList<BString>* typeslist = NULL,
|
||||||
TrackingHookData* hook = NULL);
|
TrackingHookData* hook = NULL);
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ class BSlowMenu : public BMenu {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool AddDynamicItem(add_state state);
|
virtual bool AddDynamicItem(add_state state);
|
||||||
// this is the callback from BMenu, you shouldn't need to override this
|
// this is the callback from BMenu, you shouldn't need to
|
||||||
|
// override this
|
||||||
|
|
||||||
bool fMenuBuilt;
|
bool fMenuBuilt;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -315,8 +315,8 @@ BStatusWindow::RemoveStatusItem(thread_id thread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (winner != NULL) {
|
if (winner != NULL) {
|
||||||
// The height by which the other views will have to be moved (in pixel
|
// The height by which the other views will have to be moved
|
||||||
// count).
|
// (in pixel count).
|
||||||
float height = winner->Bounds().Height() + 1;
|
float height = winner->Bounds().Height() + 1;
|
||||||
fViewList.RemoveItem(winner);
|
fViewList.RemoveItem(winner);
|
||||||
winner->RemoveSelf();
|
winner->RemoveSelf();
|
||||||
@@ -460,7 +460,8 @@ BStatusView::BStatusView(BRect bounds, thread_id thread, StatusWindowState type)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kCreateLinkState:
|
case kCreateLinkState:
|
||||||
caption = B_TRANSLATE("Preparing to create links" B_UTF8_ELLIPSIS);
|
caption = B_TRANSLATE("Preparing to create links"
|
||||||
|
B_UTF8_ELLIPSIS);
|
||||||
id = R_MoveStatusBitmap;
|
id = R_MoveStatusBitmap;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -470,16 +471,19 @@ BStatusView::BStatusView(BRect bounds, thread_id thread, StatusWindowState type)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kVolumeState:
|
case kVolumeState:
|
||||||
caption = B_TRANSLATE("Searching for disks to mount" B_UTF8_ELLIPSIS);
|
caption = B_TRANSLATE("Searching for disks to mount"
|
||||||
|
B_UTF8_ELLIPSIS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kDeleteState:
|
case kDeleteState:
|
||||||
caption = B_TRANSLATE("Preparing to delete items" B_UTF8_ELLIPSIS);
|
caption = B_TRANSLATE("Preparing to delete items"
|
||||||
|
B_UTF8_ELLIPSIS);
|
||||||
id = R_TrashStatusBitmap;
|
id = R_TrashStatusBitmap;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kRestoreFromTrashState:
|
case kRestoreFromTrashState:
|
||||||
caption = B_TRANSLATE("Preparing to restore items" B_UTF8_ELLIPSIS);
|
caption = B_TRANSLATE("Preparing to restore items"
|
||||||
|
B_UTF8_ELLIPSIS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -506,8 +510,10 @@ BStatusView::BStatusView(BRect bounds, thread_id thread, StatusWindowState type)
|
|||||||
+ fh.descent + f.top);
|
+ fh.descent + f.top);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id != 0)
|
if (id != 0) {
|
||||||
GetTrackerResources()->GetBitmapResource(B_MESSAGE_TYPE, id, &fBitmap);
|
GetTrackerResources()->GetBitmapResource(B_MESSAGE_TYPE, id,
|
||||||
|
&fBitmap);
|
||||||
|
}
|
||||||
|
|
||||||
rect = Bounds();
|
rect = Bounds();
|
||||||
rect.left = rect.right - buttonWidth * 2 - 7;
|
rect.left = rect.right - buttonWidth * 2 - 7;
|
||||||
@@ -550,8 +556,8 @@ BStatusView::Init()
|
|||||||
fLastSpeedReferenceSize = 0;
|
fLastSpeedReferenceSize = 0;
|
||||||
fEstimatedFinishReferenceSize = 0;
|
fEstimatedFinishReferenceSize = 0;
|
||||||
|
|
||||||
fProcessStartTime = fLastSpeedReferenceTime = fEstimatedFinishReferenceTime
|
fProcessStartTime = fLastSpeedReferenceTime
|
||||||
= system_time();
|
= fEstimatedFinishReferenceTime = system_time();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -584,7 +590,8 @@ BStatusView::InitStatus(int32 totalItems, off_t totalSize,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kCreateLinkState:
|
case kCreateLinkState:
|
||||||
fStatusBar->Reset(B_TRANSLATE("Creating links: "), buffer.String());
|
fStatusBar->Reset(B_TRANSLATE("Creating links: "),
|
||||||
|
buffer.String());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kMoveState:
|
case kMoveState:
|
||||||
@@ -592,7 +599,8 @@ BStatusView::InitStatus(int32 totalItems, off_t totalSize,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kTrashState:
|
case kTrashState:
|
||||||
fStatusBar->Reset(B_TRANSLATE("Emptying Trash" B_UTF8_ELLIPSIS " "),
|
fStatusBar->Reset(
|
||||||
|
B_TRANSLATE("Emptying Trash" B_UTF8_ELLIPSIS " "),
|
||||||
buffer.String());
|
buffer.String());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -619,7 +627,8 @@ BStatusView::Draw(BRect updateRect)
|
|||||||
{
|
{
|
||||||
if (fBitmap) {
|
if (fBitmap) {
|
||||||
BPoint location;
|
BPoint location;
|
||||||
location.x = (fStatusBar->Frame().left - fBitmap->Bounds().Width()) / 2;
|
location.x = (fStatusBar->Frame().left
|
||||||
|
- fBitmap->Bounds().Width()) / 2;
|
||||||
location.y = (Bounds().Height()- fBitmap->Bounds().Height()) / 2;
|
location.y = (Bounds().Height()- fBitmap->Bounds().Height()) / 2;
|
||||||
DrawBitmap(fBitmap, location);
|
DrawBitmap(fBitmap, location);
|
||||||
}
|
}
|
||||||
@@ -695,7 +704,8 @@ BStatusView::_DestinationString(float* _width)
|
|||||||
|
|
||||||
|
|
||||||
BString
|
BString
|
||||||
BStatusView::_StatusString(float availableSpace, float fontSize, float* _width)
|
BStatusView::_StatusString(float availableSpace, float fontSize,
|
||||||
|
float* _width)
|
||||||
{
|
{
|
||||||
BFont font;
|
BFont font;
|
||||||
GetFont(&font);
|
GetFont(&font);
|
||||||
@@ -970,4 +980,3 @@ BStatusView::SetWasCanceled()
|
|||||||
{
|
{
|
||||||
fWasCanceled = true;
|
fWasCanceled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ DelayedTask::~DelayedTask()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
OneShotDelayedTask::OneShotDelayedTask(FunctionObject* functor, bigtime_t delay)
|
OneShotDelayedTask::OneShotDelayedTask(FunctionObject* functor,
|
||||||
|
bigtime_t delay)
|
||||||
: DelayedTask(delay),
|
: DelayedTask(delay),
|
||||||
fFunctor(functor)
|
fFunctor(functor)
|
||||||
{
|
{
|
||||||
@@ -293,8 +294,9 @@ TaskLoop::RunWhenIdle(FunctionObjectWithResult<bool>* functor,
|
|||||||
class AccumulatedOneShotDelayedTask : public OneShotDelayedTask {
|
class AccumulatedOneShotDelayedTask : public OneShotDelayedTask {
|
||||||
// supports accumulating functors
|
// supports accumulating functors
|
||||||
public:
|
public:
|
||||||
AccumulatedOneShotDelayedTask(AccumulatingFunctionObject* functor, bigtime_t delay,
|
AccumulatedOneShotDelayedTask(AccumulatingFunctionObject* functor,
|
||||||
bigtime_t maxAccumulatingTime = 0, int32 maxAccumulateCount = 0)
|
bigtime_t delay, bigtime_t maxAccumulatingTime = 0,
|
||||||
|
int32 maxAccumulateCount = 0)
|
||||||
: OneShotDelayedTask(functor, delay),
|
: OneShotDelayedTask(functor, delay),
|
||||||
maxAccumulateCount(maxAccumulateCount),
|
maxAccumulateCount(maxAccumulateCount),
|
||||||
accumulateCount(1),
|
accumulateCount(1),
|
||||||
@@ -308,19 +310,24 @@ public:
|
|||||||
// don't accumulate if too may accumulated already
|
// don't accumulate if too may accumulated already
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (maxAccumulatingTime && system_time() > initialTime + maxAccumulatingTime)
|
if (maxAccumulatingTime && system_time() > initialTime
|
||||||
|
+ maxAccumulatingTime) {
|
||||||
// don't accumulate if too late past initial task
|
// don't accumulate if too late past initial task
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return static_cast<AccumulatingFunctionObject*>(fFunctor)->CanAccumulate(accumulateThis);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Accumulate(AccumulatingFunctionObject* accumulateThis, bigtime_t delay)
|
return static_cast<AccumulatingFunctionObject*>(fFunctor)->
|
||||||
|
CanAccumulate(accumulateThis);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Accumulate(AccumulatingFunctionObject* accumulateThis,
|
||||||
|
bigtime_t delay)
|
||||||
{
|
{
|
||||||
fRunAfter = system_time() + delay;
|
fRunAfter = system_time() + delay;
|
||||||
// reset fRunAfter
|
// reset fRunAfter
|
||||||
accumulateCount++;
|
accumulateCount++;
|
||||||
static_cast<AccumulatingFunctionObject*>(fFunctor)->Accumulate(accumulateThis);
|
static_cast<AccumulatingFunctionObject*>(fFunctor)->
|
||||||
|
Accumulate(accumulateThis);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -331,8 +338,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
TaskLoop::AccumulatedRunLater(AccumulatingFunctionObject* functor, bigtime_t delay,
|
TaskLoop::AccumulatedRunLater(AccumulatingFunctionObject* functor,
|
||||||
bigtime_t maxAccumulatingTime, int32 maxAccumulateCount)
|
bigtime_t delay, bigtime_t maxAccumulatingTime, int32 maxAccumulateCount)
|
||||||
{
|
{
|
||||||
AutoLock<BLocker> autoLock(&fLock);
|
AutoLock<BLocker> autoLock(&fLock);
|
||||||
if (!autoLock.IsLocked()) {
|
if (!autoLock.IsLocked()) {
|
||||||
@@ -351,8 +358,8 @@ TaskLoop::AccumulatedRunLater(AccumulatingFunctionObject* functor, bigtime_t del
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RunLater(new AccumulatedOneShotDelayedTask(functor, delay, maxAccumulatingTime,
|
RunLater(new AccumulatedOneShotDelayedTask(functor, delay,
|
||||||
maxAccumulateCount));
|
maxAccumulatingTime, maxAccumulateCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -479,8 +486,8 @@ StandAloneTaskLoop::StartPulsingIfNeeded()
|
|||||||
ASSERT(fLock.IsLocked());
|
ASSERT(fLock.IsLocked());
|
||||||
if (fScanThread < 0) {
|
if (fScanThread < 0) {
|
||||||
// no loop thread yet, spawn one
|
// no loop thread yet, spawn one
|
||||||
fScanThread = spawn_thread(StandAloneTaskLoop::RunBinder, "TrackerTaskLoop",
|
fScanThread = spawn_thread(StandAloneTaskLoop::RunBinder,
|
||||||
B_LOW_PRIORITY, this);
|
"TrackerTaskLoop", B_LOW_PRIORITY, this);
|
||||||
resume_thread(fScanThread);
|
resume_thread(fScanThread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ All rights reserved.
|
|||||||
|
|
||||||
namespace BPrivate {
|
namespace BPrivate {
|
||||||
|
|
||||||
|
|
||||||
// Task flavors
|
// Task flavors
|
||||||
|
|
||||||
class DelayedTask {
|
class DelayedTask {
|
||||||
@@ -110,8 +109,8 @@ protected:
|
|||||||
// until functor returns true
|
// until functor returns true
|
||||||
class RunWhenIdleTask : public PeriodicDelayedTask {
|
class RunWhenIdleTask : public PeriodicDelayedTask {
|
||||||
public:
|
public:
|
||||||
RunWhenIdleTask(FunctionObjectWithResult<bool>* functor, bigtime_t initialDelay,
|
RunWhenIdleTask(FunctionObjectWithResult<bool>* functor,
|
||||||
bigtime_t idleFor, bigtime_t heartBeat);
|
bigtime_t initialDelay, bigtime_t idleFor, bigtime_t heartBeat);
|
||||||
virtual ~RunWhenIdleTask();
|
virtual ~RunWhenIdleTask();
|
||||||
|
|
||||||
virtual bool RunIfNeeded(bigtime_t currentTime);
|
virtual bool RunIfNeeded(bigtime_t currentTime);
|
||||||
@@ -256,7 +255,6 @@ DelayedTask::RunAfterTime() const
|
|||||||
return fRunAfter;
|
return fRunAfter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|
||||||
using namespace BPrivate;
|
using namespace BPrivate;
|
||||||
|
|||||||
@@ -168,7 +168,8 @@ TemplatesMenu::BuildMenu(bool addItems)
|
|||||||
BMessage* message = new BMessage(kNewEntryFromTemplate);
|
BMessage* message = new BMessage(kNewEntryFromTemplate);
|
||||||
message->AddRef("refs_template", &ref);
|
message->AddRef("refs_template", &ref);
|
||||||
message->AddString("name", fileName);
|
message->AddString("name", fileName);
|
||||||
AddItem(new IconMenuItem(fileName, message, &nodeInfo, B_MINI_ICON));
|
AddItem(new IconMenuItem(fileName, message, &nodeInfo,
|
||||||
|
B_MINI_ICON));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,7 +184,8 @@ IconSpewer::DrawSomeNew()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (numDrawn) {
|
if (numDrawn) {
|
||||||
sprintf(buffer, "average draw time %Ld us per icon", watch.ElapsedTime() / numDrawn);
|
sprintf(buffer, "average draw time %Ld us per icon",
|
||||||
|
watch.ElapsedTime() / numDrawn);
|
||||||
view->DrawString(buffer, BPoint(20, bounds.bottom - 30));
|
view->DrawString(buffer, BPoint(20, bounds.bottom - 30));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,8 +205,9 @@ IconSpewer::DrawSomeNew()
|
|||||||
if (model.IsDirectory())
|
if (model.IsDirectory())
|
||||||
entry.GetPath(¤tPath);
|
entry.GetPath(¤tPath);
|
||||||
|
|
||||||
IconCache::sIconCache->Draw(&model, view, BPoint(column * (kIconSize + 2),
|
IconCache::sIconCache->Draw(&model, view,
|
||||||
row * (kIconSize + 2)), kNormalIcon, kIconSize, true);
|
BPoint(column * (kIconSize + 2), row * (kIconSize + 2)),
|
||||||
|
kNormalIcon, kIconSize, true);
|
||||||
target->Unlock();
|
target->Unlock();
|
||||||
numDrawn++;
|
numDrawn++;
|
||||||
}
|
}
|
||||||
@@ -239,7 +241,8 @@ IconSpewer::DrawSomeOld()
|
|||||||
view->DrawString(buffer, BPoint(20, bounds.bottom - 20));
|
view->DrawString(buffer, BPoint(20, bounds.bottom - 20));
|
||||||
}
|
}
|
||||||
if (numDrawn) {
|
if (numDrawn) {
|
||||||
sprintf(buffer, "average draw time %Ld us per icon", watch.ElapsedTime() / numDrawn);
|
sprintf(buffer, "average draw time %Ld us per icon",
|
||||||
|
watch.ElapsedTime() / numDrawn);
|
||||||
view->DrawString(buffer, BPoint(20, bounds.bottom - 30));
|
view->DrawString(buffer, BPoint(20, bounds.bottom - 30));
|
||||||
}
|
}
|
||||||
sprintf(buffer, "directory: %s", currentPath.Path());
|
sprintf(buffer, "directory: %s", currentPath.Path());
|
||||||
@@ -259,7 +262,8 @@ IconSpewer::DrawSomeOld()
|
|||||||
entry.GetPath(¤tPath);
|
entry.GetPath(¤tPath);
|
||||||
|
|
||||||
BIconCache::LockIconCache();
|
BIconCache::LockIconCache();
|
||||||
BIconCache* iconCache = BIconCache::GetIconCache(&model, kIconSize);
|
BIconCache* iconCache
|
||||||
|
= BIconCache::GetIconCache(&model, kIconSize);
|
||||||
iconCache->Draw(view, BPoint(column * (kIconSize + 2),
|
iconCache->Draw(view, BPoint(column * (kIconSize + 2),
|
||||||
row * (kIconSize + 2)), B_NORMAL_ICON, kIconSize, true);
|
row * (kIconSize + 2)), B_NORMAL_ICON, kIconSize, true);
|
||||||
BIconCache::UnlockIconCache();
|
BIconCache::UnlockIconCache();
|
||||||
@@ -310,8 +314,8 @@ IconSpewer::NextRef()
|
|||||||
|
|
||||||
|
|
||||||
IconTestWindow::IconTestWindow()
|
IconTestWindow::IconTestWindow()
|
||||||
: BWindow(BRect(100, 100, 500, 600), "icon cache test", B_TITLED_WINDOW_LOOK,
|
: BWindow(BRect(100, 100, 500, 600), "icon cache test",
|
||||||
B_NORMAL_WINDOW_FEEL, 0),
|
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, 0),
|
||||||
iconSpewer(modifiers() == 0)
|
iconSpewer(modifiers() == 0)
|
||||||
{
|
{
|
||||||
iconSpewer.SetTarget(this);
|
iconSpewer.SetTarget(this);
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ BTextWidget::Compare(const BTextWidget& with, BPoseView* view) const
|
|||||||
const char*
|
const char*
|
||||||
BTextWidget::Text(const BPoseView* view) const
|
BTextWidget::Text(const BPoseView* view) const
|
||||||
{
|
{
|
||||||
StringAttributeText* textAttribute = dynamic_cast<StringAttributeText*>(fText);
|
StringAttributeText* textAttribute
|
||||||
|
= dynamic_cast<StringAttributeText*>(fText);
|
||||||
if (textAttribute == NULL)
|
if (textAttribute == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -146,7 +147,8 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn* column,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case B_ALIGN_CENTER:
|
case B_ALIGN_CENTER:
|
||||||
result.left = poseLoc.x + (column->Width() / 2) - (textWidth / 2);
|
result.left = poseLoc.x + (column->Width() / 2)
|
||||||
|
- (textWidth / 2);
|
||||||
if (result.left < 0)
|
if (result.left < 0)
|
||||||
result.left = 0;
|
result.left = 0;
|
||||||
result.right = result.left + textWidth + 1;
|
result.right = result.left + textWidth + 1;
|
||||||
@@ -277,8 +279,8 @@ TextViewFilter(BMessage* message, BHandler**, BMessageFilter* filter)
|
|||||||
if (message->FindInt8("byte", (int8*)&key) != B_OK)
|
if (message->FindInt8("byte", (int8*)&key) != B_OK)
|
||||||
return B_DISPATCH_MESSAGE;
|
return B_DISPATCH_MESSAGE;
|
||||||
|
|
||||||
BPoseView* poseView = dynamic_cast<BContainerWindow*>(filter->Looper())->
|
BPoseView* poseView = dynamic_cast<BContainerWindow*>(
|
||||||
PoseView();
|
filter->Looper())->PoseView();
|
||||||
|
|
||||||
if (key == B_RETURN || key == B_ESCAPE) {
|
if (key == B_RETURN || key == B_ESCAPE) {
|
||||||
poseView->CommitActivePose(key == B_RETURN);
|
poseView->CommitActivePose(key == B_RETURN);
|
||||||
@@ -302,7 +304,8 @@ TextViewFilter(BMessage* message, BHandler**, BMessageFilter* filter)
|
|||||||
// find the text editing view
|
// find the text editing view
|
||||||
BView* scrollView = poseView->FindView("BorderView");
|
BView* scrollView = poseView->FindView("BorderView");
|
||||||
if (scrollView != NULL) {
|
if (scrollView != NULL) {
|
||||||
BTextView* textView = dynamic_cast<BTextView*>(scrollView->FindView("WidgetTextView"));
|
BTextView* textView = dynamic_cast<BTextView*>(
|
||||||
|
scrollView->FindView("WidgetTextView"));
|
||||||
if (textView != NULL) {
|
if (textView != NULL) {
|
||||||
BRect rect = scrollView->Frame();
|
BRect rect = scrollView->Frame();
|
||||||
|
|
||||||
@@ -343,8 +346,8 @@ BTextWidget::StartEdit(BRect bounds, BPoseView* view, BPose* pose)
|
|||||||
|
|
||||||
BFont font;
|
BFont font;
|
||||||
view->GetFont(&font);
|
view->GetFont(&font);
|
||||||
BTextView* textView = new BTextView(rect, "WidgetTextView", textRect, &font, 0,
|
BTextView* textView = new BTextView(rect, "WidgetTextView", textRect,
|
||||||
B_FOLLOW_ALL, B_WILL_DRAW);
|
&font, 0, B_FOLLOW_ALL, B_WILL_DRAW);
|
||||||
|
|
||||||
textView->SetWordWrap(false);
|
textView->SetWordWrap(false);
|
||||||
DisallowMetaKeys(textView);
|
DisallowMetaKeys(textView);
|
||||||
@@ -375,8 +378,8 @@ BTextWidget::StartEdit(BRect bounds, BPoseView* view, BPose* pose)
|
|||||||
textView->MoveTo(rect.LeftTop());
|
textView->MoveTo(rect.LeftTop());
|
||||||
textView->ResizeTo(rect.Width(), rect.Height());
|
textView->ResizeTo(rect.Width(), rect.Height());
|
||||||
|
|
||||||
BScrollView* scrollView = new BScrollView("BorderView", textView, 0, 0, false,
|
BScrollView* scrollView = new BScrollView("BorderView", textView, 0, 0,
|
||||||
false, B_PLAIN_BORDER);
|
false, false, B_PLAIN_BORDER);
|
||||||
view->AddChild(scrollView);
|
view->AddChild(scrollView);
|
||||||
|
|
||||||
// configure text view
|
// configure text view
|
||||||
@@ -406,9 +409,10 @@ BTextWidget::StartEdit(BRect bounds, BPoseView* view, BPose* pose)
|
|||||||
|
|
||||||
ASSERT(view->Window()); // how can I not have a Window here???
|
ASSERT(view->Window()); // how can I not have a Window here???
|
||||||
|
|
||||||
if (view->Window())
|
if (view->Window()) {
|
||||||
// force immediate redraw so TextView appears instantly
|
// force immediate redraw so TextView appears instantly
|
||||||
view->Window()->UpdateIfNeeded();
|
view->Window()->UpdateIfNeeded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -422,7 +426,8 @@ BTextWidget::StopEdit(bool saveChanges, BPoint poseLoc, BPoseView* view,
|
|||||||
if (!scrollView)
|
if (!scrollView)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BTextView* textView = dynamic_cast<BTextView*>(scrollView->FindView("WidgetTextView"));
|
BTextView* textView = dynamic_cast<BTextView*>(
|
||||||
|
scrollView->FindView("WidgetTextView"));
|
||||||
ASSERT(textView);
|
ASSERT(textView);
|
||||||
if (!textView)
|
if (!textView)
|
||||||
return;
|
return;
|
||||||
@@ -454,8 +459,8 @@ BTextWidget::StopEdit(bool saveChanges, BPoint poseLoc, BPoseView* view,
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BTextWidget::CheckAndUpdate(BPoint loc, const BColumn* column, BPoseView* view,
|
BTextWidget::CheckAndUpdate(BPoint loc, const BColumn* column,
|
||||||
bool visible)
|
BPoseView* view, bool visible)
|
||||||
{
|
{
|
||||||
BRect oldRect;
|
BRect oldRect;
|
||||||
if (view->ViewMode() != kListMode)
|
if (view->ViewMode() != kListMode)
|
||||||
@@ -474,7 +479,8 @@ BTextWidget::CheckAndUpdate(BPoint loc, const BColumn* column, BPoseView* view,
|
|||||||
void
|
void
|
||||||
BTextWidget::SelectAll(BPoseView* view)
|
BTextWidget::SelectAll(BPoseView* view)
|
||||||
{
|
{
|
||||||
BTextView* text = dynamic_cast<BTextView*>(view->FindView("WidgetTextView"));
|
BTextView* text = dynamic_cast<BTextView*>(
|
||||||
|
view->FindView("WidgetTextView"));
|
||||||
if (text)
|
if (text)
|
||||||
text->SelectAll();
|
text->SelectAll();
|
||||||
}
|
}
|
||||||
@@ -482,7 +488,8 @@ BTextWidget::SelectAll(BPoseView* view)
|
|||||||
|
|
||||||
void
|
void
|
||||||
BTextWidget::Draw(BRect eraseRect, BRect textRect, float, BPoseView* view,
|
BTextWidget::Draw(BRect eraseRect, BRect textRect, float, BPoseView* view,
|
||||||
BView* drawView, bool selected, uint32 clipboardMode, BPoint offset, bool direct)
|
BView* drawView, bool selected, uint32 clipboardMode, BPoint offset,
|
||||||
|
bool direct)
|
||||||
{
|
{
|
||||||
textRect.OffsetBy(offset);
|
textRect.OffsetBy(offset);
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ public:
|
|||||||
void Draw(BRect widgetRect, BRect widgetTextRect, float width, BPoseView*,
|
void Draw(BRect widgetRect, BRect widgetTextRect, float width, BPoseView*,
|
||||||
bool selected, uint32 clipboardMode);
|
bool selected, uint32 clipboardMode);
|
||||||
void Draw(BRect widgetRect, BRect widgetTextRect, float width, BPoseView*,
|
void Draw(BRect widgetRect, BRect widgetTextRect, float width, BPoseView*,
|
||||||
BView* drawView, bool selected, uint32 clipboardMode, BPoint offset, bool direct);
|
BView* drawView, bool selected, uint32 clipboardMode, BPoint offset,
|
||||||
|
bool direct);
|
||||||
// second call is used for offscreen drawing, where PoseView
|
// second call is used for offscreen drawing, where PoseView
|
||||||
// and current drawing view are different
|
// and current drawing view are different
|
||||||
|
|
||||||
@@ -72,7 +73,8 @@ public:
|
|||||||
// we can invalidate properly
|
// we can invalidate properly
|
||||||
|
|
||||||
void StartEdit(BRect bounds, BPoseView*, BPose*);
|
void StartEdit(BRect bounds, BPoseView*, BPose*);
|
||||||
void StopEdit(bool saveChanges, BPoint loc, BPoseView*, BPose*, int32 index);
|
void StopEdit(bool saveChanges, BPoint loc, BPoseView*, BPose*,
|
||||||
|
int32 index);
|
||||||
|
|
||||||
void SelectAll(BPoseView* view);
|
void SelectAll(BPoseView* view);
|
||||||
void CheckAndUpdate(BPoint, const BColumn*, BPoseView*, bool visible);
|
void CheckAndUpdate(BPoint, const BColumn*, BPoseView*, bool visible);
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ Thread::Run()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ThreadSequence::Launch(BObjectList<FunctionObject>* list, bool async, int32 priority)
|
ThreadSequence::Launch(BObjectList<FunctionObject>* list, bool async,
|
||||||
|
int32 priority)
|
||||||
{
|
{
|
||||||
if (!async) {
|
if (!async) {
|
||||||
// if not async, don't even create a thread, just do it right away
|
// if not async, don't even create a thread, just do it right away
|
||||||
@@ -113,7 +114,8 @@ ThreadSequence::Launch(BObjectList<FunctionObject>* list, bool async, int32 prio
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ThreadSequence::ThreadSequence(BObjectList<FunctionObject>* list, int32 priority)
|
ThreadSequence::ThreadSequence(BObjectList<FunctionObject>* list,
|
||||||
|
int32 priority)
|
||||||
: SimpleThread(priority),
|
: SimpleThread(priority),
|
||||||
fFunctorList(list)
|
fFunctorList(list)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -95,9 +95,11 @@ private:
|
|||||||
|
|
||||||
// would use SingleParamFunctionObjectWithResult, except mwcc won't handle this
|
// would use SingleParamFunctionObjectWithResult, except mwcc won't handle this
|
||||||
template <class Param1>
|
template <class Param1>
|
||||||
class SingleParamFunctionObjectWorkaround : public FunctionObjectWithResult<status_t> {
|
class SingleParamFunctionObjectWorkaround : public
|
||||||
|
FunctionObjectWithResult<status_t> {
|
||||||
public:
|
public:
|
||||||
SingleParamFunctionObjectWorkaround(status_t (*function)(Param1), Param1 param1)
|
SingleParamFunctionObjectWorkaround(
|
||||||
|
status_t (*function)(Param1), Param1 param1)
|
||||||
: fFunction(function),
|
: fFunction(function),
|
||||||
fParam1(param1)
|
fParam1(param1)
|
||||||
{
|
{
|
||||||
@@ -115,7 +117,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class SimpleMemberFunctionObjectWorkaround : public FunctionObjectWithResult<status_t> {
|
class SimpleMemberFunctionObjectWorkaround : public
|
||||||
|
FunctionObjectWithResult<status_t> {
|
||||||
public:
|
public:
|
||||||
SimpleMemberFunctionObjectWorkaround(status_t (T::*function)(), T* onThis)
|
SimpleMemberFunctionObjectWorkaround(status_t (T::*function)(), T* onThis)
|
||||||
: fFunction(function),
|
: fFunction(function),
|
||||||
@@ -135,7 +138,8 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
template <class Param1, class Param2>
|
template <class Param1, class Param2>
|
||||||
class TwoParamFunctionObjectWorkaround : public FunctionObjectWithResult<status_t> {
|
class TwoParamFunctionObjectWorkaround : public
|
||||||
|
FunctionObjectWithResult<status_t> {
|
||||||
public:
|
public:
|
||||||
TwoParamFunctionObjectWorkaround(status_t (*callThis)(Param1, Param2),
|
TwoParamFunctionObjectWorkaround(status_t (*callThis)(Param1, Param2),
|
||||||
Param1 param1, Param2 param2)
|
Param1 param1, Param2 param2)
|
||||||
@@ -158,9 +162,11 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
template <class Param1, class Param2, class Param3>
|
template <class Param1, class Param2, class Param3>
|
||||||
class ThreeParamFunctionObjectWorkaround : public FunctionObjectWithResult<status_t> {
|
class ThreeParamFunctionObjectWorkaround : public
|
||||||
|
FunctionObjectWithResult<status_t> {
|
||||||
public:
|
public:
|
||||||
ThreeParamFunctionObjectWorkaround(status_t (*callThis)(Param1, Param2, Param3),
|
ThreeParamFunctionObjectWorkaround(
|
||||||
|
status_t (*callThis)(Param1, Param2, Param3),
|
||||||
Param1 param1, Param2 param2, Param3 param3)
|
Param1 param1, Param2 param2, Param3 param3)
|
||||||
: function(callThis),
|
: function(callThis),
|
||||||
fParam1(param1),
|
fParam1(param1),
|
||||||
@@ -183,9 +189,11 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
template <class Param1, class Param2, class Param3, class Param4>
|
template <class Param1, class Param2, class Param3, class Param4>
|
||||||
class FourParamFunctionObjectWorkaround : public FunctionObjectWithResult<status_t> {
|
class FourParamFunctionObjectWorkaround : public
|
||||||
|
FunctionObjectWithResult<status_t> {
|
||||||
public:
|
public:
|
||||||
FourParamFunctionObjectWorkaround(status_t (*callThis)(Param1, Param2, Param3, Param4),
|
FourParamFunctionObjectWorkaround(
|
||||||
|
status_t (*callThis)(Param1, Param2, Param3, Param4),
|
||||||
Param1 param1, Param2 param2, Param3 param3, Param4 param4)
|
Param1 param1, Param2 param2, Param3 param3, Param4 param4)
|
||||||
: function(callThis),
|
: function(callThis),
|
||||||
fParam1(param1),
|
fParam1(param1),
|
||||||
@@ -267,7 +275,8 @@ template<class View>
|
|||||||
class MouseDownThread {
|
class MouseDownThread {
|
||||||
public:
|
public:
|
||||||
static void TrackMouse(View* view, void (View::*)(BPoint),
|
static void TrackMouse(View* view, void (View::*)(BPoint),
|
||||||
void (View::*)(BPoint, uint32) = 0, bigtime_t pressingPeriod = 100000);
|
void (View::*)(BPoint, uint32) = 0,
|
||||||
|
bigtime_t pressingPeriod = 100000);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MouseDownThread(View* view, void (View::*)(BPoint),
|
MouseDownThread(View* view, void (View::*)(BPoint),
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ BTitleView::BTitleView(BRect frame, BPoseView* view)
|
|||||||
fPreviouslyClickedColumnTitle(0),
|
fPreviouslyClickedColumnTitle(0),
|
||||||
fTrackingState(NULL)
|
fTrackingState(NULL)
|
||||||
{
|
{
|
||||||
sTitleBackground = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), 0.88f); // 216 -> 220
|
sTitleBackground = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), 0.88f);
|
||||||
|
// 216 -> 220
|
||||||
sDarkTitleBackground = tint_color(sTitleBackground, B_DARKEN_1_TINT);
|
sDarkTitleBackground = tint_color(sTitleBackground, B_DARKEN_1_TINT);
|
||||||
sShineColor = tint_color(sTitleBackground, B_LIGHTEN_MAX_TINT);
|
sShineColor = tint_color(sTitleBackground, B_LIGHTEN_MAX_TINT);
|
||||||
sLightShadowColor = tint_color(sTitleBackground, B_DARKEN_2_TINT);
|
sLightShadowColor = tint_color(sTitleBackground, B_DARKEN_2_TINT);
|
||||||
@@ -210,9 +211,8 @@ BTitleView::Draw(BRect /*updateRect*/, bool useOffscreen, bool updateOnly,
|
|||||||
ASSERT(sOffscreen);
|
ASSERT(sOffscreen);
|
||||||
BRect frame(bounds);
|
BRect frame(bounds);
|
||||||
frame.right += frame.left;
|
frame.right += frame.left;
|
||||||
// this is kind of messy way of avoiding being clipped by the ammount the
|
// ToDo: this is kind of messy way of avoiding being clipped
|
||||||
// title is scrolled to the left
|
// by the amount the title is scrolled to the left
|
||||||
// ToDo: fix this
|
|
||||||
view = sOffscreen->BeginUsing(frame);
|
view = sOffscreen->BeginUsing(frame);
|
||||||
view->SetOrigin(-bounds.left, 0);
|
view->SetOrigin(-bounds.left, 0);
|
||||||
view->SetLowColor(LowColor());
|
view->SetLowColor(LowColor());
|
||||||
@@ -238,10 +238,12 @@ BTitleView::Draw(BRect /*updateRect*/, bool useOffscreen, bool updateOnly,
|
|||||||
|
|
||||||
view->BeginLineArray(4);
|
view->BeginLineArray(4);
|
||||||
view->AddLine(bounds.LeftTop(), bounds.RightTop(), sShadowColor);
|
view->AddLine(bounds.LeftTop(), bounds.RightTop(), sShadowColor);
|
||||||
view->AddLine(bounds.LeftBottom(), bounds.RightBottom(), sShadowColor);
|
view->AddLine(bounds.LeftBottom(), bounds.RightBottom(),
|
||||||
|
sShadowColor);
|
||||||
// draw lighter gray and white inset lines
|
// draw lighter gray and white inset lines
|
||||||
bounds.InsetBy(0, 1);
|
bounds.InsetBy(0, 1);
|
||||||
view->AddLine(bounds.LeftBottom(), bounds.RightBottom(), sLightShadowColor);
|
view->AddLine(bounds.LeftBottom(), bounds.RightBottom(),
|
||||||
|
sLightShadowColor);
|
||||||
view->AddLine(bounds.LeftTop(), bounds.RightTop(), sShineColor);
|
view->AddLine(bounds.LeftTop(), bounds.RightTop(), sShineColor);
|
||||||
view->EndLineArray();
|
view->EndLineArray();
|
||||||
}
|
}
|
||||||
@@ -263,7 +265,8 @@ BTitleView::Draw(BRect /*updateRect*/, bool useOffscreen, bool updateOnly,
|
|||||||
bounds = Bounds();
|
bounds = Bounds();
|
||||||
minx--;
|
minx--;
|
||||||
view->SetHighColor(sLightShadowColor);
|
view->SetHighColor(sLightShadowColor);
|
||||||
view->StrokeLine(BPoint(minx, bounds.top), BPoint(minx, bounds.bottom - 1));
|
view->StrokeLine(BPoint(minx, bounds.top),
|
||||||
|
BPoint(minx, bounds.bottom - 1));
|
||||||
} else {
|
} else {
|
||||||
// first and last shades before and after first column
|
// first and last shades before and after first column
|
||||||
maxx++;
|
maxx++;
|
||||||
@@ -277,8 +280,10 @@ BTitleView::Draw(BRect /*updateRect*/, bool useOffscreen, bool updateOnly,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if !(APP_SERVER_CLEARS_BACKGROUND)
|
#if !(APP_SERVER_CLEARS_BACKGROUND)
|
||||||
FillRect(BRect(bounds.left, bounds.top + 1, minx - 1, bounds.bottom - 1), B_SOLID_LOW);
|
FillRect(BRect(bounds.left, bounds.top + 1, minx - 1, bounds.bottom - 1),
|
||||||
FillRect(BRect(maxx + 1, bounds.top + 1, bounds.right, bounds.bottom - 1), B_SOLID_LOW);
|
B_SOLID_LOW);
|
||||||
|
FillRect(BRect(maxx + 1, bounds.top + 1, bounds.right, bounds.bottom - 1),
|
||||||
|
B_SOLID_LOW);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (useOffscreen) {
|
if (useOffscreen) {
|
||||||
@@ -334,8 +339,10 @@ BTitleView::MouseDown(BPoint where)
|
|||||||
bool force = static_cast<bool>(buttons & B_TERTIARY_MOUSE_BUTTON);
|
bool force = static_cast<bool>(buttons & B_TERTIARY_MOUSE_BUTTON);
|
||||||
if (force || buttons & B_PRIMARY_MOUSE_BUTTON) {
|
if (force || buttons & B_PRIMARY_MOUSE_BUTTON) {
|
||||||
if (force || fPreviouslyClickedColumnTitle != 0) {
|
if (force || fPreviouslyClickedColumnTitle != 0) {
|
||||||
if (force || system_time() - fPreviousLeftClickTime < doubleClickSpeed) {
|
if (force || system_time() - fPreviousLeftClickTime
|
||||||
if (fPoseView->ResizeColumnToWidest(resizedTitle->Column())) {
|
< doubleClickSpeed) {
|
||||||
|
if (fPoseView->
|
||||||
|
ResizeColumnToWidest(resizedTitle->Column())) {
|
||||||
Invalidate();
|
Invalidate();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -347,7 +354,8 @@ BTitleView::MouseDown(BPoint where)
|
|||||||
} else if (!title)
|
} else if (!title)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SetMouseEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY | B_LOCK_WINDOW_FOCUS);
|
SetMouseEventMask(B_POINTER_EVENTS,
|
||||||
|
B_NO_POINTER_HISTORY | B_LOCK_WINDOW_FOCUS);
|
||||||
|
|
||||||
// track the mouse
|
// track the mouse
|
||||||
if (resizedTitle) {
|
if (resizedTitle) {
|
||||||
@@ -467,7 +475,8 @@ BColumnTitle::InColumnResizeArea(BPoint where) const
|
|||||||
BRect
|
BRect
|
||||||
BColumnTitle::Bounds() const
|
BColumnTitle::Bounds() const
|
||||||
{
|
{
|
||||||
BRect bounds(fColumn->Offset() - kTitleColumnLeftExtraMargin, 0, 0, kTitleViewHeight);
|
BRect bounds(fColumn->Offset() - kTitleColumnLeftExtraMargin, 0, 0,
|
||||||
|
kTitleViewHeight);
|
||||||
bounds.right = bounds.left + fColumn->Width() + kTitleColumnExtraMargin;
|
bounds.right = bounds.left + fColumn->Width() + kTitleColumnExtraMargin;
|
||||||
|
|
||||||
return bounds;
|
return bounds;
|
||||||
@@ -512,7 +521,8 @@ BColumnTitle::Draw(BView* view, bool pressed)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case B_ALIGN_RIGHT:
|
case B_ALIGN_RIGHT:
|
||||||
loc.x = bounds.right - resultingWidth - kTitleColumnRightExtraMargin;
|
loc.x = bounds.right - resultingWidth
|
||||||
|
- kTitleColumnRightExtraMargin;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -520,8 +530,10 @@ BColumnTitle::Draw(BView* view, bool pressed)
|
|||||||
view->DrawString(titleString.String(), loc);
|
view->DrawString(titleString.String(), loc);
|
||||||
|
|
||||||
// show sort columns
|
// show sort columns
|
||||||
bool secondary = (fColumn->AttrHash() == fParent->PoseView()->SecondarySort());
|
bool secondary
|
||||||
if (secondary || (fColumn->AttrHash() == fParent->PoseView()->PrimarySort())) {
|
= (fColumn->AttrHash() == fParent->PoseView()->SecondarySort());
|
||||||
|
if (secondary
|
||||||
|
|| (fColumn->AttrHash() == fParent->PoseView()->PrimarySort())) {
|
||||||
|
|
||||||
BPoint center(loc.x - 6, roundf((bounds.top + bounds.bottom) / 2.0));
|
BPoint center(loc.x - 6, roundf((bounds.top + bounds.bottom) / 2.0));
|
||||||
BPoint triangle[3];
|
BPoint triangle[3];
|
||||||
@@ -539,10 +551,12 @@ BColumnTitle::Draw(BView* view, bool pressed)
|
|||||||
view->SetFlags(flags | B_SUBPIXEL_PRECISE);
|
view->SetFlags(flags | B_SUBPIXEL_PRECISE);
|
||||||
|
|
||||||
if (secondary) {
|
if (secondary) {
|
||||||
view->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), 1.3));
|
view->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||||
|
1.3));
|
||||||
view->FillTriangle(triangle[0], triangle[1], triangle[2]);
|
view->FillTriangle(triangle[0], triangle[1], triangle[2]);
|
||||||
} else {
|
} else {
|
||||||
view->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), 1.6));
|
view->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||||
|
1.6));
|
||||||
view->FillTriangle(triangle[0], triangle[1], triangle[2]);
|
view->FillTriangle(triangle[0], triangle[1], triangle[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -626,7 +640,8 @@ ColumnResizeState::ColumnResizeState(BTitleView* view, BColumnTitle* title,
|
|||||||
BPoint where, bigtime_t pastClickTime)
|
BPoint where, bigtime_t pastClickTime)
|
||||||
: ColumnTrackState(view, title, where, pastClickTime),
|
: ColumnTrackState(view, title, where, pastClickTime),
|
||||||
fLastLineDrawPos(-1),
|
fLastLineDrawPos(-1),
|
||||||
fInitialTrackOffset((title->fColumn->Offset() + title->fColumn->Width()) - where.x)
|
fInitialTrackOffset((title->fColumn->Offset() + title->fColumn->Width())
|
||||||
|
- where.x)
|
||||||
{
|
{
|
||||||
DrawLine();
|
DrawLine();
|
||||||
}
|
}
|
||||||
@@ -635,7 +650,8 @@ ColumnResizeState::ColumnResizeState(BTitleView* view, BColumnTitle* title,
|
|||||||
bool
|
bool
|
||||||
ColumnResizeState::ValueChanged(BPoint where)
|
ColumnResizeState::ValueChanged(BPoint where)
|
||||||
{
|
{
|
||||||
float newWidth = where.x + fInitialTrackOffset - fTitle->fColumn->Offset();
|
float newWidth = where.x + fInitialTrackOffset
|
||||||
|
- fTitle->fColumn->Offset();
|
||||||
if (newWidth < kMinColumnWidth)
|
if (newWidth < kMinColumnWidth)
|
||||||
newWidth = kMinColumnWidth;
|
newWidth = kMinColumnWidth;
|
||||||
|
|
||||||
@@ -646,7 +662,8 @@ ColumnResizeState::ValueChanged(BPoint where)
|
|||||||
void
|
void
|
||||||
ColumnResizeState::Moved(BPoint where, uint32)
|
ColumnResizeState::Moved(BPoint where, uint32)
|
||||||
{
|
{
|
||||||
float newWidth = where.x + fInitialTrackOffset - fTitle->fColumn->Offset();
|
float newWidth = where.x + fInitialTrackOffset
|
||||||
|
- fTitle->fColumn->Offset();
|
||||||
if (newWidth < kMinColumnWidth)
|
if (newWidth < kMinColumnWidth)
|
||||||
newWidth = kMinColumnWidth;
|
newWidth = kMinColumnWidth;
|
||||||
|
|
||||||
@@ -692,7 +709,8 @@ ColumnResizeState::DrawLine()
|
|||||||
fLastLineDrawPos = poseViewBounds.left;
|
fLastLineDrawPos = poseViewBounds.left;
|
||||||
|
|
||||||
// draw the line in the new location
|
// draw the line in the new location
|
||||||
_DrawLine(poseView, poseViewBounds.LeftTop(), poseViewBounds.LeftBottom());
|
_DrawLine(poseView, poseViewBounds.LeftTop(),
|
||||||
|
poseViewBounds.LeftBottom());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -740,7 +758,8 @@ ColumnDragState::Moved(BPoint where, uint32)
|
|||||||
? fTitleView->FindColumnTitle(where) : 0;
|
? fTitleView->FindColumnTitle(where) : 0;
|
||||||
BRect titleBoundsWithMargin(titleBounds);
|
BRect titleBoundsWithMargin(titleBounds);
|
||||||
titleBoundsWithMargin.InsetBy(0, -kRemoveTitleMargin);
|
titleBoundsWithMargin.InsetBy(0, -kRemoveTitleMargin);
|
||||||
bool inMarginRect = overTitleView || titleBoundsWithMargin.Contains(where);
|
bool inMarginRect = overTitleView
|
||||||
|
|| titleBoundsWithMargin.Contains(where);
|
||||||
|
|
||||||
bool drawOutline = false;
|
bool drawOutline = false;
|
||||||
bool undrawOutline = false;
|
bool undrawOutline = false;
|
||||||
@@ -773,7 +792,8 @@ ColumnDragState::Moved(BPoint where, uint32)
|
|||||||
fColumnArchive.Seek(0, SEEK_SET);
|
fColumnArchive.Seek(0, SEEK_SET);
|
||||||
fTitle->Column()->ArchiveToStream(&fColumnArchive);
|
fTitle->Column()->ArchiveToStream(&fColumnArchive);
|
||||||
fInitialMouseTrackOffset -= fTitle->Bounds().left;
|
fInitialMouseTrackOffset -= fTitle->Bounds().left;
|
||||||
if (fTitleView->PoseView()->RemoveColumn(fTitle->Column(), false)) {
|
if (fTitleView->PoseView()->RemoveColumn(fTitle->Column(),
|
||||||
|
false)) {
|
||||||
fTitle = 0;
|
fTitle = 0;
|
||||||
fTitleView->BeginRectTracking(rect);
|
fTitleView->BeginRectTracking(rect);
|
||||||
fTrackingRemovedColumn = true;
|
fTrackingRemovedColumn = true;
|
||||||
@@ -783,8 +803,10 @@ ColumnDragState::Moved(BPoint where, uint32)
|
|||||||
// over a different column
|
// over a different column
|
||||||
&& (overTitle->Bounds().left >= fTitle->Bounds().right
|
&& (overTitle->Bounds().left >= fTitle->Bounds().right
|
||||||
// over the one to the right
|
// over the one to the right
|
||||||
|| where.x < overTitle->Bounds().left + fTitle->Bounds().Width())){
|
|| where.x < overTitle->Bounds().left
|
||||||
// over the one to the left, far enough to not snap right back
|
+ fTitle->Bounds().Width())) {
|
||||||
|
// over the one to the left, far enough to not snap
|
||||||
|
// right back
|
||||||
|
|
||||||
BColumn* column = fTitle->Column();
|
BColumn* column = fTitle->Column();
|
||||||
fInitialMouseTrackOffset -= fTitle->Bounds().left;
|
fInitialMouseTrackOffset -= fTitle->Bounds().left;
|
||||||
@@ -873,7 +895,8 @@ ColumnDragState::DrawOutline(float pos)
|
|||||||
{
|
{
|
||||||
BRect outline(fTitle->Bounds());
|
BRect outline(fTitle->Bounds());
|
||||||
outline.OffsetBy(pos, 0);
|
outline.OffsetBy(pos, 0);
|
||||||
fTitleView->Draw(fTitleView->Bounds(), true, false, fTitle, _DrawOutline, outline);
|
fTitleView->Draw(fTitleView->Bounds(), true, false, fTitle, _DrawOutline,
|
||||||
|
outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -160,8 +160,8 @@ InitIconPreloader()
|
|||||||
if (IconCache::sIconCache != NULL)
|
if (IconCache::sIconCache != NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// only start the node preloader if its Tracker or the Deskbar itself - don't
|
// only start the node preloader if its Tracker or the Deskbar itself,
|
||||||
// start it for file panels
|
// don't start it for file panels
|
||||||
|
|
||||||
bool preload = dynamic_cast<TTracker*>(be_app) != NULL;
|
bool preload = dynamic_cast<TTracker*>(be_app) != NULL;
|
||||||
if (!preload) {
|
if (!preload) {
|
||||||
@@ -171,8 +171,11 @@ InitIconPreloader()
|
|||||||
&& !strcmp(info.signature, kDeskbarSignature))
|
&& !strcmp(info.signature, kDeskbarSignature))
|
||||||
preload = true;
|
preload = true;
|
||||||
}
|
}
|
||||||
if (preload)
|
|
||||||
gPreloader = NodePreloader::InstallNodePreloader("NodePreloader", be_app);
|
if (preload) {
|
||||||
|
gPreloader = NodePreloader::InstallNodePreloader("NodePreloader",
|
||||||
|
be_app);
|
||||||
|
}
|
||||||
|
|
||||||
IconCache::sIconCache = new IconCache();
|
IconCache::sIconCache = new IconCache();
|
||||||
|
|
||||||
@@ -245,7 +248,8 @@ TTracker::TTracker()
|
|||||||
SetMallocLeakChecking(true);
|
SetMallocLeakChecking(true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//This is how often it should update the free space bar on the volume icons
|
// This is how often it should update the free space bar on the
|
||||||
|
// volume icons
|
||||||
SetPulseRate(1000000);
|
SetPulseRate(1000000);
|
||||||
|
|
||||||
gLaunchLooper = new LaunchLooper();
|
gLaunchLooper = new LaunchLooper();
|
||||||
@@ -302,25 +306,33 @@ TTracker::QuitRequested()
|
|||||||
BEntry entry;
|
BEntry entry;
|
||||||
BPath path;
|
BPath path;
|
||||||
const entry_ref* ref = window->TargetModel()->EntryRef();
|
const entry_ref* ref = window->TargetModel()->EntryRef();
|
||||||
if (entry.SetTo(ref) == B_OK && entry.GetPath(&path) == B_OK) {
|
if (entry.SetTo(ref) == B_OK
|
||||||
int8 flags = window->IsMinimized() ? kOpenWindowMinimized : kOpenWindowNoFlags;
|
&& entry.GetPath(&path) == B_OK) {
|
||||||
uint32 deviceFlags = GetVolumeFlags(window->TargetModel());
|
int8 flags = window->IsMinimized()
|
||||||
|
? kOpenWindowMinimized : kOpenWindowNoFlags;
|
||||||
|
uint32 deviceFlags
|
||||||
|
= GetVolumeFlags(window->TargetModel());
|
||||||
|
|
||||||
// save state for every window which is
|
// save state for every window which is
|
||||||
// a) already open on another workspace
|
// a) already open on another workspace
|
||||||
// b) on a volume not capable of writing attributes
|
// b) on a volume not capable of writing attributes
|
||||||
if (window != FindContainerWindow(ref)
|
if (window != FindContainerWindow(ref)
|
||||||
|| (deviceFlags & (B_FS_HAS_ATTR | B_FS_IS_READONLY)) != B_FS_HAS_ATTR) {
|
|| (deviceFlags
|
||||||
|
& (B_FS_HAS_ATTR | B_FS_IS_READONLY))
|
||||||
|
!= B_FS_HAS_ATTR) {
|
||||||
BMessage stateMessage;
|
BMessage stateMessage;
|
||||||
window->SaveState(stateMessage);
|
window->SaveState(stateMessage);
|
||||||
window->SetSaveStateEnabled(false);
|
window->SetSaveStateEnabled(false);
|
||||||
// This is to prevent its state to be saved to the node when closed.
|
// This is to prevent its state to be saved
|
||||||
|
// to the node when closed.
|
||||||
message.AddMessage("window state", &stateMessage);
|
message.AddMessage("window state", &stateMessage);
|
||||||
flags |= kOpenWindowHasState;
|
flags |= kOpenWindowHasState;
|
||||||
}
|
}
|
||||||
const char* target;
|
const char* target;
|
||||||
bool pathAlreadyExists = false;
|
bool pathAlreadyExists = false;
|
||||||
for (int32 index = 0;message.FindString("paths", index, &target) == B_OK;index++) {
|
for (int32 index = 0;
|
||||||
|
message.FindString("paths", index, &target)
|
||||||
|
== B_OK; index++) {
|
||||||
if (!strcmp(target,path.Path())) {
|
if (!strcmp(target,path.Path())) {
|
||||||
pathAlreadyExists = true;
|
pathAlreadyExists = true;
|
||||||
break;
|
break;
|
||||||
@@ -345,7 +357,8 @@ TTracker::QuitRequested()
|
|||||||
size_t size = (size_t)message.FlattenedSize();
|
size_t size = (size_t)message.FlattenedSize();
|
||||||
char* buffer = new char[size];
|
char* buffer = new char[size];
|
||||||
message.Flatten(buffer, (ssize_t)size);
|
message.Flatten(buffer, (ssize_t)size);
|
||||||
deskDir.WriteAttr(kAttrOpenWindows, B_MESSAGE_TYPE, 0, buffer, size);
|
deskDir.WriteAttr(kAttrOpenWindows, B_MESSAGE_TYPE, 0, buffer,
|
||||||
|
size);
|
||||||
delete [] buffer;
|
delete [] buffer;
|
||||||
} else
|
} else
|
||||||
deskDir.RemoveAttr(kAttrOpenWindows);
|
deskDir.RemoveAttr(kAttrOpenWindows);
|
||||||
@@ -446,8 +459,8 @@ TTracker::MessageReceived(BMessage* message)
|
|||||||
// Someone (probably the deskbar) has requested a list of
|
// Someone (probably the deskbar) has requested a list of
|
||||||
// mountable volumes.
|
// mountable volumes.
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
AutoMounterLoop()->EachMountableItemAndFloppy(&AddMountableItemToMessage,
|
AutoMounterLoop()->EachMountableItemAndFloppy(
|
||||||
&reply);
|
&AddMountableItemToMessage, &reply);
|
||||||
message->SendReply(&reply);
|
message->SendReply(&reply);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -550,7 +563,8 @@ TTracker::SetDefaultPrinter(const BMessage* message)
|
|||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// will make the first item the default printer, disregards any other files
|
// will make the first item the default printer, disregards any
|
||||||
|
// other files
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
ASSERT(message->FindRef("refs", 0, &ref) == B_OK);
|
ASSERT(message->FindRef("refs", 0, &ref) == B_OK);
|
||||||
if (message->FindRef("refs", 0, &ref) != B_OK)
|
if (message->FindRef("refs", 0, &ref) != B_OK)
|
||||||
@@ -610,10 +624,12 @@ TTracker::MoveRefsToTrash(const BMessage* message)
|
|||||||
|
|
||||||
|
|
||||||
template <class T, class FT>
|
template <class T, class FT>
|
||||||
class EntryAndNodeDoSoonWithMessageFunctor : public FunctionObjectWithResult<bool> {
|
class EntryAndNodeDoSoonWithMessageFunctor : public
|
||||||
|
FunctionObjectWithResult<bool> {
|
||||||
public:
|
public:
|
||||||
EntryAndNodeDoSoonWithMessageFunctor(FT func, T* target, const entry_ref* child,
|
EntryAndNodeDoSoonWithMessageFunctor(FT func, T* target,
|
||||||
const node_ref* parent, const BMessage* message)
|
const entry_ref* child, const node_ref* parent,
|
||||||
|
const BMessage* message)
|
||||||
: fFunc(func),
|
: fFunc(func),
|
||||||
fTarget(target),
|
fTarget(target),
|
||||||
fNode(*parent),
|
fNode(*parent),
|
||||||
@@ -625,8 +641,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ~EntryAndNodeDoSoonWithMessageFunctor() {}
|
virtual ~EntryAndNodeDoSoonWithMessageFunctor() {}
|
||||||
virtual void operator()()
|
virtual void operator()() {
|
||||||
{ result = (fTarget->*fFunc)(&fEntry, &fNode, fSendMessage ? &fMessage : NULL); }
|
result = (fTarget->*fFunc)(&fEntry, &fNode,
|
||||||
|
fSendMessage ? &fMessage : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FT fFunc;
|
FT fFunc;
|
||||||
@@ -651,8 +669,8 @@ TTracker::LaunchAndCloseParentIfOK(const entry_ref* launchThis,
|
|||||||
// synchronous launch, we are already in our own thread
|
// synchronous launch, we are already in our own thread
|
||||||
if (TrackerLaunch(&refsReceived, false) == B_OK) {
|
if (TrackerLaunch(&refsReceived, false) == B_OK) {
|
||||||
// if launched fine, close parent window in a bit
|
// if launched fine, close parent window in a bit
|
||||||
fTaskLoop->RunLater(NewMemberFunctionObject(&TTracker::CloseParent, this, *closeThis),
|
fTaskLoop->RunLater(NewMemberFunctionObject(&TTracker::CloseParent,
|
||||||
1000000);
|
this, *closeThis), 1000000);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -674,15 +692,18 @@ TTracker::OpenRef(const entry_ref* ref, const node_ref* nodeToClose,
|
|||||||
model = new Model(ref, false);
|
model = new Model(ref, false);
|
||||||
if (model->IsSymLink() && !model->LinkTo()) {
|
if (model->IsSymLink() && !model->LinkTo()) {
|
||||||
model->GetPreferredAppForBrokenSymLink(brokenLinkPreferredApp);
|
model->GetPreferredAppForBrokenSymLink(brokenLinkPreferredApp);
|
||||||
if (brokenLinkPreferredApp.Length() && brokenLinkPreferredApp != kTrackerSignature)
|
if (brokenLinkPreferredApp.Length()
|
||||||
|
&& brokenLinkPreferredApp != kTrackerSignature) {
|
||||||
brokenLinkWithSpecificHandler = true;
|
brokenLinkWithSpecificHandler = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!brokenLinkWithSpecificHandler) {
|
if (!brokenLinkWithSpecificHandler) {
|
||||||
delete model;
|
delete model;
|
||||||
BAlert* alert = new BAlert("",
|
BAlert* alert = new BAlert("",
|
||||||
B_TRANSLATE("There was an error resolving the link."),
|
B_TRANSLATE("There was an error resolving the link."),
|
||||||
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
|
B_TRANSLATE("Cancel"), 0, 0, B_WIDTH_AS_USUAL,
|
||||||
|
B_WARNING_ALERT);
|
||||||
alert->SetShortcut(0, B_ESCAPE);
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
alert->Go();
|
alert->Go();
|
||||||
return result;
|
return result;
|
||||||
@@ -715,7 +736,8 @@ TTracker::OpenRef(const entry_ref* ref, const node_ref* nodeToClose,
|
|||||||
|
|
||||||
if (openAsContainer || selector == kRunOpenWithWindow) {
|
if (openAsContainer || selector == kRunOpenWithWindow) {
|
||||||
// special case opening plain folders, queries or using open with
|
// special case opening plain folders, queries or using open with
|
||||||
OpenContainerWindow(model, 0, selector, kRestoreDecor); // window adopts model
|
OpenContainerWindow(model, 0, selector, kRestoreDecor);
|
||||||
|
// window adopts model
|
||||||
if (nodeToClose)
|
if (nodeToClose)
|
||||||
CloseParentWaitingForChildSoon(ref, nodeToClose);
|
CloseParentWaitingForChildSoon(ref, nodeToClose);
|
||||||
} else if (model->IsQueryTemplate()) {
|
} else if (model->IsQueryTemplate()) {
|
||||||
@@ -742,8 +764,9 @@ TTracker::OpenRef(const entry_ref* ref, const node_ref* nodeToClose,
|
|||||||
}
|
}
|
||||||
refsReceived.AddRef("refs", ref);
|
refsReceived.AddRef("refs", ref);
|
||||||
if (brokenLinkWithSpecificHandler)
|
if (brokenLinkWithSpecificHandler)
|
||||||
// This cruft is to support a hacky workaround for double-clicking
|
// This cruft is to support a hacky workaround for
|
||||||
// broken refs for cifs; should get fixed in R5
|
// double-clicking broken refs for cifs; should get fixed
|
||||||
|
// in R5
|
||||||
LaunchBrokenLink(brokenLinkPreferredApp.String(), &refsReceived);
|
LaunchBrokenLink(brokenLinkPreferredApp.String(), &refsReceived);
|
||||||
else
|
else
|
||||||
TrackerLaunch(&refsReceived, true);
|
TrackerLaunch(&refsReceived, true);
|
||||||
@@ -779,13 +802,13 @@ TTracker::RefsReceived(BMessage* message)
|
|||||||
|
|
||||||
case kOpenWith:
|
case kOpenWith:
|
||||||
{
|
{
|
||||||
// Open With resulted in passing refs and a handler, open the files
|
// Open With resulted in passing refs and a handler,
|
||||||
// with the handling app
|
// open the files with the handling app
|
||||||
message->RemoveName("handler");
|
message->RemoveName("handler");
|
||||||
|
|
||||||
// have to find out if handling app is the Tracker
|
// have to find out if handling app is the Tracker
|
||||||
// if it is, just pass it to the active Tracker, no matter which Tracker
|
// if it is, just pass it to the active Tracker,
|
||||||
// was chosen to handle the refs
|
// no matter which Tracker was chosen to handle the refs
|
||||||
char signature[B_MIME_TYPE_LENGTH];
|
char signature[B_MIME_TYPE_LENGTH];
|
||||||
signature[0] = '\0';
|
signature[0] = '\0';
|
||||||
{
|
{
|
||||||
@@ -795,20 +818,21 @@ TTracker::RefsReceived(BMessage* message)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(signature, kTrackerSignature) != 0) {
|
if (strcasecmp(signature, kTrackerSignature) != 0) {
|
||||||
// handling app not Tracker, pass entries to the apps RefsReceived
|
// handling app not Tracker, pass entries to the apps
|
||||||
|
// RefsReceived
|
||||||
TrackerLaunch(&handlingApp, message, true);
|
TrackerLaunch(&handlingApp, message, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// fall thru, opening refs by the Tracker, as if they were double clicked
|
} // fall thru, opening refs by the Tracker as if they were
|
||||||
}
|
// double-clicked
|
||||||
|
|
||||||
case kOpen:
|
case kOpen:
|
||||||
{
|
{
|
||||||
// copy over "Poses" messenger so that refs received recipients know
|
// copy over "Poses" messenger so that refs received
|
||||||
// where the open came from
|
// recipients know where the open came from
|
||||||
BMessage* bundleThis = NULL;
|
BMessage* bundleThis = NULL;
|
||||||
BMessenger messenger;
|
BMessenger messenger;
|
||||||
if (message->FindMessenger("TrackerViewToken", &messenger) == B_OK) {
|
if (message->FindMessenger("TrackerViewToken", &messenger)
|
||||||
|
== B_OK) {
|
||||||
bundleThis = new BMessage();
|
bundleThis = new BMessage();
|
||||||
bundleThis->AddMessenger("TrackerViewToken", messenger);
|
bundleThis->AddMessenger("TrackerViewToken", messenger);
|
||||||
}
|
}
|
||||||
@@ -826,7 +850,8 @@ TTracker::RefsReceived(BMessage* message)
|
|||||||
message->FindData("nodeRefToSelect", B_RAW_TYPE, index,
|
message->FindData("nodeRefToSelect", B_RAW_TYPE, index,
|
||||||
(const void**)&nodeToSelect, &numBytes);
|
(const void**)&nodeToSelect, &numBytes);
|
||||||
|
|
||||||
OpenRef(&ref, nodeToClose, nodeToSelect, selector, bundleThis);
|
OpenRef(&ref, nodeToClose, nodeToSelect, selector,
|
||||||
|
bundleThis);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete bundleThis;
|
delete bundleThis;
|
||||||
@@ -1104,8 +1129,8 @@ TTracker::QueryActiveForDevice(dev_t device)
|
|||||||
void
|
void
|
||||||
TTracker::CloseActiveQueryWindows(dev_t device)
|
TTracker::CloseActiveQueryWindows(dev_t device)
|
||||||
{
|
{
|
||||||
// used when trying to unmount a volume - an active query would prevent that from
|
// used when trying to unmount a volume - an active query would prevent
|
||||||
// happening
|
// that from happening
|
||||||
bool closed = false;
|
bool closed = false;
|
||||||
AutoLock<WindowList> lock(fWindowList);
|
AutoLock<WindowList> lock(fWindowList);
|
||||||
for (int32 index = fWindowList.CountItems(); index >= 0; index--) {
|
for (int32 index = fWindowList.CountItems(); index >= 0; index--) {
|
||||||
@@ -1136,7 +1161,8 @@ TTracker::SaveAllPoseLocations()
|
|||||||
int32 numWindows = fWindowList.CountItems();
|
int32 numWindows = fWindowList.CountItems();
|
||||||
for (int32 windowIndex = 0; windowIndex < numWindows; windowIndex++) {
|
for (int32 windowIndex = 0; windowIndex < numWindows; windowIndex++) {
|
||||||
BContainerWindow* window
|
BContainerWindow* window
|
||||||
= dynamic_cast<BContainerWindow*>(fWindowList.ItemAt(windowIndex));
|
= dynamic_cast<BContainerWindow*>
|
||||||
|
(fWindowList.ItemAt(windowIndex));
|
||||||
|
|
||||||
if (window) {
|
if (window) {
|
||||||
AutoLock<BWindow> lock(window);
|
AutoLock<BWindow> lock(window);
|
||||||
@@ -1281,9 +1307,10 @@ TTracker::_OpenPreviouslyOpenedWindows(const char* pathFilter)
|
|||||||
BMessage state;
|
BMessage state;
|
||||||
bool restoreStateFromMessage = false;
|
bool restoreStateFromMessage = false;
|
||||||
if ((flags & kOpenWindowHasState) != 0
|
if ((flags & kOpenWindowHasState) != 0
|
||||||
&& message.FindMessage("window state", stateMessageCounter++,
|
&& message.FindMessage("window state",
|
||||||
&state) == B_OK)
|
stateMessageCounter++, &state) == B_OK) {
|
||||||
restoreStateFromMessage = true;
|
restoreStateFromMessage = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (restoreStateFromMessage) {
|
if (restoreStateFromMessage) {
|
||||||
OpenContainerWindow(model, 0, kOpen, kRestoreWorkspace
|
OpenContainerWindow(model, 0, kOpen, kRestoreWorkspace
|
||||||
@@ -1356,7 +1383,8 @@ TTracker::ReadyToRun()
|
|||||||
message.AddInt32("opcode", B_ENTRY_CREATED);
|
message.AddInt32("opcode", B_ENTRY_CREATED);
|
||||||
message.AddInt32("device", model.NodeRef()->device);
|
message.AddInt32("device", model.NodeRef()->device);
|
||||||
message.AddInt64("node", model.NodeRef()->node);
|
message.AddInt64("node", model.NodeRef()->node);
|
||||||
message.AddInt64("directory", model.EntryRef()->directory);
|
message.AddInt64("directory",
|
||||||
|
model.EntryRef()->directory);
|
||||||
message.AddString("name", model.EntryRef()->name);
|
message.AddString("name", model.EntryRef()->name);
|
||||||
deskWindow->PostMessage(&message, deskWindow->PoseView());
|
deskWindow->PostMessage(&message, deskWindow->PoseView());
|
||||||
}
|
}
|
||||||
@@ -1426,9 +1454,10 @@ TTracker::CloseParentWaitingForChild(const entry_ref* child,
|
|||||||
AutoLock<WindowList> lock(&fWindowList);
|
AutoLock<WindowList> lock(&fWindowList);
|
||||||
|
|
||||||
BContainerWindow* parentWindow = FindContainerWindow(parent);
|
BContainerWindow* parentWindow = FindContainerWindow(parent);
|
||||||
if (!parentWindow)
|
if (!parentWindow) {
|
||||||
// parent window already closed, give up
|
// parent window already closed, give up
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// If child is a symbolic link, dereference it, so that
|
// If child is a symbolic link, dereference it, so that
|
||||||
// FindContainerWindow will succeed.
|
// FindContainerWindow will succeed.
|
||||||
|
|||||||
+14
-10
@@ -137,8 +137,10 @@ class TTracker : public BApplication {
|
|||||||
|
|
||||||
void ShowSettingsWindow();
|
void ShowSettingsWindow();
|
||||||
|
|
||||||
BContainerWindow* FindContainerWindow(const node_ref*, int32 number = 0) const;
|
BContainerWindow* FindContainerWindow(const node_ref*,
|
||||||
BContainerWindow* FindContainerWindow(const entry_ref*, int32 number = 0) const;
|
int32 number = 0) const;
|
||||||
|
BContainerWindow* FindContainerWindow(const entry_ref*,
|
||||||
|
int32 number = 0) const;
|
||||||
BContainerWindow* FindParentContainerWindow(const entry_ref*) const;
|
BContainerWindow* FindParentContainerWindow(const entry_ref*) const;
|
||||||
// right now works just on plain windows, not on query windows
|
// right now works just on plain windows, not on query windows
|
||||||
|
|
||||||
@@ -176,12 +178,12 @@ class TTracker : public BApplication {
|
|||||||
bool InstallMimeIfNeeded(const char* type, int32 bitsID,
|
bool InstallMimeIfNeeded(const char* type, int32 bitsID,
|
||||||
const char* shortDescription, const char* longDescription,
|
const char* shortDescription, const char* longDescription,
|
||||||
const char* preferredAppSignature, uint32 forceMask = 0);
|
const char* preferredAppSignature, uint32 forceMask = 0);
|
||||||
// used by InitMimeTypes - checks if a metamime of a given <type> is
|
// used by InitMimeTypes - checks if a metamime of a given <type>
|
||||||
// installed and if it has all the specified attributes; if not, the
|
// is installed and if it has all the specified attributes;
|
||||||
// whole mime type is installed and all attributes are set; nulls can
|
// if not, the whole mime type is installed and all attributes
|
||||||
// be passed for attributes that don't matter; returns true if anything
|
// are set; nulls can be passed for attributes that don't matter;
|
||||||
// had to be changed
|
// returns true if anything had to be changed <forceMask> can be
|
||||||
// <forceMask> can be used to forcibly set a metamime attribute, even if it exists
|
// used to forcibly set a metamime attribute, even if it exists
|
||||||
|
|
||||||
void InstallDefaultTemplates();
|
void InstallDefaultTemplates();
|
||||||
void InstallTemporaryBackgroundImages();
|
void InstallTemporaryBackgroundImages();
|
||||||
@@ -196,7 +198,8 @@ class TTracker : public BApplication {
|
|||||||
void MoveRefsToTrash(const BMessage*);
|
void MoveRefsToTrash(const BMessage*);
|
||||||
void OpenContainerWindow(Model*, BMessage* refsList = NULL,
|
void OpenContainerWindow(Model*, BMessage* refsList = NULL,
|
||||||
OpenSelector openSelector = kOpen, uint32 openFlags = 0,
|
OpenSelector openSelector = kOpen, uint32 openFlags = 0,
|
||||||
bool checkAlreadyOpen = true, const BMessage* stateMessage = NULL);
|
bool checkAlreadyOpen = true,
|
||||||
|
const BMessage* stateMessage = NULL);
|
||||||
// pass either a Model or a list of entries to open
|
// pass either a Model or a list of entries to open
|
||||||
void _OpenPreviouslyOpenedWindows(const char* pathFilter = NULL);
|
void _OpenPreviouslyOpenedWindows(const char* pathFilter = NULL);
|
||||||
|
|
||||||
@@ -208,7 +211,8 @@ class TTracker : public BApplication {
|
|||||||
BDeskWindow* GetDeskWindow() const;
|
BDeskWindow* GetDeskWindow() const;
|
||||||
|
|
||||||
status_t OpenRef(const entry_ref*, const node_ref* nodeToClose = NULL,
|
status_t OpenRef(const entry_ref*, const node_ref* nodeToClose = NULL,
|
||||||
const node_ref* nodeToSelect = NULL, OpenSelector selector = kOpen,
|
const node_ref* nodeToSelect = NULL,
|
||||||
|
OpenSelector selector = kOpen,
|
||||||
const BMessage* messageToBundle = NULL);
|
const BMessage* messageToBundle = NULL);
|
||||||
|
|
||||||
MimeTypeList* fMimeTypeList;
|
MimeTypeList* fMimeTypeList;
|
||||||
|
|||||||
@@ -94,15 +94,16 @@ const char* kPeopleSignature = "application/x-vnd.Be-PEPL";
|
|||||||
// the following templates are in big endian and we rely on the Tracker
|
// the following templates are in big endian and we rely on the Tracker
|
||||||
// translation support to swap them on little endian machines
|
// translation support to swap them on little endian machines
|
||||||
//
|
//
|
||||||
// in case there is an attribute (B_RECT_TYPE) that gets swapped by the media (unzip,
|
// in case there is an attribute (B_RECT_TYPE) that gets swapped by the media
|
||||||
// file system endianness swapping, etc., the correct endianness for the
|
// (unzip, file system endianness swapping, etc., the correct endianness for
|
||||||
// correct machine has to be used here
|
// the correct machine has to be used here
|
||||||
|
|
||||||
const BRect kDefaultFrame(40, 40, 695, 350);
|
const BRect kDefaultFrame(40, 40, 695, 350);
|
||||||
const int32 kDefaultQueryTemplateCount = 3;
|
const int32 kDefaultQueryTemplateCount = 3;
|
||||||
|
|
||||||
const AttributeTemplate kDefaultQueryTemplate[] =
|
const AttributeTemplate kDefaultQueryTemplate[] =
|
||||||
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_octet-stream */
|
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
|
||||||
|
application_octet-stream */
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// default frame
|
// default frame
|
||||||
@@ -117,8 +118,8 @@ const AttributeTemplate kDefaultQueryTemplate[] =
|
|||||||
B_RAW_TYPE,
|
B_RAW_TYPE,
|
||||||
49,
|
49,
|
||||||
"o^\365R\000\000\000\012Tlst\000\000\000\000\000\000\000\000\000\000"
|
"o^\365R\000\000\000\012Tlst\000\000\000\000\000\000\000\000\000\000"
|
||||||
"\000\000\000\000\000\000\000\000\000\000\357\323\335RCSTR\000\000\000"
|
"\000\000\000\000\000\000\000\000\000\000\357\323\335RCSTR\000\000"
|
||||||
"\000\000\000\000\000\000"
|
"\000\000\000\000\000\000\000"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// attr: _trk/columns
|
// attr: _trk/columns
|
||||||
@@ -138,7 +139,8 @@ const AttributeTemplate kDefaultQueryTemplate[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
const AttributeTemplate kBookmarkQueryTemplate[] =
|
const AttributeTemplate kBookmarkQueryTemplate[] =
|
||||||
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark */
|
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
|
||||||
|
application_x-vnd.Be-bookmark */
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// default frame
|
// default frame
|
||||||
@@ -163,16 +165,17 @@ const AttributeTemplate kBookmarkQueryTemplate[] =
|
|||||||
163,
|
163,
|
||||||
"O\362VR\000\000\000\025\000\000\000\005Title\000B \000\000C+\000\000"
|
"O\362VR\000\000\000\025\000\000\000\005Title\000B \000\000C+\000\000"
|
||||||
"\000\000\000\000\000\000\000\012META:title\000w\373\175RCSTR\000\001"
|
"\000\000\000\000\000\000\000\012META:title\000w\373\175RCSTR\000\001"
|
||||||
"O\362VR\000\000\000\025\000\000\000\003URL\000Cb\000\000C\217\200\000"
|
"O\362VR\000\000\000\025\000\000\000\003URL\000Cb\000\000C\217\200"
|
||||||
"\000\000\000\000\000\000\000\010META:url\000\343[TRCSTR\000\001O\362"
|
"\000\000\000\000\000\000\000\000\010META:url\000\343[TRCSTR\000\001O"
|
||||||
"VR\000\000\000\025\000\000\000\010Keywords\000D\004\000\000C\002\000"
|
"\362VR\000\000\000\025\000\000\000\010Keywords\000D\004\000\000C\002"
|
||||||
"\000\000\000\000\000\000\000\000\011META:keyw\000\333\363\334RCSTR"
|
"\000\000\000\000\000\000\000\000\000\011META:keyw\000\333\363\334"
|
||||||
"\000\001"
|
"RCSTR\000\001"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const AttributeTemplate kPersonQueryTemplate[] =
|
const AttributeTemplate kPersonQueryTemplate[] =
|
||||||
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark */
|
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
|
||||||
|
application_x-vnd.Be-bookmark */
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// default frame
|
// default frame
|
||||||
@@ -187,8 +190,8 @@ const AttributeTemplate kPersonQueryTemplate[] =
|
|||||||
B_RAW_TYPE,
|
B_RAW_TYPE,
|
||||||
49,
|
49,
|
||||||
"o^\365R\000\000\000\012Tlst\000\000\000\000\000\000\000\000\000\000"
|
"o^\365R\000\000\000\012Tlst\000\000\000\000\000\000\000\000\000\000"
|
||||||
"\000\000\000\000\000\000\000\000\000\000\357\323\335RCSTR\000\000\000"
|
"\000\000\000\000\000\000\000\000\000\000\357\323\335RCSTR\000\000"
|
||||||
"\000\000\000\000\000\000"
|
"\000\000\000\000\000\000\000"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// attr: _trk/columns
|
// attr: _trk/columns
|
||||||
@@ -201,14 +204,15 @@ const AttributeTemplate kPersonQueryTemplate[] =
|
|||||||
"\000B\264\000\000\000\000\000\000\000\000\000\013META:wphone\000C_"
|
"\000B\264\000\000\000\000\000\000\000\000\000\013META:wphone\000C_"
|
||||||
"uRCSTR\000\001O\362VR\000\000\000\025\000\000\000\006E-mail\000C\211"
|
"uRCSTR\000\001O\362VR\000\000\000\025\000\000\000\006E-mail\000C\211"
|
||||||
"\200\000B\272\000\000\000\000\000\000\000\000\000\012META:email\000"
|
"\200\000B\272\000\000\000\000\000\000\000\000\000\012META:email\000"
|
||||||
"sW\337RCSTR\000\001O\362VR\000\000\000\025\000\000\000\007Company\000"
|
"sW\337RCSTR\000\001O\362VR\000\000\000\025\000\000\000\007Company"
|
||||||
"C\277\200\000B\360\000\000\000\000\000\000\000\000\000\014META:com"
|
"\000C\277\200\000B\360\000\000\000\000\000\000\000\000\000\014"
|
||||||
"pany\000CS\174RCSTR\000\001"
|
"META:company\000CS\174RCSTR\000\001"
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const AttributeTemplate kEmailQueryTemplate[] =
|
const AttributeTemplate kEmailQueryTemplate[] =
|
||||||
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/text_x-email */
|
/* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
|
||||||
|
text_x-email */
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// default frame
|
// default frame
|
||||||
@@ -231,15 +235,15 @@ const AttributeTemplate kEmailQueryTemplate[] =
|
|||||||
kAttrColumns_be,
|
kAttrColumns_be,
|
||||||
B_RAW_TYPE,
|
B_RAW_TYPE,
|
||||||
222,
|
222,
|
||||||
"O\362VR\000\000\000\025\000\000\000\007Subject\000B \000\000B\334\000"
|
"O\362VR\000\000\000\025\000\000\000\007Subject\000B \000\000B\334"
|
||||||
"\000\000\000\000\000\000\000\000\014MAIL:subject\000\343\173\337RC"
|
"\000\000\000\000\000\000\000\000\000\014MAIL:subject\000\343\173\337"
|
||||||
"STR\000\000O\362VR\000\000\000\025\000\000\000\004From\000C%\000\000"
|
"RCSTR\000\000O\362VR\000\000\000\025\000\000\000\004From\000C%\000"
|
||||||
"C\031\000\000\000\000\000\000\000\000\000\011MAIL:from\000\317s_RC"
|
"\000C\031\000\000\000\000\000\000\000\000\000\011MAIL:from\000\317"
|
||||||
"STR\000\000O\362VR\000\000\000\025\000\000\000\004When\000C\246\200"
|
"s_RCSTR\000\000O\362VR\000\000\000\025\000\000\000\004When\000C\246"
|
||||||
"\000B\360\000\000\000\000\000\000\000\000\000\011MAIL:when\000\366"
|
"\200\000B\360\000\000\000\000\000\000\000\000\000\011MAIL:when\000"
|
||||||
"_\377ETIME\000\000O\362VR\000\000\000\025\000\000\000\006Status\000"
|
"\366_\377ETIME\000\000O\362VR\000\000\000\025\000\000\000\006Status"
|
||||||
"C\352\000\000BH\000\000\000\000\000\001\000\000\000\013MAIL:status"
|
"\000C\352\000\000BH\000\000\000\000\000\001\000\000\000\013"
|
||||||
"\000G\363\134RCSTR\000\001"
|
"MAIL:status\000G\363\134RCSTR\000\001"
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -289,8 +293,10 @@ ExtraAttributeLazyInstaller::AddExtraAttribute(const char* publicName,
|
|||||||
{
|
{
|
||||||
for (int32 index = 0; ; index++) {
|
for (int32 index = 0; ; index++) {
|
||||||
const char* oldPublicName;
|
const char* oldPublicName;
|
||||||
if (fExtraAttrs.FindString("attr:public_name", index, &oldPublicName) != B_OK)
|
if (fExtraAttrs.FindString("attr:public_name", index, &oldPublicName)
|
||||||
|
!= B_OK) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(oldPublicName, publicName) == 0)
|
if (strcmp(oldPublicName, publicName) == 0)
|
||||||
// already got this extra atribute, no work left
|
// already got this extra atribute, no work left
|
||||||
@@ -360,7 +366,8 @@ TTracker::InstallMimeIfNeeded(const char* type, int32 bitsID,
|
|||||||
// be passed for attributes that don't matter; returns true if anything
|
// be passed for attributes that don't matter; returns true if anything
|
||||||
// had to be changed
|
// had to be changed
|
||||||
|
|
||||||
BBitmap vectorIcon(BRect(0, 0, 31, 31), B_BITMAP_NO_SERVER_LINK, B_RGBA32);
|
BBitmap vectorIcon(BRect(0, 0, 31, 31), B_BITMAP_NO_SERVER_LINK,
|
||||||
|
B_RGBA32);
|
||||||
BBitmap largeIcon(BRect(0, 0, 31, 31), B_BITMAP_NO_SERVER_LINK, B_CMAP8);
|
BBitmap largeIcon(BRect(0, 0, 31, 31), B_BITMAP_NO_SERVER_LINK, B_CMAP8);
|
||||||
BBitmap miniIcon(BRect(0, 0, 15, 15), B_BITMAP_NO_SERVER_LINK, B_CMAP8);
|
BBitmap miniIcon(BRect(0, 0, 15, 15), B_BITMAP_NO_SERVER_LINK, B_CMAP8);
|
||||||
char tmp[B_MIME_TYPE_LENGTH];
|
char tmp[B_MIME_TYPE_LENGTH];
|
||||||
@@ -447,12 +454,12 @@ TTracker::InitMimeTypes()
|
|||||||
// install a couple of extra fields for bookmark
|
// install a couple of extra fields for bookmark
|
||||||
|
|
||||||
ExtraAttributeLazyInstaller installer(B_BOOKMARK_MIMETYPE);
|
ExtraAttributeLazyInstaller installer(B_BOOKMARK_MIMETYPE);
|
||||||
installer.AddExtraAttribute("URL", "META:url", B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("URL", "META:url", B_STRING_TYPE,
|
||||||
170, B_ALIGN_LEFT, false);
|
true, true, 170, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Keywords", "META:keyw", B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Keywords", "META:keyw", B_STRING_TYPE,
|
||||||
130, B_ALIGN_LEFT, false);
|
true, true, 130, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Title", "META:title", B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Title", "META:title", B_STRING_TYPE,
|
||||||
130, B_ALIGN_LEFT, false);
|
true, true, 130, B_ALIGN_LEFT, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstallMimeIfNeeded(B_PERSON_MIMETYPE, R_PersonIcon,
|
InstallMimeIfNeeded(B_PERSON_MIMETYPE, R_PersonIcon,
|
||||||
@@ -460,34 +467,34 @@ TTracker::InitMimeTypes()
|
|||||||
|
|
||||||
{
|
{
|
||||||
ExtraAttributeLazyInstaller installer(B_PERSON_MIMETYPE);
|
ExtraAttributeLazyInstaller installer(B_PERSON_MIMETYPE);
|
||||||
installer.AddExtraAttribute("Contact name", kAttrName, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Contact name", kAttrName, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Company", kAttrCompany, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Company", kAttrCompany, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Address", kAttrAddress, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Address", kAttrAddress, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("City", kAttrCity, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("City", kAttrCity, B_STRING_TYPE,
|
||||||
90, B_ALIGN_LEFT, false);
|
true, true, 90, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("State", kAttrState, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("State", kAttrState, B_STRING_TYPE,
|
||||||
50, B_ALIGN_LEFT, false);
|
true, true, 50, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Zip", kAttrZip, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Zip", kAttrZip, B_STRING_TYPE,
|
||||||
50, B_ALIGN_LEFT, false);
|
true, true, 50, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Country", kAttrCountry, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Country", kAttrCountry, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("E-mail", kAttrEmail, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("E-mail", kAttrEmail, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Home phone", kAttrHomePhone, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Home phone", kAttrHomePhone,
|
||||||
90, B_ALIGN_LEFT, false);
|
B_STRING_TYPE, true, true, 90, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Work phone", kAttrWorkPhone, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Work phone", kAttrWorkPhone,
|
||||||
90, B_ALIGN_LEFT, false);
|
B_STRING_TYPE, true, true, 90, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Fax", kAttrFax, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Fax", kAttrFax, B_STRING_TYPE,
|
||||||
90, B_ALIGN_LEFT, false);
|
true, true, 90, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("URL", kAttrURL, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("URL", kAttrURL, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Group", kAttrGroup, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Group", kAttrGroup, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Nickname", kAttrNickname, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Nickname", kAttrNickname, B_STRING_TYPE,
|
||||||
120, B_ALIGN_LEFT, false);
|
true, true, 120, B_ALIGN_LEFT, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstallMimeIfNeeded(B_PRINTER_SPOOL_MIMETYPE, R_SpoolFileIcon,
|
InstallMimeIfNeeded(B_PRINTER_SPOOL_MIMETYPE, R_SpoolFileIcon,
|
||||||
@@ -496,43 +503,49 @@ TTracker::InitMimeTypes()
|
|||||||
{
|
{
|
||||||
#if B_BEOS_VERSION_DANO
|
#if B_BEOS_VERSION_DANO
|
||||||
ExtraAttributeLazyInstaller installer(B_PRINTER_SPOOL_MIMETYPE);
|
ExtraAttributeLazyInstaller installer(B_PRINTER_SPOOL_MIMETYPE);
|
||||||
installer.AddExtraAttribute("Status", PSRV_SPOOL_ATTR_STATUS, B_STRING_TYPE, true, false,
|
installer.AddExtraAttribute("Status", PSRV_SPOOL_ATTR_STATUS,
|
||||||
60, B_ALIGN_LEFT, false);
|
B_STRING_TYPE, true, false, 60, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Page count", PSRV_SPOOL_ATTR_PAGECOUNT, B_INT32_TYPE, true, false,
|
installer.AddExtraAttribute("Page count", PSRV_SPOOL_ATTR_PAGECOUNT,
|
||||||
40, B_ALIGN_RIGHT, false);
|
B_INT32_TYPE, true, false, 40, B_ALIGN_RIGHT, false);
|
||||||
installer.AddExtraAttribute("Description", PSRV_SPOOL_ATTR_DESCRIPTION, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Description",
|
||||||
100, B_ALIGN_LEFT, false);
|
PSRV_SPOOL_ATTR_DESCRIPTION, B_STRING_TYPE, true, true, 100,
|
||||||
installer.AddExtraAttribute("Printer name", PSRV_SPOOL_ATTR_PRINTER, B_STRING_TYPE, true, false,
|
B_ALIGN_LEFT, false);
|
||||||
80, B_ALIGN_LEFT, false);
|
installer.AddExtraAttribute("Printer name", PSRV_SPOOL_ATTR_PRINTER,
|
||||||
installer.AddExtraAttribute("Job creator type", PSRV_SPOOL_ATTR_MIMETYPE, B_ASCII_TYPE, true, false,
|
B_STRING_TYPE, true, false, 80, B_ALIGN_LEFT, false);
|
||||||
60, B_ALIGN_LEFT, false);
|
installer.AddExtraAttribute("Job creator type",
|
||||||
|
PSRV_SPOOL_ATTR_MIMETYPE, B_ASCII_TYPE, true, false, 60,
|
||||||
|
B_ALIGN_LEFT, false);
|
||||||
#else
|
#else
|
||||||
ExtraAttributeLazyInstaller installer(B_PRINTER_SPOOL_MIMETYPE);
|
ExtraAttributeLazyInstaller installer(B_PRINTER_SPOOL_MIMETYPE);
|
||||||
installer.AddExtraAttribute("Page count", "_spool/Page Count", B_INT32_TYPE, true, false,
|
installer.AddExtraAttribute("Page count", "_spool/Page Count",
|
||||||
40, B_ALIGN_RIGHT, false);
|
B_INT32_TYPE, true, false, 40, B_ALIGN_RIGHT, false);
|
||||||
installer.AddExtraAttribute("Description", "_spool/Description", B_ASCII_TYPE, true, true,
|
installer.AddExtraAttribute("Description", "_spool/Description",
|
||||||
100, B_ALIGN_LEFT, false);
|
B_ASCII_TYPE, true, true, 100, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Printer name", "_spool/Printer", B_ASCII_TYPE, true, false,
|
installer.AddExtraAttribute("Printer name", "_spool/Printer",
|
||||||
80, B_ALIGN_LEFT, false);
|
B_ASCII_TYPE, true, false, 80, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Job creator type", "_spool/MimeType", B_ASCII_TYPE, true, false,
|
installer.AddExtraAttribute("Job creator type", "_spool/MimeType",
|
||||||
60, B_ALIGN_LEFT, false);
|
B_ASCII_TYPE, true, false, 60, B_ALIGN_LEFT, false);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
InstallMimeIfNeeded(B_PRINTER_MIMETYPE, R_GenericPrinterIcon,
|
InstallMimeIfNeeded(B_PRINTER_MIMETYPE, R_GenericPrinterIcon,
|
||||||
"Printer", "Printer queue.", kTrackerSignature /*application/x-vnd.Be-PRNT*/);
|
"Printer", "Printer queue.", kTrackerSignature);
|
||||||
|
// application/x-vnd.Be-PRNT
|
||||||
// for now set tracker as a default handler for the printer because we
|
// for now set tracker as a default handler for the printer because we
|
||||||
// just want to open it as a folder
|
// just want to open it as a folder
|
||||||
#if B_BEOS_VERSION_DANO
|
#if B_BEOS_VERSION_DANO
|
||||||
{
|
{
|
||||||
ExtraAttributeLazyInstaller installer(B_PRINTER_MIMETYPE);
|
ExtraAttributeLazyInstaller installer(B_PRINTER_MIMETYPE);
|
||||||
installer.AddExtraAttribute("Driver", PSRV_PRINTER_ATTR_DRV_NAME, B_STRING_TYPE, true, false,
|
installer.AddExtraAttribute("Driver", PSRV_PRINTER_ATTR_DRV_NAME,
|
||||||
120, B_ALIGN_LEFT, false);
|
B_STRING_TYPE, true, false, 120, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Transport", PSRV_PRINTER_ATTR_TRANSPORT, B_STRING_TYPE, true, false,
|
installer.AddExtraAttribute("Transport",
|
||||||
|
PSRV_PRINTER_ATTR_TRANSPORT, B_STRING_TYPE, true, false,
|
||||||
60, B_ALIGN_RIGHT, false);
|
60, B_ALIGN_RIGHT, false);
|
||||||
installer.AddExtraAttribute("Connection", PSRV_PRINTER_ATTR_CNX, B_STRING_TYPE, true, false,
|
installer.AddExtraAttribute("Connection",
|
||||||
|
PSRV_PRINTER_ATTR_CNX, B_STRING_TYPE, true, false,
|
||||||
40, B_ALIGN_LEFT, false);
|
40, B_ALIGN_LEFT, false);
|
||||||
installer.AddExtraAttribute("Description", PSRV_PRINTER_ATTR_COMMENTS, B_STRING_TYPE, true, true,
|
installer.AddExtraAttribute("Description",
|
||||||
|
PSRV_PRINTER_ATTR_COMMENTS, B_STRING_TYPE, true, true,
|
||||||
140, B_ALIGN_LEFT, false);
|
140, B_ALIGN_LEFT, false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -570,36 +583,48 @@ TTracker::InstallDefaultTemplates()
|
|||||||
BString query(kQueryTemplates);
|
BString query(kQueryTemplates);
|
||||||
query += "/application_octet-stream";
|
query += "/application_octet-stream";
|
||||||
|
|
||||||
if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
|
if (!BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
|
&node, false)) {
|
||||||
|
if (BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
|
&node, true)) {
|
||||||
AttributeStreamFileNode fileNode(&node);
|
AttributeStreamFileNode fileNode(&node);
|
||||||
AttributeStreamTemplateNode tmp(kDefaultQueryTemplate, 3);
|
AttributeStreamTemplateNode tmp(kDefaultQueryTemplate, 3);
|
||||||
fileNode << tmp;
|
fileNode << tmp;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(query = kQueryTemplates) += "/application_x-vnd.Be-bookmark";
|
(query = kQueryTemplates) += "/application_x-vnd.Be-bookmark";
|
||||||
if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
|
if (!BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
|
&node, false)) {
|
||||||
|
if (BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
|
&node, true)) {
|
||||||
AttributeStreamFileNode fileNode(&node);
|
AttributeStreamFileNode fileNode(&node);
|
||||||
AttributeStreamTemplateNode tmp(kBookmarkQueryTemplate, 3);
|
AttributeStreamTemplateNode tmp(kBookmarkQueryTemplate, 3);
|
||||||
fileNode << tmp;
|
fileNode << tmp;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(query = kQueryTemplates) += "/application_x-person";
|
(query = kQueryTemplates) += "/application_x-person";
|
||||||
if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
|
if (!BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
|
&node, false)) {
|
||||||
|
if (BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
|
&node, true)) {
|
||||||
AttributeStreamFileNode fileNode(&node);
|
AttributeStreamFileNode fileNode(&node);
|
||||||
AttributeStreamTemplateNode tmp(kPersonQueryTemplate, 3);
|
AttributeStreamTemplateNode tmp(kPersonQueryTemplate, 3);
|
||||||
fileNode << tmp;
|
fileNode << tmp;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(query = kQueryTemplates) += "/text_x-email";
|
(query = kQueryTemplates) += "/text_x-email";
|
||||||
if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
|
if (!BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
|
&node, false)) {
|
||||||
|
if (BContainerWindow::DefaultStateSourceNode(query.String(),
|
||||||
|
&node, true)) {
|
||||||
AttributeStreamFileNode fileNode(&node);
|
AttributeStreamFileNode fileNode(&node);
|
||||||
AttributeStreamTemplateNode tmp(kEmailQueryTemplate, 3);
|
AttributeStreamTemplateNode tmp(kEmailQueryTemplate, 3);
|
||||||
fileNode << tmp;
|
fileNode << tmp;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -612,8 +637,8 @@ TTracker::InstallTemporaryBackgroundImages()
|
|||||||
status_t status = find_directory(B_SYSTEM_DATA_DIRECTORY, &path);
|
status_t status = find_directory(B_SYSTEM_DATA_DIRECTORY, &path);
|
||||||
if (status < B_OK) {
|
if (status < B_OK) {
|
||||||
// TODO: this error shouldn't be shown to the regular user
|
// TODO: this error shouldn't be shown to the regular user
|
||||||
BString errorMessage(B_TRANSLATE("At %func \nfind_directory() failed. "
|
BString errorMessage(B_TRANSLATE("At %func \nfind_directory() "
|
||||||
"\nReason: %error"));
|
"failed. \nReason: %error"));
|
||||||
errorMessage.ReplaceFirst("%func", __PRETTY_FUNCTION__);
|
errorMessage.ReplaceFirst("%func", __PRETTY_FUNCTION__);
|
||||||
errorMessage.ReplaceFirst("%error", strerror(status));
|
errorMessage.ReplaceFirst("%error", strerror(status));
|
||||||
(new BAlert("AlertError", errorMessage.String(), B_TRANSLATE("OK"),
|
(new BAlert("AlertError", errorMessage.String(), B_TRANSLATE("OK"),
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ status_t
|
|||||||
TTracker::GetSupportedSuites(BMessage* data)
|
TTracker::GetSupportedSuites(BMessage* data)
|
||||||
{
|
{
|
||||||
data->AddString("suites", kTrackerSuites);
|
data->AddString("suites", kTrackerSuites);
|
||||||
BPropertyInfo propertyInfo(const_cast<property_info*>(kTrackerPropertyList));
|
BPropertyInfo propertyInfo(const_cast<property_info*>
|
||||||
|
(kTrackerPropertyList));
|
||||||
data->AddFlat("messages", &propertyInfo);
|
data->AddFlat("messages", &propertyInfo);
|
||||||
|
|
||||||
return _inherited::GetSupportedSuites(data);
|
return _inherited::GetSupportedSuites(data);
|
||||||
@@ -112,9 +113,11 @@ BHandler*
|
|||||||
TTracker::ResolveSpecifier(BMessage* message, int32 index,
|
TTracker::ResolveSpecifier(BMessage* message, int32 index,
|
||||||
BMessage* specifier, int32 form, const char* property)
|
BMessage* specifier, int32 form, const char* property)
|
||||||
{
|
{
|
||||||
BPropertyInfo propertyInfo(const_cast<property_info*>(kTrackerPropertyList));
|
BPropertyInfo propertyInfo(const_cast<property_info*>
|
||||||
|
(kTrackerPropertyList));
|
||||||
|
|
||||||
int32 result = propertyInfo.FindMatch(message, index, specifier, form, property);
|
int32 result = propertyInfo.FindMatch(message, index, specifier, form,
|
||||||
|
property);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
//PRINT(("FindMatch result %d %s\n", result, strerror(result)));
|
//PRINT(("FindMatch result %d %s\n", result, strerror(result)));
|
||||||
return _inherited::ResolveSpecifier(message, index, specifier,
|
return _inherited::ResolveSpecifier(message, index, specifier,
|
||||||
@@ -155,7 +158,8 @@ TTracker::HandleScriptingMessage(BMessage* message)
|
|||||||
|
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case B_CREATE_PROPERTY:
|
case B_CREATE_PROPERTY:
|
||||||
handled = CreateProperty(message, &specifier, form, property, &reply);
|
handled = CreateProperty(message, &specifier, form, property,
|
||||||
|
&reply);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_GET_PROPERTY:
|
case B_GET_PROPERTY:
|
||||||
@@ -163,7 +167,8 @@ TTracker::HandleScriptingMessage(BMessage* message)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case B_SET_PROPERTY:
|
case B_SET_PROPERTY:
|
||||||
handled = SetProperty(message, &specifier, form, property, &reply);
|
handled = SetProperty(message, &specifier, form, property,
|
||||||
|
&reply);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_COUNT_PROPERTIES:
|
case B_COUNT_PROPERTIES:
|
||||||
@@ -189,7 +194,7 @@ TTracker::HandleScriptingMessage(BMessage* message)
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
TTracker::CreateProperty(BMessage* message, BMessage* , int32 form,
|
TTracker::CreateProperty(BMessage* message, BMessage*, int32 form,
|
||||||
const char* property, BMessage* reply)
|
const char* property, BMessage* reply)
|
||||||
{
|
{
|
||||||
bool handled = false;
|
bool handled = false;
|
||||||
@@ -226,8 +231,8 @@ TTracker::DeleteProperty(BMessage* /*specifier*/, int32 form,
|
|||||||
const char* property, BMessage* /*reply*/)
|
const char* property, BMessage* /*reply*/)
|
||||||
{
|
{
|
||||||
if (strcmp(property, kPropertyTrash) == 0) {
|
if (strcmp(property, kPropertyTrash) == 0) {
|
||||||
// deleting on a selection is handled as removing a part of the selection
|
// deleting on a selection is handled as removing a part of the
|
||||||
// not to be confused with deleting a selected item
|
// selection not to be confused with deleting a selected item
|
||||||
|
|
||||||
if (form != B_DIRECT_SPECIFIER)
|
if (form != B_DIRECT_SPECIFIER)
|
||||||
// only support direct specifier
|
// only support direct specifier
|
||||||
|
|||||||
@@ -132,9 +132,9 @@ TTrackerState::TTrackerState()
|
|||||||
TTrackerState::TTrackerState(const TTrackerState&)
|
TTrackerState::TTrackerState(const TTrackerState&)
|
||||||
: Settings("", "")
|
: Settings("", "")
|
||||||
{
|
{
|
||||||
// Placeholder copy constructor to prevent others from accidentally using the
|
// Placeholder copy constructor to prevent others from accidentally using
|
||||||
// default copy constructor. Note, the DEBUGGER call is for the off chance that
|
// the default copy constructor. Note, the DEBUGGER call is for the off
|
||||||
// a TTrackerState method (or friend) tries to make a copy.
|
// chance that a TTrackerState method (or friend) tries to make a copy.
|
||||||
DEBUGGER("Don't make a copy of this!");
|
DEBUGGER("Don't make a copy of this!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,37 +161,56 @@ TTrackerState::LoadSettingsIfNeeded()
|
|||||||
// Set default settings before reading from disk
|
// Set default settings before reading from disk
|
||||||
|
|
||||||
Add(fShowDisksIcon = new BooleanValueSetting("ShowDisksIcon", false));
|
Add(fShowDisksIcon = new BooleanValueSetting("ShowDisksIcon", false));
|
||||||
Add(fMountVolumesOntoDesktop = new BooleanValueSetting("MountVolumesOntoDesktop", true));
|
Add(fMountVolumesOntoDesktop
|
||||||
|
= new BooleanValueSetting("MountVolumesOntoDesktop", true));
|
||||||
Add(fMountSharedVolumesOntoDesktop =
|
Add(fMountSharedVolumesOntoDesktop =
|
||||||
new BooleanValueSetting("MountSharedVolumesOntoDesktop", true));
|
new BooleanValueSetting("MountSharedVolumesOntoDesktop", true));
|
||||||
Add(fEjectWhenUnmounting = new BooleanValueSetting("EjectWhenUnmounting", true));
|
Add(fEjectWhenUnmounting
|
||||||
|
= new BooleanValueSetting("EjectWhenUnmounting", true));
|
||||||
|
|
||||||
Add(fDesktopFilePanelRoot = new BooleanValueSetting("DesktopFilePanelRoot", true));
|
Add(fDesktopFilePanelRoot
|
||||||
Add(fShowFullPathInTitleBar = new BooleanValueSetting("ShowFullPathInTitleBar", false));
|
= new BooleanValueSetting("DesktopFilePanelRoot", true));
|
||||||
Add(fShowSelectionWhenInactive = new BooleanValueSetting("ShowSelectionWhenInactive", true));
|
Add(fShowFullPathInTitleBar
|
||||||
Add(fTransparentSelection = new BooleanValueSetting("TransparentSelection", true));
|
= new BooleanValueSetting("ShowFullPathInTitleBar", false));
|
||||||
Add(fSortFolderNamesFirst = new BooleanValueSetting("SortFolderNamesFirst", true));
|
Add(fShowSelectionWhenInactive
|
||||||
|
= new BooleanValueSetting("ShowSelectionWhenInactive", true));
|
||||||
|
Add(fTransparentSelection
|
||||||
|
= new BooleanValueSetting("TransparentSelection", true));
|
||||||
|
Add(fSortFolderNamesFirst
|
||||||
|
= new BooleanValueSetting("SortFolderNamesFirst", true));
|
||||||
Add(fHideDotFiles = new BooleanValueSetting("HideDotFiles", false));
|
Add(fHideDotFiles = new BooleanValueSetting("HideDotFiles", false));
|
||||||
Add(fTypeAheadFiltering = new BooleanValueSetting("TypeAheadFiltering", false));
|
Add(fTypeAheadFiltering
|
||||||
Add(fSingleWindowBrowse = new BooleanValueSetting("SingleWindowBrowse", false));
|
= new BooleanValueSetting("TypeAheadFiltering", false));
|
||||||
|
Add(fSingleWindowBrowse
|
||||||
|
= new BooleanValueSetting("SingleWindowBrowse", false));
|
||||||
Add(fShowNavigator = new BooleanValueSetting("ShowNavigator", false));
|
Add(fShowNavigator = new BooleanValueSetting("ShowNavigator", false));
|
||||||
|
|
||||||
Add(fRecentApplicationsCount = new ScalarValueSetting("RecentApplications", 10, "", ""));
|
Add(fRecentApplicationsCount
|
||||||
Add(fRecentDocumentsCount = new ScalarValueSetting("RecentDocuments", 10, "", ""));
|
= new ScalarValueSetting("RecentApplications", 10, "", ""));
|
||||||
Add(fRecentFoldersCount = new ScalarValueSetting("RecentFolders", 10, "", ""));
|
Add(fRecentDocumentsCount
|
||||||
|
= new ScalarValueSetting("RecentDocuments", 10, "", ""));
|
||||||
|
Add(fRecentFoldersCount
|
||||||
|
= new ScalarValueSetting("RecentFolders", 10, "", ""));
|
||||||
|
|
||||||
Add(fShowVolumeSpaceBar = new BooleanValueSetting("ShowVolumeSpaceBar", true));
|
Add(fShowVolumeSpaceBar
|
||||||
|
= new BooleanValueSetting("ShowVolumeSpaceBar", true));
|
||||||
|
|
||||||
Add(fUsedSpaceColor = new HexScalarValueSetting("UsedSpaceColor", 0xc000cb00, "", ""));
|
Add(fUsedSpaceColor
|
||||||
Add(fFreeSpaceColor = new HexScalarValueSetting("FreeSpaceColor", 0xc0ffffff, "", ""));
|
= new HexScalarValueSetting("UsedSpaceColor", 0xc000cb00, "", ""));
|
||||||
Add(fWarningSpaceColor = new HexScalarValueSetting("WarningSpaceColor", 0xc0cb0000, "", ""));
|
Add(fFreeSpaceColor
|
||||||
|
= new HexScalarValueSetting("FreeSpaceColor", 0xc0ffffff, "", ""));
|
||||||
|
Add(fWarningSpaceColor
|
||||||
|
= new HexScalarValueSetting("WarningSpaceColor", 0xc0cb0000, "", ""));
|
||||||
|
|
||||||
Add(fDontMoveFilesToTrash = new BooleanValueSetting("DontMoveFilesToTrash", false));
|
Add(fDontMoveFilesToTrash
|
||||||
Add(fAskBeforeDeleteFile = new BooleanValueSetting("AskBeforeDeleteFile", true));
|
= new BooleanValueSetting("DontMoveFilesToTrash", false));
|
||||||
|
Add(fAskBeforeDeleteFile
|
||||||
|
= new BooleanValueSetting("AskBeforeDeleteFile", true));
|
||||||
|
|
||||||
TryReadingSettings();
|
TryReadingSettings();
|
||||||
|
|
||||||
NameAttributeText::SetSortFolderNamesFirst(fSortFolderNamesFirst->Value());
|
NameAttributeText::SetSortFolderNamesFirst(
|
||||||
|
fSortFolderNamesFirst->Value());
|
||||||
RealNameAttributeText::SetSortFolderNamesFirst(
|
RealNameAttributeText::SetSortFolderNamesFirst(
|
||||||
fSortFolderNamesFirst->Value());
|
fSortFolderNamesFirst->Value());
|
||||||
|
|
||||||
@@ -456,7 +475,8 @@ TrackerSettings::SetShowNavigator(bool enabled)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TrackerSettings::RecentCounts(int32* applications, int32* documents, int32* folders)
|
TrackerSettings::RecentCounts(int32* applications, int32* documents,
|
||||||
|
int32* folders)
|
||||||
{
|
{
|
||||||
if (applications)
|
if (applications)
|
||||||
*applications = gTrackerState.fRecentApplicationsCount->Value();
|
*applications = gTrackerState.fRecentApplicationsCount->Value();
|
||||||
|
|||||||
@@ -74,9 +74,11 @@ TrackerSettingsWindow::TrackerSettingsWindow()
|
|||||||
BWindow(BRect(80, 80, 450, 350), B_TRANSLATE("Tracker preferences"),
|
BWindow(BRect(80, 80, 450, 350), B_TRANSLATE("Tracker preferences"),
|
||||||
B_TITLED_WINDOW, B_NOT_MINIMIZABLE | B_NOT_RESIZABLE
|
B_TITLED_WINDOW, B_NOT_MINIMIZABLE | B_NOT_RESIZABLE
|
||||||
| B_NO_WORKSPACE_ACTIVATION | B_NOT_ANCHORED_ON_ACTIVATE
|
| B_NO_WORKSPACE_ACTIVATION | B_NOT_ANCHORED_ON_ACTIVATE
|
||||||
| B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS)
|
| B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE
|
||||||
|
| B_AUTO_UPDATE_SIZE_LIMITS)
|
||||||
{
|
{
|
||||||
fSettingsTypeListView = new BListView("List View", B_SINGLE_SELECTION_LIST);
|
fSettingsTypeListView = new BListView("List View",
|
||||||
|
B_SINGLE_SELECTION_LIST);
|
||||||
|
|
||||||
BScrollView* scrollView = new BScrollView("scrollview",
|
BScrollView* scrollView = new BScrollView("scrollview",
|
||||||
fSettingsTypeListView, B_FRAME_EVENTS | B_WILL_DRAW, false, true);
|
fSettingsTypeListView, B_FRAME_EVENTS | B_WILL_DRAW, false, true);
|
||||||
@@ -113,8 +115,8 @@ TrackerSettingsWindow::TrackerSettingsWindow()
|
|||||||
new WindowsSettingsView()));
|
new WindowsSettingsView()));
|
||||||
fSettingsTypeListView->AddItem(new SettingsItem(B_TRANSLATE("Trash"),
|
fSettingsTypeListView->AddItem(new SettingsItem(B_TRANSLATE("Trash"),
|
||||||
new TrashSettingsView()));
|
new TrashSettingsView()));
|
||||||
fSettingsTypeListView->AddItem(new SettingsItem(B_TRANSLATE("Volume icons"),
|
fSettingsTypeListView->AddItem(new SettingsItem(
|
||||||
new SpaceBarSettingsView()));
|
B_TRANSLATE("Volume icons"), new SpaceBarSettingsView()));
|
||||||
|
|
||||||
// constraint the listview width so that the longest item fits
|
// constraint the listview width so that the longest item fits
|
||||||
float width = 0;
|
float width = 0;
|
||||||
@@ -123,7 +125,8 @@ TrackerSettingsWindow::TrackerSettingsWindow()
|
|||||||
fSettingsTypeListView->SetExplicitMinSize(BSize(width, 0));
|
fSettingsTypeListView->SetExplicitMinSize(BSize(width, 0));
|
||||||
fSettingsTypeListView->SetExplicitMaxSize(BSize(width, B_SIZE_UNLIMITED));
|
fSettingsTypeListView->SetExplicitMaxSize(BSize(width, B_SIZE_UNLIMITED));
|
||||||
|
|
||||||
fSettingsTypeListView->SetSelectionMessage(new BMessage(kSettingsViewChanged));
|
fSettingsTypeListView->SetSelectionMessage(
|
||||||
|
new BMessage(kSettingsViewChanged));
|
||||||
fSettingsTypeListView->Select(0);
|
fSettingsTypeListView->Select(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +204,8 @@ TrackerSettingsWindow::_ViewAt(int32 i)
|
|||||||
if (!Lock())
|
if (!Lock())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
SettingsItem* item = dynamic_cast<SettingsItem*>(fSettingsTypeListView->ItemAt(i));
|
SettingsItem* item = dynamic_cast<SettingsItem*>
|
||||||
|
(fSettingsTypeListView->ItemAt(i));
|
||||||
|
|
||||||
Unlock();
|
Unlock();
|
||||||
|
|
||||||
@@ -278,7 +282,8 @@ TrackerSettingsWindow::_HandleChangedSettingsView()
|
|||||||
oldView->RemoveSelf();
|
oldView->RemoveSelf();
|
||||||
|
|
||||||
SettingsItem* selectedItem =
|
SettingsItem* selectedItem =
|
||||||
dynamic_cast<SettingsItem*>(fSettingsTypeListView->ItemAt(currentSelection));
|
dynamic_cast<SettingsItem*>
|
||||||
|
(fSettingsTypeListView->ItemAt(currentSelection));
|
||||||
|
|
||||||
if (selectedItem) {
|
if (selectedItem) {
|
||||||
fSettingsContainerBox->SetLabel(selectedItem->Text());
|
fSettingsContainerBox->SetLabel(selectedItem->Text());
|
||||||
|
|||||||
@@ -209,14 +209,15 @@ TrackerString::FindFirst(const char* string, int32 fromOffset) const
|
|||||||
int32 start = MAX(0, MIN(fromOffset, stop));
|
int32 start = MAX(0, MIN(fromOffset, stop));
|
||||||
int32 position = -1;
|
int32 position = -1;
|
||||||
|
|
||||||
|
for (int32 i = start; i <= stop; i++) {
|
||||||
for (int32 i = start; i <= stop; i++)
|
if (string[0] == ByteAt(i)) {
|
||||||
if (string[0] == ByteAt(i))
|
|
||||||
// This check is to avoid mute str*cmp() calls. Performance.
|
// This check is to avoid mute str*cmp() calls. Performance.
|
||||||
if (strncmp(string, String() + i, stringLength) == 0) {
|
if (strncmp(string, String() + i, stringLength) == 0) {
|
||||||
position = i;
|
position = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
@@ -276,17 +277,20 @@ TrackerString::FindLast(const char* string, int32 beforeOffset) const
|
|||||||
if (stringLength == 0)
|
if (stringLength == 0)
|
||||||
return beforeOffset;
|
return beforeOffset;
|
||||||
|
|
||||||
int32 start = MIN(beforeOffset, length - static_cast<int32>(stringLength));
|
int32 start = MIN(beforeOffset,
|
||||||
|
length - static_cast<int32>(stringLength));
|
||||||
int32 stop = 0;
|
int32 stop = 0;
|
||||||
int32 position = -1;
|
int32 position = -1;
|
||||||
|
|
||||||
for (int32 i = start; i >= stop; i--)
|
for (int32 i = start; i >= stop; i--) {
|
||||||
if (string[0] == ByteAt(i))
|
if (string[0] == ByteAt(i)) {
|
||||||
// This check is to avoid mute str*cmp() calls. Performance.
|
// This check is to avoid mute str*cmp() calls. Performance.
|
||||||
if (strncmp(string, String() + i, stringLength) == 0) {
|
if (strncmp(string, String() + i, stringLength) == 0) {
|
||||||
position = i;
|
position = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
@@ -350,13 +354,15 @@ TrackerString::IFindFirst(const char* string, int32 fromOffset) const
|
|||||||
int32 start = MAX(0, MIN(fromOffset, stop));
|
int32 start = MAX(0, MIN(fromOffset, stop));
|
||||||
int32 position = -1;
|
int32 position = -1;
|
||||||
|
|
||||||
for (int32 i = start; i <= stop; i++)
|
for (int32 i = start; i <= stop; i++) {
|
||||||
if (tolower(string[0]) == tolower(ByteAt(i)))
|
if (tolower(string[0]) == tolower(ByteAt(i))) {
|
||||||
// This check is to avoid mute str*cmp() calls. Performance.
|
// This check is to avoid mute str*cmp() calls. Performance.
|
||||||
if (strncasecmp(string, String() + i, stringLength) == 0) {
|
if (strncasecmp(string, String() + i, stringLength) == 0) {
|
||||||
position = i;
|
position = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
@@ -404,13 +410,15 @@ TrackerString::IFindLast(const char* string, int32 beforeOffset) const
|
|||||||
int32 stop = 0;
|
int32 stop = 0;
|
||||||
int32 position = -1;
|
int32 position = -1;
|
||||||
|
|
||||||
for (int32 i = start; i >= stop; i--)
|
for (int32 i = start; i >= stop; i--) {
|
||||||
if (tolower(string[0]) == tolower(ByteAt(i)))
|
if (tolower(string[0]) == tolower(ByteAt(i))) {
|
||||||
// This check is to avoid mute str*cmp() calls. Performance.
|
// This check is to avoid mute str*cmp() calls. Performance.
|
||||||
if (strncasecmp(string, String() + i, stringLength) == 0) {
|
if (strncasecmp(string, String() + i, stringLength) == 0) {
|
||||||
position = i;
|
position = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
@@ -421,8 +429,8 @@ TrackerString::IFindLast(const char* string, int32 beforeOffset) const
|
|||||||
// The reason is that an encountered '[' will be taken literally.
|
// The reason is that an encountered '[' will be taken literally.
|
||||||
// (Makes it possible to match a '[' with the expression '[[]').
|
// (Makes it possible to match a '[' with the expression '[[]').
|
||||||
bool
|
bool
|
||||||
TrackerString::MatchesBracketExpression(const char* string, const char* pattern,
|
TrackerString::MatchesBracketExpression(const char* string,
|
||||||
bool caseSensitivity) const
|
const char* pattern, bool caseSensitivity) const
|
||||||
{
|
{
|
||||||
bool GlyphMatch = IsStartOfGlyph(string[0]);
|
bool GlyphMatch = IsStartOfGlyph(string[0]);
|
||||||
|
|
||||||
@@ -442,8 +450,10 @@ TrackerString::MatchesBracketExpression(const char* string, const char* pattern,
|
|||||||
switch (*pattern) {
|
switch (*pattern) {
|
||||||
case '-':
|
case '-':
|
||||||
{
|
{
|
||||||
char start = ConditionalToLower(*(pattern - 1), caseSensitivity),
|
char start = ConditionalToLower(*(pattern - 1),
|
||||||
stop = ConditionalToLower(*(pattern + 1), caseSensitivity);
|
caseSensitivity);
|
||||||
|
char stop = ConditionalToLower(*(pattern + 1),
|
||||||
|
caseSensitivity);
|
||||||
|
|
||||||
if (IsGlyph(start) || IsGlyph(stop))
|
if (IsGlyph(start) || IsGlyph(stop))
|
||||||
return false;
|
return false;
|
||||||
@@ -451,14 +461,16 @@ TrackerString::MatchesBracketExpression(const char* string, const char* pattern,
|
|||||||
|
|
||||||
if ((islower(start) && islower(stop))
|
if ((islower(start) && islower(stop))
|
||||||
|| (isupper(start) && isupper(stop))
|
|| (isupper(start) && isupper(stop))
|
||||||
|| (isdigit(start) && isdigit(stop)))
|
|| (isdigit(start) && isdigit(stop))) {
|
||||||
// Make sure 'start' and 'stop' are of the same type.
|
// Make sure 'start' and 'stop' are of the same type.
|
||||||
match = start <= testChar && testChar <= stop;
|
match = start <= testChar && testChar <= stop;
|
||||||
else
|
} else {
|
||||||
return false;
|
|
||||||
// If no valid range, we've got a syntax error.
|
// If no valid range, we've got a syntax error.
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (GlyphMatch)
|
if (GlyphMatch)
|
||||||
@@ -474,6 +486,7 @@ TrackerString::MatchesBracketExpression(const char* string, const char* pattern,
|
|||||||
pattern = MoveToEndOfGlyph(pattern);
|
pattern = MoveToEndOfGlyph(pattern);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Consider an unmatched bracket a failure
|
// Consider an unmatched bracket a failure
|
||||||
// (i.e. when detecting a '\0' instead of a ']'.)
|
// (i.e. when detecting a '\0' instead of a ']'.)
|
||||||
if (*pattern == '\0')
|
if (*pattern == '\0')
|
||||||
@@ -579,7 +592,8 @@ TrackerString::StringMatchesPattern(const char* string, const char* pattern,
|
|||||||
case '[':
|
case '[':
|
||||||
pattern++;
|
pattern++;
|
||||||
|
|
||||||
if (!MatchesBracketExpression(string, pattern, caseSensitivity)) {
|
if (!MatchesBracketExpression(string, pattern,
|
||||||
|
caseSensitivity)) {
|
||||||
if (patternLevel > 0) {
|
if (patternLevel > 0) {
|
||||||
pattern = pStorage[--patternLevel];
|
pattern = pStorage[--patternLevel];
|
||||||
string = sStorage[patternLevel];
|
string = sStorage[patternLevel];
|
||||||
@@ -637,7 +651,8 @@ TrackerString::StringMatchesPattern(const char* string, const char* pattern,
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
TrackerString::UTF8CharsAreEqual(const char* string1, const char* string2) const
|
TrackerString::UTF8CharsAreEqual(const char* string1,
|
||||||
|
const char* string2) const
|
||||||
{
|
{
|
||||||
const char* s1 = string1;
|
const char* s1 = string1;
|
||||||
const char* s2 = string2;
|
const char* s2 = string2;
|
||||||
@@ -651,7 +666,8 @@ TrackerString::UTF8CharsAreEqual(const char* string1, const char* string2) const
|
|||||||
s2++;
|
s2++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !IsInsideGlyph(*s1) && !IsInsideGlyph(*s2) && *(s1 - 1) == *(s2 - 1);
|
return !IsInsideGlyph(*s1)
|
||||||
|
&& !IsInsideGlyph(*s2) && *(s1 - 1) == *(s2 - 1);
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,7 +147,8 @@ TrackerString::ConditionalToLower(char c, bool caseSensitivity) const
|
|||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
TrackerString::CharsAreEqual(char char1, char char2, bool caseSensitivity) const
|
TrackerString::CharsAreEqual(char char1, char char2,
|
||||||
|
bool caseSensitivity) const
|
||||||
{
|
{
|
||||||
return ConditionalToLower(char1, caseSensitivity)
|
return ConditionalToLower(char1, caseSensitivity)
|
||||||
== ConditionalToLower(char2, caseSensitivity);
|
== ConditionalToLower(char2, caseSensitivity);
|
||||||
|
|||||||
@@ -155,21 +155,23 @@ BTrashWatcher::UpdateTrashIcons()
|
|||||||
BDirectory trashDir;
|
BDirectory trashDir;
|
||||||
while (roster.GetNextVolume(&volume) == B_OK) {
|
while (roster.GetNextVolume(&volume) == B_OK) {
|
||||||
if (FSGetTrashDir(&trashDir, volume.Device()) == B_OK) {
|
if (FSGetTrashDir(&trashDir, volume.Device()) == B_OK) {
|
||||||
// pull out the icons for the current trash state from resources and
|
// pull out the icons for the current trash state from resources
|
||||||
// apply them onto the trash directory node
|
// and apply them onto the trash directory node
|
||||||
size_t largeSize = 0;
|
size_t largeSize = 0;
|
||||||
size_t smallSize = 0;
|
size_t smallSize = 0;
|
||||||
const void* largeData = GetTrackerResources()->LoadResource('ICON',
|
const void* largeData
|
||||||
|
= GetTrackerResources()->LoadResource('ICON',
|
||||||
fTrashFull ? R_TrashFullIcon : R_TrashIcon, &largeSize);
|
fTrashFull ? R_TrashFullIcon : R_TrashIcon, &largeSize);
|
||||||
|
|
||||||
const void* smallData = GetTrackerResources()->LoadResource('MICN',
|
const void* smallData
|
||||||
|
= GetTrackerResources()->LoadResource('MICN',
|
||||||
fTrashFull ? R_TrashFullIcon : R_TrashIcon, &smallSize);
|
fTrashFull ? R_TrashFullIcon : R_TrashIcon, &smallSize);
|
||||||
|
|
||||||
#ifdef HAIKU_TARGET_PLATFORM_HAIKU
|
#ifdef HAIKU_TARGET_PLATFORM_HAIKU
|
||||||
size_t vectorSize = 0;
|
size_t vectorSize = 0;
|
||||||
const void* vectorData = GetTrackerResources()->LoadResource(
|
const void* vectorData = GetTrackerResources()->LoadResource(
|
||||||
B_VECTOR_ICON_TYPE, fTrashFull ? R_TrashFullIcon : R_TrashIcon,
|
B_VECTOR_ICON_TYPE,
|
||||||
&vectorSize);
|
fTrashFull ? R_TrashFullIcon : R_TrashIcon, &vectorSize);
|
||||||
|
|
||||||
if (vectorData) {
|
if (vectorData) {
|
||||||
trashDir.WriteAttr(kAttrIcon, B_VECTOR_ICON_TYPE, 0,
|
trashDir.WriteAttr(kAttrIcon, B_VECTOR_ICON_TYPE, 0,
|
||||||
|
|||||||
@@ -261,7 +261,8 @@ PoseInfo::EndianSwap(void* castToThis)
|
|||||||
void
|
void
|
||||||
PoseInfo::PrintToStream()
|
PoseInfo::PrintToStream()
|
||||||
{
|
{
|
||||||
PRINT(("%s, inode:%Lx, location %f %f\n", fInvisible ? "hidden" : "visible",
|
PRINT(("%s, inode:%Lx, location %f %f\n",
|
||||||
|
fInvisible ? "hidden" : "visible",
|
||||||
fInitedDirectory, fLocation.x, fLocation.y));
|
fInitedDirectory, fLocation.x, fLocation.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +287,8 @@ ExtendedPoseInfo::Size(int32 count)
|
|||||||
size_t
|
size_t
|
||||||
ExtendedPoseInfo::SizeWithHeadroom() const
|
ExtendedPoseInfo::SizeWithHeadroom() const
|
||||||
{
|
{
|
||||||
return sizeof(ExtendedPoseInfo) + (fNumFrames + 1) * sizeof(FrameLocation);
|
return sizeof(ExtendedPoseInfo) + (fNumFrames + 1)
|
||||||
|
* sizeof(FrameLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -545,9 +547,9 @@ FadeRGBA32Vertical(uint32* bits, int32 width, int32 height, int32 from,
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
DraggableIcon::DraggableIcon(BRect rect, const char* name, const char* mimeType,
|
DraggableIcon::DraggableIcon(BRect rect, const char* name,
|
||||||
icon_size size, const BMessage* message, BMessenger target,
|
const char* mimeType, icon_size size, const BMessage* message,
|
||||||
uint32 resizeMask, uint32 flags)
|
BMessenger target, uint32 resizeMask, uint32 flags)
|
||||||
:
|
:
|
||||||
BView(rect, name, resizeMask, flags),
|
BView(rect, name, resizeMask, flags),
|
||||||
fMessage(*message),
|
fMessage(*message),
|
||||||
|
|||||||
@@ -135,12 +135,12 @@ class PoseInfo {
|
|||||||
|
|
||||||
bool fInvisible;
|
bool fInvisible;
|
||||||
ino_t fInitedDirectory;
|
ino_t fInitedDirectory;
|
||||||
// for a location to be valid, fInitedDirectory has to contain the inode
|
// For a location to be valid, fInitedDirectory has to contain
|
||||||
// of the items parent directory
|
// the inode of the items parent directory. This makes it
|
||||||
// This makes it impossible to for instance zip up files and extract
|
// impossible to for instance zip up files and extract them in
|
||||||
// them in the same location. This should probably be reworked -- Tracker
|
// the same location. This should probably be reworked.
|
||||||
// could say strip the file location attributes when dropping files into
|
// Tracker could strip the file location attributes when dropping
|
||||||
// a closed folder
|
// files into a closed folder.
|
||||||
BPoint fLocation;
|
BPoint fLocation;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -214,13 +214,15 @@ class OffscreenBitmap {
|
|||||||
|
|
||||||
|
|
||||||
// bitmap functions
|
// bitmap functions
|
||||||
extern void FadeRGBA32Horizontal(uint32* bits, int32 width, int32 height, int32 from, int32 to);
|
extern void FadeRGBA32Horizontal(uint32* bits, int32 width, int32 height,
|
||||||
extern void FadeRGBA32Vertical(uint32* bits, int32 width, int32 height, int32 from, int32 to);
|
int32 from, int32 to);
|
||||||
|
extern void FadeRGBA32Vertical(uint32* bits, int32 width, int32 height,
|
||||||
|
int32 from, int32 to);
|
||||||
|
|
||||||
|
|
||||||
class FlickerFreeStringView : public BStringView {
|
class FlickerFreeStringView : public BStringView {
|
||||||
// Adds support for offscreen bitmap drawing for string views that update often
|
// adds support for offscreen bitmap drawing for string views that update
|
||||||
// this would be better implemented as an option of BStringView
|
// often this would be better implemented as an option of BStringView
|
||||||
public:
|
public:
|
||||||
FlickerFreeStringView(BRect bounds, const char* name,
|
FlickerFreeStringView(BRect bounds, const char* name,
|
||||||
const char* text, uint32 resizeFlags = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
const char* text, uint32 resizeFlags = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||||
@@ -273,8 +275,8 @@ class DraggableIcon : public BView {
|
|||||||
|
|
||||||
class PositionPassingMenuItem : public BMenuItem {
|
class PositionPassingMenuItem : public BMenuItem {
|
||||||
public:
|
public:
|
||||||
PositionPassingMenuItem(const char* title, BMessage*, char shortcut = 0,
|
PositionPassingMenuItem(const char* title, BMessage*,
|
||||||
uint32 modifiers = 0);
|
char shortcut = 0, uint32 modifiers = 0);
|
||||||
|
|
||||||
PositionPassingMenuItem(BMenu*, BMessage*);
|
PositionPassingMenuItem(BMenu*, BMessage*);
|
||||||
|
|
||||||
@@ -443,13 +445,15 @@ const entry_ref* EachEntryRef(const BMessage*,
|
|||||||
entry_ref* EachEntryRef(BMessage*, entry_ref* (*)(entry_ref*, void*),
|
entry_ref* EachEntryRef(BMessage*, entry_ref* (*)(entry_ref*, void*),
|
||||||
void* passThru, int32 maxCount);
|
void* passThru, int32 maxCount);
|
||||||
const entry_ref* EachEntryRef(const BMessage*,
|
const entry_ref* EachEntryRef(const BMessage*,
|
||||||
const entry_ref* (*)(const entry_ref*, void*), void* passThru, int32 maxCount);
|
const entry_ref* (*)(const entry_ref*, void*), void* passThru,
|
||||||
|
int32 maxCount);
|
||||||
|
|
||||||
|
|
||||||
bool ContainsEntryRef(const BMessage*, const entry_ref*);
|
bool ContainsEntryRef(const BMessage*, const entry_ref*);
|
||||||
int32 CountRefs(const BMessage*);
|
int32 CountRefs(const BMessage*);
|
||||||
|
|
||||||
BMenuItem* EachMenuItem(BMenu* menu, bool recursive, BMenuItem* (*func)(BMenuItem*));
|
BMenuItem* EachMenuItem(BMenu* menu, bool recursive,
|
||||||
|
BMenuItem* (*func)(BMenuItem*));
|
||||||
const BMenuItem* EachMenuItem(const BMenu* menu, bool recursive,
|
const BMenuItem* EachMenuItem(const BMenu* menu, bool recursive,
|
||||||
BMenuItem* (*func)(const BMenuItem*));
|
BMenuItem* (*func)(const BMenuItem*));
|
||||||
|
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ class BViewState {
|
|||||||
|
|
||||||
BViewState(BMallocIO* stream, bool endianSwap = false);
|
BViewState(BMallocIO* stream, bool endianSwap = false);
|
||||||
BViewState(const BMessage &message);
|
BViewState(const BMessage &message);
|
||||||
static BViewState* InstantiateFromStream(BMallocIO* stream, bool endianSwap = false);
|
static BViewState* InstantiateFromStream(BMallocIO* stream,
|
||||||
|
bool endianSwap = false);
|
||||||
static BViewState* InstantiateFromMessage(const BMessage &message);
|
static BViewState* InstantiateFromMessage(const BMessage &message);
|
||||||
void ArchiveToStream(BMallocIO* stream) const;
|
void ArchiveToStream(BMallocIO* stream) const;
|
||||||
void ArchiveToMessage(BMessage &message) const;
|
void ArchiveToMessage(BMessage &message) const;
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ All rights reserved.
|
|||||||
#undef B_TRANSLATION_CONTEXT
|
#undef B_TRANSLATION_CONTEXT
|
||||||
#define B_TRANSLATION_CONTEXT "VolumeWindow"
|
#define B_TRANSLATION_CONTEXT "VolumeWindow"
|
||||||
|
|
||||||
BVolumeWindow::BVolumeWindow(LockingList<BWindow>* windowList, uint32 openFlags)
|
BVolumeWindow::BVolumeWindow(LockingList<BWindow>* windowList,
|
||||||
|
uint32 openFlags)
|
||||||
: BContainerWindow(windowList, openFlags)
|
: BContainerWindow(windowList, openFlags)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -75,7 +76,8 @@ BVolumeWindow::MenusBeginning()
|
|||||||
|
|
||||||
int32 count = PoseView()->SelectionList()->CountItems();
|
int32 count = PoseView()->SelectionList()->CountItems();
|
||||||
for (int32 index = 0; index < count; index++) {
|
for (int32 index = 0; index < count; index++) {
|
||||||
Model* model = PoseView()->SelectionList()->ItemAt(index)->TargetModel();
|
Model* model
|
||||||
|
= PoseView()->SelectionList()->ItemAt(index)->TargetModel();
|
||||||
if (model->IsVolume()) {
|
if (model->IsVolume()) {
|
||||||
BVolume volume;
|
BVolume volume;
|
||||||
volume.SetTo(model->NodeRef()->device);
|
volume.SetTo(model->NodeRef()->device);
|
||||||
|
|||||||
@@ -148,8 +148,8 @@ TruncFileSizeBase(BString* result, int64 value, const View* view, float width)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TruncStringBase(result, buffer, (ssize_t)strlen(buffer), view, width,
|
return TruncStringBase(result, buffer, (ssize_t)strlen(buffer), view,
|
||||||
(uint32)B_TRUNCATE_END);
|
width, (uint32)B_TRUNCATE_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -420,7 +420,8 @@ WidgetAttributeText::AttrAsString(const Model* model, BString* result,
|
|||||||
BPath path;
|
BPath path;
|
||||||
BString tmp;
|
BString tmp;
|
||||||
|
|
||||||
if (entry.InitCheck() == B_OK && entry.GetPath(&path) == B_OK) {
|
if (entry.InitCheck() == B_OK
|
||||||
|
&& entry.GetPath(&path) == B_OK) {
|
||||||
tmp = path.Path();
|
tmp = path.Path();
|
||||||
TruncateLeaf(&tmp);
|
TruncateLeaf(&tmp);
|
||||||
} else
|
} else
|
||||||
@@ -683,7 +684,8 @@ OriginalPathAttributeText::ReadValue(BString* result)
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
KindAttributeText::KindAttributeText(const Model* model, const BColumn* column)
|
KindAttributeText::KindAttributeText(const Model* model,
|
||||||
|
const BColumn* column)
|
||||||
:
|
:
|
||||||
StringAttributeText(model, column)
|
StringAttributeText(model, column)
|
||||||
{
|
{
|
||||||
@@ -711,7 +713,8 @@ KindAttributeText::ReadValue(BString* result)
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
NameAttributeText::NameAttributeText(const Model* model, const BColumn* column)
|
NameAttributeText::NameAttributeText(const Model* model,
|
||||||
|
const BColumn* column)
|
||||||
:
|
:
|
||||||
StringAttributeText(model, column)
|
StringAttributeText(model, column)
|
||||||
{
|
{
|
||||||
@@ -1037,7 +1040,8 @@ GroupAttributeText::ReadValue(BString* result)
|
|||||||
#endif // OWNER_GROUP_ATTRIBUTES
|
#endif // OWNER_GROUP_ATTRIBUTES
|
||||||
|
|
||||||
|
|
||||||
ModeAttributeText::ModeAttributeText(const Model* model, const BColumn* column)
|
ModeAttributeText::ModeAttributeText(const Model* model,
|
||||||
|
const BColumn* column)
|
||||||
:
|
:
|
||||||
StringAttributeText(model, column)
|
StringAttributeText(model, column)
|
||||||
{
|
{
|
||||||
@@ -1079,7 +1083,8 @@ ModeAttributeText::ReadValue(BString* result)
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
SizeAttributeText::SizeAttributeText(const Model* model, const BColumn* column)
|
SizeAttributeText::SizeAttributeText(const Model* model,
|
||||||
|
const BColumn* column)
|
||||||
:
|
:
|
||||||
ScalarAttributeText(model, column)
|
ScalarAttributeText(model, column)
|
||||||
{
|
{
|
||||||
@@ -1134,7 +1139,8 @@ SizeAttributeText::PreferredWidth(const BPoseView* pose) const
|
|||||||
// #pragma mark - time related
|
// #pragma mark - time related
|
||||||
|
|
||||||
|
|
||||||
TimeAttributeText::TimeAttributeText(const Model* model, const BColumn* column)
|
TimeAttributeText::TimeAttributeText(const Model* model,
|
||||||
|
const BColumn* column)
|
||||||
:
|
:
|
||||||
ScalarAttributeText(model, column)
|
ScalarAttributeText(model, column)
|
||||||
{
|
{
|
||||||
@@ -1186,8 +1192,8 @@ CreationTimeAttributeText::ReadValue()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ModificationTimeAttributeText::ModificationTimeAttributeText(const Model* model,
|
ModificationTimeAttributeText::ModificationTimeAttributeText(
|
||||||
const BColumn* column)
|
const Model* model, const BColumn* column)
|
||||||
:
|
:
|
||||||
TimeAttributeText(model, column)
|
TimeAttributeText(model, column)
|
||||||
{
|
{
|
||||||
@@ -1292,13 +1298,15 @@ GenericAttributeText::ReadValue(BString* result)
|
|||||||
// with a type, depending on the bytes that could be read
|
// with a type, depending on the bytes that could be read
|
||||||
attr_info info;
|
attr_info info;
|
||||||
GenericValueStruct tmp;
|
GenericValueStruct tmp;
|
||||||
if (fModel->Node()->GetAttrInfo(fColumn->AttrName(), &info) == B_OK) {
|
if (fModel->Node()->GetAttrInfo(fColumn->AttrName(), &info)
|
||||||
|
== B_OK) {
|
||||||
if (info.size && info.size <= sizeof(int64)) {
|
if (info.size && info.size <= sizeof(int64)) {
|
||||||
length = fModel->Node()->ReadAttr(fColumn->AttrName(),
|
length = fModel->Node()->ReadAttr(fColumn->AttrName(),
|
||||||
fColumn->AttrType(), 0, &tmp, (size_t)info.size);
|
fColumn->AttrType(), 0, &tmp, (size_t)info.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We used tmp as a block of memory, now set the correct fValue:
|
// We used tmp as a block of memory, now set the
|
||||||
|
// correct fValue:
|
||||||
|
|
||||||
if (length == info.size) {
|
if (length == info.size) {
|
||||||
if (fColumn->AttrType() == B_FLOAT_TYPE
|
if (fColumn->AttrType() == B_FLOAT_TYPE
|
||||||
@@ -1321,7 +1329,7 @@ GenericAttributeText::ReadValue(BString* result)
|
|||||||
} else {
|
} else {
|
||||||
// handle the standard data types
|
// handle the standard data types
|
||||||
switch (info.size) {
|
switch (info.size) {
|
||||||
case sizeof(char): // Takes care of bool, too.
|
case sizeof(char): // Takes care of bool too.
|
||||||
fValueIsDefined = true;
|
fValueIsDefined = true;
|
||||||
fValue.int8t = tmp.int8t;
|
fValue.int8t = tmp.int8t;
|
||||||
break;
|
break;
|
||||||
@@ -1331,12 +1339,12 @@ GenericAttributeText::ReadValue(BString* result)
|
|||||||
fValue.int16t = tmp.int16t;
|
fValue.int16t = tmp.int16t;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case sizeof(int32): // Takes care of time_t, too.
|
case sizeof(int32): // Takes care of time_t too.
|
||||||
fValueIsDefined = true;
|
fValueIsDefined = true;
|
||||||
fValue.int32t = tmp.int32t;
|
fValue.int32t = tmp.int32t;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case sizeof(int64): // Taked care of off_t, too.
|
case sizeof(int64): // Takes care of off_t too.
|
||||||
fValueIsDefined = true;
|
fValueIsDefined = true;
|
||||||
fValue.int64t = tmp.int64t;
|
fValue.int64t = tmp.int64t;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -77,8 +77,8 @@ class WidgetAttributeText {
|
|||||||
// override to define a compare of two different attributes for
|
// override to define a compare of two different attributes for
|
||||||
// sorting
|
// sorting
|
||||||
|
|
||||||
static WidgetAttributeText* NewWidgetText(const Model*, const BColumn*,
|
static WidgetAttributeText* NewWidgetText(const Model*,
|
||||||
const BPoseView*);
|
const BColumn*, const BPoseView*);
|
||||||
// WidgetAttributeText factory
|
// WidgetAttributeText factory
|
||||||
// call this to make the right WidgetAttributeText type for a
|
// call this to make the right WidgetAttributeText type for a
|
||||||
// given column
|
// given column
|
||||||
@@ -462,7 +462,8 @@ class AppShortVersionAttributeText : public VersionAttributeText {
|
|||||||
|
|
||||||
class SystemShortVersionAttributeText : public VersionAttributeText {
|
class SystemShortVersionAttributeText : public VersionAttributeText {
|
||||||
public:
|
public:
|
||||||
SystemShortVersionAttributeText(const Model* model, const BColumn* column)
|
SystemShortVersionAttributeText(const Model* model,
|
||||||
|
const BColumn* column)
|
||||||
: VersionAttributeText(model, column, false)
|
: VersionAttributeText(model, column, false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -471,8 +472,8 @@ class SystemShortVersionAttributeText : public VersionAttributeText {
|
|||||||
} // namespace BPrivate
|
} // namespace BPrivate
|
||||||
|
|
||||||
|
|
||||||
extern status_t TimeFormat(BString &string, int32 index, FormatSeparator format,
|
extern status_t TimeFormat(BString &string, int32 index,
|
||||||
DateOrder order, bool clockIs24Hour);
|
FormatSeparator format, DateOrder order, bool clockIs24Hour);
|
||||||
|
|
||||||
using namespace BPrivate;
|
using namespace BPrivate;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user