added a test app for BShelf, it's the Container sample code from Be
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17764 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
SubDir HAIKU_TOP src tests kits interface bshelf ;
|
||||||
|
|
||||||
|
SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||||
|
|
||||||
|
UsePrivateHeaders interface ;
|
||||||
|
|
||||||
|
if $(TARGET_PLATFORM) != haiku {
|
||||||
|
UseHeaders [ FDirName $(HAIKU_TOP) headers os interface ] : true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
SubDirC++Flags -D_SetShelf=set_shelf ;
|
||||||
|
|
||||||
|
SimpleTest ShelfTest :
|
||||||
|
ShelfTest.cpp
|
||||||
|
Shelf.cpp
|
||||||
|
: be
|
||||||
|
;
|
||||||
|
|
||||||
|
SEARCH on [ FGristFiles
|
||||||
|
Shelf.cpp
|
||||||
|
] = [ FDirName $(HAIKU_TOP) src kits interface ] ;
|
||||||
@@ -0,0 +1,192 @@
|
|||||||
|
//******************************************************************************
|
||||||
|
//
|
||||||
|
//******************************************************************************
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||||
|
This file may be used under the terms of the Be Sample Code License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
#include <Debug.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <Application.h>
|
||||||
|
#include <Window.h>
|
||||||
|
#include <Box.h>
|
||||||
|
#include <File.h>
|
||||||
|
|
||||||
|
#include <Path.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
#include <FindDirectory.h>
|
||||||
|
#include <Shelf.h>
|
||||||
|
#include <byteorder.h>
|
||||||
|
|
||||||
|
#define MAGIC_1 'pjpp'
|
||||||
|
#define MAGIC_2 'jahh'
|
||||||
|
#define MAGIC_1_SWAP 'ppjp'
|
||||||
|
#define MAGIC_2_SWAP 'hhaj'
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
BEntry *archive_file(bool create = TRUE);
|
||||||
|
|
||||||
|
class TWindow : public BWindow {
|
||||||
|
public:
|
||||||
|
TWindow(BRect frame, const char *title, BPositionIO *stream);
|
||||||
|
~TWindow();
|
||||||
|
virtual bool QuitRequested();
|
||||||
|
virtual void Quit();
|
||||||
|
|
||||||
|
private:
|
||||||
|
BBox *fMainView;
|
||||||
|
BShelf *fShelf;
|
||||||
|
BPositionIO *fArchiveStream;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
BApplication *app = new BApplication("application/x-vnd.Be-MYTE");
|
||||||
|
BEntry *entry;
|
||||||
|
BRect frame;
|
||||||
|
bool frame_set = FALSE;
|
||||||
|
TWindow *w = NULL;
|
||||||
|
BFile *stream = NULL;
|
||||||
|
|
||||||
|
if ((entry = archive_file())) {
|
||||||
|
long d1 = 0;
|
||||||
|
long d2 = 0;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
stream = new BFile(entry, O_RDWR);
|
||||||
|
|
||||||
|
// need to consider Endian issues here!
|
||||||
|
err = stream->Read(&d1, sizeof(d1));
|
||||||
|
err = stream->Read(&d2, sizeof(d2));
|
||||||
|
|
||||||
|
if ((d1 == MAGIC_1) && (d2 == MAGIC_2)) {
|
||||||
|
err = stream->Read(&frame, sizeof(frame));
|
||||||
|
frame_set = TRUE;
|
||||||
|
} else if ((d1 == MAGIC_1_SWAP) &&
|
||||||
|
(d2 == MAGIC_2_SWAP)) {
|
||||||
|
err = stream->Read(&frame, sizeof(frame));
|
||||||
|
swap_data(B_RECT_TYPE, &frame, sizeof(BRect), B_SWAP_ALWAYS);
|
||||||
|
frame_set = TRUE;
|
||||||
|
}
|
||||||
|
delete entry;
|
||||||
|
}
|
||||||
|
if (!frame_set)
|
||||||
|
frame = BRect(100, 50, 300, 400);
|
||||||
|
|
||||||
|
w = new TWindow(frame, "Container", stream);
|
||||||
|
w->Show();
|
||||||
|
app->Run();
|
||||||
|
delete stream;
|
||||||
|
delete app;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
BEntry *archive_file(bool create)
|
||||||
|
{
|
||||||
|
BPath path;
|
||||||
|
BEntry *entry = NULL;
|
||||||
|
// long err;
|
||||||
|
|
||||||
|
|
||||||
|
if (find_directory (B_USER_SETTINGS_DIRECTORY, &path, true) != B_OK)
|
||||||
|
return NULL;
|
||||||
|
path.Append ("Container_data");
|
||||||
|
|
||||||
|
if (create) {
|
||||||
|
int fd;
|
||||||
|
fd = open(path.Path(), O_RDWR);
|
||||||
|
if (fd < 0)
|
||||||
|
fd = creat(path.Path(), 0777);
|
||||||
|
if (fd > 0)
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
entry = new BEntry(path.Path());
|
||||||
|
if (entry->InitCheck() != B_NO_ERROR) {
|
||||||
|
delete entry;
|
||||||
|
entry = NULL;
|
||||||
|
}
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
|
TWindow::TWindow(BRect frame, const char *title, BPositionIO *stream)
|
||||||
|
: BWindow(frame, title, B_TITLED_WINDOW, 0)
|
||||||
|
{
|
||||||
|
BRect b;
|
||||||
|
Lock();
|
||||||
|
|
||||||
|
b = frame;
|
||||||
|
b.OffsetTo(B_ORIGIN);
|
||||||
|
|
||||||
|
BView *parent = new BBox(b, "parent", B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS, B_PLAIN_BORDER);
|
||||||
|
parent->SetViewColor(216, 216, 216, 0);
|
||||||
|
AddChild(parent);
|
||||||
|
|
||||||
|
fArchiveStream = stream;
|
||||||
|
|
||||||
|
b.InsetBy(5,5);
|
||||||
|
fMainView = new BBox(b, "MainView", B_FOLLOW_ALL);
|
||||||
|
fMainView->SetViewColor(216, 216, 216, 0);
|
||||||
|
fMainView->SetLabel("The Drop Zone");
|
||||||
|
parent->AddChild(fMainView);
|
||||||
|
|
||||||
|
fShelf = new BShelf(fArchiveStream, fMainView);
|
||||||
|
fShelf->SetDisplaysZombies(true);
|
||||||
|
fArchiveStream->Seek(0, SEEK_SET);
|
||||||
|
|
||||||
|
Unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
TWindow::~TWindow()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void TWindow::Quit()
|
||||||
|
{
|
||||||
|
delete fShelf; // by deleting the Shelf we'll save the state
|
||||||
|
fShelf = NULL;
|
||||||
|
inherited::Quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool TWindow::QuitRequested()
|
||||||
|
{
|
||||||
|
long c = be_app->CountWindows();
|
||||||
|
|
||||||
|
if (c == 1) {
|
||||||
|
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||||
|
|
||||||
|
// BFile *file;
|
||||||
|
if (fArchiveStream) {
|
||||||
|
long err;
|
||||||
|
long d1 = MAGIC_1;
|
||||||
|
long d2 = MAGIC_2;
|
||||||
|
err = fArchiveStream->Write(&d1, sizeof(d1));
|
||||||
|
err = fArchiveStream->Write(&d2, sizeof(d2));
|
||||||
|
|
||||||
|
BRect frame = Frame();
|
||||||
|
err = fArchiveStream->Write(&frame, sizeof(frame));
|
||||||
|
|
||||||
|
//+ delete fShelf; // by deleting the Shelf we'll save the state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user