Files
Yab2Cpp/src/YabInterface.cpp
2015-11-03 22:02:26 -08:00

10724 lines
266 KiB
C++

#include "global.h"
#include <Alert.h>
#include <Application.h>
#include <Beep.h>
#include <Bitmap.h>
#include <BitmapStream.h>
#include <Box.h>
#include <Button.h>
#include <Catalog.h>
#include <CheckBox.h>
#include <ClassInfo.h>
#include <Clipboard.h>
#include <ColorControl.h>
#include <Deskbar.h>
#include <File.h>
#include <FindDirectory.h>
#include <Font.h>
#include <Locale.h>
#include <List.h>
#include <ListView.h>
#include <Menu.h>
#include <MenuBar.h>
#include <MenuItem.h>
#include <MenuField.h>
#include <NodeInfo.h>
#include <OS.h>
#include <OutlineListView.h>
#include <Path.h>
#include <Picture.h>
#include <PictureButton.h>
#include <PlaySound.h>
#include <PopUpMenu.h>
#include <PrintJob.h>
#include <PropertyInfo.h>
#include <RadioButton.h>
#include <Roster.h>
#include <Screen.h>
#include <ScrollBar.h>
#include <ScrollView.h>
#include <Slider.h>
#include <StatusBar.h>
#include <String.h>
#include <interface/StringView.h>
#include <kernel/fs_attr.h>
#include <TextControl.h>
#include <TextView.h>
#include <TranslatorRoster.h>
#include <View.h>
#include <Window.h>
#include "config.h"
#include "CalendarControl.h"
#include "YabFilePanel.h"
#include "SplitPane.h"
#include "URLView.h"
#include "Spinner.h"
#include "YabTabView.h"
#ifdef LIBBSVG
#include <SVGView.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "YabInterface.h"
#include "YabWindow.h"
#include "YabView.h"
#include "YabBitmapView.h"
#include "YabList.h"
#include "YabText.h"
#include "YabMenu.h"
#include "YabStackView.h"
#include "column/YabColumnType.h"
#include "column/ColorTools.h"
#include "column/ColumnListView.h"
const uint32 YABBUTTON = 'YBbu';
const uint32 YABMENU = 'YBme';
const uint32 YABSUBMENU = 'YBsu';
const uint32 YABTEXTCONTROL = 'YBtc';
const uint32 YABCHECKBOX = 'YBcb';
const uint32 YABRADIOBUTTON = 'YBrb';
const uint32 YABLISTBOXSELECT = 'YBls';
const uint32 YABLISTBOXINVOKE = 'YBli';
const uint32 YABDROPBOX = 'YBdb';
const uint32 YABSLIDER = 'YBsl';
const uint32 YABCOLORCONTROL = 'YBco';
const uint32 YABTREEBOXSELECT = 'YBts';
const uint32 YABTREEBOXINVOKE = 'YBti';
const uint32 YABFILEBOXSELECT = 'YBfs';
const uint32 YABFILEBOXINVOKE = 'YBfi';
const uint32 YABSHORTCUT = 'YBsh';
const uint32 TYPE_YABVIEW = 1;
char * refsRec=(char*)"";
BCatalog *yabCatalog;
static bool localize = false;
static bool quitting = false;
static property_info prop_list[] = {
{ "YabSendString", {B_SET_PROPERTY, 0}, {B_NAME_SPECIFIER, 0}, "Send a string to MESSAGE$"},
0 // terminate list
};
const char* _L(const char* text)
{
if(localize && yabCatalog)
return yabCatalog->GetString(text, NULL); //B_TRANSLATE_CONTEXT);
return text;
}
/**
* Start the interpreter thread
*/
int32 interpreter(void *data)
{
int argc,t;
char **argv;
YabInterface *yab;
BList *myData = (BList*)data;
argc = (int)myData->ItemAt(0);
argv = (char**)myData->ItemAt(1);
yab = (YabInterface*)myData->ItemAt(2);
t = mmain(argc,argv, yab);
return t;
}
/**
* Constructor sets application directory, spawn the interpreter thread
*/
YabInterface::YabInterface(int argc, char **argv, const char* signature)
:BApplication(signature)
{
BPath AppDirectory;
// app directory
app_info appinfo;
if( GetAppInfo( &appinfo) == B_OK)
{
BEntry ApplicationEntry( &appinfo.ref);
BEntry ApplicationDirectoryEntry;
if( ApplicationEntry.GetParent( &ApplicationDirectoryEntry) == B_OK)
{
if( AppDirectory.SetTo( &ApplicationDirectoryEntry) == B_OK)
{
strcpy(ApplicationDirectory, AppDirectory.Path());
// ApplicationDirectory.SetTo(AppDirectory.Path());
}
}
}
localMessage = "";
BList *myData = new BList(3);
myData->AddItem((void*)argc);
myData->AddItem((void*)argv);
myData->AddItem((void*)this);
myThread = spawn_thread(interpreter,"YabInterpreter",B_NORMAL_PRIORITY,(void*)myData);
if(myThread < B_OK)
{
printf("Can not start thread. Out of memory or maximum thread amount reached.\n");
printf("Exiting now \n\n");
exit(1);
}
if(resume_thread(myThread) < B_OK)
{
printf("Error while starting interpreter!\n");
printf("Exiting now \n\n");
exit(1);
}
viewList = new YabList();
yabbitmaps = new BList();
yabcanvas = new BList();
drawStroking = false;
yabPattern = B_SOLID_HIGH;
yabAlpha = 255;
errorCode = 0;
Roster = NULL;
currentLineNumber = -1;
exiting = false;
for(int i=0; i<63; i++)
mousemessagebuffer[i] = ' ';
mousemessagebuffer[63] = '\0';
myProps = new BPropertyInfo(prop_list);
currentLib = "";
lastMouseMsg = "";
}
YabInterface::~YabInterface()
{
delete mainFileName;
// delete song;
// delete fopen;
// delete fsave;
delete viewList;
// delete Roster;
delete myProps;
if(yabCatalog)
delete yabCatalog;
while(yabbitmaps->CountItems()>0)
{
int i = 0;
BBitmap *b = (BBitmap*)yabbitmaps->RemoveItem(i);
delete b;
}
}
/**
* Returns the application directory
*/
const char* YabInterface::GetApplicationDirectory()
{
return (const char*) ApplicationDirectory;
}
status_t YabInterface::GetSupportedSuites(BMessage *msg)
{
msg->AddString("suites", "suite/vnd.yab-YabInterface");
BPropertyInfo prop_info(prop_list);
msg->AddFlat("messages", &prop_info);
return BApplication::GetSupportedSuites(msg);
}
BHandler* YabInterface::ResolveSpecifier(BMessage *msg, int32 index, BMessage *spec, int32 form, const char *prop)
{
if (myProps->FindMatch(msg, index, spec, form, prop) >= 0)
return (BHandler*)this;
return BApplication::ResolveSpecifier(msg, index, spec, form, prop);
}
void YabInterface::MessageReceived(BMessage *message)
{
// message->PrintToStream();
switch(message->what)
{
case B_SET_PROPERTY:
{
BMessage msg;
int32 i,w;
const char *prop;
if(message->GetCurrentSpecifier(&i, &msg, &w, &prop) != B_BAD_SCRIPT_SYNTAX)
{
BString s;
msg.FindString("name", &s);
localMessage += "_Scripting:";
localMessage += s;
localMessage +="|";
}
}
break;
case B_REFS_RECEIVED:
{
entry_ref ref;
if(message->FindRef("refs", 0, &ref)==B_OK)
{
BEntry e(&ref);
BPath path;
e.GetPath(&path);
localMessage += "_RefsReceived:";
localMessage += path.Path();
localMessage +="|";
}
}
break;
default:
BApplication::MessageReceived(message);
break;
}
}
/**
* The QUIT_REQUESTED message arrived. If the interpreter thread is still active,
* kill it, otherwise exit directly.
*/
bool YabInterface::QuitRequested()
{
exiting = true;
return false;
}
void YabInterface::RefsReceived(BMessage *message){
entry_ref ref;
BString tempstr;
if(message->FindRef("refs", 0, &ref)==B_OK)
{
BEntry e(&ref);
BPath path;
e.GetPath(&path);
tempstr += path.Path();
refsRec = strdup(tempstr.String());
}
}
bool YabInterface::ExitRequested()
{
status_t exit_val;
thread_info t;
// printf("QUITDEBUG: Exit\n");
Lock();
// printf("QUITDEBUG: Locked Ok\n");
// if(!quitting)
// {
// printf("QUITDEBUG: quitting\n");
// kill_thread(myThread);
// printf("QUITDEBUG: Kill Thread Ok\n");
// }
// printf("QUITDEBUG: 1\n");
for(int i=0; i<CountWindows(); i++)
{
YabWindow *w = cast_as(WindowAt(i), YabWindow);
if(w)
if(w->Lock())
w->Quit();
}
snooze(15000);
// printf("QUITDEBUG: 3\n");
// BMessenger(be_app).SendMessage(new BMessage(B_QUIT_REQUESTED));
Quit();
// printf("QUITDEBUG: Quit\n");
// printf("QUITDEBUG: wait\n");
// wait_for_thread(myThread, &exit_val);
// get_thread_info(myThread, &t);
// kill_team(t.team);
// printf("QUITDEBUG: Stopped waiting\n");
Unlock();
// printf("QUITDEBUG: Unlock\n");
exit_thread(B_OK);
return true;
}
/**
* Open a window, add the main view.
*/
void YabInterface::OpenWindow(const BRect frame, const char* id, const char* title)
{
YabWindow* w = new YabWindow(frame,title,id, B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_ASYNCHRONOUS_CONTROLS);
YabView* myView = new YabView(w->Bounds(), id, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_NAVIGABLE_JUMP);
w->Lock();
w->AddChild(myView);
viewList->AddView(id, myView, TYPE_YABVIEW);
// viewList->PrintOut();
// w->Minimize();
w->SetSizeLimits(10,3000,10,3000);
w->Show();
w->Unlock();
w->layout = -1;
}
int YabInterface::CloseWindow(const char* view)
{
int tmp = 0;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BView *child, *oldchild;
if(child = myView->ChildAt(0))
{
while(child)
{
if(is_kind_of(child, YabTabView))
{
for(int i = 0; i<((YabTabView*)child)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)child)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
if(is_kind_of(child, YabBitmapView))
yabcanvas->RemoveItem(child);
// viewList->PrintOut();
BView *subchild;
if(subchild = child->ChildAt(0))
while(subchild)
{
if(is_kind_of(subchild, YabTabView))
{
for(int i = 0; i<((YabTabView*)subchild)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)subchild)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
if(viewList->GetView(subchild->Name()))
{
RemoveView(subchild);
viewList->DelView(subchild->Name());
}
subchild = subchild->NextSibling();
}
if(viewList->GetView(child->Name()))
{
RemoveView(child);
viewList->DelView(child->Name());
}
oldchild = child;
child = child->NextSibling();
if(is_kind_of(oldchild, YabView))
DrawClear(oldchild->Name(), true);
if(is_kind_of(oldchild, BMenuBar))
{
oldchild->Hide();
}
oldchild->RemoveSelf();
delete oldchild;
}
}
if(is_kind_of(myView, YabView))
DrawClear(myView->Name(), true);
if(is_kind_of(myView, BMenuBar))
myView->Hide();
myView->RemoveSelf();
delete myView;
viewList->DelView(view);
// viewList->PrintOut();
w->Quit();
tmp = 1;
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
return tmp;
}
void YabInterface::View(BRect frame, const char* id, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabView *newView = new YabView(frame, id, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_NAVIGABLE_JUMP);
if(w->layout == -1)
newView->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
newView->SetResizingMode(w->layout);
myView->AddChild(newView);
viewList->AddView(id, newView, TYPE_YABVIEW);
// viewList->PrintOut();
newView->Invalidate();
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::BoxView(BRect frame, const char* id, const char* text, int lineType, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBox *newBox = new BBox(frame, id, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE_JUMP);
font_height fh;
(be_bold_font)->GetHeight(&fh);
float y1 = fh.ascent + fh.descent + fh.leading + 1.0;
YabView *newView = new YabView(BRect(3,y1,frame.Width()-3,frame.Height()-3), id, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE_JUMP);
if(w->layout == -1)
{
newBox->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
newView->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
}
else
{
newBox->SetResizingMode(w->layout);
newView->SetResizingMode(w->layout);
}
newBox->SetLabel(text);
switch(lineType)
{
case 0: newBox->SetBorder(B_NO_BORDER);
break;
case 1: newBox->SetBorder(B_PLAIN_BORDER);
break;
default: newBox->SetBorder(B_FANCY_BORDER);
break;
}
newBox->AddChild(newView);
myView->AddChild(newBox);
viewList->AddView(id, newView, TYPE_YABVIEW);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::BoxViewSet(const char* id, const char* option, const char* value)
{
YabView *myView = NULL;
BString tmpOption(option);
BString tmpValue(value);
BBox *myBox = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myBox = cast_as(myView->FindView(id), BBox);
if(myBox)
{
if(tmpOption.IFindFirst("label")!=B_ERROR)
{
myBox->SetLabel(tmpValue);
w->Unlock();
return;
}
if(tmpOption.IFindFirst("line")!=B_ERROR)
{
if(tmpValue.IFindFirst("0")!=B_ERROR)
{
myBox->SetBorder(B_NO_BORDER);
w->Unlock();
return;
}
if(tmpValue.IFindFirst("1")!=B_ERROR)
{
myBox->SetBorder(B_PLAIN_BORDER);
w->Unlock();
return;
}
if(tmpValue.IFindFirst("2")!=B_ERROR)
{
myBox->SetBorder(B_FANCY_BORDER);
w->Unlock();
return;
}
}
w->Unlock();
}
else
w->Unlock();
Error(id, "BOXVIEW");
}
}
}
}
void YabInterface::Tab(BRect frame, const char* id, const char* mode, const char* view)
{
tab_orientation side;
BString option(mode);
if(option.IFindFirst("top")!=B_ERROR)
side = B_TAB_TOP;
else if(option.IFindFirst("bottom")!=B_ERROR)
side = B_TAB_BOTTOM;
else ErrorGen("Invalid Option");
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabTabView *myTabView = new YabTabView(frame, id);
if(w->layout == -1)
myTabView->SetResizingMode(B_FOLLOW_ALL);
else
myTabView->SetResizingMode(w->layout);
myTabView->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE|B_NAVIGABLE_JUMP);
myTabView->SetOrientation(side);
myTabView->SetTabWidth(B_WIDTH_FROM_LABEL);
myView->AddChild(myTabView);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::TabAdd(const char* id, const char* tabname)
{
YabView *myView = NULL;
YabTabView *myTabView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTabView = cast_as(myView->FindView(id), YabTabView);
if(myTabView)
{
BString t(id);
t << myTabView->CountTabs()+1;
BRect contentFrame = myTabView->Bounds();
YabView *newView = new YabView(contentFrame, t.String(), B_FOLLOW_ALL_SIDES,B_WILL_DRAW|B_NAVIGABLE_JUMP);
viewList->AddView(t.String(), newView, TYPE_YABVIEW);
myTabView->AddTab(newView, tabname);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TABVIEW");
}
void YabInterface::TabDel(const char* id, int num)
{
/*
YabView *myView = NULL;
#ifdef BUILD_HAIKUTAB
YabTabView *myTabView = NULL;
#else
BTabView *myTabView = NULL;
#endif
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
#ifdef BUILD_HAIKUTAB
myTabView = cast_as(myView->FindView(id), YabTabView);
#else
myTabView = cast_as(myView->FindView(id), BTabView);
#endif
if(myTabView)
{
if(num-1<0 || num-1>myTabView->CountTabs()) ErrorGen("Invalid tab number");
BView *child, *oldchild;
if(child = myView->ChildAt(0))
{
while(child)
{
BView *subchild;
if(subchild = child->ChildAt(0))
while(subchild)
{
#ifdef BUILD_HAIKUTAB
if(is_kind_of(subchild, YabTabView))
{
for(int i = 0; i<((YabTabView*)subchild)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)subchild)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
#endif
if(viewList->GetView(subchild->Name()))
{
RemoveView(subchild);
viewList->DelView(subchild->Name());
}
subchild = subchild->NextSibling();
}
if(viewList->GetView(child->Name()))
{
RemoveView(child);
viewList->DelView(child->Name());
}
oldchild = child;
child = child->NextSibling();
if(is_kind_of(oldchild, YabView))
DrawClear(oldchild->Name(), true);
if(is_kind_of(oldchild, BMenuBar))
{
oldchild->Hide();
}
oldchild->RemoveSelf();
delete oldchild;
}
}
if(is_kind_of(myView, YabView))
DrawClear(myView->Name(), true);
if(is_kind_of(myView, BMenuBar))
myView->Hide();
BBox *box = cast_as(myView->Parent(), BBox);
myView->RemoveSelf();
delete myView;
viewList->DelView(window);
if(box)
{
box->RemoveSelf();
delete box;
}
#ifdef BUILD_HAIKUTAB
WindowClear(myTabView->ItemAt(num-1)->Name());
RemoveView(myTabView->ItemAt(num-1));
#else
WindowClear((myTabView->TabAt(num-1)).GetTargetView().Name());
#endif
myTabView->RemoveTab(num-1);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TABVIEW");
*/
}
void YabInterface::TabSet(const char* id, int num)
{
YabView *myView = NULL;
YabTabView *myTabView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTabView = cast_as(myView->FindView(id), YabTabView);
if(myTabView)
{
if(num>0 && num<=myTabView->CountTabs())
myTabView->Select(num-1);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TABVIEW");
}
int YabInterface::TabViewGet(const char* id)
{
int ret = -1;
YabView *myView = NULL;
YabTabView *myTabView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTabView = cast_as(myView->FindView(id), YabTabView);
if(myTabView)
{
ret = myTabView->Selection();
w->Unlock();
return ret+1;
}
w->Unlock();
}
}
}
Error(id, "TABVIEW");
}
void YabInterface::Launch(const char* strg)
{
BString tst(strg);
entry_ref *ref = new entry_ref();
BEntry entry(strg);
entry.GetRef(ref);
if(entry.IsDirectory())
{
BMessage msg, reply;
msg.what = B_REFS_RECEIVED;
msg.AddRef("refs", ref);
BMessenger("application/x-vnd.Be-TRAK").SendMessage(&msg, &reply);
return;
}
status_t t = be_roster->Launch(ref);
if(t != B_OK)
{
if(tst.FindFirst("http://") != B_ERROR || tst.FindFirst("file://") != B_ERROR || tst.FindFirst("www.") != B_ERROR)
{
char *link = tst.LockBuffer( tst.Length()+1 );
status_t result = be_roster->Launch( "text/html", 1, &link );
tst.UnlockBuffer();
}
}
delete ref;
}
void YabInterface::CreateButton(BRect frame, const char* id, const char* title, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BButton* myButton = new BButton(frame,id,title,new BMessage(YABBUTTON));
if(w->layout == -1)
myButton->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
myButton->SetResizingMode(w->layout);
myButton->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
// trick Haiku, resize button again
myButton->ResizeTo(frame.Width(), frame.Height());
myView->AddChild(myButton);
// viewList->AddView(id, myButton, TYPE_BBUTTON);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
int YabInterface::CreateImage(BPoint coordinates, const char* FileName, const char* window)
{
BBitmap* myBitmap = NULL;
BFile imageFile;
BPath imagePath;
int ret = 0;
if(*FileName=='/')
imageFile.SetTo(FileName, B_READ_ONLY);
else
if(!strcmp(ApplicationDirectory,""))
{
if(imagePath.SetTo((const char*)ApplicationDirectory, FileName)==B_OK)
imageFile.SetTo(imagePath.Path(), B_READ_ONLY);
}
if(imageFile.InitCheck()!=B_OK)
imageFile.SetTo(FileName, B_READ_ONLY);
if(imageFile.InitCheck()!=B_OK)
return 1;
Roster = BTranslatorRoster::Default();
if(!Roster)
return 2;
BBitmapStream Stream;
if(Roster->Translate(&imageFile, NULL, NULL, &Stream, B_TRANSLATOR_BITMAP)<B_OK)
return 3;
if(Stream.DetachBitmap(&myBitmap)!=B_OK)
return 4;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 10;
t->x1 = coordinates.x; t->y1 = coordinates.y;
t->bitmap = myBitmap;
myView->drawList->AddItem(t);
myView->Invalidate(BRect(coordinates.x, coordinates.y, coordinates.x+myBitmap->Bounds().Width(), coordinates.y+myBitmap->Bounds().Height()));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
drawing_mode mode = bview->DrawingMode();
bview->SetDrawingMode(B_OP_ALPHA);
bview->DrawBitmap(myBitmap, coordinates);
bview->SetDrawingMode(mode);
bview->Sync();
b->Unlock();
delete Roster;
delete myBitmap;
return 0;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
drawing_mode mode = bView->DrawingMode();
bView->SetDrawingMode(B_OP_ALPHA);
bView->DrawBitmap(myBitmap, coordinates);
bView->SetDrawingMode(mode);
bView->Sync();
b->Unlock();
myView->Draw(BRect(coordinates.x, coordinates.y, coordinates.x+myBitmap->Bounds().Width(), coordinates.y+myBitmap->Bounds().Height()));
w->Unlock();
delete Roster;
delete myBitmap;
return 0;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
delete Roster;
return 0;
}
int YabInterface::CreateImage(BRect frame, const char* FileName, const char* window)
{
int scaling = 0;
if(frame.right == -1) scaling = 1;
if(frame.bottom == -1) scaling = 2;
if(frame.right == -1 && frame.bottom == -1) scaling = 3;
BBitmap* myBitmap = NULL;
BFile ImageFile;
BPath ImagePath;
int ret = 0;
if(*FileName=='/')
ImageFile.SetTo(FileName, B_READ_ONLY);
else
if(!strcmp(ApplicationDirectory,""))
{
if( ImagePath.SetTo((const char*)ApplicationDirectory, FileName) == B_OK)
ImageFile.SetTo(ImagePath.Path(), B_READ_ONLY);
}
if(ImageFile.InitCheck()!=B_OK)
ImageFile.SetTo(FileName, B_READ_ONLY);
if(ImageFile.InitCheck()!=B_OK)
return 1;
Roster = BTranslatorRoster::Default();
if(!Roster)
return 2;
BBitmapStream Stream;
if(Roster->Translate(&ImageFile, NULL, NULL, &Stream, B_TRANSLATOR_BITMAP) < B_OK)
return 3;
if(Stream.DetachBitmap(&myBitmap) != B_OK)
return 4;
BRect newframe;
switch(scaling)
{
case 1:
{
BRect t(myBitmap->Bounds());
double width;
newframe = frame;
width = (t.right-t.left)*((frame.bottom-frame.top)/(t.bottom-t.top));
newframe.right = newframe.left+width;
}
break;
case 2:
{
BRect t(myBitmap->Bounds());
double height;
newframe = frame;
height = (t.bottom-t.top)*((frame.right-frame.left)/(t.right-t.left));
newframe.bottom = newframe.top+height;
}
break;
case 3: newframe = myBitmap->Bounds();
break;
default: newframe = frame;
}
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 11;
t->x1 = newframe.left; t->y1 = newframe.top;
t->x2 = newframe.right; t->y2 = newframe.bottom;
t->bitmap = myBitmap;
myView->drawList->AddItem(t);
myView->Invalidate(newframe);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
drawing_mode mode = bview->DrawingMode();
bview->SetDrawingMode(B_OP_ALPHA);
bview->DrawBitmap(myBitmap, newframe);
bview->SetDrawingMode(mode);
bview->Sync();
b->Unlock();
delete Roster;
delete myBitmap;
return 0;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
drawing_mode mode = bView->DrawingMode();
bView->SetDrawingMode(B_OP_ALPHA);
bView->DrawBitmap(myBitmap, newframe);
bView->SetDrawingMode(mode);
bView->Sync();
b->Unlock();
myView->Draw(newframe);
w->Unlock();
delete Roster;
delete myBitmap;
return 0;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
delete Roster;
return 0;
}
int YabInterface::CreateSVG(BRect frame, const char* FileName, const char* window)
{
#ifdef LIBBSVG
BPath path;
BString file;
file.SetTo(FileName);
if(FileName[0]!='/')
{
if(!strcmp(ApplicationDirectory,""))
{
if(path.SetTo((const char*)ApplicationDirectory, FileName) == B_OK)
file.SetTo(path.Path());
}
}
int ret = 0;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView); // untested!
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BSVGView *mySVG = new BSVGView(frame,"svgview",0);
mySVG->SetViewColor(myView->ViewColor());
mySVG->SetScaleToFit(true);
if(w->layout == -1)
mySVG->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
mySVG->SetResizingMode(w->layout);
mySVG->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE);
if(mySVG->LoadFromFile(file.String())!=B_OK)
ret = 1;
else
myView->AddChild(mySVG);
myView->Invalidate();
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
return ret;
#else
return 2;
#endif
}
void YabInterface::StatusBar(BRect frame, const char* id, const char* label1, const char* label2, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BStatusBar *bar = new BStatusBar(frame, id, label1, label2);
bar->SetBarHeight((float)frame.Height()-(be_plain_font)->Size()-5);
if(w->layout == -1)
bar->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
bar->SetResizingMode(w->layout);
myView->AddChild(bar);
bar->Draw(frame);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::StatusBarSet(const char* id, const char* label1, const char* label2, double state)
{
YabView *myView = NULL;
BStatusBar *myBar = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myBar = cast_as(myView->FindView(id), BStatusBar);
if(myBar)
{
myBar->Reset();
myBar->Update((float)state, label1, label2);
w->Unlock();
return;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
}
Error(id, "STATUSBAR");
}
void YabInterface::StatusBarSet(BRect frame, const char* id, const char* view)
{
// empty!
}
void YabInterface::StatusBarSet(const char* id, int r, int g, int b)
{
YabView *myView = NULL;
BStatusBar *myBar = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myBar = cast_as(myView->FindView(id), BStatusBar);
if(myBar)
{
rgb_color rgb = {r,g,b,255};
myBar->SetBarColor(rgb);
w->Unlock();
return;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
}
Error(id, "STATUSBAR");
}
void YabInterface::CreateMenu(const char* menuhead, const char* menuitem, const char *shortcut, const char* window)
{
char myShortcut;
int32 modifiers = 0;
BString t(shortcut);
if(t.Length()>1)
{
myShortcut = shortcut[t.Length()-1];
if(t.IFindFirst("s")!=B_ERROR && t.IFindFirst("s")<t.Length()-1)
modifiers = modifiers|B_SHIFT_KEY;
if(t.IFindFirst("c")!=B_ERROR && t.IFindFirst("c")<t.Length()-1)
modifiers = modifiers|B_CONTROL_KEY;
if(t.IFindFirst("o")!=B_ERROR && t.IFindFirst("o")<t.Length()-1)
modifiers = modifiers|B_OPTION_KEY;
}
else
myShortcut = shortcut[0];
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BMenuBar *menubar;
YabMenu *menu = NULL;
BMenuItem *item = NULL;
w->Lock();
menubar = cast_as(myView->FindView("menubar"), BMenuBar);
if(menubar == NULL)
{
menubar = new BMenuBar(myView->Bounds(),"menubar");
myView->AddChild(menubar);
}
for(int i=0; i<menubar->CountItems(); i++)
if(!strcmp( menubar->ItemAt(i)->Label(), menuhead))
menu = cast_as(menubar->SubmenuAt(i), YabMenu);
if(menu == NULL)
{
menu = new YabMenu(menuhead);
menubar->AddItem((BMenu*)menu);
}
if(!strcmp(menuitem,"--"))
menu->AddItem(new BSeparatorItem());
else
menu->AddItem(new BMenuItem(menuitem, new BMessage(YABMENU), myShortcut, modifiers));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::CreateTextControl(BRect frame, const char* id, const char* label, const char* text, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BTextControl *textControl = new BTextControl(frame, id ,label, text, new BMessage(YABTEXTCONTROL));
textControl->SetDivider(textControl->StringWidth(label)+5.0);
if(w)
{
if(w->layout == -1)
textControl->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
textControl->SetResizingMode(w->layout);
}
textControl->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(textControl);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::CreateCheckBox(double x, double y, const char* id, const char* label, int isActivated, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BRect frame(x,y,x+1,y+1);
BCheckBox *checkBox = new BCheckBox(frame, id, label, new BMessage(YABCHECKBOX));
checkBox->ResizeToPreferred();
if(isActivated>0) checkBox->SetValue(B_CONTROL_ON);
if(w->layout == -1)
checkBox->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
checkBox->SetResizingMode(w->layout);
checkBox->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(checkBox);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::CreateRadioButton(double x, double y, const char* groupID, const char* label, int isActivated, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BRect frame(x,y,x+1,y+1);
BRadioButton *radio = new BRadioButton(frame, groupID, label, new BMessage(YABRADIOBUTTON));
radio->ResizeToPreferred();
if(isActivated>0) radio->SetValue(B_CONTROL_ON);
if(w->layout == -1)
radio->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
radio->SetResizingMode(w->layout);
radio->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(radio);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::CreateListBox(BRect frame, const char* title, int scrollbar, const char* window)
{
YabView *myView = cast_as(((BView*)viewList->GetView(window)), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
uint32 resizeMode;
w->Lock();
if(scrollbar == 3 || scrollbar == 1) frame.right -= B_V_SCROLL_BAR_WIDTH;
if(scrollbar>2) frame.bottom -= B_H_SCROLL_BAR_HEIGHT;
BListView *list = new BListView(frame,title);
if(w->layout == -1)
resizeMode = B_FOLLOW_ALL;
else
resizeMode = w->layout;
list->SetResizingMode(resizeMode);
list->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
list->SetSelectionMessage(new BMessage(YABLISTBOXSELECT));
list->SetInvocationMessage(new BMessage(YABLISTBOXINVOKE));
switch(scrollbar)
{
case 3: // both
myView->AddChild(new BScrollView("scroll_list", list, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, true, true));
break;
case 2: // horizontal
myView->AddChild(new BScrollView("scroll_list", list, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, true, false));
break;
case 0: // none
myView->AddChild(list);
break;
default: // vertical is default
myView->AddChild(new BScrollView("scroll_list", list, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, false, true));
break;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::CreateDropBox(BRect frame, const char* title, const char* label, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BPopUpMenu *dropmenu = new BPopUpMenu("");
BMenuField *drop = new BMenuField(frame,title,label, dropmenu, true);
drop->SetDivider(drop->StringWidth(label)+5.0);
if(w->layout == -1)
drop->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
drop->SetResizingMode(w->layout);
drop->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(drop);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::CreateItem(const char* id, const char* item)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(id), BMenuField);
if(myMenuField)
{
BPopUpMenu *myPopup = cast_as(myMenuField->Menu(), BPopUpMenu);
if(myPopup)
{
if(!strcmp(item,"--"))
myPopup->AddItem(new BSeparatorItem());
else
{
BMenuItem *tmp = new BMenuItem(item, new BMessage(YABDROPBOX));
myPopup->AddItem(tmp);
if(myPopup->CountItems()==1) // first Item
tmp->SetMarked(true);
}
w->Unlock();
return;
}
}
w->Unlock();
}
}
}
Error(id, "DROPBOX");
}
void YabInterface::RemoveItem(const char* title, const char* item)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BListView *myList = cast_as(myView->FindView(title), BListView);
if(myList)
{
for(int i=0; i<myList->CountItems(); i++)
{
BStringItem *stritem = cast_as(myList->ItemAt(i), BStringItem);
if(stritem && !strcmp(stritem->Text(), item))
{
myList->RemoveItem(i);
w->Unlock();
return;
}
}
w->Unlock();
ErrorGen("Item not found");
}
w->Unlock();
}
}
}
Error(title, "DROPBOX");
}
void YabInterface::ClearItems(const char* title)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BListView *myList = cast_as(myView->FindView(title), BListView);
if(myList)
{
myList->RemoveItems(0,myList->CountItems());
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "DROPBOX");
}
void YabInterface::DrawText(BPoint coordinates, const char* text, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 0;
t->x1 = coordinates.x; t->y1 = coordinates.y;
t->chardata = strdup(text);
myView->drawList->AddItem(t);
font_height height;
myView->GetFontHeight(&height);
BRect bbox;
bbox.left = coordinates.x;
bbox.top = coordinates.y - height.ascent;
bbox.right = coordinates.x + myView->StringWidth(text);
bbox.bottom = coordinates.y + height.descent;
BFont tFont;
myView->GetFont(&tFont);
if(tFont.Rotation() == 0.0 && tFont.Shear() == 90.0)
myView->Invalidate(bbox);
else
myView->Invalidate();
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
bview->DrawString(text, coordinates);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
bView->DrawString(text, coordinates);
bView->Sync();
b->Unlock();
font_height height;
bView->GetFontHeight(&height);
BRect bbox;
bbox.left = coordinates.x;
bbox.top = coordinates.y - height.ascent;
bbox.right = coordinates.x + bView->StringWidth(text);
bbox.bottom = coordinates.y + height.descent;
myView->Draw(bbox);
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawRect(BRect frame, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
if(drawStroking)
t->command = 4;
else
t->command = 5;
t->x1 = frame.left; t->y1 = frame.top;
t->x2 = frame.right; t->y2 = frame.bottom;
t->p = yabPattern;
myView->drawList->AddItem(t);
myView->Invalidate(frame);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
if(drawStroking)
bview->StrokeRect(frame, yabPattern);
else
bview->FillRect(frame, yabPattern);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
if(drawStroking)
bView->StrokeRect(frame, yabPattern);
else
bView->FillRect(frame, yabPattern);
bView->Sync();
b->Unlock();
myView->Draw(frame);
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawClear(const char* window, bool isExit)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
rgb_color lowcolor = myView->LowColor();
rgb_color highcolor = myView->HighColor();
BFont lastfont;
myView->GetFont(&lastfont);
while(myView->drawList->CountItems()>0)
{
YabDrawing *t = (YabDrawing*)myView->drawList->LastItem();
myView->drawList->RemoveItem(t);
if(t->command == 0) delete [] t->chardata;
if(t->command == 10 || t->command == 11) delete t->bitmap;
delete t;
}
YabDrawing *t1 = new YabDrawing();
t1->command = 7;
t1->r = lowcolor.red; t1->g = lowcolor.green;
t1->b = lowcolor.blue; t1->alpha = yabAlpha;
myView->drawList->AddItem(t1);
YabDrawing *t2 = new YabDrawing();
t2->command = 6;
t2->r = highcolor.red; t2->g = highcolor.green;
t2->b = highcolor.blue; t2->alpha = yabAlpha;
myView->drawList->AddItem(t2);
YabDrawing *t3 = new YabDrawing();
t3->command = 12;
t3->font = lastfont;
myView->drawList->AddItem(t3);
myView->Invalidate();
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
if(!isExit) Error(window, "VIEW");
}
void YabInterface::DrawDot(double x, double y, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 1;
t->x1 = x; t->y1 = y;
t->x2 = x; t->y2 = y;
t->p = yabPattern;
myView->drawList->AddItem(t);
myView->Invalidate(BRect(x,y,x,y));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
bview->StrokeLine(BPoint(x,y), BPoint(x,y), yabPattern);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
bView->StrokeLine(BPoint(x,y), BPoint(x,y), yabPattern);
bView->Sync();
b->Unlock();
myView->Draw(BRect(x,y,x,y));
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawLine(double x1, double y1, double x2, double y2, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 1;
t->x1 = x1; t->y1 = y1;
t->x2 = x2; t->y2 = y2;
t->p = yabPattern;
myView->drawList->AddItem(t);
double minx1 = x1<x2?x1:x2; double minx2 = x1<x2?x2:x1;
double miny1 = y1<y2?y1:y2; double miny2 = y1<y2?y2:y1;
myView->Invalidate(BRect(minx1,miny1,minx2,miny2));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
bview->StrokeLine(BPoint(x1,y1), BPoint(x2,y2), yabPattern);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
bView->StrokeLine(BPoint(x1,y1), BPoint(x2,y2), yabPattern);
bView->Sync();
b->Unlock();
double minx1 = x1<x2?x1:x2; double minx2 = x1<x2?x2:x1;
double miny1 = y1<y2?y1:y2; double miny2 = y1<y2?y2:y1;
// myView->Invalidate(BRect(minx1,miny1,minx2,miny2));
myView->Draw(BRect(minx1,miny1,minx2,miny2));
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawCircle(double x, double y, double r, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
if(drawStroking)
t->command = 2;
else
t->command = 3;
t->x1 = x; t->y1 = y;
t->x2 = r; t->y2 = r;
t->p = yabPattern;
myView->drawList->AddItem(t);
myView->Invalidate(BRect(x-r,y-r,x+r,y+r));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
if(drawStroking)
bview->StrokeEllipse(BPoint(x,y), r, r, yabPattern);
else
bview->FillEllipse(BPoint(x,y), r, r, yabPattern);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
if(drawStroking)
bView->StrokeEllipse(BPoint(x,y), r, r, yabPattern);
else
bView->FillEllipse(BPoint(x,y), r, r, yabPattern);
bView->Sync();
b->Unlock();
myView->Draw(BRect(x-r,y-r,x+r,y+r));
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawEllipse(double x, double y, double r1, double r2, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
if(drawStroking)
t->command = 2;
else
t->command = 3;
t->x1 = x; t->y1 = y;
t->x2 = r1; t->y2 = r2;
t->p = yabPattern;
myView->drawList->AddItem(t);
myView->Invalidate(BRect(x-r1,y-r2,x+r1,y+r2));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
if(drawStroking)
bview->StrokeEllipse(BPoint(x,y), r1, r2, yabPattern);
else
bview->FillEllipse(BPoint(x,y), r1, r2, yabPattern);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
if(drawStroking)
bView->StrokeEllipse(BPoint(x,y), r1, r2, yabPattern);
else
bView->FillEllipse(BPoint(x,y), r1, r2, yabPattern);
bView->Sync();
b->Unlock();
myView->Draw(BRect(x-r1,y-r2,x+r1,y+r2));
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawCurve(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, const char* window)
{
double invx1 = x1<x2?x1:x2; invx1 = invx1<x3?invx1:x3; invx1 = invx1<x4?invx1:x4;
double invx2 = x1>x2?x1:x2; invx2 = invx2>x3?invx2:x3; invx2 = invx2>x4?invx2:x4;
double invy1 = y1<y2?y1:y2; invy1 = invy1<y3?invy1:y3; invy1 = invy1<y4?invy1:y4;
double invy2 = y1>y2?y1:y2; invy2 = invy2>y3?invy2:y3; invy2 = invy2>y4?invy2:y4;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabDrawing *t = new YabDrawing();
if(drawStroking)
t->command = 8;
else
t->command = 9;
t->x1 = x1; t->y1 = y1;
t->x2 = x2; t->y2 = y2;
t->x3 = x3; t->y3 = y3;
t->x4 = x4; t->y4 = y4;
t->p = yabPattern;
myView->drawList->AddItem(t);
myView->Invalidate(BRect(invx1,invy1,invx2,invy2));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
BPoint p[4];
p[0].Set(x1,y1);
p[1].Set(x2,y2);
p[2].Set(x3,y3);
p[3].Set(x4,y4);
if(drawStroking)
{
bview->SetPenSize(1.01);
bview->StrokeBezier(p, yabPattern);
bview->SetPenSize(1.0);
}
else
bview->FillBezier(p, yabPattern);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
BPoint p[4];
p[0].Set(x1,y1);
p[1].Set(x2,y2);
p[2].Set(x3,y3);
p[3].Set(x4,y4);
if(drawStroking)
{
bView->SetPenSize(1.01);
bView->StrokeBezier(p, yabPattern);
bView->SetPenSize(1.0);
}
else
bView->FillBezier(p, yabPattern);
bView->Sync();
b->Unlock();
myView->Draw(BRect(invx1,invy1,invx2,invy2));
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::CreateText(double x, double y, const char* id, const char* text, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
double h,b;
b = be_plain_font->StringWidth(text)+1;
h = be_plain_font->Size();
BStringView *s = new BStringView(BRect(x,y-3,x+b,y+h-3), id, text);
s->ResizeToPreferred();
if(w->layout == -1)
s->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
s->SetResizingMode(w->layout);
s->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE);
myView->AddChild(s);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::Text2(BRect frame, const char* id, const char* text, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BStringView *s = new BStringView(frame, id, text);
if(w->layout == -1)
s->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
s->SetResizingMode(w->layout);
s->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE);
myView->AddChild(s);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::TextAlign(const char* txt, const char* option)
{
BString tmp(option);
alignment align;
if(tmp.IFindFirst("align-left")!=B_ERROR)
align = B_ALIGN_LEFT;
else if(tmp.IFindFirst("align-center")!=B_ERROR)
align = B_ALIGN_CENTER;
else if(tmp.IFindFirst("align-right")!=B_ERROR)
align = B_ALIGN_RIGHT;
else
ErrorGen("Unknown option");
YabView *myView = NULL;
BStringView *myStringView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myStringView = cast_as(myView->FindView(txt), BStringView);
if(myStringView)
{
myStringView->SetAlignment(align);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(txt, "TEXT");
}
void YabInterface::Slider(BRect frame, const char* id, const char* title, int min, int max, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BSlider *mySlider = new BSlider(frame, id, title, new BMessage(YABSLIDER), min, max);
if(w->layout == -1)
mySlider->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
mySlider->SetResizingMode(w->layout);
mySlider->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(mySlider);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::Slider(BRect frame, const char* id, const char* title, int min, int max, const char* option, const char* view)
{
BString tmp(option);
bool thumb = true, orient = true;
if(tmp.IFindFirst("vertical")!=B_ERROR)
orient = false;
if(tmp.IFindFirst("triangle")!=B_ERROR)
thumb = false;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BSlider *mySlider = new BSlider(frame, id, title, new BMessage(YABSLIDER), min, max);
if(w->layout == -1)
mySlider->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
mySlider->SetResizingMode(w->layout);
mySlider->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
if(!orient)
{
mySlider->SetOrientation(B_VERTICAL);
mySlider->SetBarThickness(10);
}
if(!thumb) mySlider->SetStyle(B_TRIANGLE_THUMB);
myView->AddChild(mySlider);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::SetSlider(const char* id, const char* label1, const char* label2)
{
YabView *myView = NULL;
BSlider *mySlider = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySlider = cast_as(myView->FindView(id), BSlider);
if(mySlider)
{
mySlider->SetLimitLabels(label1, label2);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "SLIDER");
}
void YabInterface::SetSlider(const char* id, const char* bottomtop, int count)
{
hash_mark_location location = B_HASH_MARKS_BOTH;
BString tmp(bottomtop);
if(tmp.IFindFirst("none")!=B_ERROR)
location = B_HASH_MARKS_NONE;
if(tmp.IFindFirst("left")!=B_ERROR)
location = B_HASH_MARKS_LEFT;
if(tmp.IFindFirst("right")!=B_ERROR)
location = B_HASH_MARKS_RIGHT;
if(tmp.IFindFirst("top")!=B_ERROR)
location = B_HASH_MARKS_TOP;
if(tmp.IFindFirst("bottom")!=B_ERROR)
location = B_HASH_MARKS_BOTTOM;
YabView *myView = NULL;
BSlider *mySlider = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySlider = cast_as(myView->FindView(id), BSlider);
if(mySlider)
{
mySlider->SetHashMarks(location);
mySlider->SetHashMarkCount(count);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "SLIDER");
}
void YabInterface::SetSlider(const char* id, const char* part, int r, int g, int b)
{
bool barcolor = true;
BString tmp(part);
if(tmp.IFindFirst("fillcolor"))
barcolor = false;
YabView *myView = NULL;
BSlider *mySlider = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySlider = cast_as(myView->FindView(id), BSlider);
if(mySlider)
{
rgb_color rgb = {r,g,b,255};
if(barcolor)
mySlider->SetBarColor(rgb);
else
mySlider->UseFillColor(true,&rgb);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "SLIDER");
}
void YabInterface::SetSlider(const char* id, int value)
{
YabView *myView = NULL;
BSlider *mySlider = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySlider = cast_as(myView->FindView(id), BSlider);
if(mySlider)
{
mySlider->SetValue(value);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "SLIDER");
}
void YabInterface::SetOption(const char* id, const char* option, const char* value)
{
bool label = false;
BString tmpOption(option);
if(tmpOption.IFindFirst("label")!=B_ERROR)
label = true;
if(!label)
ErrorGen("Unknown option");
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BControl *target = cast_as(myView->FindView(id), BControl);
if(target)
{
target->SetLabel(value);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "CONTROL");
}
void YabInterface::SetOption(const char* id, const char* option, int r, int g, int b)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BView *target = myView->FindView(id);
if(target)
{
rgb_color rgb = {r,g,b,0};
target->SetViewColor(rgb);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "VIEW");
}
void YabInterface::SetOption(const char* id, const char* option)
{
BString tmpOption(option);
if(tmpOption.IFindFirst("auto-resize")==B_ERROR)
ErrorGen("Unknown option");
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BView *target = myView->FindView(id);
if(target)
{
target->ResizeToPreferred();
w->Unlock();
return;
}
w->Unlock();
}
}
}
ErrorGen("View not found");
}
void YabInterface::SetOption(const char* id, const char* option, int value)
{
BString tmpOption(option);
bool isFocus = false;
bool isEnabled = false;
bool isVisible = false;
if(tmpOption.IFindFirst("enabled")!=B_ERROR)
isEnabled = true;
if(tmpOption.IFindFirst("focus")!=B_ERROR)
isFocus = true;
if(tmpOption.IFindFirst("visible")!=B_ERROR)
isVisible = true;
if(!isFocus && !isEnabled && !isVisible)
ErrorGen("Unknown option");
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BView *target = myView->FindView(id);
if(target)
{
if(isEnabled)
{
BControl *myControl = cast_as(target, BControl);
if(myControl)
myControl->SetEnabled(value);
else
{
BMenuField *myMenu = cast_as(target, BMenuField);
if(myMenu)
myMenu->SetEnabled(value);
else
Error(id, "CONTROL or DROPBOX");
}
}
if(isFocus)
{
target->MakeFocus(value);
}
if(isVisible)
{
BControl *myControl = cast_as(target, BControl);
if(myControl)
{
if(value)
{
if (myControl->IsHidden())
{
myControl->Show();
}
}
else
{
if (!myControl->IsHidden())
{
myControl->Hide();
}
}
}
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
ErrorGen("View not found");
}
void YabInterface::DropZone(const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
myView->dropZone = true;
else
Error(view, "VIEW");
}
void YabInterface::ColorControl(double x, double y, const char* id, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BColorControl *myCControl = new BColorControl(BPoint(x,y), B_CELLS_32x8, 2, id, new BMessage(YABCOLORCONTROL),false);
if(w->layout == -1)
myCControl->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
myCControl->SetResizingMode(w->layout);
myCControl->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(myCControl);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::ColorControl(const char* id, int r, int g, int b)
{
YabView *myView = NULL;
BColorControl *myCControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myCControl = cast_as(myView->FindView(id), BColorControl);
if(myCControl)
{
rgb_color t = {r,g,b,255};
myCControl->SetValue(t);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "COLORCONTROL");
}
void YabInterface::TextControl(const char* id, const char* text)
{
YabView *myView = NULL;
BTextControl *myTControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTControl = cast_as(myView->FindView(id), BTextControl);
if(myTControl)
{
myTControl->SetText(text);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TEXTCONTROL");
}
void YabInterface::TextControl(const char* id, int mode)
{
YabView *myView = NULL;
BTextControl *myTControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTControl = cast_as(myView->FindView(id), BTextControl);
if(myTControl)
{
BTextView *myTView = myTControl->TextView();
switch(mode)
{
case 1:
myTView->HideTyping(true);
break;
default:
myTView->HideTyping(false);
break;
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TEXTCONTROL");
}
void YabInterface::TextControl(const char* id, const char* option, const char* value)
{
YabView *myView = NULL;
BString tmpOption(option);
BString tmpValue(value);
BTextControl *myTControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
int32 x=0;
myTControl = cast_as(myView->FindView(id), BTextControl);
if(myTControl)
{
BTextView *myTView = myTControl->TextView();
if(tmpOption.IFindFirst("focus")!=B_ERROR)
{
if(tmpValue.IFindFirst("true")!=B_ERROR)
{
bool focused = true;
int32 ofset=0;
myTControl -> MakeFocus(focused);
myTView-> Select(ofset,ofset);
}
if(tmpValue.IFindFirst("false")!=B_ERROR)
{
bool focused = false;
myTControl -> MakeFocus(focused);
}
}
if(tmpOption.IFindFirst("Curser")!=B_ERROR || tmpOption.IFindFirst("Cursor")!=B_ERROR )
{
const char* str_int = tmpValue.String();
bool focused = true;
int32 ofset=0;
ofset= atoi(str_int);
myTControl -> MakeFocus(focused);
myTView-> Select(ofset,ofset);
}
if(tmpOption.IFindFirst("type")!=B_ERROR)
{
if(tmpValue.IFindFirst("number")!=B_ERROR)
{
for (x=0;x<48; x++)
{
myTView->DisallowChar(x);
}
for (x=58;x<128; x++)
{
myTView->DisallowChar(x);
}
x=46;
myTView-> AllowChar(x);
}
if(tmpValue.IFindFirst("alphanumeric")!=B_ERROR)
{
for (x=0;x<128; x++)
{
myTView->AllowChar(x);
}
}
}
if(tmpOption.IFindFirst("align")!=B_ERROR)
{
if(tmpValue.IFindFirst("right")!=B_ERROR)
{
myTControl->SetAlignment(B_ALIGN_LEFT,B_ALIGN_RIGHT);
}
if(tmpValue.IFindFirst("center")!=B_ERROR)
{
myTControl->SetAlignment(B_ALIGN_LEFT,B_ALIGN_CENTER);
}
if(tmpValue.IFindFirst("left")!=B_ERROR)
{
myTControl->SetAlignment(B_ALIGN_LEFT,B_ALIGN_LEFT);
}
}
if(tmpOption.IFindFirst("length")!=B_ERROR)
{
const char* str_int = tmpValue.String();
int i = atoi(str_int);
if (i>0)
{
myTView->SetMaxBytes(i);
myTView->SetFontAndColor(be_fixed_font);
}
if (i=0)
{
ErrorGen("Bad length");
}
}
if(tmpOption.IFindFirst("exclude")!=B_ERROR)
{
int i;
for (i=0; i<= tmpValue.CountChars();i++)
{
x=tmpValue.ByteAt(i);
myTView->DisallowChar(x);
}
}
if(tmpOption.IFindFirst("include")!=B_ERROR)
{
int i;
for (i=0; i<= tmpValue.CountChars();i++)
{
x=tmpValue.ByteAt(i);
myTView->AllowChar(x);
}
}
}
w->Unlock();
return;
}
w->Unlock();
}
}
Error(id, "TEXTCONTROL");
}
void YabInterface::TextControl(const char* id)
{
YabView *myView = NULL;
BTextControl *myTControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTControl = cast_as(myView->FindView(id), BTextControl);
if(myTControl)
{
myTControl->SetText("");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TEXTCONTROL");
}
void YabInterface::CreateAlert(const char* text, const char* button1, const char* option)
{
alert_type tmp;
BString typ(option);
tmp = B_EMPTY_ALERT;
if(typ.IFindFirst("info")!=B_ERROR) tmp = B_INFO_ALERT;
else if(typ.IFindFirst("idea")!=B_ERROR) tmp = B_IDEA_ALERT;
else if(typ.IFindFirst("warning")!=B_ERROR) tmp = B_WARNING_ALERT;
else if(typ.IFindFirst("stop")!=B_ERROR) tmp = B_STOP_ALERT;
(new BAlert("Alert!",text,button1,NULL,NULL,B_WIDTH_AS_USUAL,tmp))->Go();
}
const char* YabInterface::LoadFilePanel(const char *mode, const char* title, const char* directory)
{
int myMode = -1;
BString opt(mode);
if(opt.IFindFirst("Load-File")!=B_ERROR)
myMode = 0;
if(opt.IFindFirst("Save-File")!=B_ERROR)
myMode = 1;
if(opt.IFindFirst("Load-Directory")!=B_ERROR)
myMode = 2;
if(opt.IFindFirst("Load-File-and-Directory")!=B_ERROR)
myMode = 3;
if(myMode == -1) ErrorGen("Invalid Option");
YabFilePanel tmp;
BPath path;
BString myTitle(title);
BEntry *entry = tmp.MyFilePanel(myTitle.String(),directory, "", myMode);
entry->GetPath(&path);
if(myMode != 1 && !entry->Exists())
loadPanel[0] = '\0';
else
{
if(path.InitCheck() == B_OK)
strcpy(loadPanel,path.Path());
else
loadPanel[0] = '\0';
}
delete entry;
return (const char*)loadPanel;
}
const char* YabInterface::SaveFilePanel(const char *mode, const char* title, const char* directory, const char* filename)
{
int myMode = -1;
BString opt(mode);
if(opt.IFindFirst("Load-File")!=B_ERROR)
myMode = 0;
if(opt.IFindFirst("Save-File")!=B_ERROR)
myMode = 1;
if(opt.IFindFirst("Load-Directory")!=B_ERROR)
myMode = 2;
if(opt.IFindFirst("Load-File-and-Directory")!=B_ERROR)
myMode = 3;
if(myMode == -1) ErrorGen("Invalid Option");
YabFilePanel tmp;
BPath path;
BString myTitle(title);
BEntry *entry = tmp.MyFilePanel(myTitle.String(),directory, filename, myMode);
entry->GetPath(&path);
if(myMode != 1 && !entry->Exists())
loadPanel[0] = '\0';
else
{
if(path.InitCheck() == B_OK)
strcpy(loadPanel,path.Path());
else
loadPanel[0] = '\0';
}
delete entry;
return (const char*)loadPanel;
}
void YabInterface::SetLayout(const char* layout, const char* window)
{
BString tmp(layout);
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
if(tmp.IFindFirst("standard")!=B_ERROR)
w->layout = -1;
else if(tmp.IFindFirst("all")!=B_ERROR)
w->layout = B_FOLLOW_ALL;
else if(tmp.IFindFirst("none")!=B_ERROR)
w->layout = B_FOLLOW_NONE;
else
{
uint32 horizontal, vertical;
if(tmp.IFindFirst("h-center")!=B_ERROR)
horizontal = B_FOLLOW_H_CENTER;
else if((tmp.IFindFirst("left")!=B_ERROR)&&(tmp.IFindFirst("right")!=B_ERROR))
horizontal = B_FOLLOW_LEFT_RIGHT;
else if(tmp.IFindFirst("right")!=B_ERROR)
horizontal = B_FOLLOW_RIGHT;
else
horizontal = B_FOLLOW_LEFT;
if(tmp.IFindFirst("v-center")!=B_ERROR)
vertical = B_FOLLOW_V_CENTER;
else if((tmp.IFindFirst("top")!=B_ERROR)&&(tmp.IFindFirst("bottom")!=B_ERROR))
vertical = B_FOLLOW_TOP_BOTTOM;
else if(tmp.IFindFirst("bottom")!=B_ERROR)
vertical = B_FOLLOW_BOTTOM;
else
vertical = B_FOLLOW_TOP;
w->layout = horizontal|vertical;
}
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::WindowSet(const char* option, const char* value, const char* window)
{
BString tmp(option);
BString val(value);
uint32 flags = 0;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
if(tmp.IFindFirst("Flags")!=B_ERROR)
{
if(val.IFindFirst("Reset")!=B_ERROR)
{
w->SetFlags(0);
w->SetFlags(B_ASYNCHRONOUS_CONTROLS);
}
else
{
flags = w->Flags();
if(val.IFindFirst("Not-Movable")!=B_ERROR)
flags = flags|B_NOT_MOVABLE;
if(val.IFindFirst("Not-Closable")!=B_ERROR)
flags = flags|B_NOT_CLOSABLE;
if(val.IFindFirst("Not-Zoomable")!=B_ERROR)
flags = flags|B_NOT_ZOOMABLE;
if(val.IFindFirst("Not-Minimizable")!=B_ERROR)
flags = flags|B_NOT_MINIMIZABLE;
if(val.IFindFirst("Not-Resizable")!=B_ERROR)
flags = flags|B_NOT_RESIZABLE;
if(val.IFindFirst("Not-H-Resizable")!=B_ERROR)
flags = flags|B_NOT_H_RESIZABLE;
if(val.IFindFirst("Not-V-Resizable")!=B_ERROR)
flags = flags|B_NOT_V_RESIZABLE;
if(val.IFindFirst("Accept-First-Click")!=B_ERROR)
flags = flags|B_WILL_ACCEPT_FIRST_CLICK;
if(val.IFindFirst("No-Workspace-Activation")!=B_ERROR)
flags = flags|B_NO_WORKSPACE_ACTIVATION;
w->SetFlags(flags|B_ASYNCHRONOUS_CONTROLS);
}
}
else if(tmp.IFindFirst("Look")!=B_ERROR)
{
if(val.IFindFirst("Document")!=B_ERROR)
w->SetLook(B_DOCUMENT_WINDOW_LOOK);
else if(val.IFindFirst("Titled")!=B_ERROR)
w->SetLook(B_TITLED_WINDOW_LOOK);
else if(val.IFindFirst("Floating")!=B_ERROR)
w->SetLook(B_FLOATING_WINDOW_LOOK);
else if(val.IFindFirst("Modal")!=B_ERROR)
w->SetLook(B_MODAL_WINDOW_LOOK);
else if(val.IFindFirst("Bordered")!=B_ERROR)
w->SetLook(B_BORDERED_WINDOW_LOOK);
else if(val.IFindFirst("No-Border")!=B_ERROR)
w->SetLook(B_NO_BORDER_WINDOW_LOOK);
else
ErrorGen("Unknown option");
}
else if(tmp.IFindFirst("Feel")!=B_ERROR)
{
if(val.IFindFirst("Normal")!=B_ERROR)
w->SetFeel(B_NORMAL_WINDOW_FEEL);
else if(val.IFindFirst("Modal-App")!=B_ERROR)
w->SetFeel(B_MODAL_APP_WINDOW_FEEL);
else if(val.IFindFirst("Modal-All")!=B_ERROR)
w->SetFeel(B_MODAL_ALL_WINDOW_FEEL);
else if(val.IFindFirst("Floating-App")!=B_ERROR)
w->SetFeel(B_FLOATING_APP_WINDOW_FEEL);
else if(val.IFindFirst("Floating-All")!=B_ERROR)
w->SetFeel(B_FLOATING_ALL_WINDOW_FEEL);
else
ErrorGen("Unknown option");
}
else if(tmp.IFindFirst("Workspace")!=B_ERROR)
{
if(val.IFindFirst("Current")!=B_ERROR)
w->SetWorkspaces(B_CURRENT_WORKSPACE);
else if(val.IFindFirst("All")!=B_ERROR)
w->SetWorkspaces(B_ALL_WORKSPACES);
else if(atoi(val.String()) >= 1)
{
int bit = 1 << atoi(val.String()) - 1;
w->SetWorkspaces(bit);
}
else
ErrorGen("Unknown option");
}
else if(tmp.IFindFirst("Title")!=B_ERROR)
{
w->SetTitle(value);
}
else
ErrorGen("Unknown option");
// w->UpdateIfNeeded();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::WindowSet(const char* option, const char* window)
{
BString tmp(option);
uint32 flags = 0;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
if(tmp.IFindFirst("maximize")!=B_ERROR)
w->Zoom();
else if(tmp.IFindFirst("minimize")!=B_ERROR)
w->Minimize(!w->IsMinimized());
else if(tmp.IFindFirst("deactivate")!=B_ERROR)
w->Activate(false);
else if(tmp.IFindFirst("activate")!=B_ERROR)
w->Activate(true);
else if(tmp.IFindFirst("disable-updates")!=B_ERROR)
w->DisableUpdates();
else if(tmp.IFindFirst("enable-updates")!=B_ERROR)
w->EnableUpdates();
else
ErrorGen("Unknown option");
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::WindowSet(const char* option, int r, int g, int b, const char* window)
{
BString tmp(option);
if(r>255) r=255; if(r<0) r=0;
if(g>255) g=255; if(g<0) g=0;
if(b>255) b=255; if(b<0) b=0;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
if(tmp.IFindFirst("BGColor")!=B_ERROR)
{
myView->SetViewColor(r,g,b,yabAlpha);
myView->Invalidate();
}
else if(tmp.IFindFirst("HighColor")!=B_ERROR)
{
if(yabAlpha == 255)
myView->SetDrawingMode(B_OP_COPY);
else
myView->SetDrawingMode(B_OP_ALPHA);
myView->SetHighColor(r,g,b,yabAlpha);
YabDrawing *t = new YabDrawing();
t->command = 6;
t->r = r; t->g = g;
t->b = b; t->alpha = yabAlpha;
myView->drawList->AddItem(t);
}
else if(tmp.IFindFirst("LowColor")!=B_ERROR)
{
if(yabAlpha == 255)
myView->SetDrawingMode(B_OP_COPY);
else
myView->SetDrawingMode(B_OP_ALPHA);
myView->SetLowColor(r,g,b,yabAlpha);
YabDrawing *t = new YabDrawing();
t->command = 7;
t->r = r; t->g = g;
t->b = b; t->alpha = yabAlpha;
myView->drawList->AddItem(t);
}
else
ErrorGen("Unknown option");
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *bmp = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bView = bmp->FindView(window);
if(bView)
{
if(tmp.IFindFirst("HighColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetHighColor(r,g,b,yabAlpha);
bView->Sync();
bmp->Unlock();
return;
}
else if(tmp.IFindFirst("LowColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetLowColor(r,g,b,yabAlpha);
bView->Sync();
bmp->Unlock();
return;
}
else
ErrorGen("Unknown option");
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *bmp = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
if(tmp.IFindFirst("HighColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetHighColor(r,g,b,yabAlpha);
bView->Sync();
bmp->Unlock();
w->Unlock();
return;
}
else if(tmp.IFindFirst("LowColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetLowColor(r,g,b,yabAlpha);
bView->Sync();
bmp->Unlock();
w->Unlock();
return;
}
else
ErrorGen("Unknown option");
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::WindowSet(const char* option, double x, double y, const char* window)
{
BString tmp(option);
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
if(tmp.IFindFirst("ResizeTo")!=B_ERROR)
w->ResizeTo(x,y);
else if(tmp.IFindFirst("MoveTo")!=B_ERROR)
w->MoveTo(x,y);
else if(tmp.IFindFirst("MinimumTo")!=B_ERROR)
{
float x1, x2, y1, y2;
w->GetSizeLimits(&x1,&x2,&y1,&y2);
w->SetSizeLimits((float)x,x2,(float)y,y2);
}
else if(tmp.IFindFirst("MaximumTo")!=B_ERROR)
{
float x1, x2, y1, y2;
w->GetSizeLimits(&x1,&x2,&y1,&y2);
w->SetSizeLimits(x1,(float)x,y1,(float)y);
}
else
ErrorGen("Unknown option");
w->Unlock();
// w->UpdateIfNeeded();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::WindowClear(const char* window)
{
bool delMenuBar;
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w && myView->Parent())
{
w->Lock();
BView *child, *oldchild;
if(child = myView->ChildAt(0))
{
while(child)
{
if(is_kind_of(child, YabTabView))
{
for(int i = 0; i<((YabTabView*)child)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)child)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
if(is_kind_of(child, YabBitmapView))
yabcanvas->RemoveItem(child);
BView *subchild;
if(subchild = child->ChildAt(0))
while(subchild)
{
if(is_kind_of(subchild, YabTabView))
{
for(int i = 0; i<((YabTabView*)subchild)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)subchild)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
if(viewList->GetView(subchild->Name()))
{
RemoveView(subchild);
viewList->DelView(subchild->Name());
}
subchild = subchild->NextSibling();
}
if(viewList->GetView(child->Name()))
{
RemoveView(child);
viewList->DelView(child->Name());
}
oldchild = child;
child = child->NextSibling();
if(is_kind_of(oldchild, YabView))
DrawClear(oldchild->Name(), true);
if(is_kind_of(oldchild, BMenuBar))
{
oldchild->Hide();
}
oldchild->RemoveSelf();
delete oldchild;
}
}
if(is_kind_of(myView, YabView))
DrawClear(myView->Name(), true);
if(is_kind_of(myView, BMenuBar))
myView->Hide();
BBox *box = cast_as(myView->Parent(), BBox);
myView->RemoveSelf();
delete myView;
viewList->DelView(window);
if(box)
{
box->RemoveSelf();
delete box;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::RemoveView(BView *myView)
{
BView *child, *oldchild;
if(child = myView->ChildAt(0))
while(child)
{
if(is_kind_of(child, YabTabView))
{
for(int i = 0; i<((YabTabView*)child)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)child)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
if(is_kind_of(child, YabBitmapView))
yabcanvas->RemoveItem(child);
BView *subchild;
if(subchild = child->ChildAt(0))
while(subchild)
{
if(is_kind_of(subchild, YabTabView))
{
for(int i = 0; i<((YabTabView*)subchild)->CountTabs(); i++)
{
YabView *t = (YabView*)((YabTabView*)subchild)->TabAt(i);
RemoveView(t);
viewList->DelView(t->Name());
}
}
if(viewList->GetView(subchild->Name()))
{
RemoveView(subchild);
viewList->DelView(subchild->Name());
}
subchild = subchild->NextSibling();
}
if(viewList->GetView(child->Name()))
{
RemoveView(child);
viewList->DelView(child->Name());
}
oldchild = child;
child = child->NextSibling();
if(is_kind_of(oldchild, YabView))
DrawClear(oldchild->Name(), true);
if(is_kind_of(oldchild, BMenuBar))
oldchild->Hide();
if(is_kind_of(oldchild, BMenuBar))
{
BMenuBar *b = cast_as(oldchild, BMenuBar);
for(int i=0; i<b->CountItems(); i++)
{
YabMenu *m = (YabMenu*)b->SubmenuAt(i);
if(m)
{
// check for subsubmenus
for(int j=0; j<m->CountItems(); j++)
{
YabMenu *n = (YabMenu*)m->SubmenuAt(j);
if(n) n->MyHide();
}
m->MyHide();
// printf("hiden\n");
}
}
b->Hide();
}
oldchild->RemoveSelf();
delete oldchild;
}
}
void YabInterface::TextEdit(BRect frame, const char* title, int scrollbar, const char* window)
{
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
uint32 resizeMode;
BRect textframe;
w->Lock();
if(scrollbar == 3 || scrollbar == 1) frame.right -= B_V_SCROLL_BAR_WIDTH;
if(scrollbar>2) frame.bottom -= B_H_SCROLL_BAR_HEIGHT;
textframe = frame;
textframe.OffsetTo(B_ORIGIN);
textframe.right -=2;
textframe.bottom -=2;
textframe.top +=2;
textframe.left +=2;
if(w->layout == -1)
resizeMode = B_FOLLOW_ALL;
else
resizeMode = w->layout;
// BTextView *txtView = new BTextView(frame, title, textframe, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_PULSE_NEEDED|B_NAVIGABLE);
YabText *txtView = new YabText(frame, title, textframe, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_PULSE_NEEDED|B_NAVIGABLE);
txtView->SetWordWrap(true);
// txtView->SetFontAndColor(be_fixed_font);
switch(scrollbar)
{
case 3: // both
myView->AddChild(new BScrollView("scroll_list", txtView, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, true, true));
break;
case 2: // horizontal
myView->AddChild(new BScrollView("scroll_list", txtView, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, true, false));
break;
case 0: // none
myView->AddChild(txtView);
break;
default: // vertical is default
myView->AddChild(new BScrollView("scroll_list", txtView, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, false, true));
break;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(window, "VIEW");
}
void YabInterface::TextAdd(const char* title, const char* text)
{
YabView *myView = NULL;
YabText *myText = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
myText->Insert(text);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
void YabInterface::TextSet(const char* title, const char* option)
{
BString tmp(option);
YabView *myView = NULL;
YabText *myText = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("Cut")!=B_ERROR)
myText->Cut(be_clipboard);
else if(tmp.IFindFirst("Copy")!=B_ERROR)
{
int32 a,b;
myText->GetSelection(&a, &b);
if(a != b)
myText->Copy(be_clipboard);
}
else if(tmp.IFindFirst("Paste")!=B_ERROR)
myText->Paste(be_clipboard);
else if(tmp.IFindFirst("Clear")!=B_ERROR)
myText->Clear();
else if(tmp.IFindFirst("Select-All")!=B_ERROR)
myText->SelectAll();
else if(tmp.IFindFirst("Undo")!=B_ERROR)
myText->Undo(be_clipboard);
// else if(tmp.IFindFirst("Redo")!=B_ERROR)
// ; // myText->Redo(be_clipboard);
else
ErrorGen("Unknown option");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
void YabInterface::TextSet(const char* title, const char* option, const char* value)
{
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
BString tmp2(value);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("align")!=B_ERROR)
{
if(tmp2.IFindFirst("left")!=B_ERROR)
myText->SetAlignment(B_ALIGN_LEFT);
else if(tmp2.IFindFirst("center")!=B_ERROR)
myText->SetAlignment(B_ALIGN_CENTER);
else if(tmp2.IFindFirst("right")!=B_ERROR)
myText->SetAlignment(B_ALIGN_RIGHT);
}
else if(tmp.IFindFirst("autocomplete")!=B_ERROR)
myText->AddWord(new BString(value));
else if(tmp.IFindFirst("font")!=B_ERROR)
{
BFont myFont;
BString opt;
// Font family
int pos1 = 0;
int pos2 = tmp2.FindFirst(',');
if(pos2 != B_ERROR)
{
tmp2.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
font_family fam;
sprintf((char*)fam, "%s" , opt.String());
if(myFont.SetFamilyAndFace(fam, B_REGULAR_FACE) == B_OK)
{
myView->SetFont(&myFont, B_FONT_FAMILY_AND_STYLE);
// Font style
pos1 = pos2+1;
pos2 = tmp2.FindFirst(',', pos2+1);
if(pos2 != B_ERROR)
{
tmp2.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
font_style style;
sprintf((char*)style, "%s" , opt.String());
if(myFont.SetFamilyAndStyle(fam,style) == B_OK)
{
// Font size
pos1 = pos2+1;
pos2 = tmp2.FindFirst(',', pos2+1);
if(pos2 == B_ERROR) pos2 = tmp2.Length();
tmp2.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
double size = atof(opt.String());
myFont.SetSize(size);
}
}
}
}
else if(tmp2.IFindFirst("system-plain")!=B_ERROR)
myFont = be_plain_font;
else if(tmp2.IFindFirst("system-fixed")!=B_ERROR)
myFont = be_fixed_font;
else if(tmp2.IFindFirst("system-bold")!=B_ERROR)
myFont = be_bold_font;
else
ErrorGen("Unknown option");
int32 start,finish;
myText->GetSelection(&start, &finish);
myText->SelectAll();
myText->SetFontAndColor(&myFont);
myText->Select(start,finish);
}
else if (tmp.IFindFirst("focus")!=B_ERROR)
{
if (tmp2.IFindFirst("true")!=B_ERROR)
{
bool focused = true;
myText->MakeFocus(focused);
}
else
{
bool focused = false;
myText->MakeFocus(focused);
}
}
else
ErrorGen("Unknown option");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
void YabInterface::TextSet(const char* title, const char* option, int value)
{
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("autocomplete-start")!=B_ERROR)
myText->SetAutoCompleteStart(value-1);
else if(tmp.IFindFirst("has-autocompletion")!=B_ERROR)
myText->HasAutoCompletion((bool)value);
else if(tmp.IFindFirst("autoindent")!=B_ERROR)
myText->SetAutoindent((bool)value);
else if(tmp.IFindFirst("wordwrap")!=B_ERROR)
myText->SetWordWrap((bool)value);
else if(tmp.IFindFirst("editable")!=B_ERROR)
myText->MakeEditable((bool)value);
else if(tmp.IFindFirst("color-case-sensitive")!=B_ERROR)
myText->SetCaseSensitive((bool)value);
else if(tmp.IFindFirst("tabwidth")!=B_ERROR)
myText->SetTabWidth(value);
else if(tmp.IFindFirst("cursor")!=B_ERROR)
myText->Select(value, value);
else if(tmp.IFindFirst("textwidth")!=B_ERROR)
{
// BRect txtframe = myText->TextRect();
// txtframe.right = txtframe.left + value;
// myText->SetTextRect(txtframe);
myText->SetTextRect(BRect(0,0, value,1));
// BRect txtbounds = myText->Bounds();
// myText->FrameResized(txtbounds.Width(), txtbounds.Height());
BRect bounds(myText->Bounds());
BScrollBar* horizontalScrollBar = myText->ScrollBar(B_HORIZONTAL);
// do we have a horizontal scroll bar?
if (horizontalScrollBar != NULL) {
long viewWidth = bounds.IntegerWidth();
long dataWidth = (long)value;
long maxRange = dataWidth - viewWidth;
maxRange = max_c(maxRange, 0);
horizontalScrollBar->SetRange(0, 1000); //(float)maxRange);
// horizontalScrollBar->SetProportion((float)viewWidth / (float)dataWidth);
// horizontalScrollBar->SetSteps(10.0, dataWidth / 10);
// std::cout << "dataWidth: " << dataWidth << " maxrange: " << maxRange << std::endl;
}
}
else if(tmp.IFindFirst("gotoline")!=B_ERROR)
{
if(value<1) value = 1;
myText->GoToLine(value-1);
myText->ScrollToSelection();
}
else if(tmp.IFindFirst("select")!=B_ERROR)
{
int start, num;
if(value <= 0)
myText->Select(0,0);
else
{
if(value-1 == 0)
start = 0;
else
start = myText->OffsetAt(value-1);
if(myText->CountLines()>value)
num = myText->OffsetAt(value)-start-1;
else
num = myText->OffsetAt(value)-start;
// num = myText->TextLength()-start;
myText->Select(start,start+num);
myText->ScrollToSelection();
}
}
else if(tmp.IFindFirst("changed")!=B_ERROR)
myText->SetChanged((bool)value);
else
ErrorGen("Unknown option");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
void YabInterface::TextColor(const char* title, const char* option, const char* command)
{
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("Color1")!=B_ERROR)
myText->AddCommand(command,0);
else if(tmp.IFindFirst("Color2")!=B_ERROR)
myText->AddCommand(command,1);
else if(tmp.IFindFirst("Color3")!=B_ERROR)
myText->AddCommand(command,2);
else if(tmp.IFindFirst("Color4")!=B_ERROR)
myText->AddCommand(command,3);
else if(tmp.IFindFirst("char-color")!=B_ERROR)
myText->AddCommand(command,4);
else
ErrorGen("Unknown option");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
void YabInterface::TextColor(const char* title, const char* option, int r, int g, int b)
{
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("color1")!=B_ERROR)
myText->SetColors(0,r,g,b);
else if(tmp.IFindFirst("color2")!=B_ERROR)
myText->SetColors(1,r,g,b);
else if(tmp.IFindFirst("color3")!=B_ERROR)
myText->SetColors(2,r,g,b);
else if(tmp.IFindFirst("color4")!=B_ERROR)
myText->SetColors(3,r,g,b);
else if(tmp.IFindFirst("char-color")!=B_ERROR)
myText->SetColors(4,r,g,b);
else if(tmp.IFindFirst("bgcolor")!=B_ERROR)
myText->SetColors(5,r,g,b);
else if(tmp.IFindFirst("textcolor")!=B_ERROR)
myText->SetColors(6,r,g,b);
else
ErrorGen("Unknown option");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
int YabInterface::TextGet(const char* title, const char* option, const char* option2)
{
int ret = -1;
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("case-sensitive-find")!=B_ERROR)
{
int32 startOffset, endOffset;
myText->GetSelection(&startOffset, &endOffset);
bool isFinished = false;
int foundOffset, l = myText->TextLength() - endOffset;
char* s;
s = new char[l+1];
myText->GetText(endOffset, l, s);
BString line(s);
foundOffset = line.FindFirst(option2);
if(foundOffset == B_ERROR)
{
delete s;
s = new char[endOffset];
myText->GetText(0, endOffset-1, s);
line = s;
foundOffset = line.FindFirst(option2);
}
else
foundOffset += endOffset;
if(foundOffset != B_ERROR)
{
delete s;
myText->Select(foundOffset, foundOffset+strlen(option2));
myText->ScrollToSelection();
ret = myText->LineAt(foundOffset)+1;
// myText->GoToLine(myText->LineAt(foundOffset));
}
}
else if(tmp.IFindFirst("find")!=B_ERROR)
{
int32 startOffset, endOffset;
myText->GetSelection(&startOffset, &endOffset);
// = myText->OffsetAt(myText->CurrentLine());
bool isFinished = false;
int foundOffset, l = myText->TextLength() - endOffset;
char* s;
s = new char[l+1];
myText->GetText(endOffset, l, s);
BString line(s);
foundOffset = line.IFindFirst(option2);
if(foundOffset == B_ERROR)
{
delete s;
s = new char[endOffset];
myText->GetText(0, endOffset-1, s);
line = s;
foundOffset = line.IFindFirst(option2);
}
else
foundOffset += endOffset;
if(foundOffset != B_ERROR)
{
delete s;
myText->Select(foundOffset, foundOffset+strlen(option2));
myText->ScrollToSelection();
ret = myText->LineAt(foundOffset)+1;
// myText->GoToLine(myText->LineAt(foundOffset));
}
}
else
ErrorGen("Unknown option");
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
double YabInterface::TextGet(const char* title, const char* option, int line)
{
double ret = -1.0;
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("line-width")!=B_ERROR)
ret = myText->LineWidth(line);
else if(tmp.IFindFirst("line-height")!=B_ERROR)
ret = myText->LineHeight(line);
else
ErrorGen("Unknown option");
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
int YabInterface::TextGet(const char* title, const char* option)
{
int ret = -1;
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("currentline")!=B_ERROR)
ret = myText->CurrentLine()+1;
else if(tmp.IFindFirst("vertical-scrollbar")!=B_ERROR)
{
float f = -1.0;
BScrollView *s = cast_as(myText->Parent(), BScrollView);
if(s)
{
BScrollBar *b = s->ScrollBar(B_VERTICAL);
if(b) f = b->Value();
else
ErrorGen("TEXTEDIT has no vertical scrollbar");
}
else
ErrorGen("TEXTEDIT has no vertical scrollbar");
ret = (int)f;
}
else if(tmp.IFindFirst("horizontal-scrollbar")!=B_ERROR)
{
float f = -1.0;
BScrollView *s = cast_as(myText->Parent(), BScrollView);
if(s)
{
BScrollBar *b = s->ScrollBar(B_HORIZONTAL);
if(b) f = b->Value();
else
ErrorGen("TEXTEDIT has no horizontal scrollbar");
}
else
ErrorGen("TEXTEDIT has no horizontal scrollbar");
ret = (int)f;
}
else if(tmp.IFindFirst("countlines")!=B_ERROR)
ret = myText->CountLines();
else if(tmp.IFindFirst("countphysicallines")!=B_ERROR)
ret=myText->CountPhysicalLines();
else if(tmp.IFindFirst("textlength")!=B_ERROR)
ret = myText->TextLength();
else if(tmp.IFindFirst("haschanged")!=B_ERROR)
ret = myText->HasChanged()?1:0;
else if(tmp.IFindFirst("cursor-position")!=B_ERROR)
{
int32 start, end, pos1,pos2;
myText->GetSelection(&start, &end);
ret = end;
}
else
ErrorGen("Unknown option");
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
const char* YabInterface::TextGet(const char* title, int linenum)
{
YabView *myView = NULL;
YabText *myText = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
char* ret;
int start, num;
if(linenum-1 == 0)
start = 0;
else
start = myText->OffsetAt(linenum-1);
if(myText->CountLines()>linenum)
num = myText->OffsetAt(linenum)-start-1;
else
num = myText->TextLength()-start;
ret = new char[num+1];
myText->GetText(start, num, ret);
w->Unlock();
return (const char*)ret;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
const char* YabInterface::TextGet6(const char* title, const char* option)
{
YabView *myView = NULL;
YabText *myText = NULL;
BString tmp(option);
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(),YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title),YabText);
if(myText)
{
if(tmp.IFindFirst("selection")!=B_ERROR)
{
char* ret;
int32 start, finish;
myText->GetSelection(&start, &finish);
if(finish == 0 || (finish-start)<=0)
{
ret = new char[1];
ret[0] = '\0';
}
else
{
ret = new char[finish-start+1];
myText->GetText(start, finish-start, ret);
}
w->Unlock();
return (const char*)ret;
}
else
ErrorGen("Unknown option");
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
double YabInterface::DrawGet(const char* option, const char* txt, const char* view)
{
double ret = 0;
BString tmp(option);
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
if(tmp.IFindFirst("Text-Width")!=B_ERROR)
ret = myView->StringWidth(txt);
if(tmp.IFindFirst("Max-Text-Height")!=B_ERROR)
{
font_height height;
myView->GetFontHeight(&height);
ret = height.ascent+height.descent;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), view))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
if(tmp.IFindFirst("Text-Width")!=B_ERROR)
ret = bView->StringWidth(txt);
if(tmp.IFindFirst("Max-Text-Height")!=B_ERROR)
{
font_height height;
bView->GetFontHeight(&height);
ret = height.ascent+height.descent;
}
b->Unlock();
w->Unlock();
return ret;
}
else
ErrorGen("Unable to lock window");
}
}
Error(view, "VIEW or CANVAS");
}
return ret;
}
const char* YabInterface::DrawGet(const char* option)
{
BString t(option);
char* ret;
if(t.IFindFirst("fontfamily")!=B_ERROR)
{
int32 numFamilies = count_font_families();
ret = new char[numFamilies*(B_FONT_FAMILY_LENGTH + 1)];
BString tmp("");
for(int32 i=0; i<numFamilies; i++)
{
font_family f;
uint32 flags;
if (get_font_family(i, &f, &flags) == B_OK)
{
tmp+=f;
tmp+="|";
}
}
strcpy(ret, tmp.String());
}
else
{
uint32 flags;
int32 numStyles = count_font_styles((char*)option);
ret = new char[numStyles*(B_FONT_STYLE_LENGTH + 1)];
BString tmp("");
for(int32 i=0; i<numStyles ; i++)
{
font_style style;
uint32 flags;
if (get_font_style((char*)option, i, &style, &flags) == B_OK)
{
tmp+=style;
tmp+="|";
}
}
strcpy(ret, tmp.String());
}
return (const char*) ret;
}
int YabInterface::DrawGet(BPoint coord, const char* option, const char* view)
{
BString t(option);
}
void YabInterface::TextClear(const char* title)
{
YabView *myView = NULL;
YabText *myText = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title), YabText);
if(myText)
{
myText->SetText("", 0);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
const char* YabInterface::TextGet(const char* title)
{
const char* tmp;
YabView *myView = NULL;
YabText *myText = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myText = cast_as(myView->FindView(title), YabText);
if(myText)
{
tmp = myText->Text();
w->Unlock();
return tmp;
}
w->Unlock();
}
}
}
Error(title, "TEXTEDIT");
}
void YabInterface::TreeBox1(BRect frame, const char* id, int scrollbarType, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
uint32 resizeMode;
w->Lock();
if(scrollbarType == 3 || scrollbarType == 1) frame.right -= B_V_SCROLL_BAR_WIDTH;
if(scrollbarType>2) frame.bottom -= B_H_SCROLL_BAR_HEIGHT;
BOutlineListView *list = new BOutlineListView(frame,id);
if(w->layout == -1)
resizeMode = B_FOLLOW_ALL;
else
resizeMode = w->layout;
list->SetResizingMode(resizeMode);
list->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
list->SetSelectionMessage(new BMessage(YABTREEBOXSELECT));
list->SetInvocationMessage(new BMessage(YABTREEBOXINVOKE));
switch(scrollbarType)
{
case 3: // both
myView->AddChild(new BScrollView("scroll_list", list, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, true, true));
break;
case 2: // horizontal
myView->AddChild(new BScrollView("scroll_list", list, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, true, false));
break;
case 0: // none
myView->AddChild(list);
break;
default: // vertical is default
myView->AddChild(new BScrollView("scroll_list", list, resizeMode, B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE, false, true));
break;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::TreeBox2(const char* id, const char* item)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
myTree->AddItem(new BStringItem(item));
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox3(const char* id, const char* head, const char* item, int isExpanded)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
for(int i=0; i<myTree->FullListCountItems(); i++)
{
BStringItem *stritem = (BStringItem*)myTree->FullListItemAt(i);
if(!strcmp(stritem->Text(), head))
{
BStringItem *tmp = new BStringItem(item);
myTree->AddUnder(tmp,stritem);
if(isExpanded<1)
myTree->Collapse(stritem);
w->Unlock();
return;
}
}
w->Unlock();
ErrorGen("Item not found");
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox4(const char* id)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
myTree->MakeEmpty();
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox5(const char* id, const char* item)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
for(int i=0; i<myTree->FullListCountItems(); i++)
{
BStringItem *stritem = (BStringItem*)myTree->FullListItemAt(i);
if(!strcmp(stritem->Text(), item))
{
myTree->RemoveItem(i);
w->Unlock();
return;
}
}
w->Unlock();
ErrorGen("Item not found");
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox7(const char* id, int pos)
{
pos--;
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
if(pos==0)
myTree->DeselectAll();
else
{
BListItem *item = myTree->FullListItemAt(pos);
if(item)
myTree->Select(myTree->IndexOf(item));
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox8(const char* id, int pos)
{
pos--;
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
myTree->RemoveItem(pos);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox9(const char* id, const char* head, const char* item)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
for(int i=0; i<myTree->FullListCountItems(); i++)
{
BStringItem *stritem = (BStringItem*)myTree->FullListItemAt(i);
if(!strcmp(stritem->Text(), head))
{
for(int j=0; i<myTree->CountItemsUnder(stritem, false); j++)
{
BStringItem *subitem = (BStringItem*)myTree->FullListItemAt(i+j+1);
if(!strcmp(subitem->Text(), item))
{
myTree->RemoveItem((BListItem*)subitem);
w->Unlock();
return;
}
}
}
}
w->Unlock();
ErrorGen("Item not found");
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox10(const char* id, const char* head)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
for(int i=0; i<myTree->FullListCountItems(); i++)
{
BStringItem *stritem = (BStringItem*)myTree->FullListItemAt(i);
if(!strcmp(stritem->Text(), head))
{
myTree->Expand((BListItem*)stritem);
w->Unlock();
return;
}
}
w->Unlock();
ErrorGen("Item not found");
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox11(const char* id, const char* head)
{
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id), BOutlineListView);
if(myTree)
{
for(int i=0; i<myTree->FullListCountItems(); i++)
{
BStringItem *stritem = (BStringItem*)myTree->FullListItemAt(i);
if(!strcmp(stritem->Text(), head))
{
myTree->Collapse((BListItem*)stritem);
w->Unlock();
return;
}
}
w->Unlock();
ErrorGen("Item not found");
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
void YabInterface::TreeBox12(const char* id, const char* item, int pos)
{
if(pos<1) pos = 1;
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(id),BOutlineListView);
if(myTree)
{
if(pos<=myTree->FullListCountItems())
{
uint32 outline = (myTree->FullListItemAt(pos-1))->OutlineLevel();
myTree->AddItem(new BStringItem(item, outline),pos-1);
}
else
myTree->AddItem(new BStringItem(item));
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
const char* YabInterface::TreeboxGet(const char* treebox, int pos)
{
pos--;
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(treebox), BOutlineListView);
if(myTree)
{
BStringItem *t = (BStringItem*)myTree->FullListItemAt(pos);
if(t)
{
const char* txt = t->Text();
w->Unlock();
return txt;
}
}
w->Unlock();
}
}
}
Error(treebox, "TREEBOX");
}
int YabInterface::TreeboxCount(const char* treebox)
{
int32 ret;
YabView *myView = NULL;
BOutlineListView *myTree = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTree = cast_as(myView->FindView(treebox), BOutlineListView);
if(myTree)
{
ret = myTree->FullListCountItems();
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(treebox, "TREEBOX");
}
BBitmap* YabInterface::loadImage(const char* FileName)
{
BBitmap* LogoBitmap = NULL;
BFile ImageFile;
BPath ImagePath;
int ret = 0;
if( *FileName == '/')
ImageFile.SetTo( FileName, B_READ_ONLY);
else
// App directory.
if(!strcmp(ApplicationDirectory,""))
{
if( ImagePath.SetTo((const char*)ApplicationDirectory, FileName) == B_OK)
ImageFile.SetTo( ImagePath.Path(), B_READ_ONLY);
}
if( ImageFile.InitCheck() != B_OK)
ImageFile.SetTo( FileName, B_READ_ONLY);
if( ImageFile.InitCheck() != B_OK)
return NULL;
Roster = BTranslatorRoster::Default();
if( !Roster)
return NULL;
BBitmapStream Stream;
if( Roster->Translate( &ImageFile, NULL, NULL, &Stream, B_TRANSLATOR_BITMAP) < B_OK)
return NULL;
if( Stream.DetachBitmap( &LogoBitmap) != B_OK)
return NULL;
return LogoBitmap;
}
void YabInterface::ButtonImage(double x,double y, const char* id,const char* enabledon, const char* enabledoff, const char* disabled, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BPicture *pic1 = NULL, *pic2 = NULL, *pic3 = NULL;
BBitmap *bitmap = NULL;
BView *tmpView = new BView(BRect(0,0,1000,1000),"tmp",0, B_WILL_DRAW);
w->AddChild(tmpView);
tmpView->SetDrawingMode(B_OP_ALPHA);
bitmap = loadImage(enabledon);
tmpView->BeginPicture(new BPicture);
if(bitmap)
{
// drawing_mode mode = myView->DrawingMode();
// tmpView->SetDrawingMode(B_OP_ALPHA);
tmpView->DrawBitmap(bitmap,bitmap->Bounds());
// myView->SetDrawingMode(mode);
}
pic1 = tmpView->EndPicture();
BRect r;
r.SetLeftTop(BPoint(x,y));
if(bitmap)
r.SetRightBottom(BPoint(x,y) + bitmap->Bounds().RightBottom());
else
r.SetRightBottom(BPoint(x,y));
bitmap = loadImage(enabledoff);
tmpView->BeginPicture(new BPicture);
if(bitmap)
{
// drawing_mode mode = myView->DrawingMode();
// tmpView->SetDrawingMode(B_OP_ALPHA);
tmpView->DrawBitmap(bitmap,bitmap->Bounds());
// myView->SetDrawingMode(mode);
}
pic2 = tmpView->EndPicture();
bitmap = loadImage(disabled);
tmpView->BeginPicture(new BPicture);
if(bitmap) tmpView->DrawBitmap(bitmap,bitmap->Bounds());
pic3 = tmpView->EndPicture();
BPictureButton *myButton = new BPictureButton(r, id, pic2, pic1, new BMessage(YABBUTTON));
myButton->SetDisabledOff(pic3);
if(w->layout == -1)
myButton->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
myButton->SetResizingMode(w->layout);
myButton->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(myButton);
tmpView->RemoveSelf();
delete tmpView;
// delete Roster;
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::CheckboxImage(double x, double y,const char* id,const char* enabledon, const char* enabledoff, const char *disabledon, const char *disabledoff, int isActivated, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BPicture *pic1 = NULL, *pic2 = NULL, *pic3 = NULL, *pic4 = NULL;
BBitmap *bitmap = NULL;
BView *tmpView = new BView(BRect(0,0,1000,1000),"tmp",0, B_WILL_DRAW);
w->AddChild(tmpView);
tmpView->SetDrawingMode(B_OP_ALPHA);
bitmap = loadImage(enabledon);
tmpView->BeginPicture(new BPicture);
if(bitmap)
{
// drawing_mode mode = myView->DrawingMode();
// myView->SetDrawingMode(B_OP_ALPHA);
tmpView->DrawBitmap(bitmap,bitmap->Bounds());
// myView->SetDrawingMode(mode);
}
pic1 = tmpView->EndPicture();
BRect r;
r.SetLeftTop(BPoint(x,y));
if(bitmap)
r.SetRightBottom(BPoint(x,y) + bitmap->Bounds().RightBottom());
else
r.SetRightBottom(BPoint(x,y));
bitmap = loadImage(enabledoff);
tmpView->BeginPicture(new BPicture);
if(bitmap)
{
// drawing_mode mode = myView->DrawingMode();
// myView->SetDrawingMode(B_OP_ALPHA);
tmpView->DrawBitmap(bitmap,bitmap->Bounds());
// myView->SetDrawingMode(mode);
}
pic2 = tmpView->EndPicture();
bitmap = loadImage(disabledon);
tmpView->BeginPicture(new BPicture);
if(bitmap)
{
// drawing_mode mode = myView->DrawingMode();
// myView->SetDrawingMode(B_OP_ALPHA);
tmpView->DrawBitmap(bitmap,bitmap->Bounds());
// myView->SetDrawingMode(mode);
}
pic3 = tmpView->EndPicture();
bitmap = loadImage(disabledoff);
tmpView->BeginPicture(new BPicture);
if(bitmap)
{
// drawing_mode mode = myView->DrawingMode();
// myView->SetDrawingMode(B_OP_ALPHA);
tmpView->DrawBitmap(bitmap,bitmap->Bounds());
// myView->SetDrawingMode(mode);
}
pic4 = tmpView->EndPicture();
BPictureButton *myButton = new BPictureButton(r, id, pic2, pic1, new BMessage(YABCHECKBOX),B_TWO_STATE_BUTTON);
myButton->SetDisabledOn(pic3);
myButton->SetDisabledOff(pic4);
if(w->layout == -1)
myButton->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
myButton->SetResizingMode(w->layout);
myButton->SetValue(isActivated);
myButton->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(myButton);
tmpView->RemoveSelf();
delete tmpView;
// delete Roster;
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::CheckboxSet(const char* id, int isActivated)
{
YabView *myView = NULL;
BCheckBox *myCheckBox = NULL;
BPictureButton *myPicButton = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myCheckBox = cast_as(myView->FindView(id), BCheckBox);
if(myCheckBox)
{
myCheckBox->SetValue(isActivated);
w->Unlock();
return;
}
else
{
myPicButton = cast_as(myView->FindView(id), BPictureButton);
if(myPicButton)
{
if(myPicButton->Behavior() == B_TWO_STATE_BUTTON)
{
myPicButton->SetValue(isActivated);
w->Unlock();
return;
}
}
}
w->Unlock();
}
}
}
Error(id, "CHECKBOX");
}
void YabInterface::RadioSet(const char* id, int isActivated)
{
YabView *myView = NULL;
BRadioButton *myRadioButton= NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myRadioButton = cast_as(myView->FindView(id), BRadioButton);
if(myRadioButton)
{
myRadioButton->SetValue(isActivated);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "RADIOBUTTON");
}
const char* YabInterface::TextControlGet(const char* id)
{
const char* tmp = NULL;
YabView *myView = NULL;
BTextControl *myTControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myTControl = cast_as(myView->FindView(id), BTextControl);
if(myTControl)
{
tmp = myTControl->Text();
w->Unlock();
return tmp;
}
w->Unlock();
}
}
}
Error(id, "TEXTCONTROL");
}
void YabInterface::ToolTips(const char* view, const char* text)
{
YabView *myView = NULL;
BView *theView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
theView = w->FindView(view);
if(theView)
{
if(theView->Name())
{
if(!strcmp(theView->Name(), view))
{
if(text[0] == '\0')
// tooltip->SetHelp(theView, NULL);
;
else
theView->SetToolTip(text);
w->Unlock();
return;
}
}
}
w->Unlock();
}
}
}
Error(view, "VIEW");
}
void YabInterface::ToolTipsColor(const char* color, int r, int g, int b)
{
/*
BString tmp(color);
rgb_color rgb = {r,g,b};
if(tmp.IFindFirst("BGColor")!=B_ERROR)
tooltip->SetColor(rgb);
else if(tmp.IFindFirst("TextColor")!=B_ERROR)
tooltip->SetTextColor(rgb);
*/
}
void YabInterface::TreeSort(const char* view)
{
ErrorGen("Sorry, this command is not working yet");
YabView *myView = NULL;
BOutlineListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(view), BOutlineListView);
if(myList)
{
myList->FullListSortItems((int(*)(const BListItem *, const BListItem *))YabInterface::compare);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(view, "TREEBOX");
}
void YabInterface::ListSort(const char* view)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(view), BListView);
if(myList)
{
myList->SortItems((int(*)(const void*, const void*))YabInterface::compare);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(view, "LISTBOX");
}
int YabInterface::compare(BListItem **firstArg, BListItem **secondArg)
{
if(firstArg != NULL && secondArg != NULL)
{
BString item1(((BStringItem*)*firstArg)->Text());
BString item2(((BStringItem*)*secondArg)->Text());
if(((BListItem*)*firstArg)->OutlineLevel()!=((BListItem*)*secondArg)->OutlineLevel())
return 0;
return item1.ICompare(item2);
}
return 0;
}
void YabInterface::FileBox(BRect frame, const char* id, bool hasHScrollbar, const char* option, const char* view)
{
BString tmp(option);
border_style plain = B_PLAIN_BORDER;
if(tmp.IFindFirst("no-border")!=B_ERROR)
plain = B_NO_BORDER;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BColumnListView* myColumnList;
myColumnList = new BColumnListView(frame, id, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_FRAME_EVENTS|B_NAVIGABLE,plain, hasHScrollbar);
BMessage *msg1, *msg2;
msg1 = new BMessage(YABFILEBOXINVOKE);
msg1->AddPointer("source", myColumnList);
msg2 = new BMessage(YABFILEBOXSELECT);
msg2->AddPointer("source", myColumnList);
myColumnList->SetInvocationMessage(msg1);
myColumnList->SetSelectionMessage(msg2);
myColumnList->SetSortingEnabled(false);
myColumnList->SetSelectionMode(B_SINGLE_SELECTION_LIST);
rgb_color rgb = {195,195,195,255};
myColumnList->SetColor(B_COLOR_SELECTION, rgb);
int flags = B_ALLOW_COLUMN_NONE;
if(tmp.IFindFirst("movable")!=B_ERROR)
flags += B_ALLOW_COLUMN_MOVE;
if(tmp.IFindFirst("resizable")!=B_ERROR)
flags += B_ALLOW_COLUMN_RESIZE;
if(tmp.IFindFirst("popup")!=B_ERROR)
flags += B_ALLOW_COLUMN_POPUP;
if(tmp.IFindFirst("removable")!=B_ERROR)
flags += B_ALLOW_COLUMN_REMOVE;
myColumnList->SetColumnFlags((column_flags) flags);
myColumnList->SetLatchWidth(0.0);
myView->AddChild(myColumnList);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::ColumnBoxAdd(const char* id, int column, int position, int height, const char* text)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(id), BColumnListView);
if(myColumnList)
{
BRow *myRow = myColumnList->RowAt(position-1);
if(!myRow)
{
myRow = new BRow(height);
myColumnList->AddRow(myRow, position);
for(int j=0; j<myColumnList->CountColumns(); j++)
{
BYabField *myField = new BYabField("");
myRow->SetField(myField, j);
}
}
BYabField *myField = (BYabField*)myRow->GetField(column-1);
myField->SetString(text, height);
myColumnList->Refresh();
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "COLUMNBOX");
}
void YabInterface::FileBoxAdd(const char* columnbox, const char* name, int32 pos, double minWidth, double maxWidth, double width, const char* option)
{
BString tmp(option);
alignment align = B_ALIGN_LEFT;
if(tmp.IFindFirst("align-left")!=B_ERROR)
align = B_ALIGN_LEFT;
if(tmp.IFindFirst("align-center")!=B_ERROR)
align = B_ALIGN_CENTER;
if(tmp.IFindFirst("align-right")!=B_ERROR)
align = B_ALIGN_RIGHT;
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
BYabColumn *myColumn = new BYabColumn(name,width,maxWidth, minWidth,width, align);
myColumnList->AddColumn(myColumn, pos-1);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
void YabInterface::FileBoxClear(const char* columnbox)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
myColumnList->Clear();
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
void YabInterface::ColumnBoxRemove(const char* columnbox, int position)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
BRow *myRow;
myRow = myColumnList->RowAt(position-1);
if(myRow)
{
myColumnList->RemoveRow(myRow);
delete myRow;
}
else
{
w->Unlock();
ErrorGen("Row not found");
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
void YabInterface::ColumnBoxColor(const char* columnbox, const char* option, int r, int g, int b)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
BString tmp(option);
ColumnListViewColor col;
if(tmp.IFindFirst("selection-text")!=B_ERROR)
col = B_COLOR_SELECTION_TEXT;
else if(tmp.IFindFirst("non-focus-selection")!=B_ERROR)
col = B_COLOR_NON_FOCUS_SELECTION;
else if(tmp.IFindFirst("selection")!=B_ERROR)
col = B_COLOR_SELECTION;
else if(tmp.IFindFirst("text")!=B_ERROR)
col = B_COLOR_TEXT;
else if(tmp.IFindFirst("row-divider")!=B_ERROR)
col = B_COLOR_ROW_DIVIDER;
else if(tmp.IFindFirst("background")!=B_ERROR)
col = B_COLOR_BACKGROUND;
else
ErrorGen("Invalid option");
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
rgb_color rgb = {r,g,b,255};
myColumnList->SetColor(col, rgb);
myColumnList->Refresh();
myColumnList->Invalidate();
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
void YabInterface::ColumnBoxSelect(const char* columnbox, int position)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
if(position == 0)
myColumnList->DeselectAll();
else
{
myColumnList->AddToSelection(myColumnList->RowAt(position-1));
myColumnList->ScrollTo(myColumnList->RowAt(position-1));
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
const char* YabInterface::ColumnBoxGet(const char* columnbox, int column, int position)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
BRow* myRow = myColumnList->RowAt(position-1);
if(myRow)
{
BYabField *myField = cast_as(myRow->GetField(column-1), BYabField);
if(myField)
{
const char* t = myField->String();
w->Unlock();
return t;
}
w->Unlock();
ErrorGen("Column not found");
}
w->Unlock();
ErrorGen("Row not found");
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
int YabInterface::ColumnBoxCount(const char* columnbox)
{
YabView *myView = NULL;
BColumnListView *myColumnList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myColumnList = cast_as(myView->FindView(columnbox), BColumnListView);
if(myColumnList)
{
int32 ret = myColumnList->CountRows();
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(columnbox, "COLUMNBOX");
}
void YabInterface::ListboxAdd(const char* listbox, const char* item)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(listbox), BListView);
// myList = (BListView*)myView->FindView(listbox);
if(myList)
{
myList->AddItem(new BStringItem(item));
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(listbox, "LISTBOX");
}
void YabInterface::ListboxAdd(const char* listbox, int pos, const char* item)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(listbox), BListView);
if(myList)
{
myList->AddItem(new BStringItem(item), pos-1);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(listbox, "LISTBOX");
}
void YabInterface::ListboxSelect(const char* listbox, int pos)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(listbox), BListView);
if(myList)
{
if(pos == 0)
myList->DeselectAll();
else
{
myList->Select(pos-1);
myList->ScrollToSelection();
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(listbox, "LISTBOX");
}
void YabInterface::ListboxRemove(const char* listbox, int pos)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(listbox), BListView);
if(myList)
{
myList->RemoveItem(pos-1);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(listbox, "LISTBOX");
}
const char* YabInterface::ListboxGet(const char* listbox, int pos)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
columntext[0] = '\0';
myList = cast_as(myView->FindView(listbox), BListView);
if(myList)
{
BStringItem *t = cast_as(myList->ItemAt(pos-1), BStringItem);
if(t)
{
const char* txt = t->Text();
w->Unlock();
return txt;
}
else
{
w->Unlock();
ErrorGen("Item not found");
}
}
w->Unlock();
}
}
}
Error(listbox, "LISTBOX");
}
int YabInterface::ListboxCount(const char* listbox)
{
int ret = 0;
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(listbox), BListView);
if(myList)
{
ret = myList->CountItems();
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(listbox, "LISTBOX");
}
void YabInterface::DrawSet1(const char* option, const char* window)
{
BString tmp(option);
BFont myFont;
BString opt;
// Font family
int pos1 = 0;
int pos2 = tmp.FindFirst(',');
if(pos2 != B_ERROR)
{
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
font_family fam;
sprintf((char*)fam, "%s" , opt.String());
if(myFont.SetFamilyAndFace(fam, B_REGULAR_FACE) == B_OK)
{
// myView->SetFont(&myFont, B_FONT_FAMILY_AND_STYLE);
// Font style
pos1 = pos2+1;
pos2 = tmp.FindFirst(',', pos2+1);
if(pos2 != B_ERROR)
{
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
font_style style;
sprintf((char*)style, "%s" , opt.String());
if(myFont.SetFamilyAndStyle(fam,style) == B_OK)
{
// myView->SetFont(&myFont, B_FONT_FAMILY_AND_STYLE);
// Font size
pos1 = pos2+1;
pos2 = tmp.FindFirst(',', pos2+1);
if(pos2 == B_ERROR) pos2 = tmp.Length();
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
double size = atof(opt.String());
myFont.SetSize(size);
// myView->SetFont(&myFont, B_FONT_SIZE);
if(pos2 != tmp.Length())
{
pos1 = pos2+1;
pos2 = tmp.FindFirst(',', pos2+1);
if(pos2 == B_ERROR) pos2 = tmp.Length();
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
if(opt.IFindFirst("bold") != B_ERROR)
myFont.SetFace(B_BOLD_FACE);
else if(opt.IFindFirst("italic") != B_ERROR)
myFont.SetFace(B_ITALIC_FACE);
else if(opt.IFindFirst("regular") != B_ERROR)
myFont.SetFace(B_REGULAR_FACE);
else if(opt.IFindFirst("outlined") != B_ERROR)
myFont.SetFace(B_OUTLINED_FACE);
else if(opt.IFindFirst("strikeout") != B_ERROR)
myFont.SetFace(B_STRIKEOUT_FACE);
else if(opt.IFindFirst("underscore") != B_ERROR)
myFont.SetFace(B_UNDERSCORE_FACE);
if(pos2 != tmp.Length())
{
pos1 = pos2 + 1;
pos2 = tmp.FindFirst(',', pos2+1);
if(pos2 == B_ERROR) pos2 = tmp.Length();
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
float rotation = atof(opt.String());
myFont.SetRotation(rotation);
if(pos2 != tmp.Length())
{
pos1 = pos2 + 1;
pos2 = tmp.FindFirst(',', pos2+1);
if(pos2 == B_ERROR) pos2 = tmp.Length();
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
float shear = atof(opt.String());
myFont.SetShear(shear);
}
}
}
// Font flags
/*bool looping = true;
while(looping)
{
pos1 = pos2+1;
pos2 = tmp.FindFirst(',', pos2+1);
if(pos2 == B_ERROR)
{
looping = false;
pos2 = tmp.Length();
}
tmp.CopyInto(opt, pos1, pos2-pos1);
while(opt[0] == ' ') opt.RemoveFirst(" ");
while(opt[opt.Length()-1] == ' ') opt.RemoveLast(" ");
}*/
}
}
}
}
else if(tmp.IFindFirst("system-plain")!=B_ERROR)
{
myFont = be_plain_font;
// myView->SetFont(&myFont);
}
else if(tmp.IFindFirst("system-fixed")!=B_ERROR)
{
myFont = be_fixed_font;
// myView->SetFont(&myFont);
}
else if(tmp.IFindFirst("system-bold")!=B_ERROR)
{
myFont = be_bold_font;
// myView->SetFont(&myFont);
}
YabView *myView = cast_as((BView*)viewList->GetView(window), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myView->SetFont(&myFont);
YabDrawing *t = new YabDrawing();
t->command = 12;
t->font = myFont;
myView->drawList->AddItem(t);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(window);
if(bview)
{
b->Lock();
bview->SetFont(&myFont);
bview->Sync();
b->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), window))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
b->Lock();
bView->SetFont(&myFont);
bView->Sync();
b->Unlock();
// myView->Draw(myView->Bounds());
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(window, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::DrawSet2(int fillorstroke, const char* mypattern)
{
BString tmp(mypattern);
if(fillorstroke) drawStroking = true; else drawStroking = false;
if(tmp.IFindFirst("HighSolidFill")!=B_ERROR)
yabPattern = B_SOLID_HIGH;
else if(tmp.IFindFirst("LowSolidFill")!=B_ERROR)
yabPattern = B_SOLID_LOW;
else if(tmp.IFindFirst("CheckeredFill")!=B_ERROR)
yabPattern = B_MIXED_COLORS;
else
{
for(int i = 0; i<8; i++)
if(i<tmp.Length()+3)
{
int t = 0;
t = 100*(tmp[i*3]-48) + 10*(tmp[i*3+1]-48) + (tmp[i*3+2]-48);
yabPattern.data[i] = t;
}
else
yabPattern.data[i] = 0;
}
}
int YabInterface::DeskbarParam(const char* option)
{
int ret;
BString opt(option);
BDeskbar(deskbar);
if( opt.IFindFirst("position") != B_ERROR )
{
deskbar_location pos = deskbar.Location();
switch (pos)
{
case B_DESKBAR_LEFT_TOP:ret=1;
break;
case B_DESKBAR_TOP:ret=2;
break;
case B_DESKBAR_RIGHT_TOP:ret=3;
break;
case B_DESKBAR_RIGHT_BOTTOM:ret=4;
break;
case B_DESKBAR_BOTTOM:ret=5;
break;
case B_DESKBAR_LEFT_BOTTOM:ret=6;
break;
}
}
else if( opt.IFindFirst("expanded") != B_ERROR )
{
ret = (int)deskbar.IsExpanded();
}
else if( opt.IFindFirst("width") != B_ERROR )
{
ret = (int)deskbar.Frame().Width()+1;
}
else if( opt.IFindFirst("height") != B_ERROR )
{
ret = (int)deskbar.Frame().Height()+1;
}
else if( opt.IFindFirst("x") != B_ERROR )
{
ret = (int)deskbar.Frame().left;
}
else if( opt.IFindFirst("y") != B_ERROR )
{
ret = (int)deskbar.Frame().top;
}
return ret;
}
int YabInterface::DesktopParam(bool isWidth)
{
BScreen myScreen(B_MAIN_SCREEN_ID);
display_mode t;
myScreen.GetMode(&t);
if(isWidth) return t.virtual_width;
return t.virtual_height;
}
int YabInterface::WindowGet(const char* view, const char* option)
{
int opt = 0;
int ret = -1;
BString t(option);
if(t.IFindFirst("position-x")!=B_ERROR) opt = 1;
else if(t.IFindFirst("position-y")!=B_ERROR) opt = 2;
else if(t.IFindFirst("minimum-width")!=B_ERROR) opt = 5;
else if(t.IFindFirst("minimum-height")!=B_ERROR) opt = 6;
else if(t.IFindFirst("maximum-width")!=B_ERROR) opt = 7;
else if(t.IFindFirst("maximum-height")!=B_ERROR) opt = 8;
else if(t.IFindFirst("width")!=B_ERROR) opt = 3;
else if(t.IFindFirst("height")!=B_ERROR) opt = 4;
else if(t.IFindFirst("exists")!=B_ERROR) opt = 9;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
if(opt>0 && opt<5)
{
BRect r = w->Frame();
switch(opt)
{
case 1: ret = (int)r.LeftTop().x;
break;
case 2: ret = (int)r.LeftTop().y;
break;
case 3: ret = r.IntegerWidth();
break;
case 4: ret = r.IntegerHeight();
break;
}
}
if(opt>4)
{
float x1,y1,x2,y2;
w->GetSizeLimits(&x1,&x2,&y1,&y2);
switch(opt)
{
case 5: ret = (int)x1;
break;
case 6: ret = (int)y1;
break;
case 7: ret = (int)x2;
break;
case 8: ret = (int)y2;
break;
}
}
if (opt==9)
{
return true;
}
}
else
{
if (opt==9)
{
return false;
}
else
ErrorGen("Unable to lock window");
}
}
else
{
if (opt==9)
{
return false;
}
else
Error(view, "VIEW");
}
return ret;
}
int YabInterface::ViewGet(const char* view, const char* option)
{
int opt = 0;
int ret = -1;
BString t(option);
YabView *myView = NULL;
if(t.IFindFirst("position-x")!=B_ERROR) opt = 1;
else if(t.IFindFirst("position-y")!=B_ERROR) opt = 2;
else if(t.IFindFirst("width")!=B_ERROR) opt = 3;
else if(t.IFindFirst("height")!=B_ERROR) opt = 4;
else if(t.IFindFirst("exists")!=B_ERROR) opt = 5;
else if(t.IFindFirst("focused")!=B_ERROR) opt = 6;
else
ErrorGen("Invalid option");
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BView *theView = cast_as(myView->FindView(view), BView);
if(theView)
{
BRect r = theView->Frame();
switch(opt)
{
case 1: ret = (int)r.LeftTop().x;
break;
case 2: ret = (int)r.LeftTop().y;
break;
case 3: ret = r.IntegerWidth();
break;
case 4: ret = r.IntegerHeight();
break;
case 5: ret = true;
break;
case 6: ret = theView->IsFocus();
break;
}
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
if( opt == 5 )
ret=false;
else
Error(view, "VIEW");
return ret;
}
void YabInterface::ClipboardCopy(const char* text)
{
BMessage *clip = (BMessage *)NULL;
if (be_clipboard->Lock())
{
be_clipboard->Clear();
if (clip = be_clipboard->Data())
{
clip->AddData("text/plain", B_MIME_TYPE, text, strlen(text));
be_clipboard->Commit();
}
be_clipboard->Unlock();
}
}
int YabInterface::Printer(const char* docname, const char *config, const char* view)
{
BPrintJob job(docname);
BMessage *setup;
BFile myFile(config, B_READ_ONLY);
if(myFile.InitCheck()!=B_OK)
{
if(job.ConfigPage()==B_OK)
setup = job.Settings();
else
{
// (new BAlert(_L("Printer Error!"),_L("Could not setup the printer!"), "Ok"))->Go();
return 1;
}
}
else
{
setup = new BMessage();
if(setup->Unflatten(&myFile)!=B_OK)
{
if(job.ConfigPage()==B_OK)
setup = job.Settings();
else
{
// (new BAlert(_L("Printer Error!"),_L("Could not setup the printer!"), "Ok"))->Go();
return 1;
}
}
else
if(job.IsSettingsMessageValid(setup))
job.SetSettings(setup);
else
{
// (new BAlert(_L("Printer Error!"),_L("Could not setup the printer!"), "Ok"))->Go();
return 2;
}
}
int32 firstPage, lastPage, nbPages;
BRect printableRect = job.PrintableRect();
firstPage =0 ;//= job.FirstPage(); Since we aren't calling the set-up print pages, firstpage is always 0
lastPage = job.LastPage();
// printf("PRINTER DEBUG Printable BRect %f %f %f %f\n", printableRect.left,printableRect.top, printableRect.right, printableRect.bottom);
YabView *myView = NULL;
BView *newView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
newView = myView->FindView(view);
w->Unlock();
if(newView)
break;
}
}
}
if(!newView)
{
// (new BAlert(_L("Printer Error!"),_L("Could not setup the printer!"), "Ok"))->Go();
return 3;
}
BWindow *w = newView->Window();
w->Lock();
int32 viewHeight = newView->Bounds().IntegerHeight();
float viewWidth = newView->Bounds().Width();
if(is_kind_of(newView, YabText))
viewHeight = (int32)((YabText*)newView)->TextHeight(0, ((YabText*)newView)->CountLines());
if(is_kind_of(newView, BScrollView))
{
float a,b;
if(((BScrollView*)newView)->ScrollBar(B_VERTICAL))
{
((BScrollView*)newView)->ScrollBar(B_VERTICAL)->GetRange(&a, &b);
viewHeight = viewHeight + (int32)b;
if(((BScrollView*)newView)->ScrollBar(B_HORIZONTAL))
viewHeight -= (int32)B_H_SCROLL_BAR_HEIGHT;
}
if(((BScrollView*)newView)->ScrollBar(B_HORIZONTAL))
{
((BScrollView*)newView)->ScrollBar(B_HORIZONTAL)->GetRange(&a, &b);
viewWidth = viewWidth + b;
if(((BScrollView*)newView)->ScrollBar(B_VERTICAL))
viewWidth -= B_V_SCROLL_BAR_WIDTH;
}
if(((BScrollView*)newView)->ScrollBar(B_VERTICAL))
newView = ((BScrollView*)newView)->ScrollBar(B_VERTICAL)->Target();
else
newView = ((BScrollView*)newView)->ScrollBar(B_HORIZONTAL)->Target();
}
// printf(" %d %f \n", viewHeight, viewWidth);
int32 printableHeight = printableRect.IntegerHeight();
float printableWidth = printableRect.Width();
w->Unlock();
int32 maxPages = viewHeight / printableHeight + 1;
if(lastPage>maxPages)
lastPage = maxPages;
nbPages = lastPage - firstPage + 1;
//printf("PRINTER DEBUG First Page %d Last Page %d \n", firstPage, lastPage);
// printf("PRINTER DEBUG View Height %d Printable Height %d \n", viewHeight, printableHeight);
if(nbPages<=0)
{
// (new BAlert(_L("Printer Error!"),_L("Could not setup the printer!"), "Ok"))->Go();
return 4;
}
job.BeginJob();
bool can_continue = job.CanContinue();
w->Lock();
bool hasWordWrap;
float textWidth, textHeight;
if(is_kind_of(newView, YabText))
{
int lineheight;
hasWordWrap = ((YabText*)newView)->DoesWordWrap();
if(!hasWordWrap) ((YabText*)newView)->SetWordWrap(true);
lineheight = (int)((YabText*)newView)->LineHeight();
textWidth = ((YabText*)newView)->TextRect().Width();
textHeight = ((YabText*)newView)->TextRect().Height();
((YabText*)newView)->SetTextRect(BRect(0,0,printableWidth, viewHeight));
printableHeight -= printableHeight%lineheight;
}
int32 newHeight;
if(printableHeight<viewHeight)
newHeight = printableHeight;
else
newHeight = viewHeight;
if(viewWidth<printableWidth)
printableWidth = viewWidth;
BRect currentRect;
currentRect.SetLeftTop(BPoint(0,0));
currentRect.SetRightBottom(BPoint(printableWidth, newHeight));
for(int i=1; i<firstPage; i++)
{
currentRect.SetLeftTop(BPoint(0,newHeight+1));
if(printableHeight<viewHeight-newHeight)
newHeight = newHeight + printableHeight;
else
newHeight = viewHeight;
currentRect.SetRightBottom(BPoint(printableWidth, newHeight));
// printf("PRINTER DEBUG Skipping current BRect: %f %f %f %f\n", currentRect.left,currentRect.top, currentRect.right, currentRect.bottom);
}
// printf("PRINTER DEBUG Spooling current BRect %f %f %f %f\n", currentRect.left,currentRect.top, currentRect.right, currentRect.bottom);
for(int i=firstPage; i<=lastPage; i++)
{
job.DrawView(newView, currentRect, printableRect.LeftTop());
job.SpoolPage();
can_continue = job.CanContinue();
if(!can_continue)
break;
currentRect.SetLeftTop(BPoint(0,newHeight+1));
if(printableHeight<viewHeight-newHeight)
newHeight = newHeight + printableHeight;
else
newHeight = viewHeight;
currentRect.SetRightBottom(BPoint(printableWidth, newHeight));
if(currentRect.bottom<currentRect.top)
break;
// printf("PRINTER DEBUG Spooling current BRect: %f %f %f %f\n", currentRect.left,currentRect.top, currentRect.right, currentRect.bottom);
}
if(is_kind_of(newView, YabText))
{
((YabText*)newView)->SetWordWrap(hasWordWrap);
((YabText*)newView)->SetTextRect(BRect(0,0,textWidth, textHeight));
}
w->Unlock();
if(can_continue)
job.CommitJob();
else
// (new BAlert(_L("Printer Error!"),_L("Could not setup the printer!"), "Ok"))->Go();
return 5;
return 0;
}
void YabInterface::PrinterConfig(const char* config)
{
BPrintJob job("");
if(job.ConfigPage()==B_OK)
{
BMessage *setup = job.Settings();
BFile myFile(config, B_WRITE_ONLY|B_CREATE_FILE|B_ERASE_FILE);
if(myFile.InitCheck()==B_OK)
setup->Flatten(&myFile);
}
}
const char* YabInterface::ClipboardPaste()
{
const char *text;
int32 textlen;
BString returnstring;
BMessage *clip = (BMessage *)NULL;
if (be_clipboard->Lock())
{
BMessage *clip = be_clipboard->Data();
clip->FindData("text/plain", B_MIME_TYPE, (const void **)&text, &textlen);
be_clipboard->Unlock();
if (text != NULL) {
returnstring.SetTo(text, textlen);
}
}
return returnstring;
}
int YabInterface::NewAlert(const char* text, const char* button1, const char* button2, const char* button3, const char* option)
{
alert_type tmp;
BString typ(option);
tmp = B_EMPTY_ALERT;
if(typ.IFindFirst("info")!=B_ERROR) tmp = B_INFO_ALERT;
else if(typ.IFindFirst("idea")!=B_ERROR) tmp = B_IDEA_ALERT;
else if(typ.IFindFirst("warning")!=B_ERROR) tmp = B_WARNING_ALERT;
else if(typ.IFindFirst("stop")!=B_ERROR) tmp = B_STOP_ALERT;
if(!strcmp(button2,"")) button2 = NULL;
if(!strcmp(button3,"")) button3 = NULL;
return (new BAlert("Alert!",text,button1,button2,button3,B_WIDTH_AS_USUAL,tmp))->Go() + 1;
}
void YabInterface::Calendar(double x, double y, const char* id, const char* format, const char* date, const char* view)
{
int day, month, year, look, myformat;
BString tYear, tMonth, tDay;
BString tDate(date);
tDate.MoveInto(tYear, 6,4);
tDate.MoveInto(tMonth, 3,2);
tDate.MoveInto(tDay, 0,2);
BString tFormat(format);
look = CC_DOT_DIVIDER;
myformat = CC_DD_MM_YYYY_FORMAT;
if(tFormat.FindFirst("/")!=B_ERROR)
look = CC_SLASH_DIVIDER;
else if(tFormat.FindFirst("-")!=B_ERROR)
look = CC_MINUS_DIVIDER;
if(tFormat.IFindFirst("MD")!=B_ERROR)
myformat = CC_MM_DD_YYYY_FORMAT;
year = atoi(tYear.String());
if(myformat == CC_MM_DD_YYYY_FORMAT)
{
month = atoi(tDay.String());
day = atoi(tMonth.String());
}
else
{
month = atoi(tMonth.String());
day = atoi(tDay.String());
}
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
CalendarControl* myCalendar = new CalendarControl(BPoint(x,y),id,day, month, year, myformat, look);
if(w->layout == -1)
myCalendar->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
myCalendar->SetResizingMode(w->layout);
myView->AddChild(myCalendar);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
const char* YabInterface::Calendar(const char* id)
{
const char* txt;
YabView *myView = NULL;
CalendarControl *myCalendar = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myCalendar = cast_as(myView->FindView(id), CalendarControl);
if(myCalendar)
{
txt = myCalendar->Text();
w->Unlock();
return txt;
}
w->Unlock();
}
}
}
Error(id, "CALENDAR");
}
void YabInterface::Calendar(const char* id, const char* date)
{
int day, month, year, look, myformat;
BString tYear, tMonth, tDay;
BString tDate(date);
tDate.MoveInto(tYear, 6,4);
tDate.MoveInto(tMonth, 3,2);
tDate.MoveInto(tDay, 0,2);
YabView *myView = NULL;
CalendarControl *myCalendar = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myCalendar = cast_as(myView->FindView(id), CalendarControl);
if(myCalendar)
{
myformat = myCalendar->GetFlags();
year = atoi(tYear.String());
if(myformat == CC_MM_DD_YYYY_FORMAT)
{
month = atoi(tDay.String());
day = atoi(tMonth.String());
}
else
{
month = atoi(tMonth.String());
day = atoi(tDay.String());
}
myCalendar->SetDate(day,month,year);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "CALENDAR");
}
void YabInterface::Scrollbar(const char* id, int format, const char* view)
{
YabView *myView = NULL;
BView *myBView = NULL;
if(format != 0)
{
bool hasHor = false, hasVer = false;
if(format>1) hasHor = true;
if(format == 1 || format == 3) hasVer = true;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myBView = myView->FindView(view);
if(myBView)
{
if(myView->RemoveChild(myBView))
{
BScrollView *myScrollView = new BScrollView(id, myBView, B_FOLLOW_LEFT|B_FOLLOW_TOP, 0, hasHor, hasVer);
if(w->layout == -1)
myScrollView->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
myScrollView->SetResizingMode(w->layout);
myScrollView->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE|B_NAVIGABLE);
myView->AddChild(myScrollView);
myScrollView->SetViewColor(myBView->ViewColor());
w->Unlock();
return;
}
}
w->Unlock();
}
}
}
Error(view, "VIEW");
}
ErrorGen("Unknown option");
}
void YabInterface::ScrollbarSet(const char* scrollview, const char* option, double position)
{
BString tOption(option);
orientation isHorizontal;
if(tOption.IFindFirst("Vertical Position")!=B_ERROR) isHorizontal = B_VERTICAL;
if(tOption.IFindFirst("Horizontal Position")!=B_ERROR) isHorizontal = B_HORIZONTAL;
if(isHorizontal == B_VERTICAL || isHorizontal == B_HORIZONTAL)
{
YabView *myView = NULL;
BScrollView *myScrollView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myScrollView = cast_as((BView*)myView->FindView(scrollview),BScrollView);
if(myScrollView)
{
BScrollBar *myScrollbar = myScrollView->ScrollBar(isHorizontal);
if(myScrollbar)
myScrollbar->SetValue(position);
else
ErrorGen("SCROLLBAR is not valid!");
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(scrollview, "SCROLLBAR");
}
ErrorGen("Unknown option");
}
void YabInterface::ScrollbarSet(const char* scrollview, const char* option)
{
BString tOption(option);
border_style border;
if(tOption.IFindFirst("no-border")!=B_ERROR)
border = B_NO_BORDER;
else if(tOption.IFindFirst("plain-border")!=B_ERROR)
border = B_PLAIN_BORDER;
else if(tOption.IFindFirst("fancy-border")!=B_ERROR)
border = B_FANCY_BORDER;
else
ErrorGen("Invalid option");
YabView *myView = NULL;
BScrollView *myScrollView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myScrollView = cast_as((BView*)myView->FindView(scrollview),BScrollView);
if(myScrollView)
{
myScrollView->SetBorder(border);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(scrollview, "SCROLLBAR");
}
void YabInterface::ScrollbarSet(const char* scrollview, const char* option, double opt1, double opt2)
{
BString tOption(option);
orientation isHorizontal;
int isRange = -1;
if(tOption.IFindFirst("Vertical")!=B_ERROR) isHorizontal = B_VERTICAL;
if(tOption.IFindFirst("Horizontal")!=B_ERROR) isHorizontal = B_HORIZONTAL;
if(tOption.IFindFirst("Range")!=B_ERROR) isRange = 1;
if(tOption.IFindFirst("Steps")!=B_ERROR) isRange = 0;
if((isHorizontal == B_VERTICAL || isHorizontal == B_HORIZONTAL) && isRange != -1)
{
YabView *myView = NULL;
BScrollView *myScrollView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myScrollView = cast_as((BView*)myView->FindView(scrollview),BScrollView);
if(myScrollView)
{
/*
if(isRange)
{
BRect f(myView->Bounds());
// printf("%f %f\n", opt1, opt2);
if(isHorizontal == B_HORIZONTAL)
{
f.left = opt1;
f.right = opt2;
}
else
{
f.top = opt1;
f.bottom = opt2;
}
myScrollView->SetDataRect(f);
}
else
{
BScrollBar *myScrollbar = myScrollView->ScrollBar(isHorizontal);
if(myScrollbar) myScrollbar->SetSteps(opt1,opt2);
}*/
BScrollBar *myScrollbar = myScrollView->ScrollBar(isHorizontal);
if(isRange == 1)
{
if(myScrollbar)
myScrollbar->SetRange(opt1,opt2);
else
ErrorGen("SCROLLBAR is not valid!");
}
else
{
if(myScrollbar)
myScrollbar->SetSteps(opt1,opt2);
else
ErrorGen("SCROLLBAR is not valid!");
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(scrollview, "SCROLLBAR");
}
ErrorGen("Unknown option");
}
double YabInterface::ScrollbarGet(const char* scrollview, const char* option)
{
BString tOption(option);
orientation isHorizontal;
double res = 0;
if(tOption.IFindFirst("Vertical")!=B_ERROR) isHorizontal = B_VERTICAL;
if(tOption.IFindFirst("Horizontal")!=B_ERROR) isHorizontal = B_HORIZONTAL;
if(isHorizontal == B_VERTICAL || isHorizontal == B_HORIZONTAL)
{
YabView *myView = NULL;
BScrollView *myScrollView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myScrollView = (BScrollView*)myView->FindView(scrollview);
if(myScrollView)
{
BScrollBar *myScrollbar = myScrollView->ScrollBar(isHorizontal);
if(myScrollbar)
res = myScrollbar->Value();
else
ErrorGen("SCROLLBAR is not valid!");
w->Unlock();
return res;
}
w->Unlock();
}
}
}
Error(scrollview, "SCROLLBAR");
}
ErrorGen("Unknown option");
}
void YabInterface::SplitView(BRect frame, const char* id, int isVertical, int style, const char* view)
{
orientation posture = isVertical>0?B_VERTICAL:B_HORIZONTAL;
double pos;
if(posture==B_VERTICAL)
pos = (frame.right-frame.left)/2;
else
pos = (frame.bottom-frame.top)/2;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BRect frame1(frame);
BRect frame2(frame);
if(posture==B_VERTICAL)
{
frame1.Set(0,0,pos,frame.bottom-frame.top);
frame2.Set(pos+10,0,frame.right-frame.left, frame.bottom-frame.top);
}
else
{
frame1.Set(0,0,frame.right-frame.left, pos-10);
frame2.Set(0,pos,frame.right-frame.left,frame.bottom-frame.top);
}
BString t1(id); t1 += "1";
BString t2(id); t2 += "2";
YabView *newView1 = new YabView(frame1, t1.String(), B_FOLLOW_ALL_SIDES,B_WILL_DRAW|B_NAVIGABLE_JUMP);
viewList->AddView(t1.String(), newView1, TYPE_YABVIEW);
YabView *newView2 = new YabView(frame2, t2.String(), B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_NAVIGABLE_JUMP);
viewList->AddView(t2.String(), newView2, TYPE_YABVIEW);
SplitPane *mySplit = new SplitPane(frame, id, (BView*)newView1, (BView*)newView2, 0);
if(style)
mySplit->SetBarThickness(10);
else
mySplit->SetBarThickness(5);
mySplit->SetAlignment(posture);
if(w->layout == -1)
mySplit->SetResizingMode(B_FOLLOW_ALL_SIDES);
else
mySplit->SetResizingMode(w->layout);
myView->AddChild(mySplit);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::SplitView(const char* splitView, const char* option, double position)
{
YabView *myView = NULL;
SplitPane *mySplit = NULL;
BString t(option);
if(t.IFindFirst("Divider")==B_ERROR)
ErrorGen("Unknown option");
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySplit = cast_as(myView->FindView(splitView), SplitPane);
if(mySplit)
{
mySplit->SetBarPosition((int)position);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(splitView, "SPLITVIEW");
}
void YabInterface::SplitView(const char* splitView, const char* option, double left, double right)
{
YabView *myView = NULL;
SplitPane *mySplit = NULL;
BString t(option);
if(t.IFindFirst("MinimumSizes")==B_ERROR)
ErrorGen("Unknown option");
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySplit = cast_as(myView->FindView(splitView), SplitPane);
if(mySplit)
{
mySplit->SetMinSizeOne((int)left);
mySplit->SetMinSizeTwo((int)right);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(splitView, "SPLITVIEW");
}
double YabInterface::SplitViewGet(const char* splitView, const char* option)
{
double ret = -1;
YabView *myView = NULL;
SplitPane *mySplit = NULL;
BString t(option);
if(t.IFindFirst("Divider")==B_ERROR)
ErrorGen("Unknown option");
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySplit = cast_as(myView->FindView(splitView), SplitPane);
if(mySplit)
{
ret = (double)mySplit->GetBarPosition();
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(splitView, "SPLITVIEW");
}
void YabInterface::StackViews(BRect frame, const char* id, int number, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView && number<1000)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabStackView *myStackView = new YabStackView(frame, id, number);
if(w->layout == -1)
myStackView->SetResizingMode(B_FOLLOW_ALL);
else
myStackView->SetResizingMode(w->layout);
// myTabView->SetFlags(B_WILL_DRAW|B_FULL_UPDATE_ON_RESIZE);
YabView *newViews[number];
for(int i=0; i<number; i++)
{
BString t(id);
t << i+1;
newViews[i] = new YabView(myStackView->Bounds(), t.String(), B_FOLLOW_ALL_SIDES,B_WILL_DRAW|B_NAVIGABLE_JUMP);
viewList->AddView(t.String(), newViews[i], TYPE_YABVIEW);
}
myStackView->AddViews((BView**)newViews);
myView->AddChild(myStackView);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
if(number<1000) Error(view, "VIEW");
else ErrorGen("Too many views!");
}
void YabInterface::StackViews(const char* id, int num)
{
YabView *myView = NULL;
YabStackView *myStackView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myStackView = cast_as(myView->FindView(id), YabStackView);
if(myStackView)
{
myStackView->SelectView(num-1);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "STACKVIEW");
}
int YabInterface::StackViewGet(const char* id)
{
int ret;
YabView *myView = NULL;
YabStackView *myStackView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myStackView = cast_as(myView->FindView(id), YabStackView);
if(myStackView)
{
ret = myStackView->CurrentView();
w->Unlock();
return ret+1;
}
w->Unlock();
}
}
}
Error(id, "STACKVIEW");
}
void YabInterface::DrawSet3(const char* option, int transparency)
{
BString t(option);
if(t.IFindFirst("alpha") != B_ERROR)
{
yabAlpha = transparency;
if(yabAlpha<0) yabAlpha = 0;
if(yabAlpha>255) yabAlpha = 255;
}
}
void YabInterface::TextURL(double x, double y, const char* id, const char* text, const char* url, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
double h,b;
b = be_plain_font->StringWidth(text)+1;
h = be_plain_font->Size() + 1;
URLView *s = new URLView(BRect(x,y,x+b,y+h), id, text, url);
s->SetHoverEnabled(true);
if(w->layout == -1)
s->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
s->SetResizingMode(w->layout);
s->SetFlags(B_WILL_DRAW);
myView->AddChild(s);
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::TextURL(const char* id, const char* option, int r, int g, int b)
{
int opt = 0;
BString t(option);
if(t.IFindFirst("label") != B_ERROR) opt = 1;
if(t.IFindFirst("click") != B_ERROR) opt = 2;
if(t.IFindFirst("mouse-over") != B_ERROR) opt = 3;
YabView *myView = NULL;
URLView *myURLView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myURLView = cast_as(myView->FindView(id), URLView);
if(myURLView)
{
rgb_color col = {r,g,b,255};
switch(opt)
{
case 1: myURLView->SetColor(col);
break;
case 2: myURLView->SetClickColor(col);
break;
case 3: myURLView->SetHoverColor(col);
break;
default: break;
}
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "TEXTURL");
}
void YabInterface::Menu(const char* menuHead, int isRadio, const char* view)
{
bool radio = isRadio?true:false;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BMenuBar *menubar;
BMenu *menu = NULL;
BMenuItem *item = NULL;
w->Lock();
menubar = cast_as(myView->FindView("menubar"), BMenuBar);
if(menubar != NULL)
{
for(int i=0; i<menubar->CountItems(); i++)
if(!strcmp( menubar->ItemAt(i)->Label(), menuHead))
{
menu = menubar->SubmenuAt(i);
menu->SetRadioMode(radio);
break;
}
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::SubMenu(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* shortcut, const char* view)
{
char myShortcut;
int32 modifiers = 0;
BString t(shortcut);
if(t.Length()>1)
{
myShortcut = shortcut[t.Length()-1];
if(t.IFindFirst("s")!=B_ERROR && t.IFindFirst("s")<t.Length()-1)
modifiers = modifiers|B_SHIFT_KEY;
if(t.IFindFirst("c")!=B_ERROR && t.IFindFirst("c")<t.Length()-1)
modifiers = modifiers|B_CONTROL_KEY;
if(t.IFindFirst("o")!=B_ERROR && t.IFindFirst("o")<t.Length()-1)
modifiers = modifiers|B_OPTION_KEY;
}
else
myShortcut = shortcut[0];
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(!strcmp(menuItem, "--"))
return;
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BMenuBar *menubar;
YabMenu *menu = NULL;
YabMenu *submenu = NULL;
BMenuItem *item = NULL;
w->Lock();
menubar = cast_as(myView->FindView("menubar"), BMenuBar);
if(menubar == NULL)
{
menubar = new BMenuBar(myView->Bounds(),"menubar");
myView->AddChild(menubar);
}
for(int i=0; i<menubar->CountItems(); i++)
if(!strcmp( menubar->ItemAt(i)->Label(), menuHead))
menu = (YabMenu*)menubar->SubmenuAt(i);
if(menu == NULL)
{
menu = new YabMenu(menuHead);
menubar->AddItem(menu);
}
int isInMenu = -1;
for(int i=0; i<menu->CountItems(); i++)
if(!strcmp(menu->ItemAt(i)->Label(), menuItem))
{
isInMenu = i;
break;
}
if(isInMenu == -1)
{
submenu = new YabMenu(menuItem);
menu->AddItem(submenu);
}
else
{
submenu = cast_as(menu->SubmenuAt(isInMenu),YabMenu);
if(submenu == NULL)
{
BMenuItem *myItem = menu->RemoveItem(isInMenu);
delete myItem;
submenu = new YabMenu(menuItem);
menu->AddItem(submenu, isInMenu);
}
}
if(!strcmp(subMenuItem,"--"))
submenu->AddItem(new BSeparatorItem());
else
submenu->AddItem(new BMenuItem(subMenuItem, new BMessage(YABSUBMENU), myShortcut, modifiers));
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::SubMenu(const char* menuHead, const char* menuItem, int isRadio, const char* view)
{
bool radio = isRadio?true:false;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BMenuBar *menubar;
BMenu *menu = NULL;
BMenu *submenu = NULL;
BMenuItem *item = NULL;
w->Lock();
menubar = cast_as(myView->FindView("menubar"), BMenuBar);
if(menubar != NULL)
{
for(int i=0; i<menubar->CountItems(); i++)
if(!strcmp( menubar->ItemAt(i)->Label(), menuHead))
{
menu = menubar->SubmenuAt(i);
for(int j=0; j<menu->CountItems(); j++)
if(!strcmp( menu->ItemAt(j)->Label(), menuItem))
{
submenu = menu->SubmenuAt(j);
if(submenu)
{
submenu->SetRadioMode(radio);
break;
}
}
if(submenu) break;
}
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
int YabInterface::ColorControlGet(const char* colorcontrol, const char* option)
{
int ret = -1;
int myOption = -1;
BString myString(option);
if(myString.IFindFirst("Red") != B_ERROR) myOption = 0;
if(myString.IFindFirst("Green") != B_ERROR) myOption = 1;
if(myString.IFindFirst("Blue") != B_ERROR) myOption = 2;
if(myOption<0) ErrorGen("Unknown option");
YabView *myView = NULL;
BColorControl *myCControl = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView && myOption>-1)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myCControl = cast_as(myView->FindView(colorcontrol), BColorControl);
if(myCControl)
{
rgb_color t = myCControl->ValueAsColor();
switch(myOption)
{
case 0: ret = t.red;
break;
case 1: ret = t.green;
break;
case 2: ret = t.blue;
break;
}
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(colorcontrol, "COLORCONTROL");
}
int YabInterface::SliderGet(const char* slider)
{
int ret = -1;
YabView *myView = NULL;
BSlider *mySlider = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySlider = cast_as(myView->FindView(slider), BSlider);
if(mySlider)
{
ret = mySlider->Value();
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(slider, "SLIDER");
}
void YabInterface::SubMenu3(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* option, const char* view)
{
int myOption = -1;
BString t(option);
if(t.IFindFirst("disable")!=B_ERROR) myOption = 0;
if(t.IFindFirst("enable")!=B_ERROR) myOption = 1;
if(t.IFindFirst("mark")!=B_ERROR) myOption = 2;
if(t.IFindFirst("plain")!=B_ERROR) myOption = 3;
if(t.IFindFirst("remove")!=B_ERROR) myOption = 4;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView && myOption>-1)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BMenuBar *menubar;
BMenu *menu = NULL;
BMenu *submenu = NULL;
BMenuItem *item = NULL;
w->Lock();
menubar = cast_as(myView->FindView("menubar"), BMenuBar);
if(menubar)
{
for(int i=0; i<menubar->CountItems(); i++)
{
if(!strcmp( menubar->ItemAt(i)->Label(), menuHead))
{
menu = menubar->SubmenuAt(i);
for(int j=0; j<menu->CountItems(); j++)
{
if(!strcmp( menu->ItemAt(j)->Label(), menuItem))
{
submenu = menu->SubmenuAt(j);
if(submenu)
{
for(int k=0; k<submenu->CountItems(); k++)
{
if(!strcmp( submenu->ItemAt(k)->Label(), subMenuItem))
{
switch(myOption)
{
case 0:
submenu->ItemAt(k)->SetEnabled(false);
break;
case 1:
submenu->ItemAt(k)->SetEnabled(true);
break;
case 2:
submenu->ItemAt(k)->SetMarked(true);
break;
case 3:
submenu->ItemAt(k)->SetMarked(false);
break;
case 4:
submenu->RemoveItem( submenu->ItemAt(k) );
if(submenu->CountItems() == 0) {
if(menu->RemoveItem(submenu))
menu->AddItem(new BMenuItem(menuItem, new BMessage(YABMENU)), j);
}
break;
}
break;
}
}
}
}
}
}
}
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
if(myOption>-1) Error(view, "VIEW");
else ErrorGen("Unknown option");
}
void YabInterface::Menu3(const char* menuHead, const char* menuItem, const char* option,const char* view)
{
int myOption = -1;
BString t(option);
if(t.IFindFirst("disable")!=B_ERROR) myOption = 0;
if(t.IFindFirst("enable")!=B_ERROR) myOption = 1;
if(t.IFindFirst("mark")!=B_ERROR) myOption = 2;
if(t.IFindFirst("plain")!=B_ERROR) myOption = 3;
if(t.IFindFirst("remove")!=B_ERROR) myOption = 4;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView && myOption>-1)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BMenuBar *menubar;
BMenu *menu = NULL;
// BMenuItem *item = NULL;
w->Lock();
menubar = cast_as(myView->FindView("menubar"), BMenuBar);
if(menubar != NULL)
{
for(int i=0; i<menubar->CountItems(); i++)
if(!strcmp( menubar->ItemAt(i)->Label(), menuHead))
{
menu = menubar->SubmenuAt(i);
for(int j=0; j<menu->CountItems(); j++)
if(!strcmp( menu->ItemAt(j)->Label(), menuItem))
{
switch(myOption)
{
case 0:
menu->ItemAt(j)->SetEnabled(false);
break;
case 1:
menu->ItemAt(j)->SetEnabled(true);
break;
case 2:
menu->ItemAt(j)->SetMarked(true);
break;
case 3:
menu->ItemAt(j)->SetMarked(false);
break;
case 4:
menu->RemoveItem( menu->ItemAt(j) );
}
break;
}
}
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
if(myOption>-1) Error(view, "VIEW");
else ErrorGen("Unknown option");
}
void YabInterface::SpinControl(double x, double y, const char* id, const char* label, int min, int max, int step, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
Spinner *mySpin = new Spinner(BRect(x,y,x+10,y+10), id, label, min, max, step, NULL);
if(w->layout == -1)
mySpin->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
mySpin->SetResizingMode(w->layout);
myView->AddChild(mySpin);
mySpin->SetViewColor(myView->ViewColor());
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
}
void YabInterface::SpinControl(const char* spinControl, int value)
{
YabView *myView = NULL;
Spinner *mySpin = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySpin = cast_as(myView->FindView(spinControl),Spinner);
if(mySpin)
{
mySpin->SetValue(value);
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(spinControl, "SPINCONTROL");
}
int YabInterface::SpinControlGet(const char *spinControl)
{
int ret = 0;
YabView *myView = NULL;
Spinner *mySpin = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
mySpin = cast_as(myView->FindView(spinControl),Spinner);
if(mySpin)
{
ret = mySpin->Value();
w->Unlock();
return ret;
}
w->Unlock();
}
}
}
Error(spinControl, "SPINCONTROL");
}
const char* YabInterface::PopUpMenu(double x, double y, const char* menuItems, const char* view)
{
BString t(menuItems);
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
const char* res;
w->Lock();
BPopUpMenu *returnMe = new BPopUpMenu( "YabPopup", false, false );
returnMe->SetAsyncAutoDestruct(true);
int oldi = 0;
for(int i=0; i<t.Length(); i++)
if(t[i]=='|')
{
BString j;
t.CopyInto(j,oldi, i-oldi);
if(j == "--")
returnMe->AddItem(new BSeparatorItem());
else
returnMe->AddItem(new BMenuItem(_L(j.String()), NULL));
oldi=i+1;
}
BString j;
t.CopyInto(j,oldi, t.Length()-oldi);
returnMe->AddItem(new BMenuItem(j.String(), NULL));
BMenuItem *result = returnMe->Go(myView->ConvertToScreen(BPoint(x,y)), false, true);
if(result)
{
res = result->Label();
w->Unlock();
return res;
}
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
return "";
}
void YabInterface::DropBoxSelect(const char* dropbox, int position)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(dropbox), BMenuField);
if(myMenuField)
{
BMenu *myMenu = (BMenu*)myMenuField->Menu();
if(myMenu)
{
if(position<1) position = 1;
if(position>=myMenu->CountItems())
position = myMenu->CountItems();
if(myMenu->CountItems()!=0)
(myMenu->ItemAt(position-1))->SetMarked(true);
w->Unlock();
return;
}
}
w->Unlock();
}
}
}
Error(dropbox, "DROPBOX");
}
void YabInterface::DropBoxClear(const char* dropbox)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(dropbox), BMenuField);
if(myMenuField)
{
BMenu *myMenu = (BMenu*)myMenuField->Menu();
if(myMenu)
{
while(myMenu->CountItems()>0)
{
BMenuItem *myItem = myMenu->RemoveItem(myMenu->CountItems()-1);
delete myItem;
}
// bad workaround! Add an empty MenuItem and delete it again
// so that the menu changes
BMenuItem *myItem = new BMenuItem("", NULL);
myMenu->AddItem(myItem);
myItem->SetMarked(true);
myMenu->RemoveItem(myItem);
delete myItem;
w->Unlock();
return;
}
}
w->Unlock();
}
}
}
Error(dropbox, "DROPBOX");
}
void YabInterface::DropBoxRemove(const char* dropbox, int position)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(dropbox), BMenuField);
if(myMenuField)
{
BMenu *myMenu = (BMenu*)myMenuField->Menu();
if(myMenu)
{
position --;
if(position<0) position = 0;
if(position>=myMenu->CountItems())
position = myMenu->CountItems()-1;
if(myMenu->CountItems()!=0)
{
BMenuItem *myItem = myMenu->ItemAt(position);
if(myItem->IsMarked())
{
if(myMenu->CountItems()>1 && position>0)
(myMenu->ItemAt(position-1))->SetMarked(true);
else if(myMenu->CountItems()>1 && position == 0)
(myMenu->ItemAt(position+1))->SetMarked(true);
else
{
BMenuItem *myItem = new BMenuItem("", NULL);
myMenu->AddItem(myItem);
myItem->SetMarked(true);
myMenu->RemoveItem(myItem);
delete myItem;
}
}
myMenu->RemoveItem(myItem);
delete myItem;
}
w->Unlock();
return;
}
}
w->Unlock();
}
}
}
Error(dropbox, "DROPBOX");
}
int YabInterface::DropBoxCount(const char* dropbox)
{
int ret = -1;
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(dropbox), BMenuField);
if(myMenuField)
{
BMenu *myMenu = (BMenu*)myMenuField->Menu();
if(myMenu)
{
ret = myMenu->CountItems();
w->Unlock();
return ret;
}
}
w->Unlock();
}
}
}
Error(dropbox, "DROPBOX");
}
const char* YabInterface::DropBoxGet(const char* dropbox, int position)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(dropbox), BMenuField);
if(myMenuField)
{
BMenu *myMenu = (BMenu*)myMenuField->Menu();
if(myMenu)
{
const char *ret;
position --;
if(position<0) position = 0;
if(position>=myMenu->CountItems())
position = myMenu->CountItems()-1;
if(myMenu->CountItems()!=0)
{
ret = (myMenu->ItemAt(position))->Label();
w->Unlock();
return ret;
}
else
{
w->Unlock();
return "";
}
}
}
w->Unlock();
}
}
}
Error(dropbox, "DROPBOX");
}
double YabInterface::MenuHeight()
{
double ret = -1;
for(int i=0; i<CountWindows(); i++)
{
YabWindow *w = cast_as(WindowAt(i), YabWindow);
if(w)
{
BMenuBar *menubar;
w->Lock();
menubar = cast_as(w->FindView("menubar"), BMenuBar);
if(menubar)
{
ret = menubar->Bounds().bottom - menubar->Bounds().top;
w->Unlock();
break;
}
w->Unlock();
}
}
return ret;
}
double YabInterface::TabHeight()
{
BFont f = be_plain_font;
font_height fh;
f.GetHeight(&fh);
return fh.ascent + fh.descent + fh.leading + 10.0f;
}
double YabInterface::ScrollbarWidth()
{
return B_H_SCROLL_BAR_HEIGHT;
}
const int YabInterface::IsMouseIn(const char* view)
{
int t = 2;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
t = myView->mouseMovedInfo;
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
return 1-t;
}
const char* YabInterface::GetMouseIn()
{
snooze(20000);
BString ts;
mousemessagebuffer[0] = '\0';
int handled = -1;
YabView *myView = NULL;
for(int i=0; i<CountWindows(); i++)
{
YabWindow *w = cast_as(WindowAt(i), YabWindow);
if(w && w->IsActive())
{
w->Lock();
BView *view = w->LastMouseMovedView();
if(!view)
{
w->Unlock();
break;
}
if(is_kind_of(view->Parent(), BTextControl))
view = view->Parent();
if(is_kind_of(view->Parent(), Spinner))
view = view->Parent();
if(is_kind_of(view->Parent(), CalendarControl))
view = view->Parent();
if(is_kind_of(view->Parent(), BColorControl))
view = view->Parent();
if(is_kind_of(view->Parent(), YabText))
view = view->Parent();
if(is_kind_of(view->Parent(), BColumnListView))
view = view->Parent();
if(is_kind_of(view, BBox))
view = view->Parent();
if(is_kind_of(view, BMenuBar))
view = view->Parent();
BString name = view->Name();
BPoint coordinates;
uint32 buttons;
view->GetMouse(&coordinates, &buttons);
ts << name << ":" << (int)coordinates.x << ":" << (int)coordinates.y << ":";
if(buttons & B_PRIMARY_MOUSE_BUTTON)
ts << 1 << ":";
else
ts << 0 << ":";
if(buttons & B_TERTIARY_MOUSE_BUTTON)
ts << 1 << ":";
else
ts << 0 << ":";
if(buttons & B_SECONDARY_MOUSE_BUTTON)
ts << 1;
else
ts << 0;
w->Unlock();
}
}
strcpy(mousemessagebuffer, ts.String());
return (char*)mousemessagebuffer;
}
const char* YabInterface::KeyboardMessages(const char* view)
{
snooze(20000);
keyboardbuffer[0] = '\0';
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BString t("");
w->Lock();
// if(!myView->IsFocus()) myView->MakeFocus(true);
if(myView->IsFocus())
t << myView->pressedKeys;
w->Unlock();
strcpy(keyboardbuffer, t.String());
}
else
ErrorGen("Unable to lock window");
}
else
Error(view, "VIEW");
return (char*)keyboardbuffer;
}
const char* YabInterface::GetMouseMessages(const char* view)
{
snooze(20000);
mousemessagebuffer[0] = '\0';
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BString t("");
w->Lock();
t << myView->mouseX; t += ":";
t << myView->mouseY; t += ":";
t << myView->mouseLButton; t += ":";
t << myView->mouseMButton; t += ":";
t << myView->mouseRButton;
w->Unlock();
strcpy(mousemessagebuffer, t.String());
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), view))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BString t("");
w->Lock();
t << myView->mouseX; t += ":";
t << myView->mouseY; t += ":";
t << myView->mouseLButton; t += ":";
t << myView->mouseMButton; t += ":";
t << myView->mouseRButton;
w->Unlock();
strcpy(mousemessagebuffer, t.String());
return (char*)mousemessagebuffer;
}
else
ErrorGen("Unable to lock window");
}
}
Error(view, "VIEW");
}
return (char*)mousemessagebuffer;
}
int YabInterface::ThreadKill(const char* option, int id)
{
int isTeam = -1;
int ret = 0;
BString t(option);
if(t.IFindFirst("teamid")!=B_ERROR) isTeam = 1;
if(t.IFindFirst("threadid")!=B_ERROR) isTeam = 0;
if(isTeam==1)
{
if(kill_team(id)==B_OK) ret = 1;
}
else if(isTeam==0)
{
if(kill_thread(id)==B_OK) ret = 1;
}
else
ErrorGen("Unknown Option");
return ret;
}
int YabInterface::ThreadGet(const char* option, const char* appname)
{
int isTeam = -1;
int ret = -1;
BString t(option);
if(t.IFindFirst("teamid")!=B_ERROR) isTeam = 1;
if(t.IFindFirst("threadid")!=B_ERROR) isTeam = 0;
if(isTeam==0)
{
ret = find_thread(appname);
if(ret == B_NAME_NOT_FOUND) ret = -1;
}
else if(isTeam==1)
{
int32 cookie=0;
team_info info;
BString t(appname);
while (get_next_team_info(&cookie, &info) == B_OK)
{
if(t.FindFirst(info.args)==B_OK)
{
ret = info.team;
break;
}
}
}
else
ErrorGen("Unknown Option");
return ret;
}
void YabInterface::Bitmap(double w, double h, const char* id)
{
char *t;
BBitmap *b = new BBitmap(BRect(0,0,w-1,h-1), B_RGBA32, true);
BView *bview = new BView(BRect(0,0,w-1,h-1), id, B_FOLLOW_NONE, 0);
b->AddChild(bview);
t = (char*)b->Bits();
for(int i=0; i<w*h*4; i = i + 4)
{
t[i] = t[i+1] = t[i+2] = 255;
t[i+3] = 0;
}
yabbitmaps->AddItem(b);
}
int YabInterface::BitmapColor(double x, double y, const char* bitmap, const char* option)
{
int rgb = 0;
BString tmp(option);
if(tmp.IFindFirst("red")!=B_ERROR) rgb = 1;
else if(tmp.IFindFirst("green")!=B_ERROR) rgb = 2;
else if(tmp.IFindFirst("blue")!=B_ERROR) rgb = 3;
else
ErrorGen("Unknown Option");
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(bitmap);
if(bview)
{
int t = b->BytesPerRow()*(int)y + (int)x*4;
unsigned char* bits = (unsigned char*)b->Bits();
if(t <= b->BitsLength())
if(rgb == 1)
return (int)bits[t];
else if(rgb == 2)
return (int)bits[t+1];
else if(rgb == 3)
return (int)bits[t+2];
return 0;
}
}
Error(bitmap, "BITMAP");
}
void YabInterface::BitmapDraw(double x, double y, const char* bitmap, const char* mode, const char* view)
{
drawing_mode myMode;
BString tmp(mode);
if(tmp.IFindFirst("copy")!=B_ERROR)
myMode = B_OP_COPY;
else if(tmp.IFindFirst("alpha")!=B_ERROR)
myMode = B_OP_ALPHA;
else
ErrorGen("Unknown option");
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(bitmap);
if(bview)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BBitmap *newb = new BBitmap(b->Bounds(), B_RGBA32);
char* newbits = (char*)newb->Bits();
char* oldbits = (char*)b->Bits();
for(int j=0; j<b->BitsLength(); j++)
newbits[j] = oldbits[j];
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 10;
t->x1 = x; t->y1 = y;
t->bitmap = newb;
myView->drawList->AddItem(t);
myView->Invalidate();
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *bb = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bbview = bb->FindView(view);
if(bbview)
{
bb->Lock();
drawing_mode t = bbview->DrawingMode();
bbview->SetDrawingMode(myMode);
bbview->DrawBitmap(b, BPoint(x,y));
bbview->SetDrawingMode(t);
bbview->Sync();
bb->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), view))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *bb = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
bb->Lock();
drawing_mode t = bView->DrawingMode();
bView->SetDrawingMode(myMode);
bView->DrawBitmap(b, BPoint(x,y));
bView->Sync();
bView->SetDrawingMode(t);
bb->Unlock();
myView->Draw(BRect(x,y,x+b->Bounds().Width(),y+b->Bounds().Height()));
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(view, "VIEW, BITMAP or CANVAS");
}
}
}
Error(bitmap, "BITMAP");
}
void YabInterface::BitmapDraw(BRect frame, const char* bitmap, const char* mode, const char* view)
{
int scaling = 0;
if(frame.right == -1) scaling = 1;
if(frame.bottom == -1) scaling = 2;
if(frame.right == -1 && frame.bottom == -1) scaling = 3;
drawing_mode myMode;
BString tmp(mode);
if(tmp.IFindFirst("copy")!=B_ERROR)
myMode = B_OP_COPY;
else if(tmp.IFindFirst("alpha")!=B_ERROR)
myMode = B_OP_ALPHA;
else
ErrorGen("Unknown option");
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(bitmap);
if(bview)
{
BRect newframe;
switch(scaling)
{
case 1:
{
BRect t(b->Bounds());
double width;
newframe = frame;
width = (t.right-t.left)*((frame.bottom-frame.top)/(t.bottom-t.top));
newframe.right = newframe.left+width;
}
break;
case 2:
{
BRect t(b->Bounds());
double height;
newframe = frame;
height = (t.bottom-t.top)*((frame.right-frame.left)/(t.right-t.left));
newframe.bottom = newframe.top+height;
}
break;
case 3: newframe = b->Bounds();
break;
default: newframe = frame;
}
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
BBitmap *newb = new BBitmap(b->Bounds(), B_RGBA32);
char* newbits = (char*)newb->Bits();
char* oldbits = (char*)b->Bits();
for(int j=0; j<b->BitsLength(); j++)
newbits[j] = oldbits[j];
w->Lock();
YabDrawing *t = new YabDrawing();
t->command = 11;
t->x1 = newframe.left; t->y1 = newframe.top;
t->x2 = newframe.right; t->y2 = newframe.bottom;
t->bitmap = newb;
myView->drawList->AddItem(t);
myView->Invalidate();
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *bb = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bbview = bb->FindView(view);
if(bbview)
{
bb->Lock();
drawing_mode t = bbview->DrawingMode();
bbview->SetDrawingMode(myMode);
bbview->DrawBitmap(b, newframe);
bbview->SetDrawingMode(t);
bbview->Sync();
bb->Unlock();
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), view))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *bb = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
bb->Lock();
drawing_mode t = bView->DrawingMode();
bView->SetDrawingMode(myMode);
bView->DrawBitmap(b, frame);
bView->Sync();
bView->SetDrawingMode(t);
bb->Unlock();
myView->Draw(newframe);
w->Unlock();
return;
}
else
ErrorGen("Unable to lock window");
}
}
Error(view, "VIEW, BITMAP or CANVAS");
}
}
}
Error(bitmap, "BITMAP");
}
void YabInterface::BitmapGet(BRect frame, const char* id, const char* bitmap)
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(bitmap);
if(bview)
{
char *oldbits, *newbits;
BBitmap *newbmp = new BBitmap(BRect(0,0, frame.Width(), frame.Height()), B_RGBA32, true);
BView *newbview = new BView(BRect(0,0, frame.Width(), frame.Height()), id, B_FOLLOW_NONE, 0);
newbmp->AddChild(newbview);
newbits = (char*)newbmp->Bits();
for(int i=0; i<frame.Width()*frame.Height()*4; i = i + 4)
{
newbits[i] = newbits[i+1] = newbits[i+2] = 255;
newbits[i+3] = 0;
}
oldbits = (char*)b->Bits();
b->Lock();
BRect tframe = bview->Bounds();
b->Unlock();
if(frame.top>tframe.bottom || frame.left>tframe.right || frame.bottom>tframe.bottom || frame.right>tframe.right || frame.top<0 || frame.left<0 || frame.right<0 || frame.bottom<0)
ErrorGen("Out of bounds");
for(int32 j = 0; j<frame.IntegerHeight(); j++)
for(int32 k = 0; k<frame.IntegerWidth(); k++)
for(int32 l = 0; l<4; l++)
newbits[j*newbmp->BytesPerRow()+k*4+l] = oldbits[(int32)((j+frame.top)*b->BytesPerRow()+(k+frame.left)*4+l)];
yabbitmaps->AddItem(newbmp);
return;
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), bitmap))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *b = myView->GetBitmap();
char *oldbits, *newbits;
BBitmap *newbmp = new BBitmap(BRect(0,0, frame.Width(), frame.Height()), B_RGBA32, true);
BView *newbview = new BView(BRect(0,0, frame.Width(), frame.Height()), id, B_FOLLOW_NONE, 0);
newbmp->AddChild(newbview);
newbits = (char*)newbmp->Bits();
for(int i=0; i<frame.Width()*frame.Height()*4; i = i + 4)
{
newbits[i] = newbits[i+1] = newbits[i+2] = 255;
newbits[i+3] = 0;
}
oldbits = (char*)b->Bits();
BRect tframe = myView->Bounds();
if(frame.top>tframe.bottom || frame.left>tframe.right || frame.bottom>tframe.bottom || frame.right>tframe.right || frame.top<0 || frame.left<0 || frame.right<0 || frame.bottom<0)
ErrorGen("Out of bounds");
for(int32 j = 0; j<frame.IntegerHeight(); j++)
for(int32 k = 0; k<frame.IntegerWidth(); k++)
for(int32 l = 0; l<4; l++)
newbits[j*newbmp->BytesPerRow()+k*4+l] = oldbits[(int32)((j+frame.top)*b->BytesPerRow()+(k+frame.left)*4+l)];
yabbitmaps->AddItem(newbmp);
w->Unlock();
return;
}
}
}
Error(bitmap, "BITMAP or CANVAS");
}
void YabInterface::BitmapGet(double w, const char* id, const char* path)
{
double h = w;
BRect iFrame = BRect(0, 0, w-1, h-1);
BBitmap *iBitmap = new BBitmap(iFrame, B_CMAP8, true);
BBitmap *fBitmap = new BBitmap(iFrame, B_RGBA32, true);
BView *bview = new BView(iFrame, id, B_FOLLOW_NONE, 0);
fBitmap->AddChild(bview);
char *b;
b = (char*)fBitmap->Bits();
for(int i=0; i<w*h*4; i = i + 4)
{
b[i] = b[i+1] = b[i+2] = 255;
b[i+3] = 0;
}
BNode *fNode = new BNode(path);
BNodeInfo fInfo(fNode);
int i;
i=int(w);
icon_size ics;
ics=(icon_size)i;
fInfo.GetTrackerIcon( iBitmap, ics );
fBitmap->Lock();
bview->DrawBitmap( iBitmap, iFrame );
fBitmap->Unlock();
delete fNode;
delete iBitmap;
yabbitmaps->AddItem(fBitmap);
}
void YabInterface::BitmapGetIcon(const char* id, const char* option, const char* path)
{
BString fString(option);
if( fString.IFindFirst("Path") != B_ERROR )
{
int w;
int h = w = 32;
BRect iFrame = BRect(0, 0, w-1, h-1);
BBitmap *iBitmap = new BBitmap(iFrame, B_CMAP8, true);
BBitmap *fBitmap = new BBitmap(iFrame, B_RGBA32, true);
BView *bview = new BView(iFrame, id, B_FOLLOW_NONE, 0);
fBitmap->AddChild(bview);
char *b;
b = (char*)fBitmap->Bits();
for(int i=0; i<w*h*4; i = i + 4)
{
b[i] = b[i+1] = b[i+2] = 255;
b[i+3] = 0;
}
BNode *fNode = new BNode(path);
BNodeInfo fInfo(fNode);
fInfo.GetTrackerIcon( iBitmap, B_LARGE_ICON );
fBitmap->Lock();
bview->DrawBitmap( iBitmap, iFrame );
fBitmap->Unlock();
delete fNode;
delete iBitmap;
yabbitmaps->AddItem(fBitmap);
}
else if( fString.IFindFirst("Mime") != B_ERROR )
{
int w;
int h = w = 16;
icon_size iType = B_MINI_ICON;
if( fString.IFindFirst("Mime32") != B_ERROR )
{
h = w = 32;
iType = B_LARGE_ICON;
}
BRect iFrame = BRect(0, 0, w-1, h-1);
BBitmap *iBitmap = new BBitmap(iFrame, B_CMAP8, true);
BBitmap *fBitmap = new BBitmap(iFrame, B_RGBA32, true);
BView *bview = new BView(iFrame, id, B_FOLLOW_NONE, 0);
fBitmap->AddChild(bview);
char *b;
b = (char*)fBitmap->Bits();
for(int i=0; i<w*h*4; i = i + 4)
{
b[i] = b[i+1] = b[i+2] = 255;
b[i+3] = 0;
}
BMimeType mime(path);
mime.GetIcon(iBitmap, iType);
fBitmap->Lock();
bview->DrawBitmap(iBitmap, iFrame);
bview->Sync();
fBitmap->Unlock();
delete iBitmap;
yabbitmaps->AddItem(fBitmap);
}
else
ErrorGen("Unknown option");
}
void YabInterface::BitmapDrag(const char* bitmap)
{
}
void YabInterface::BitmapRemove(const char* bitmap)
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(bitmap);
if(bview)
{
yabbitmaps->RemoveItem(i);
delete b;
return;
}
}
Error(bitmap, "BITMAP");
}
void YabInterface::Screenshot(BRect frame, const char* bitmap)
{
char *t;
int w = (int)frame.Width()-1;
int h = (int)frame.Height()-1;
BRect area = BRect(0,0,w,h);
BBitmap *fBitmap = new BBitmap(area, B_RGBA32, true);
BView *bview = new BView(area, bitmap, B_FOLLOW_NONE, 0);
BScreen screen(B_MAIN_SCREEN_ID);
fBitmap->AddChild(bview);
t = (char*)fBitmap->Bits();
for(int i=0; i<w*h*4; i = i + 4)
{
t[i] = t[i+1] = t[i+2] = 255;
t[i+3] = 0;
}
screen.WaitForRetrace();
screen.ReadBitmap(fBitmap, false, &frame);
yabbitmaps->AddItem(fBitmap);
}
int YabInterface::BitmapLoad(const char* FileName, const char* id)
{
BBitmap* myBitmap = NULL;
BFile imageFile;
BPath imagePath;
int ret = 0;
if(*FileName=='/')
imageFile.SetTo(FileName, B_READ_ONLY);
else
if(!strcmp(ApplicationDirectory,""))
{
if(imagePath.SetTo((const char*)ApplicationDirectory, FileName)==B_OK)
imageFile.SetTo(imagePath.Path(), B_READ_ONLY);
}
if(imageFile.InitCheck()!=B_OK)
imageFile.SetTo(FileName, B_READ_ONLY);
if(imageFile.InitCheck()!=B_OK)
return 1;
Roster = BTranslatorRoster::Default();
if(!Roster)
return 2;
BBitmapStream Stream;
if(Roster->Translate(&imageFile, NULL, NULL, &Stream, B_TRANSLATOR_BITMAP)<B_OK)
return 3;
if(Stream.DetachBitmap(&myBitmap)!=B_OK)
return 4;
char *t;
BBitmap *b = new BBitmap(myBitmap->Bounds(), B_RGBA32, true);
BView *bview = new BView(myBitmap->Bounds(), id, B_FOLLOW_NONE, 0);
b->AddChild(bview);
/*
t = (char*)b->Bits();
for(int i=0; i<w*h*4; i = i + 4)
{
t[i] = t[i+1] = t[i+2] = 255;
t[i+3] = 0;
}
*/
b->Lock();
drawing_mode mode = bview->DrawingMode();
bview->SetDrawingMode(B_OP_ALPHA);
bview->DrawBitmap(myBitmap, myBitmap->Bounds());
bview->SetDrawingMode(mode);
bview->Sync();
b->Unlock();
delete Roster;
delete myBitmap;
yabbitmaps->AddItem(b);
return 0;
}
int YabInterface::BitmapGet(const char* id, const char* option)
{
BString t(option);
bool isWidth = false;
if(t.IFindFirst("height") != B_ERROR)
isWidth = false;
else if(t.IFindFirst("width") != B_ERROR)
isWidth = true;
else
ErrorGen("Unknown option");
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(id);
if(bview)
{
BRect r = b->Bounds();
if(isWidth)
return r.IntegerWidth()+1;
else
return r.IntegerHeight()+1;
}
}
Error(id, "BITMAP");
}
int YabInterface::BitmapSave(const char* id, const char* filename, const char* type)
{
uint32 btype;
BString t(type);
if(t.IFindFirst("png") != B_ERROR)
btype = B_PNG_FORMAT;
else if(t.IFindFirst("jpg") != B_ERROR)
btype = B_JPEG_FORMAT;
else if(t.IFindFirst("tga") != B_ERROR)
btype = B_TGA_FORMAT;
else if(t.IFindFirst("tiff") != B_ERROR)
btype = B_TIFF_FORMAT;
else if(t.IFindFirst("ppm") != B_ERROR)
btype = B_PPM_FORMAT;
else if(t.IFindFirst("bmp") != B_ERROR)
btype = B_BMP_FORMAT;
else
ErrorGen("Unknown type");
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *b = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bview = b->FindView(id);
if(bview)
{
BTranslatorRoster *roster = BTranslatorRoster::Default();
BBitmapStream stream(b); // init with contents of bitmap
BFile file(filename, B_CREATE_FILE | B_WRITE_ONLY | B_ERASE_FILE);
if(roster->Translate(&stream, NULL, NULL, &file, btype) != B_OK)
return 1;
else
return 0;
}
}
Error(id, "BITMAP");
}
void YabInterface::Canvas(BRect frame, const char* id, const char* view)
{
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
YabBitmapView *bmpView = new YabBitmapView(frame, id, B_FOLLOW_NONE, B_WILL_DRAW);
if(w->layout == -1)
bmpView->SetResizingMode(B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM);
else
bmpView->SetResizingMode(w->layout);
myView->AddChild(bmpView);
yabcanvas->AddItem(bmpView);
myView->Invalidate(frame);
w->Unlock();
return;
}
}
Error(view, "VIEW");
}
int YabInterface::Sound(const char* filename)
{
entry_ref ref;
BEntry entry(filename, true);
if (entry.InitCheck() == B_OK)
if (entry.GetRef(&ref) == B_OK)
return play_sound(&ref, true, false, true);
return -1;
}
void YabInterface::SoundStop(int32 id)
{
stop_sound(id);
}
void YabInterface::SoundWait(int32 id)
{
wait_for_sound(id);
}
void YabInterface::SetOption(const char* id, const char* option, double x, double y)
{
BString tmp(option);
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BView *theView = cast_as(myView->FindView(id), BView);
if(theView)
{
if(tmp.IFindFirst("ResizeTo")!=B_ERROR)
theView->ResizeTo(x,y);
else if(tmp.IFindFirst("ResizeBy")!=B_ERROR)
theView->ResizeBy(x,y);
else if(tmp.IFindFirst("MoveTo")!=B_ERROR)
theView->MoveTo(x,y);
else if(tmp.IFindFirst("MoveBy")!=B_ERROR)
theView->MoveBy(x,y);
else
ErrorGen("Unknown option");
theView->Invalidate();
w->Unlock();
return;
}
w->Unlock();
}
}
}
Error(id, "VIEW");
}
void YabInterface::DrawSet(const char* option, const char* color,const char* view)
{
BString tmp(option);
BString colstr(color);
rgb_color col;
if(colstr.IFindFirst("Panel-Background-Color")!=B_ERROR)
col = ui_color(B_PANEL_BACKGROUND_COLOR);
else if(colstr.IFindFirst("Panel-Text-Color")!=B_ERROR)
{
col = ui_color(B_PANEL_TEXT_COLOR);
}
else if(colstr.IFindFirst("Panel-Link-Color")!=B_ERROR)
{
col.red = 0; col.green = 0; col.blue = 255;
}
else if(colstr.IFindFirst("Menu-Background-Color")!=B_ERROR)
col = ui_color(B_MENU_BACKGROUND_COLOR);
else if(colstr.IFindFirst("Menu-Selection-Background-Color")!=B_ERROR)
col = ui_color(B_MENU_SELECTION_BACKGROUND_COLOR);
else if(colstr.IFindFirst("Menu-Item-Text-Color")!=B_ERROR)
col = ui_color(B_MENU_ITEM_TEXT_COLOR);
else if(colstr.IFindFirst("Menu-Selected-Item-Text-Color")!=B_ERROR)
col = ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR);
else if(colstr.IFindFirst("Keyboard-Navigation-Color")!=B_ERROR)
col = ui_color(B_KEYBOARD_NAVIGATION_COLOR);
else if(colstr.IFindFirst("Jan-Favorite-Color")!=B_ERROR)
{
col.red = 220; col.green = 220; col.blue = 250;
}
else
ErrorGen("Invalid color");
if(colstr.IFindFirst("Lighten-1-Tint")!=B_ERROR)
col = tint_color(col, B_LIGHTEN_1_TINT);
else if(colstr.IFindFirst("Lighten-2-Tint")!=B_ERROR)
col = tint_color(col, B_LIGHTEN_2_TINT);
else if(colstr.IFindFirst("Lighten-Max-Tint")!=B_ERROR)
col = tint_color(col, B_LIGHTEN_MAX_TINT);
else if(colstr.IFindFirst("Darken-1-Tint")!=B_ERROR)
col = tint_color(col, B_DARKEN_1_TINT);
else if(colstr.IFindFirst("Darken-2-Tint")!=B_ERROR)
col = tint_color(col, B_DARKEN_2_TINT);
else if(colstr.IFindFirst("Darken-3-Tint")!=B_ERROR)
col = tint_color(col, B_DARKEN_3_TINT);
else if(colstr.IFindFirst("Darken-4-Tint")!=B_ERROR)
col = tint_color(col, B_DARKEN_4_TINT);
else if(colstr.IFindFirst("Darken-Max-Tint")!=B_ERROR)
col = tint_color(col, B_DARKEN_MAX_TINT);
else if(colstr.IFindFirst("Disabled-Label-Tint")!=B_ERROR)
col = tint_color(col, B_DISABLED_LABEL_TINT);
else if(colstr.IFindFirst("Disabled-Mark-Tint")!=B_ERROR)
col = tint_color(col, B_DISABLED_MARK_TINT);
else if(colstr.IFindFirst("Highlight-Background-Tint")!=B_ERROR)
col = tint_color(col, B_HIGHLIGHT_BACKGROUND_TINT);
col.alpha = yabAlpha;
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
if(tmp.IFindFirst("BGColor")!=B_ERROR)
{
myView->SetViewColor(col);
myView->Invalidate();
}
else if(tmp.IFindFirst("HighColor")!=B_ERROR)
{
if(yabAlpha == 255)
myView->SetDrawingMode(B_OP_COPY);
else
myView->SetDrawingMode(B_OP_ALPHA);
myView->SetHighColor(col);
YabDrawing *t = new YabDrawing();
t->command = 6;
t->r = col.red; t->g = col.green;
t->b = col.blue; t->alpha = yabAlpha;
myView->drawList->AddItem(t);
}
else if(tmp.IFindFirst("LowColor")!=B_ERROR)
{
if(yabAlpha == 255)
myView->SetDrawingMode(B_OP_COPY);
else
myView->SetDrawingMode(B_OP_ALPHA);
myView->SetLowColor(col);
YabDrawing *t = new YabDrawing();
t->command = 7;
t->r = col.red; t->g = col.green;
t->b = col.blue; t->alpha = yabAlpha;
myView->drawList->AddItem(t);
}
else
ErrorGen("Unknown option");
w->Unlock();
}
else
ErrorGen("Unable to lock window");
}
else
{
for(int i=0; i<yabbitmaps->CountItems(); i++)
{
BBitmap *bmp = (BBitmap*)yabbitmaps->ItemAt(i);
BView *bView = bmp->FindView(view);
if(bView)
{
if(tmp.IFindFirst("HighColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetHighColor(col);
bView->Sync();
bmp->Unlock();
return;
}
else if(tmp.IFindFirst("LowColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetLowColor(col);
bView->Sync();
bmp->Unlock();
return;
}
else
ErrorGen("Unknown option");
}
}
for(int i=0; i<yabcanvas->CountItems(); i++)
{
YabBitmapView *myView = (YabBitmapView*)yabcanvas->ItemAt(i);
if(!strcmp(myView->Name(), view))
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BBitmap *bmp = myView->GetBitmap();
BView *bView = myView->GetBitmapView();
if(tmp.IFindFirst("HighColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetHighColor(col);
bView->Sync();
bmp->Unlock();
w->Unlock();
return;
}
else if(tmp.IFindFirst("LowColor")!=B_ERROR)
{
bmp->Lock();
if(yabAlpha == 255)
bView->SetDrawingMode(B_OP_COPY);
else
bView->SetDrawingMode(B_OP_ALPHA);
bView->SetLowColor(col);
bView->Sync();
bmp->Unlock();
w->Unlock();
return;
}
else
ErrorGen("Unknown option");
}
else
ErrorGen("Unable to lock window");
}
}
Error(view, "VIEW, BITMAP or CANVAS");
}
}
void YabInterface::Treebox13(const char* id,const char* option, int pos)
{
}
int YabInterface::TreeboxGetOpt(const char* id, const char* option, int pos)
{
}
int YabInterface::ListboxGetNum(const char* id)
{
YabView *myView = NULL;
BListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(id), BListView);
if(myList)
{
int32 t = myList->CurrentSelection();
w->Unlock();
return t+1;
}
w->Unlock();
}
}
}
Error(id, "LISTBOX");
}
int YabInterface::DropboxGetNum(const char* id)
{
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMenuField *myMenuField = cast_as(myView->FindView(id), BMenuField);
if(myMenuField)
{
BMenu *myMenu = (BMenu*)myMenuField->Menu();
if(myMenu)
{
int32 ret;
ret = myMenu->IndexOf(myMenu->FindMarked());
w->Unlock();
return ret;
}
}
w->Unlock();
}
}
}
Error(id, "DROPBOX");
}
int YabInterface::TreeboxGetNum(const char* id)
{
YabView *myView = NULL;
BOutlineListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(id), BOutlineListView);
if(myList)
{
int32 t = myList->FullListCurrentSelection();
w->Unlock();
return t+1;
}
w->Unlock();
}
}
}
Error(id, "TREEBOX");
}
int YabInterface::ColumnboxGetNum(const char* id)
{
YabView *myView = NULL;
BColumnListView *myList = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
myList = cast_as(myView->FindView(id), BColumnListView);
if(myList)
{
int32 t = myList->IndexOf(myList->CurrentSelection());
w->Unlock();
return t+1;
}
w->Unlock();
}
}
}
Error(id, "COLUMNBOX");
}
void YabInterface::Attribute1(const char* type, const char* name, const char* value, const char* filename)
{
// fix to work properly with string and bool types.
BNode node(filename);
if(node.InitCheck() != B_OK)
ErrorGen("Attribute file not found!");
BString tempvalue(value);
type_code typecode;
BString typeStr(type);
if(typeStr.IFindFirst("string")!=B_ERROR)
{
int32 x = tempvalue.Length();
typecode = B_STRING_TYPE;
x++;
node.WriteAttr(name, typecode, 0, value, x);
}
else if(typeStr.IFindFirst("mime")!=B_ERROR)
{
int32 x = tempvalue.Length();
typecode = B_MIME_STRING_TYPE;
x++;
node.WriteAttr(name, typecode, 0, value, x);
}
else if(typeStr.IFindFirst("bool")!=B_ERROR)
{
typecode = B_BOOL_TYPE;
int32 x=1;
char str[1];
str[0]=1;
const char* tf = str;
if (tempvalue.IFindFirst("false") !=B_ERROR)
tf="";
node.WriteAttr(name, typecode, 0, tf, x);
}
else if(typeStr.IFindFirst("int")!=B_ERROR)
{
int32 x = tempvalue.Length();
typecode = B_INT32_TYPE;
node.WriteAttr(name, typecode, 0, value, x);
}
else if(typeStr.IFindFirst("double")!=B_ERROR)
{
int32 x = tempvalue.Length();
typecode = B_DOUBLE_TYPE;
node.WriteAttr(name, typecode, 0, value, x);
}
else if(typeStr.IFindFirst("float")!=B_ERROR)
{
int32 x = tempvalue.Length();
typecode = B_FLOAT_TYPE;
node.WriteAttr(name, typecode, 0, value, x);
}
else if(typeStr.IFindFirst("long")!=B_ERROR)
{
int32 x = tempvalue.Length();
typecode = B_INT64_TYPE;
node.WriteAttr(name, typecode, 0, value, x);
}
else
ErrorGen("Unknown attribute type!");
}
void YabInterface::AttributeClear(const char* name, const char* filename)
{
BNode node(filename);
if(node.InitCheck() != B_OK)
ErrorGen("Attribute file not found!");
node.RemoveAttr(name);
}
const char* YabInterface::AttributeGet1(const char* name, const char* filename)
{
BString tempname(name);
BNode node(filename);
if(node.InitCheck() != B_OK){
if (tempname.Length() >0)
ErrorGen("Attribute file not found!");
BString appdir = mainFileName;
int32 i = appdir.FindLast("/");
appdir.Truncate(i);
return appdir;
}
if (tempname.Length() >0)
{
attr_info attr;
if(node.GetAttrInfo(name, &attr) != B_OK)
ErrorGen("Attribute not found!");
int size = attr.size;
if(size>32568)
size = 32568;
if(node.ReadAttr(name,attr.type, 0, attrbuffer, size) == 0)
return "";
if (attr.type == B_BOOL_TYPE)
{
int x = 0;
if (attrbuffer[0] == x)
{
return "false";
}
else
{
return "true";
}
}
return (char*)attrbuffer;
}
else
{
BString List="";
BString sp=" | ";
BString Attrtype;
char buf[B_ATTR_NAME_LENGTH];
while (node.GetNextAttrName(buf) == B_OK)
{
attr_info attr;
if(node.GetAttrInfo(buf, &attr) != B_OK)
ErrorGen("Attribute not found!");
uint32 attrtype;
attrtype=attr.type;
switch(attrtype)
{
case B_BOOL_TYPE:
Attrtype="Bool";
break;
case B_STRING_TYPE:
Attrtype = "String";
break;
case B_MIME_STRING_TYPE:
Attrtype = "Mime";
break;
case B_INT32_TYPE:
Attrtype = "Int";
break;
case B_DOUBLE_TYPE:
Attrtype = "Double";
break;
case B_FLOAT_TYPE:
Attrtype = "Float";
break;
case B_INT64_TYPE:
Attrtype = "Long";
break;
default:
Attrtype = "Unsupported";
break;
}
List << buf << sp << Attrtype << sp;
}
return List.String();
}
}
double YabInterface::AttributeGet2(const char* name, const char* filename)
{
BNode node(filename);
if(node.InitCheck() != B_OK)
ErrorGen("Attribute file not found!");
attr_info attr;
if(node.GetAttrInfo(name, &attr) != B_OK)
ErrorGen("Attribute not found!");
int size = attr.size;
if(size>32568)
size = 32568;
if(node.ReadAttr(name,attr.type, 0, attrbuffer, size) == 0)
return 0.0;
if (attr.type == B_BOOL_TYPE)
{
int x = 0;
if (attrbuffer[0] == x)
{
return 0.0;
}
else
{
return 1.0;
}
}
if(node.ReadAttr(name, 0, 0, attrbuffer, size) == 0)
return 0.0;
return atof((char*)attrbuffer);
}
void YabInterface::ShortCut(const char* view, const char* key, const char* msg)
{
char myShortcut;
int32 modifiers = 0;
BString t(key);
if(t.Length()>1)
{
myShortcut = key[t.Length()-1];
if(t.IFindFirst("s")!=B_ERROR && t.IFindFirst("s")<t.Length()-1)
modifiers = modifiers|B_SHIFT_KEY;
if(t.IFindFirst("c")!=B_ERROR && t.IFindFirst("c")<t.Length()-1)
modifiers = modifiers|B_CONTROL_KEY;
if(t.IFindFirst("o")!=B_ERROR && t.IFindFirst("o")<t.Length()-1)
modifiers = modifiers|B_OPTION_KEY;
}
else
myShortcut = key[0];
YabView *myView = cast_as((BView*)viewList->GetView(view), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
BMessage *mesg = new BMessage(YABSHORTCUT);
mesg->AddString("shortcut", msg);
w->AddShortcut(myShortcut, modifiers, mesg);
w->Unlock();
return;
}
}
Error(view,"VIEW");
}
int YabInterface::IsComputerOn()
{
return is_computer_on();
}
void YabInterface::MouseSet(const char* opt)
{
BString t(opt);
if(t.IFindFirst("Hide")!=B_ERROR)
HideCursor();
else if(t.IFindFirst("Show")!=B_ERROR)
ShowCursor();
else if(t.IFindFirst("Obscure")!=B_ERROR)
ObscureCursor();
else ErrorGen("Unknown option");
}
const char* YabInterface::GetMessageString()
{
snooze(20000);
BString tmp("");
if(exiting)
{
tmp += "_QuitRequested|";
exiting = false;
}
tmp += localMessage;
localMessage = "";
for(int i=0; i<CountWindows(); i++)
{
// if(strcmp(WindowAt(i)->Title(), "_TOOLTIPWINDOW") && strcmp(WindowAt(i)->Title(), "_CALENDARWINDOW"))
YabWindow *w = cast_as(WindowAt(i), YabWindow);
if(w)
{
w->Sync();
if(w->Lock())
{
tmp += w->getMessages();
if (w->WActivated==1)
{
tmp+=w->idString;
tmp+=":_Activated|";
w->WActivated=-1;
}
if (w->WActivated==0)
{
tmp+=w->idString;
tmp+=":_Deactivated|";
w->WActivated=-1;
}
// if (w->WFrameMoved==1)
// {
// w->WFrameMoved=-1;
// tmp+=w->Name();
// tmp+=":_FrameMoved:";
// tmp << w->Wpx;
// tmp+=":";
// tmp << w->Wpy;
// tmp+="|";
// }
// if (w->WFrameResized==1)
// {
// w->WFrameResized=-1;
// tmp+=w->Name();
// tmp+=":_FrameResized:";
// tmp << w->Wpw;
// tmp+=":";
// tmp << w->Wph;
// tmp+="|";
// }
w->Unlock();
}
}
}
YabView *myView = NULL;
for(int i=0; i<viewList->CountItems(); i++)
{
myView = cast_as((BView*)viewList->ItemAt(i), YabView);
if(myView)
{
YabWindow *w = cast_as(myView->Window(), YabWindow);
if(w)
{
w->Lock();
if (myView->CountChildren())
{
for (int o=0; o<myView->CountChildren(); o++)
{
if (dynamic_cast<YabTabView*>(myView->ChildAt(o)))
{
YabTabView *target = dynamic_cast<YabTabView*>(myView->ChildAt(o));
if (target)
{
if (target->FocusChanged!=target->OldTabView)
{
tmp+=target->Name();
tmp+=":_TabChanged:";
tmp+=target->Name();
tmp << target->FocusChanged;
tmp+="|";
target->OldTabView=target->FocusChanged;
}
}
}
}
}
w->Unlock();
}
}
}
if(tmp.Length()>32766)
tmp.Remove(32767, tmp.Length()-32766);
strcpy(messagebuffer, tmp.String());
return (char*)messagebuffer;
}
int YabInterface::MessageSend(const char* app, const char* msg)
{
BMessage message, reply;
status_t result;
// set the command constant
message.what = B_SET_PROPERTY;
// construct the specifier stack
message.AddSpecifier("YabSendString", msg); // B_NAME_SPECIFIER
// send the message and fetch the result
result = BMessenger(app).SendMessage(&message, &reply);
if(result == B_OK) return 0;
if(result == B_BAD_PORT_ID) return 1;
if(result == B_WOULD_BLOCK) return 2;
if(result == B_TIMED_OUT) return 3;
return 4;
}
void YabInterface::SetLocalize(const char* path)
{
if(yabCatalog)
delete yabCatalog;
//yabCatalog = new BCatalog(path);
}
const int YabInterface::GetErrorCode()
{
return errorCode;
}
void YabInterface::KillThread(int code)
{
errorCode = code;
quitting = true;
ExitRequested();
// BMessenger(be_app).SendMessage(new BMessage(B_QUIT_REQUESTED));
// while(1){}
}
void YabInterface::Error(const char* id, const char* type)
{
fprintf(stderr, "---Error in %s, line %d: \"%s\" is not of type %s\n", currentLib.String(), currentLineNumber, id, type);
fprintf(stderr,"---Error: Program stopped due to an error \n");
KillThread(-1);
// while(1){}
}
void YabInterface::ErrorGen(const char* msg)
{
fprintf(stderr, "---Error in %s, line %d: %s\n", currentLib.String(), currentLineNumber, msg);
fprintf(stderr,"---Error: Program stopped due to an error \n");
KillThread(-1);
// while(1){}
}
void YabInterface::SetCurrentLineNumber(int line, const char* libname)
{
currentLineNumber = line;
if(!strcmp(libname, "main"))
currentLib = mainFileName;
else
currentLib = libname;
}
void YabInterface::SetMainFileName(const char* name)
{
mainFileName = strdup(name);
}
/**
* C interface functions
*/
const char* yi_GetApplicationDirectory(YabInterface *yab)
{
return yab->GetApplicationDirectory();
}
void yi_OpenWindow(double x1,double y1,double x2,double y2, const char* id, const char* title, YabInterface* yab)
{
yab->OpenWindow(BRect(x1,y1,x2,y2), id, _L(title));
}
int yi_CloseWindow(const char* view, YabInterface* yab)
{
return yab->CloseWindow(view);
}
void yi_CreateButton(double x1,double y1,double x2,double y2, const char* id, const char* title, const char* view, YabInterface* yab)
{
yab->CreateButton(BRect(x1,y1,x2,y2), id, _L(title), view);
}
int yi_CreateImage(double x,double y,const char* imagefile, const char* window, YabInterface* yab)
{
return yab->CreateImage(BPoint(x,y),imagefile,window);
}
int yi_CreateImage2(double x1,double y1,double x2,double y2,const char* imagefile, const char* window, YabInterface* yab)
{
return yab->CreateImage(BRect(x1,y1,x2,y2),imagefile,window);
}
int yi_CreateSVG(double x1,double y1,double x2,double y2,const char* imagefile, const char* window, YabInterface* yab)
{
return yab->CreateSVG(BRect(x1,y1,x2,y2),imagefile,window);
}
void yi_CreateMenu(const char* menuhead, const char* menuitem, const char *shortcut, const char* window, YabInterface* yab)
{
yab->CreateMenu(_L(menuhead),_L(menuitem),shortcut,window);
}
void yi_CreateTextControl(double x1, double y1, double x2, double y2, const char* id, const char* label, const char* text, const char* window, YabInterface *yab)
{
yab->CreateTextControl(BRect(x1,y1,x2,y2),id,_L(label),_L(text),window);
}
void yi_CreateCheckBox(double x, double y, const char* id, const char* label, int isActivated, const char* window, YabInterface *yab)
{
yab->CreateCheckBox(x,y,id,_L(label),isActivated,window);
}
void yi_CreateRadioButton(double x, double y, const char* groupID, const char* label, int isActivated, const char* window, YabInterface *yab)
{
yab->CreateRadioButton(x,y,groupID,_L(label),isActivated,window);
}
void yi_CreateListBox(double x1, double y1, double x2, double y2, const char* title, int scrollbar, const char* window, YabInterface *yab)
{
yab->CreateListBox(BRect(x1,y1,x2,y2),title,scrollbar,window);
}
void yi_CreateDropBox(double x1, double y1, double x2, double y2, const char* title, const char* label, const char* window, YabInterface *yab)
{
yab->CreateDropBox(BRect(x1,y1,x2,y2),title,_L(label), window);
}
void yi_CreateItem(const char* id,const char* item, YabInterface *yab)
{
yab->CreateItem(id,_L(item));
}
void yi_RemoveItem(const char* title,const char* item, YabInterface *yab)
{
yab->RemoveItem(title,_L(item));
}
void yi_ClearItems(const char* title, YabInterface *yab)
{
yab->ClearItems(title);
}
void yi_DrawText(double x, double y, const char* text, const char* window, YabInterface* yab)
{
yab->DrawText(BPoint(x,y), _L(text), window);
}
void yi_DrawRect(double x1, double y1, double x2, double y2, const char* window, YabInterface* yab)
{
yab->DrawRect(BRect(x1,y1,x2,y2),window);
}
void yi_DrawClear(const char* window, YabInterface* yab)
{
yab->DrawClear(window, false);
}
void yi_CreateAlert(const char* text, const char* button1, const char* type, YabInterface* yab)
{
yab->CreateAlert(_L(text),_L(button1),type);
}
void yi_CreateText(double x, double y, const char* id, const char* text, const char* window, YabInterface* yab)
{
yab->CreateText(x,y,id,_L(text),window);
}
void yi_Text2(double x1, double y1, double x2, double y2, const char* id, const char* text, const char* window, YabInterface* yab)
{
yab->Text2(BRect(x1,y1,x2,y2),id,_L(text),window);
}
void yi_TextAlign(const char* txt, const char *option, YabInterface *yab)
{
yab->TextAlign(txt, option);
}
void yi_Translate(char* text, char result[])
{
if(yabCatalog)
{
result[0] = '\0';
strcpy(result,yabCatalog->GetString(text, NULL));
}
else
strcpy(result,text);
}
void yi_MenuTranslate(char* text, char result[])
{
if(yabCatalog)
{
result[0] = '\0';
const char* token;
const char delimiters[] = ":";
token = strtok(text, delimiters);
while(token!=NULL)
{
strcat(result,yabCatalog->GetString(token, NULL)); //B_TRANSLATE_CONTEXT));
token = strtok(NULL, delimiters);
if(token!=NULL) strcat(result,":");
}
}
else
strcpy(result,text);
}
void yi_SetLocalize()
{
localize = true;
}
void yi_StopLocalize()
{
localize = false;
}
void yi_SetLocalize2(const char* , YabInterface *yab)
{
localize = true;
//yab->SetLocalize(path);
}
const char* yi_LoadFilePanel(const char* mode, const char* title, const char* directory, YabInterface *yab)
{
return yab->LoadFilePanel(mode, _L(title), directory);
}
const char* yi_SaveFilePanel(const char* mode, const char* title, const char* directory, const char*filename, YabInterface *yab)
{
return yab->SaveFilePanel(mode, _L(title), directory, filename);
}
void yi_SetLayout(const char* layout, const char* window, YabInterface *yab)
{
yab->SetLayout(layout, window);
}
void yi_WindowSet1(const char* option, const char* value, const char* window, YabInterface *yab)
{
yab->WindowSet(option, value, window);
}
void yi_WindowSet2(const char* option, int r, int g, int b, const char* window, YabInterface *yab)
{
yab->WindowSet(option, r, g, b, window);
}
void yi_WindowSet3(const char* option, double x, double y, const char* window, YabInterface *yab)
{
yab->WindowSet(option,x,y, window);
}
void yi_WindowSet4(const char* option, const char* window, YabInterface *yab)
{
yab->WindowSet(option, window);
}
void yi_WindowClear(const char* window, YabInterface *yab)
{
yab->WindowClear(window);
}
void yi_TextEdit(double x1, double y1, double x2, double y2, const char* title, int scrollbar, const char* window, YabInterface *yab)
{
yab->TextEdit(BRect(x1,y1,x2,y2), title, scrollbar, window);
}
void yi_TextAdd(const char* title, const char* text, YabInterface *yab)
{
yab->TextAdd(title,text);
}
void yi_TextSet(const char* title, const char* option, YabInterface *yab)
{
yab->TextSet(title,option);
}
void yi_TextSet2(const char* title, const char* option, int value, YabInterface *yab)
{
yab->TextSet(title,option,value);
}
void yi_TextSet3(const char* title, const char* option, const char* value, YabInterface *yab)
{
yab->TextSet(title,option,value);
}
void yi_TextColor1(const char* title, const char* option, const char* command, YabInterface *yab)
{
yab->TextColor(title,option,command);
}
void yi_TextColor2(const char* title, const char* option, int r, int g, int b, YabInterface *yab)
{
yab->TextColor(title,option,r,g,b);
}
int yi_TextGet2(const char* title, const char* option, YabInterface *yab)
{
return yab->TextGet(title,option);
}
const char* yi_TextGet3(const char* title, int linenum, YabInterface *yab)
{
return yab->TextGet(title,linenum);
}
double yi_TextGet4(const char* title, const char* option, int linenum, YabInterface *yab)
{
return yab->TextGet(title,option,linenum);
}
int yi_TextGet5(const char* title, const char* option, const char* option2, YabInterface *yab)
{
return yab->TextGet(title,option,option2);
}
const char* yi_TextGet6(const char* title, const char* option, YabInterface *yab)
{
return yab->TextGet6(title, option);
}
void yi_TextClear(const char* title, YabInterface *yab)
{
yab->TextClear(title);
}
const char* yi_TextGet(const char* title, YabInterface *yab)
{
return yab->TextGet(title);
}
void yi_DrawSet1(const char* option, const char* window, YabInterface *yab)
{
return yab->DrawSet1(option, window);
}
void yi_DrawSet2(int fillorstroke, const char* mypattern, YabInterface *yab)
{
return yab->DrawSet2(fillorstroke, mypattern);
}
void yi_View(double x1, double y1, double x2, double y2, const char* id, const char* view, YabInterface *yab)
{
yab->View(BRect(x1,y1,x2,y2), id, view);
}
void yi_BoxView(double x1, double y1, double x2, double y2, const char* id, const char* text, int lineType, const char* view, YabInterface *yab)
{
yab->BoxView(BRect(x1,y1,x2,y2), id, _L(text), lineType, view);
}
void yi_BoxViewSet(const char* id, const char* option,const char* value, YabInterface *yab)
{
yab->BoxViewSet(id, option,value);
}
void yi_Tab(double x1, double y1, double x2, double y2, const char* id, const char* names, const char* view, YabInterface *yab)
{
yab->Tab(BRect(x1,y1,x2,y2), id, names, view);
}
void yi_TabSet(const char* id, int num, YabInterface *yab)
{
yab->TabSet(id, num);
}
void yi_TabAdd(const char* id, const char* tabname, YabInterface *yab)
{
yab->TabAdd(id, _L(tabname));
}
void yi_TabDel(const char* id, int num, YabInterface *yab)
{
yab->TabDel(id, num);
}
int yi_TabViewGet(const char* id, YabInterface *yab)
{
return yab->TabViewGet(id);
}
void yi_DrawDot(double x, double y, const char* window, YabInterface *yab)
{
yab->DrawDot(x,y, window);
}
void yi_DrawLine(double x1, double y1, double x2, double y2, const char* window, YabInterface *yab)
{
yab->DrawLine(x1,y1,x2,y2, window);
}
void yi_DrawCircle(double x, double y, double r, const char* window, YabInterface *yab)
{
yab->DrawCircle(x,y,r, window);
}
void yi_DrawEllipse(double x, double y, double r1, double r2, const char* window, YabInterface *yab)
{
yab->DrawEllipse(x,y,r1,r2, window);
}
void yi_DrawCurve(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, const char* window, YabInterface *yab)
{
yab->DrawCurve(x1,y1,x2,y2,x3,y3,x4,y4, window);
}
void yi_Slider1(double x1, double y1, double x2, double y2, const char* id, const char* title, int min, int max, const char* view, YabInterface *yab)
{
yab->Slider(BRect(x1,y1,x2,y2), id, _L(title), min, max, view);
}
void yi_Slider2(double x1, double y1, double x2, double y2, const char* id, const char* title, int min, int max, const char* option, const char* view, YabInterface *yab)
{
yab->Slider(BRect(x1,y1,x2,y2), id, _L(title), min, max, option, view);
}
void yi_SetSlider1(const char* id, const char* label1, const char* label2, YabInterface *yab)
{
yab->SetSlider(id, _L(label1), _L(label2));
}
void yi_SetSlider2(const char* id, const char* bottomtop, int count, YabInterface *yab)
{
yab->SetSlider(id, bottomtop, count);
}
void yi_SetSlider3(const char* id, const char* part, int r, int g, int b, YabInterface *yab)
{
yab->SetSlider(id, part, r,g,b);
}
void yi_SetSlider4(const char* id, int value, YabInterface *yab)
{
yab->SetSlider(id, value);
}
void yi_SetOption1(const char* id, const char* option, const char* value, YabInterface *yab)
{
yab->SetOption(id,option,value);
}
void yi_SetOption2(const char* id, const char* option, int r, int g, int b, YabInterface *yab)
{
yab->SetOption(id,option,r,g,b);
}
void yi_SetOption3(const char* id, const char* option, double x, double y, YabInterface *yab)
{
yab->SetOption(id,option,x,y);
}
void yi_SetOption4(const char* id, const char* option, YabInterface *yab)
{
yab->SetOption(id,option);
}
void yi_SetOption5(const char* id, const char* option, int value, YabInterface *yab)
{
yab->SetOption(id,option,value);
}
void yi_DropZone(const char* view, YabInterface *yab)
{
yab->DropZone(view);
}
void yi_ColorControl1(double x, double y, const char* id, const char* view, YabInterface* yab)
{
yab->ColorControl(x,y,id,view);
}
void yi_ColorControl2(const char* id, int r, int g, int b, YabInterface* yab)
{
yab->ColorControl(id,r,g,b);
}
void yi_TextControl2(const char* id, const char* text, YabInterface* yab)
{
yab->TextControl(id,_L(text));
}
void yi_TextControl3(const char* id, int mode, YabInterface* yab)
{
yab->TextControl(id,mode);
}
void yi_TextControl5(const char* id, YabInterface* yab)
{
yab->TextControl(id);
}
void yi_TextControl4(const char* id, const char* option, const char* value, YabInterface* yab)
{
yab->TextControl(id,option,value);
}
void yi_TreeBox1(double x1, double y1, double x2, double y2, const char* id, int scrollbarType, const char* view, YabInterface* yab)
{
yab->TreeBox1(BRect(x1,y1,x2,y2), id, scrollbarType, view);
}
void yi_TreeBox2(const char* id, const char* item, YabInterface* yab)
{
yab->TreeBox2(id,_L(item));
}
void yi_TreeBox3(const char* id, const char* head, const char* item, int isExpanded, YabInterface* yab)
{
yab->TreeBox3(id,_L(head),_L(item),isExpanded);
}
void yi_TreeBox4(const char* id, YabInterface* yab)
{
yab->TreeBox4(id);
}
void yi_TreeBox5(const char* id, const char* item, YabInterface* yab)
{
yab->TreeBox5(id,_L(item));
}
void yi_TreeBox7(const char* id, int pos, YabInterface* yab)
{
yab->TreeBox7(id,pos);
}
void yi_TreeBox8(const char* id, int pos, YabInterface* yab)
{
yab->TreeBox8(id,pos);
}
void yi_TreeBox9(const char* id, const char* head, const char* item, YabInterface* yab)
{
yab->TreeBox9(id,_L(head), _L(item));
}
void yi_TreeBox10(const char* id, const char* head, YabInterface* yab)
{
yab->TreeBox10(id,_L(head));
}
void yi_TreeBox11(const char* id, const char* head, YabInterface* yab)
{
yab->TreeBox11(id,_L(head));
}
void yi_TreeBox12(const char* id, const char* item, int pos, YabInterface* yab)
{
yab->TreeBox12(id,_L(item), pos);
}
const char* yi_TreeboxGet(const char* treebox, int pos, YabInterface *yab)
{
return yab->TreeboxGet(treebox, pos);
}
int yi_TreeboxCount(const char* treebox, YabInterface *yab)
{
return yab->TreeboxCount(treebox);
}
void yi_ButtonImage(double x,double y,const char* id,const char* enabledon, const char* enabledoff, const char *disabled, const char* view, YabInterface *yab)
{
yab->ButtonImage(x,y, id, enabledon, enabledoff, disabled, view);
}
void yi_CheckboxImage(double x,double y,const char* id,const char* enabledon, const char* enabledoff, const char *disabledon, const char *disabledoff, int isActivated, const char* view, YabInterface *yab)
{
yab->CheckboxImage(x,y, id, enabledon, enabledoff, disabledon, disabledoff, isActivated, view);
}
void yi_CheckboxSet(const char* id, int isActivated, YabInterface* yab)
{
yab->CheckboxSet(id, isActivated);
}
void yi_RadioSet(const char* id, int isActivated, YabInterface* yab)
{
yab->RadioSet(id, isActivated);
}
void yi_ToolTip(const char* view, const char* text, YabInterface *yab)
{
yab->ToolTips(view,_L(text));
}
void yi_ToolTipColor(const char* color, int r, int g, int b, YabInterface *yab)
{
yab->ToolTipsColor(color,r,g,b);
}
void yi_TreeSort(const char* view, YabInterface *yab)
{
yab->TreeSort(view);
}
void yi_ListSort(const char* view, YabInterface *yab)
{
yab->ListSort(view);
}
void yi_FileBox(double x1, double y1, double x2, double y2, const char* id, int scrollbartype, const char *option, const char* view, YabInterface *yab)
{
yab->FileBox(BRect(x1,y1,x2,y2), id, scrollbartype, option, view);
}
void yi_FileBoxAdd2(const char* columnbox, const char* name, int pos, double maxWidth, double minWidth, double width, const char* option, YabInterface *yab)
{
yab->FileBoxAdd(columnbox, _L(name), pos, maxWidth, minWidth, width, option);
}
void yi_FileBoxClear(const char* view, YabInterface *yab)
{
yab->FileBoxClear(view);
}
void yi_ColumnBoxAdd(const char* id, int column, int position, int height, const char* item, YabInterface *yab)
{
yab->ColumnBoxAdd(id, column, position, height, _L(item));
}
void yi_ColumnBoxSelect(const char *columnbox, int position, YabInterface *yab)
{
yab->ColumnBoxSelect(columnbox, position);
}
void yi_ColumnBoxRemove(const char *columnbox, int position, YabInterface *yab)
{
yab->ColumnBoxRemove(columnbox, position);
}
void yi_ColumnBoxColor(const char *columnbox, const char* option, int r, int g, int b, YabInterface *yab)
{
yab->ColumnBoxColor(columnbox, option, r,g,b);
}
const char* yi_ColumnBoxGet(const char *columnbox, int column, int position, YabInterface *yab)
{
return yab->ColumnBoxGet(columnbox, column, position);
}
int yi_ColumnBoxCount(const char *columnbox, YabInterface *yab)
{
return yab->ColumnBoxCount(columnbox);
}
const char* yi_TextControlGet(const char* id, YabInterface* yab)
{
return yab->TextControlGet(id);
}
int yi_DeskbarPosition(YabInterface *yab)
{
return yab->DeskbarParam("position");
}
int yi_DeskbarExpanded(YabInterface *yab)
{
return yab->DeskbarParam("expanded");
}
int yi_DeskbarWidth(YabInterface *yab)
{
return yab->DeskbarParam("width");
}
int yi_DeskbarHeight(YabInterface *yab)
{
return yab->DeskbarParam("height");
}
int yi_DeskbarX(YabInterface *yab)
{
return yab->DeskbarParam("x");
}
int yi_DeskbarY(YabInterface *yab)
{
return yab->DeskbarParam("y");
}
int yi_DesktopWidth(YabInterface *yab)
{
return yab->DesktopParam(true);
}
int yi_DesktopHeight(YabInterface *yab)
{
return yab->DesktopParam(false);
}
int yi_WindowGet(const char* view, const char* option, YabInterface *yab)
{
return yab->WindowGet(view,option);
}
int yi_ViewGet(const char* view, const char* option, YabInterface *yab) //vasper
{
return yab->ViewGet(view,option);
}
void yi_ClipboardCopy(const char* text, YabInterface *yab)
{
yab->ClipboardCopy(text);
}
int yi_Printer(const char* docname, const char *view, const char* config, YabInterface *yab)
{
return yab->Printer(docname, view,config);
}
void yi_PrinterConfig(const char* config, YabInterface *yab)
{
yab->PrinterConfig(config);
}
const char* yi_ClipboardPaste(YabInterface *yab)
{
return yab->ClipboardPaste();
}
int yi_NewAlert(const char* text, const char* button1, const char* button2, const char* button3, const char* option, YabInterface *yab)
{
return yab->NewAlert(_L(text), _L(button1), _L(button2), _L(button3), option);
}
void yi_Calendar1(double x, double y, const char* id, const char* format, const char* date, const char* view, YabInterface *yab)
{
yab->Calendar(x,y, id, format, date, view);
}
const char* yi_Calendar2(const char* id, YabInterface *yab)
{
return yab->Calendar(id);
}
void yi_Calendar3(const char* id, const char* date, YabInterface *yab)
{
yab->Calendar(id, date);
}
const char* yi_ListboxGet(const char* listbox, int pos, YabInterface *yab)
{
return yab->ListboxGet(listbox, pos);
}
int yi_ListboxCount(const char* listbox, YabInterface *yab)
{
return yab->ListboxCount(listbox);
}
void yi_ListboxAdd1(const char* listbox, const char* item, YabInterface *yab)
{
yab->ListboxAdd(listbox,_L(item));
}
void yi_ListboxAdd2(const char* listbox, int pos, const char* item, YabInterface *yab)
{
yab->ListboxAdd(listbox, pos, _L(item));
}
void yi_ListboxSelect(const char* listbox, int pos, YabInterface *yab)
{
yab->ListboxSelect(listbox,pos);
}
void yi_ListboxRemove(const char* listbox, int pos, YabInterface *yab)
{
yab->ListboxRemove(listbox,pos);
}
void yi_Scrollbar(const char* id, int format, const char* view, YabInterface *yab)
{
yab->Scrollbar(id, format, view);
}
void yi_ScrollbarSet1(const char* scrollview, const char* option, double position, YabInterface *yab)
{
yab->ScrollbarSet(scrollview, option, position);
}
void yi_ScrollbarSet2(const char* scrollview, const char* option, double opt1, double opt2, YabInterface *yab)
{
yab->ScrollbarSet(scrollview, option, opt1, opt2);
}
void yi_ScrollbarSet3(const char* scrollview, const char* option, YabInterface *yab)
{
yab->ScrollbarSet(scrollview, option);
}
double yi_ScrollbarGet(const char* scrollview, const char* option, YabInterface *yab)
{
return yab->ScrollbarGet(scrollview, option);
}
void yi_SplitView1(double x1,double y1,double x2,double y2, const char* id, int isVertical, int style, const char* view, YabInterface *yab)
{
yab->SplitView(BRect(x1,y1,x2,y2), id, isVertical, style, view);
}
void yi_SplitView2(const char* splitView, const char* option, double position, YabInterface *yab)
{
yab->SplitView(splitView, option, position);
}
void yi_SplitView3(const char* splitView, const char* option, double left, double right, YabInterface *yab)
{
yab->SplitView(splitView, option, left, right);
}
double yi_SplitViewGet(const char* splitView, const char* option, YabInterface *yab)
{
return yab->SplitViewGet(splitView, option);
}
void yi_StackView1(double x1,double y1,double x2,double y2, const char* id, int number, const char* view, YabInterface *yab)
{
yab->StackViews(BRect(x1,y1,x2,y2), id, number, view);
}
void yi_StackView2(const char* stackView, int num, YabInterface *yab)
{
yab->StackViews(stackView, num);
}
int yi_StackViewGet(const char* stackView, YabInterface *yab)
{
return yab->StackViewGet(stackView);
}
void yi_DrawSet3(const char* option, int transparency, YabInterface *yab)
{
yab->DrawSet3(option, transparency);
}
extern void yi_TextURL1(double x, double y, const char* id, const char* text, const char* url, const char* view, YabInterface *yab)
{
yab->TextURL(x,y, id, _L(text), url, view);
}
void yi_TextURL2(const char* id, const char* option, int r, int g, int b, YabInterface *yab)
{
yab->TextURL(id, option, r,g,b);
}
void yi_Menu2(const char* menuHead, int isRadio, const char* view, YabInterface *yab)
{
yab->Menu(_L(menuHead), isRadio, view);
}
void yi_SubMenu1(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* modifiers, const char* view, YabInterface *yab)
{
yab->SubMenu(_L(menuHead), _L(menuItem), _L(subMenuItem), modifiers, view);
}
void yi_SubMenu2(const char* menuHead, const char* menuItem, int isRadio, const char* view, YabInterface *yab)
{
yab->SubMenu(_L(menuHead), _L(menuItem), isRadio, view);
}
void yi_SpinControl1(double x, double y, const char* id, const char* label, int min, int max, int step, const char* view, YabInterface *yab)
{
yab->SpinControl(x,y, id, _L(label), min, max, step, view);
}
void yi_SpinControl2(const char* spinControl, int value, YabInterface *yab)
{
yab->SpinControl(spinControl, value);
}
int yi_SpinControlGet(const char *spinControl, YabInterface *yab)
{
return yab->SpinControlGet(spinControl);
}
const char* yi_PopUpMenu(double x, double y, const char* menuItems, const char* view, YabInterface *yab)
{
return yab->PopUpMenu(x,y,menuItems,view);
}
void yi_DropBoxSelect(const char* dropbox, int position, YabInterface *yab)
{
yab->DropBoxSelect(dropbox, position);
}
void yi_DropBoxClear(const char* dropbox, YabInterface *yab)
{
yab->DropBoxClear(dropbox);
}
void yi_DropBoxRemove(const char* dropbox, int position, YabInterface *yab)
{
yab->DropBoxRemove(dropbox,position);
}
int yi_DropBoxCount(const char* dropbox, YabInterface *yab)
{
return yab->DropBoxCount(dropbox);
}
const char* yi_DropBoxGet(const char* dropbox, int position, YabInterface *yab)
{
return yab->DropBoxGet(dropbox, position);
}
int yi_ColorControlGet(const char* colorcontrol, const char* option, YabInterface *yab)
{
return yab->ColorControlGet(colorcontrol, option);
}
int yi_SliderGet(const char* slider, YabInterface *yab)
{
return yab->SliderGet(slider);
}
double yi_DrawGet1(const char* option, const char* txt, const char* view, YabInterface *yab)
{
return yab->DrawGet(option, txt, view);
}
double yi_DrawGet2(const char* option, const char* view, YabInterface *yab)
{
return yab->DrawGet(option, "", view);
}
const char* yi_DrawGet3(const char* option, YabInterface *yab)
{
return yab->DrawGet(option);
}
void yi_SubMenu3(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* option, const char* view, YabInterface *yab)
{
yab->SubMenu3(_L(menuHead), _L(menuItem), _L(subMenuItem), option, view);
}
void yi_Menu3(const char* menuHead, const char* menuItem, const char* option,const char* view, YabInterface *yab)
{
yab->Menu3(_L(menuHead), _L(menuItem), option, view);
}
double yi_MenuHeight(YabInterface *yab)
{
return yab->MenuHeight();
}
double yi_TabHeight(YabInterface *yab)
{
return yab->TabHeight();
}
double yi_ScrollbarWidth(YabInterface *yab)
{
return yab->ScrollbarWidth();
}
void yi_exit(int code, YabInterface *yab)
{
yab->KillThread(code);
}
const int yi_IsMouseIn(const char* view, YabInterface *yab)
{
return yab->IsMouseIn(view);
}
const char* yi_GetMouseIn(YabInterface *yab)
{
return yab->GetMouseIn();
}
const char* yi_KeyboardMessages(const char* view, YabInterface* yab)
{
return yab->KeyboardMessages(view);
}
const char* yi_GetMouseMessages(const char* view, YabInterface* yab)
{
return yab->GetMouseMessages(view);
}
const char* yi_CheckMessages(YabInterface* yab)
{
return yab->GetMessageString();
}
int yi_MessageSend(const char* app, const char* msg,YabInterface* yab)
{
return yab->MessageSend(app,msg);
}
int yi_ThreadKill(const char* option, int id,YabInterface* yab)
{
return yab->ThreadKill(option, id);
}
int yi_ThreadGet(const char* option, const char* appname,YabInterface* yab)
{
return yab->ThreadGet(option, appname);
}
void yi_SetCurrentLineNumber(int line, const char* libname, YabInterface* yab)
{
yab->SetCurrentLineNumber(line, libname);
}
void yi_SetMainFileName(const char* name, YabInterface* yab)
{
yab->SetMainFileName(name);
}
void yi_beep()
{
beep();
}
void yi_Bitmap(double w, double h, const char* id,YabInterface* yab)
{
yab->Bitmap(w,h,id);
}
int yi_BitmapColor(double x, double y, const char* id, const char* option, YabInterface *yab)
{
yab->BitmapColor(x,y, id, option);
}
void yi_BitmapDraw(double x, double y, const char* bitmap, const char* mode, const char* view,YabInterface* yab)
{
yab->BitmapDraw(x,y, bitmap, mode, view);
}
void yi_BitmapDraw2(double x1, double y1, double x2, double y2, const char* bitmap, const char* mode, const char* view,YabInterface* yab)
{
yab->BitmapDraw(BRect(x1,y1,x2,y2), bitmap, mode, view);
}
void yi_BitmapGet(double x1, double y1, double x2, double y2, const char* id, const char* bitmap, YabInterface* yab)
{
yab->BitmapGet(BRect(x1,y1,x2,y2), id, bitmap);
}
void yi_BitmapGet2(double w, const char* id, const char* path, YabInterface* yab)
{
yab->BitmapGet(w, id, path);
}
int yi_BitmapGetNum(const char* id, const char* option, YabInterface* yab)
{
yab->BitmapGet(id, option);
}
int yi_BitmapLoad(const char* filename, const char* bitmap, YabInterface* yab)
{
yab->BitmapLoad(filename, bitmap);
}
void yi_BitmapGetIcon(const char* id, const char* option, const char* path, YabInterface* yab)
{
yab->BitmapGetIcon(id, option, path);
}
void yi_BitmapDrag(const char* bitmap,YabInterface* yab)
{
yab->BitmapDrag(bitmap);
}
void yi_BitmapRemove(const char* bitmap,YabInterface* yab)
{
yab->BitmapRemove(bitmap);
}
void yi_Screenshot(double x1, double y1, double x2, double y2, const char* bitmap, YabInterface *yab)
{
return yab->Screenshot(BRect(x1,y1,x2,y2), bitmap);
}
int yi_BitmapSave(const char* id, const char* filename, const char* type, YabInterface* yab)
{
return yab->BitmapSave(id, filename, type); //, type);
}
void yi_Canvas(double x1, double y1, double x2, double y2, const char* id, const char* view, YabInterface *yab)
{
yab->Canvas(BRect(x1,y1,x2,y2), id,view);
}
int yi_Sound(const char* filename, YabInterface* yab)
{
return yab->Sound(filename);
}
void yi_SoundStop(int id, YabInterface* yab)
{
yab->SoundStop(id);
}
void yi_SoundWait(int id, YabInterface* yab)
{
yab->SoundWait(id);
}
void yi_ShortCut(const char* view, const char* key, const char* msg, YabInterface *yab)
{
yab->ShortCut(view,key,msg);
}
int yi_IsComputerOn(YabInterface *yab)
{
return yab->IsComputerOn();
}
void yi_DrawSet4(const char* option, const char* color,const char* view, YabInterface* yab)
{
yab->DrawSet(option, color, view);
}
void yi_Treebox13(const char* id,const char* option, int pos, YabInterface* yab)
{
yab->Treebox13(id, option, pos);
}
int yi_TreeboxGetOpt(const char* id, const char* option, int pos, YabInterface* yab)
{
return yab->TreeboxGetOpt(id, option, pos);
}
int yi_ListboxGetNum(const char* id, YabInterface* yab)
{
return yab->ListboxGetNum(id);
}
int yi_DropboxGetNum(const char* id, YabInterface* yab)
{
return yab->DropboxGetNum(id);
}
int yi_TreeboxGetNum(const char* id, YabInterface* yab)
{
return yab->TreeboxGetNum(id);
}
int yi_ColumnboxGetNum(const char* id, YabInterface* yab)
{
return yab->ColumnboxGetNum(id);
}
int yi_DrawGet4(double x, double y, const char* option, const char* view, YabInterface* yab)
{
return yab->DrawGet(BPoint(x,y),option,view);
}
void yi_MouseSet(const char* opt, YabInterface *yab)
{
yab->MouseSet(opt);
}
void yi_StatusBar(double x1, double y1, double x2, double y2, const char* id, const char* label1, const char* label2, const char* view, YabInterface *yab)
{
yab->StatusBar(BRect(x1, y1, x2, y2), id, label1, label2, view);
}
void yi_StatusBarSet(const char* id, const char* label1, const char* label2, double state, YabInterface *yab)
{
yab->StatusBarSet(id, label1, label2, state);
}
void yi_StatusBarSet2(double x1, double y1, double x2, double y2, const char* id, const char* view, YabInterface *yab)
{
yab->StatusBarSet(BRect(x1, y1, x2, y2), id, view);
}
void yi_StatusBarSet3(const char* id, int r, int g, int b, YabInterface *yab)
{
yab->StatusBarSet(id, r, g, b);
}
void yi_Launch(const char* strg, YabInterface *yab)
{
yab->Launch(strg);
}
void yi_Attribute1(const char* type, const char* name, const char* value, const char* filename, YabInterface* yab)
{
yab->Attribute1(type, name, value, filename);
}
void yi_AttributeClear(const char* name, const char* filename, YabInterface* yab)
{
yab->AttributeClear(name, filename);
}
const char* yi_AttributeGet1(const char* name, const char* filename, YabInterface* yab)
{
return yab->AttributeGet1(name, filename);
}
double yi_AttributeGet2(const char* name, const char* filename, YabInterface* yab)
{
return yab->AttributeGet2(name, filename);
}