removed old files that shouldn't have been committed in the first place (unstaged)
This commit is contained in:
@@ -1,252 +0,0 @@
|
|||||||
// Calendar Control version 2.5
|
|
||||||
// by Al.V. Sarikov.
|
|
||||||
// Kherson, Ukraine, 2006.
|
|
||||||
// E-mail: avix@ukrpost.net.
|
|
||||||
// Home page: http://avix.pp.ru.
|
|
||||||
|
|
||||||
// Updated for Haiku and removed all stuff that is not needed and refactored by jan__64 2009
|
|
||||||
|
|
||||||
// Control which allows to work with dates:
|
|
||||||
// enter date to text field and choose it from calendar.
|
|
||||||
|
|
||||||
// Distributed under BSD license (see LICENSE file).
|
|
||||||
|
|
||||||
#define __LANG_ENGLISH // to compile english version
|
|
||||||
|
|
||||||
#include "CalendarControl.h"
|
|
||||||
|
|
||||||
#define myButtonMessage 'DCBP'
|
|
||||||
|
|
||||||
#include "DateTextView.cpp"
|
|
||||||
#include "MonthWindow.cpp"
|
|
||||||
|
|
||||||
#include <AppFileInfo.h>
|
|
||||||
#include <FindDirectory.h>
|
|
||||||
#include <File.h>
|
|
||||||
#include <Path.h>
|
|
||||||
#include <Point.h>
|
|
||||||
#include <ControlLook.h>
|
|
||||||
|
|
||||||
|
|
||||||
CalendarControl::CalendarControl(BPoint p, const char* name, int day, int month, int year, uint32 flags, uint32 look)
|
|
||||||
:BControl(BRect(100,100,200,200),name, NULL, NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW)
|
|
||||||
{
|
|
||||||
|
|
||||||
uint32 divider=look & CC_ALL_DIVIDERS;
|
|
||||||
|
|
||||||
myDateTextView = new DateTextView(day,month,year,flags,divider);
|
|
||||||
myButton = new CalendarButton(BRect(70,0,85,15), "CalendarButton", "", new BMessage(myButtonMessage), B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW);
|
|
||||||
myOrigin = p;
|
|
||||||
|
|
||||||
AddChild(myDateTextView);
|
|
||||||
myDateTextView->MoveTo(3,3);
|
|
||||||
ResizeTo(myDateTextView->Bounds().Width()+6,myDateTextView->Bounds().Height()+7);
|
|
||||||
|
|
||||||
AddChild(myButton);
|
|
||||||
|
|
||||||
myButton->ResizeTo(Bounds().Height()*0.7,Bounds().Height()-1);
|
|
||||||
myButton->MoveTo(Bounds().right+1, Bounds().top);
|
|
||||||
ResizeBy(myButton->Bounds().Width()+1, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CalendarControl::~CalendarControl()
|
|
||||||
{
|
|
||||||
RemoveChild(myDateTextView);
|
|
||||||
delete myDateTextView;
|
|
||||||
RemoveChild(myButton);
|
|
||||||
delete myButton;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::AttachedToWindow(void)
|
|
||||||
{
|
|
||||||
BControl::AttachedToWindow();
|
|
||||||
|
|
||||||
myButton->SetTarget(this);
|
|
||||||
|
|
||||||
if(Parent()!=NULL)
|
|
||||||
view_color=Parent()->ViewColor();
|
|
||||||
else
|
|
||||||
view_color.red=view_color.green=view_color.blue=view_color.alpha=255;
|
|
||||||
|
|
||||||
SetViewColor(view_color); // function of CalendarControl class
|
|
||||||
|
|
||||||
// MakeButton(); // for BeOS interface is called only from here,
|
|
||||||
MoveTo(myOrigin);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::Draw(BRect r)
|
|
||||||
{
|
|
||||||
BRect bounds(Bounds());
|
|
||||||
bounds.bottom--;
|
|
||||||
bounds.right = myButton->Frame().left - 1;
|
|
||||||
|
|
||||||
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
|
|
||||||
bool active = myDateTextView->IsFocus() && Window()->IsActive();
|
|
||||||
uint32 flags = 0;
|
|
||||||
if (!IsEnabled())
|
|
||||||
flags |= BControlLook::B_DISABLED;
|
|
||||||
if (active)
|
|
||||||
flags |= BControlLook::B_FOCUSED;
|
|
||||||
be_control_look->DrawTextControlBorder((BView*)this, bounds, r, base, flags, 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::KeyDown(const char *bytes, int32 numBytes)
|
|
||||||
{
|
|
||||||
BControl::KeyDown(bytes, numBytes);
|
|
||||||
if(bytes[0]==B_TAB) Draw(Bounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::MakeFocus(bool focused)
|
|
||||||
{
|
|
||||||
myDateTextView->MakeFocus(focused);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::MessageReceived(BMessage *msg)
|
|
||||||
{
|
|
||||||
switch(msg->what)
|
|
||||||
{
|
|
||||||
case myButtonMessage:
|
|
||||||
{
|
|
||||||
if(IsEnabled())
|
|
||||||
{
|
|
||||||
MakeFocus(true);
|
|
||||||
int day, month, year;
|
|
||||||
int first_year, last_year;
|
|
||||||
GetDate(&day, &month, &year);
|
|
||||||
GetYearRange(&first_year, &last_year);
|
|
||||||
new MonthWindow(ConvertToScreen(BPoint(Bounds().left+1,Bounds().bottom+1)),
|
|
||||||
new BMessenger(this), day, month, year, first_year, last_year);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'MVME': // message has come from window with calendar
|
|
||||||
{
|
|
||||||
int32 day, month, year;
|
|
||||||
msg->FindInt32("day",&day);
|
|
||||||
msg->FindInt32("month",&month);
|
|
||||||
msg->FindInt32("year",&year);
|
|
||||||
SetDate((int)day, (int)month, (int)year);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
BControl::MessageReceived(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetEnabled(bool enabled)
|
|
||||||
{
|
|
||||||
if(enabled==IsEnabled()) return;
|
|
||||||
BControl::SetEnabled(enabled);
|
|
||||||
myButton->SetEnabled(enabled);
|
|
||||||
myDateTextView->SetEnabled(enabled);
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetViewColor(rgb_color color)
|
|
||||||
{
|
|
||||||
view_color=color;
|
|
||||||
BControl::SetViewColor(view_color);
|
|
||||||
Draw(Bounds());
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetViewColor(uchar red, uchar green,
|
|
||||||
uchar blue, uchar alpha)
|
|
||||||
{
|
|
||||||
rgb_color color={red, green, blue, alpha};
|
|
||||||
SetViewColor(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::WindowActivated(bool active)
|
|
||||||
{
|
|
||||||
myWindowActive = active; // true if window where control is placed is active
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char* CalendarControl::Text() const
|
|
||||||
{
|
|
||||||
return myDateTextView->Text();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::GetDate(int *day, int *month, int *year)
|
|
||||||
{
|
|
||||||
myDateTextView->GetDate(day,month,year);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetDate(int day, int month, int year)
|
|
||||||
{
|
|
||||||
myDateTextView->SetDate(day,month,year);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetDate(const char *tdate)
|
|
||||||
{
|
|
||||||
myDateTextView->SetDate(tdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::GetYearRange(int *first_year, int *last_year)
|
|
||||||
{
|
|
||||||
myDateTextView->GetYearRange(first_year, last_year);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint32 CalendarControl::GetLook()
|
|
||||||
{
|
|
||||||
return (myDateTextView->GetDivider());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetLook(uint32 look)
|
|
||||||
{
|
|
||||||
myDateTextView->SetDivider(look & CC_ALL_DIVIDERS);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint32 CalendarControl::GetFlags()
|
|
||||||
{
|
|
||||||
return myDateTextView->GetDateFlags();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarControl::SetFlags(uint32 flags)
|
|
||||||
{
|
|
||||||
myDateTextView->SetDateFlags(flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BTextView *CalendarControl::TextView(void) const
|
|
||||||
{
|
|
||||||
return (BTextView *)myDateTextView;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CalendarButton::Draw(BRect update)
|
|
||||||
{
|
|
||||||
BButton::Draw(update);
|
|
||||||
BRect rect = Bounds();
|
|
||||||
rect.InsetBy(2.0,4.0);
|
|
||||||
uint32 flags = 0;
|
|
||||||
rgb_color base = ui_color(B_PANEL_TEXT_COLOR);
|
|
||||||
float tint = B_NO_TINT;
|
|
||||||
if(!IsEnabled())
|
|
||||||
{
|
|
||||||
tint = B_LIGHTEN_MAX_TINT;
|
|
||||||
flags |= BControlLook::B_DISABLED;
|
|
||||||
}
|
|
||||||
be_control_look->DrawArrowShape(this, rect, update, base, 3, flags, tint);
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
// Calendar Control version 2.5
|
|
||||||
// by Al.V. Sarikov.
|
|
||||||
// Kherson, Ukraine, 2006.
|
|
||||||
// E-mail: avix@ukrpost.net.
|
|
||||||
// Home page: http://avix.pp.ru.
|
|
||||||
|
|
||||||
// Control which allows to work with dates:
|
|
||||||
// enter date to text field and choose it from calendar.
|
|
||||||
|
|
||||||
// Distributed under BSD license (see LICENSE file).
|
|
||||||
|
|
||||||
#include <Control.h>
|
|
||||||
#include <PictureButton.h>
|
|
||||||
#include <Button.h>
|
|
||||||
#include <TextView.h>
|
|
||||||
|
|
||||||
class DateTextView;
|
|
||||||
|
|
||||||
class CalendarButton : public BButton
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CalendarButton(BRect frame, const char* name, const char* label,
|
|
||||||
BMessage* message, uint32 resizingMode, uint32 flags)
|
|
||||||
: BButton(frame, name, label, message, resizingMode, flags)
|
|
||||||
{};
|
|
||||||
~CalendarButton() {};
|
|
||||||
void Draw(BRect update);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Formats of date
|
|
||||||
|
|
||||||
enum date_format {
|
|
||||||
CC_DD_MM_YYYY_FORMAT = 0,
|
|
||||||
CC_MM_DD_YYYY_FORMAT
|
|
||||||
};
|
|
||||||
|
|
||||||
enum full_short_year {
|
|
||||||
CC_FULL_YEAR = 0, // DD.MM.YYYY
|
|
||||||
CC_SHORT_YEAR = 8 // DD.MM.YY
|
|
||||||
};
|
|
||||||
|
|
||||||
enum century_begin {
|
|
||||||
CC_FULL_CENTURY = 0, // first year is first year of century (01-00)
|
|
||||||
CC_HALF_CENTURY = 16 // first year is 51th year of century (51-50)
|
|
||||||
};
|
|
||||||
|
|
||||||
enum divider_format {
|
|
||||||
CC_DOT_DIVIDER = 0, // .
|
|
||||||
CC_SLASH_DIVIDER, // /
|
|
||||||
CC_MINUS_DIVIDER, // -
|
|
||||||
CC_ALL_DIVIDERS // 2 bits, and some one bit is reserved
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class CalendarControl: public BControl
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CalendarControl(BPoint p,
|
|
||||||
const char* name,
|
|
||||||
int day=0,
|
|
||||||
int month=0,
|
|
||||||
int year=0,
|
|
||||||
uint32 flags=CC_DD_MM_YYYY_FORMAT | CC_FULL_YEAR,
|
|
||||||
uint32 look=CC_DOT_DIVIDER);
|
|
||||||
~CalendarControl();
|
|
||||||
virtual void AttachedToWindow(void);
|
|
||||||
virtual void Draw(BRect r);
|
|
||||||
virtual void KeyDown(const char *bytes, int32 numBytes);
|
|
||||||
virtual void MakeFocus(bool focused=true);
|
|
||||||
virtual void MessageReceived(BMessage *msg);
|
|
||||||
virtual void SetEnabled(bool enabled);
|
|
||||||
virtual void SetViewColor(rgb_color color);
|
|
||||||
void SetViewColor(uchar red, uchar green, uchar blue, uchar alpha=255);
|
|
||||||
virtual void WindowActivated(bool active);
|
|
||||||
|
|
||||||
void GetDate(int *day, int *month, int *year);
|
|
||||||
void SetDate(int day=0, int month=0, int year=0);
|
|
||||||
void SetDate(const char *tdate);
|
|
||||||
void GetYearRange(int *first_year, int *last_year);
|
|
||||||
uint32 GetLook();
|
|
||||||
void SetLook(uint32 look);
|
|
||||||
uint32 GetFlags();
|
|
||||||
void SetFlags(uint32 flags);
|
|
||||||
const char* Text() const;
|
|
||||||
BTextView *TextView(void) const;
|
|
||||||
const char* Version();
|
|
||||||
|
|
||||||
private:
|
|
||||||
void MakeButton();
|
|
||||||
|
|
||||||
DateTextView *myDateTextView;
|
|
||||||
CalendarButton *myButton;
|
|
||||||
bool myWindowActive;
|
|
||||||
BPoint myOrigin;
|
|
||||||
rgb_color view_color;
|
|
||||||
};
|
|
||||||
|
|
||||||
-2293
File diff suppressed because it is too large
Load Diff
@@ -1,620 +0,0 @@
|
|||||||
// Calendar Control version 2.5
|
|
||||||
// by Al.V. Sarikov.
|
|
||||||
// Kherson, Ukraine, 2006.
|
|
||||||
// E-mail: avix@ukrpost.net.
|
|
||||||
// Home page: http://avix.pp.ru.
|
|
||||||
|
|
||||||
// Control which allows to work with dates:
|
|
||||||
// enter date to text field and choose it from calendar.
|
|
||||||
|
|
||||||
// Distributed under BSD license (see LICENSE file).
|
|
||||||
|
|
||||||
#include <Clipboard.h>
|
|
||||||
#include <InterfaceDefs.h>
|
|
||||||
#include <Rect.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <TextView.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
|
|
||||||
#define LAST_FORMAT 1 // quantity of formats - 1
|
|
||||||
#define LAST_DIVIDER 2 // quantity of dividers - 1
|
|
||||||
|
|
||||||
|
|
||||||
class DateTextView: public BTextView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DateTextView(int day, int month, int year, uint32 flags, uint32 look);
|
|
||||||
virtual void Cut(BClipboard *clip);
|
|
||||||
virtual void KeyDown(const char *bytes, int32 numBytes);
|
|
||||||
virtual void MakeFocus(bool focused);
|
|
||||||
virtual void Paste(BClipboard *clip);
|
|
||||||
virtual void SetEnabled(bool enabled);
|
|
||||||
|
|
||||||
void GetDate(int *day, int *month, int *year);
|
|
||||||
void SetDate(int day, int month, int year);
|
|
||||||
void SetDate(const char *tdate);
|
|
||||||
void GetYearRange(int *first_year, int *last_year);
|
|
||||||
uint32 GetDivider();
|
|
||||||
void SetDivider(uint32 dvder);
|
|
||||||
uint32 GetDateFlags();
|
|
||||||
void SetDateFlags(uint32 flags);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void DeleteText(int32 start, int32 finish);
|
|
||||||
private:
|
|
||||||
virtual bool AcceptsDrop(const BMessage *message);
|
|
||||||
virtual bool AcceptsPaste(BClipboard *clip);
|
|
||||||
|
|
||||||
void DrawDate(int day, int month, int year);
|
|
||||||
bool VerifyDate(int *day, int *month, int *year);
|
|
||||||
|
|
||||||
bool is_ins; // is it necessar to insert symbol
|
|
||||||
uint32 flags;
|
|
||||||
char *div[LAST_DIVIDER+1]; // сstrings of dividers
|
|
||||||
uint32 divider;
|
|
||||||
|
|
||||||
bool enabled;
|
|
||||||
|
|
||||||
int first_year;
|
|
||||||
int last_year; // first and last year which control accepts
|
|
||||||
|
|
||||||
int textlen; // length of text string (10 or 8 symbols)
|
|
||||||
|
|
||||||
uint32 interface; // the same as control variable
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
DateTextView::DateTextView(int day, int month, int year,
|
|
||||||
uint32 flags, uint32 look)
|
|
||||||
:BTextView(BRect(0,0,110,15),"DateTextViewAViX",
|
|
||||||
BRect(0,0,110,15),B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
|
||||||
B_WILL_DRAW | B_NAVIGABLE)
|
|
||||||
{
|
|
||||||
enabled=true;
|
|
||||||
|
|
||||||
is_ins=false;
|
|
||||||
|
|
||||||
interface=look;
|
|
||||||
|
|
||||||
div[0]=(char*)".";
|
|
||||||
div[1]=(char*)"/";
|
|
||||||
div[2]=(char*)"-";
|
|
||||||
|
|
||||||
divider=look & CC_ALL_DIVIDERS;
|
|
||||||
if(divider>LAST_DIVIDER || divider<0) divider=0; // index of divider
|
|
||||||
|
|
||||||
this->flags=(flags & (LAST_FORMAT | CC_SHORT_YEAR | CC_HALF_CENTURY));
|
|
||||||
if((this->flags & (CC_SHORT_YEAR | CC_HALF_CENTURY))==CC_HALF_CENTURY)
|
|
||||||
this->flags=this->flags^CC_HALF_CENTURY; // XOR; CC_FULL_YEAR and CC_HALF_CENTURY
|
|
||||||
// at the same time may not be used
|
|
||||||
|
|
||||||
first_year=1;
|
|
||||||
last_year=9999;
|
|
||||||
|
|
||||||
if((this->flags & CC_SHORT_YEAR)==CC_SHORT_YEAR)
|
|
||||||
{
|
|
||||||
textlen=8;
|
|
||||||
|
|
||||||
// Changing first and last acceptable years
|
|
||||||
// Working in range of century defined by year variable
|
|
||||||
|
|
||||||
if(year<first_year || year>last_year)
|
|
||||||
{
|
|
||||||
// Range is set relative to today's year
|
|
||||||
struct tm *dat;
|
|
||||||
time_t tmp;
|
|
||||||
time(&tmp);
|
|
||||||
dat=localtime(&tmp);
|
|
||||||
|
|
||||||
year=dat->tm_year+1900; // today's year
|
|
||||||
}
|
|
||||||
|
|
||||||
first_year=(year/100)*100+1; // dividing with loosing rest
|
|
||||||
last_year=first_year+99;
|
|
||||||
if(last_year==10000) last_year--; // full century
|
|
||||||
|
|
||||||
if((this->flags & CC_HALF_CENTURY)==CC_HALF_CENTURY)
|
|
||||||
{
|
|
||||||
if(year<51 || year>9950)
|
|
||||||
this->flags=this->flags^CC_HALF_CENTURY; // HALF_CENTURY may nor be set
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if((year%100)>50)
|
|
||||||
{
|
|
||||||
first_year+=50;
|
|
||||||
last_year+=50;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
first_year-=50;
|
|
||||||
last_year-=50;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else textlen=10; // length of text string
|
|
||||||
|
|
||||||
SetDate(day,month,year);
|
|
||||||
|
|
||||||
float width=0;
|
|
||||||
BString s("");
|
|
||||||
for(char i='0'; i<='9'; i++)
|
|
||||||
{
|
|
||||||
s<<i;
|
|
||||||
if(StringWidth(s.String())>width) width=StringWidth(s.String());
|
|
||||||
s.SetTo("");
|
|
||||||
}
|
|
||||||
|
|
||||||
ResizeTo(width*(textlen-2)+StringWidth("/")*2.5, LineHeight()-1);
|
|
||||||
|
|
||||||
SetWordWrap(false);
|
|
||||||
SetMaxBytes(textlen);
|
|
||||||
SetTextRect(Bounds());
|
|
||||||
SetDoesUndo(false);
|
|
||||||
for(int32 i=0;i<256;i++) DisallowChar(i);
|
|
||||||
for(int32 i='0';i<='9';i++) AllowChar(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
|
||||||
bool DateTextView::AcceptsDrop(const BMessage *message)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
|
||||||
bool DateTextView::AcceptsPaste(BClipboard *clip)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////
|
|
||||||
void DateTextView::Cut(BClipboard *clip)
|
|
||||||
{
|
|
||||||
Copy(clip);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////
|
|
||||||
void DateTextView::DeleteText(int32 start, int32 finish)
|
|
||||||
{
|
|
||||||
BTextView::DeleteText(start,finish);
|
|
||||||
if(is_ins)
|
|
||||||
{
|
|
||||||
if(start==2 || start==5) InsertText(div[divider],1,start,NULL);
|
|
||||||
else InsertText("0",1,start,NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////
|
|
||||||
void DateTextView::KeyDown(const char *bytes, int32 numBytes)
|
|
||||||
{
|
|
||||||
if(!enabled) if(bytes[0]!=B_TAB) return;
|
|
||||||
|
|
||||||
int32 i1,i2;
|
|
||||||
GetSelection(&i1,&i2);
|
|
||||||
|
|
||||||
if(bytes[0]>='0' && bytes[0]<='9')
|
|
||||||
{
|
|
||||||
if(i1>(textlen-1)) return; // not to insert after end of string
|
|
||||||
Select(i1,i1);
|
|
||||||
if(i1==2 || i1==5)
|
|
||||||
{
|
|
||||||
i1++;
|
|
||||||
Select(i1,i1);
|
|
||||||
}
|
|
||||||
DeleteText(i1,i1+1);
|
|
||||||
BTextView::KeyDown(bytes, numBytes);
|
|
||||||
}
|
|
||||||
else if(bytes[0]==B_DELETE)
|
|
||||||
{
|
|
||||||
if(i1>(textlen-1)) return; // not to insert after end of string
|
|
||||||
Select(i1,i1);
|
|
||||||
is_ins=true; // symbol "0" or divider will be inserted
|
|
||||||
BTextView::KeyDown(bytes, numBytes);
|
|
||||||
is_ins=false;
|
|
||||||
}
|
|
||||||
else if(bytes[0]==B_BACKSPACE)
|
|
||||||
{
|
|
||||||
Select(i1,i1);
|
|
||||||
is_ins=true;
|
|
||||||
BTextView::KeyDown(bytes, numBytes);
|
|
||||||
is_ins=false;
|
|
||||||
}
|
|
||||||
else if(bytes[0]==B_TAB)
|
|
||||||
{
|
|
||||||
Parent()->KeyDown(bytes, numBytes);
|
|
||||||
}
|
|
||||||
else if(bytes[0]==B_DOWN_ARROW)
|
|
||||||
{
|
|
||||||
// Is Ctrl+DownArrow pressed?
|
|
||||||
if(modifiers() & B_CONTROL_KEY)
|
|
||||||
{
|
|
||||||
// yes
|
|
||||||
BMessage msg(myButtonMessage);
|
|
||||||
Parent()->MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BTextView::KeyDown(bytes, numBytes);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BTextView::KeyDown(bytes, numBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
|
||||||
void DateTextView::MakeFocus(bool focused=true)
|
|
||||||
{
|
|
||||||
BTextView::MakeFocus(focused);
|
|
||||||
|
|
||||||
int day, month, year;
|
|
||||||
GetDate(&day, &month, &year);
|
|
||||||
Parent()->Draw(Parent()->Bounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////
|
|
||||||
void DateTextView::Paste(BClipboard *clip)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////
|
|
||||||
void DateTextView::SetEnabled(bool enabled)
|
|
||||||
{
|
|
||||||
this->enabled=enabled;
|
|
||||||
SetFlags(Flags()^B_NAVIGABLE);
|
|
||||||
MakeEditable(enabled);
|
|
||||||
|
|
||||||
BFont font;
|
|
||||||
rgb_color color;
|
|
||||||
GetFontAndColor((int32) 0, &font, &color);
|
|
||||||
color.alpha=0;
|
|
||||||
if(enabled)
|
|
||||||
{
|
|
||||||
SetViewColor(255,255,255,255);
|
|
||||||
color.red=color.green=color.blue=0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetViewColor(239,239,239,255);
|
|
||||||
color.red=color.green=color.blue=128;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetFontAndColor(&font,B_FONT_ALL,&color);
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////
|
|
||||||
void DateTextView::DrawDate(int day, int month, int year)
|
|
||||||
{
|
|
||||||
// It is assumed that date is correct
|
|
||||||
BString s;
|
|
||||||
s.SetTo("");
|
|
||||||
|
|
||||||
if(!((flags & CC_MM_DD_YYYY_FORMAT)==CC_MM_DD_YYYY_FORMAT))
|
|
||||||
{
|
|
||||||
if(day<10) s.Append("0");
|
|
||||||
s<<day;
|
|
||||||
|
|
||||||
s.Append(div[divider]);
|
|
||||||
|
|
||||||
if(month<10) s.Append("0");
|
|
||||||
s<<month;
|
|
||||||
}
|
|
||||||
else // CC_MM_DD_YYYY_FORMAT
|
|
||||||
{
|
|
||||||
if(month<10) s.Append("0");
|
|
||||||
s<<month;
|
|
||||||
|
|
||||||
s.Append(div[divider]);
|
|
||||||
|
|
||||||
if(day<10) s.Append("0");
|
|
||||||
s<<day;
|
|
||||||
}
|
|
||||||
s.Append(div[divider]);
|
|
||||||
|
|
||||||
if((flags & CC_SHORT_YEAR)==CC_SHORT_YEAR)
|
|
||||||
{
|
|
||||||
int year1=year%100;
|
|
||||||
if(year1<10) s.Append("0");
|
|
||||||
s<<year1;
|
|
||||||
}
|
|
||||||
else // FULL_YEAR
|
|
||||||
{
|
|
||||||
if(year<10) s.Append("000");
|
|
||||||
else if(year<100) s.Append("00");
|
|
||||||
else if(year<1000) s.Append("0");
|
|
||||||
s<<year;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetText(s.String());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
void DateTextView::GetDate(int *day, int *month, int *year)
|
|
||||||
{
|
|
||||||
int mday=*day;
|
|
||||||
int mmonth=*month;
|
|
||||||
int myear=*year;
|
|
||||||
|
|
||||||
BString s(Text());
|
|
||||||
char n1[11];
|
|
||||||
char n2[11];
|
|
||||||
char n3[11];
|
|
||||||
|
|
||||||
s.CopyInto(n1,0,2);
|
|
||||||
n1[2]='\0';
|
|
||||||
s.CopyInto(n2,3,2);
|
|
||||||
n2[2]='\0';
|
|
||||||
|
|
||||||
if((flags & CC_SHORT_YEAR)==CC_SHORT_YEAR)
|
|
||||||
{
|
|
||||||
s.CopyInto(n3,6,2);
|
|
||||||
n3[2]='\0';
|
|
||||||
}
|
|
||||||
else // FULL_YEAR
|
|
||||||
{
|
|
||||||
s.CopyInto(n3,6,4);
|
|
||||||
n3[4]='\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!((flags & CC_MM_DD_YYYY_FORMAT)==CC_MM_DD_YYYY_FORMAT))
|
|
||||||
{
|
|
||||||
mday=atoi(n1);
|
|
||||||
mmonth=atoi(n2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mday=atoi(n2);
|
|
||||||
mmonth=atoi(n1);
|
|
||||||
}
|
|
||||||
|
|
||||||
myear=atoi(n3);
|
|
||||||
if((flags & CC_SHORT_YEAR)==CC_SHORT_YEAR)
|
|
||||||
{
|
|
||||||
if((flags & CC_HALF_CENTURY)==CC_HALF_CENTURY)
|
|
||||||
{
|
|
||||||
if(myear<51) myear+=50; else myear-=50;
|
|
||||||
}
|
|
||||||
else if(myear==0) myear=100;
|
|
||||||
|
|
||||||
myear+=(first_year-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!VerifyDate(&mday,&mmonth,&myear)) SetDate(mday,mmonth,myear);
|
|
||||||
|
|
||||||
*day=mday;
|
|
||||||
*month=mmonth;
|
|
||||||
*year=myear;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////
|
|
||||||
void DateTextView::SetDate(int day, int month, int year)
|
|
||||||
{
|
|
||||||
int mday=day;
|
|
||||||
int mmonth=month;
|
|
||||||
int myear=year;
|
|
||||||
VerifyDate(&mday, &mmonth, &myear);
|
|
||||||
DrawDate(mday, mmonth, myear);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
|
||||||
void DateTextView::SetDate(const char *tdate)
|
|
||||||
{
|
|
||||||
// Almost the same as GetDate. May be to combine them.
|
|
||||||
|
|
||||||
// Changes text using current settings of control.
|
|
||||||
int day;
|
|
||||||
int month;
|
|
||||||
int year;
|
|
||||||
|
|
||||||
int k;
|
|
||||||
|
|
||||||
bool short_year=false;
|
|
||||||
if((flags & CC_SHORT_YEAR)==CC_SHORT_YEAR) short_year=true;
|
|
||||||
|
|
||||||
char n1[3]="00";
|
|
||||||
char n2[3]="00";
|
|
||||||
char n3[5]="0000";
|
|
||||||
if(short_year) n3[2]='\0';
|
|
||||||
|
|
||||||
bool zero=false; // was the end of tdate string?
|
|
||||||
|
|
||||||
int c=0;
|
|
||||||
while (!(c==2 || zero))
|
|
||||||
{
|
|
||||||
if(tdate[c]=='\0') zero=true;
|
|
||||||
else n1[c]=tdate[c];
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(zero) goto L1;
|
|
||||||
if(tdate[2]=='\0') goto L1;
|
|
||||||
|
|
||||||
c=0;
|
|
||||||
while (!(c==2 || zero))
|
|
||||||
{
|
|
||||||
if(tdate[c+3]=='\0') zero=true;
|
|
||||||
else n2[c]=tdate[c+3];
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(zero) goto L1;
|
|
||||||
if(tdate[5]=='\0') goto L1;
|
|
||||||
|
|
||||||
k=short_year ? 2 : 4;
|
|
||||||
|
|
||||||
c=0;
|
|
||||||
while (!(c==k || zero))
|
|
||||||
{
|
|
||||||
if(tdate[c+6]=='\0') zero=true;
|
|
||||||
else n3[c]=tdate[c+6];
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
|
|
||||||
L1:
|
|
||||||
if(!((flags & CC_MM_DD_YYYY_FORMAT)==CC_MM_DD_YYYY_FORMAT))
|
|
||||||
{
|
|
||||||
day=atoi(n1);
|
|
||||||
month=atoi(n2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
day=atoi(n2);
|
|
||||||
month=atoi(n1);
|
|
||||||
}
|
|
||||||
|
|
||||||
year=atoi(n3);
|
|
||||||
if(short_year)
|
|
||||||
{
|
|
||||||
if((flags & CC_HALF_CENTURY)==CC_HALF_CENTURY)
|
|
||||||
{
|
|
||||||
if(year<51) year+=50; else year-=50;
|
|
||||||
}
|
|
||||||
else if(year==0) year=100;
|
|
||||||
|
|
||||||
year+=(first_year-1);
|
|
||||||
}
|
|
||||||
SetDate(day,month,year);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
bool DateTextView::VerifyDate(int *day, int *month, int *year)
|
|
||||||
{
|
|
||||||
// Function verifies date to be correct and changes it if it's needed
|
|
||||||
// Returns true if date was correct (and wasn't changed)
|
|
||||||
|
|
||||||
struct tm *dat;
|
|
||||||
time_t tmp;
|
|
||||||
time(&tmp);
|
|
||||||
dat=localtime(&tmp);
|
|
||||||
|
|
||||||
bool flag=true; // date is correct
|
|
||||||
|
|
||||||
if((flags & CC_SHORT_YEAR)==CC_SHORT_YEAR)
|
|
||||||
{
|
|
||||||
if(*year<first_year || *year>last_year)
|
|
||||||
{
|
|
||||||
int year1=*year%100;
|
|
||||||
if((flags & CC_HALF_CENTURY)==CC_HALF_CENTURY)
|
|
||||||
{
|
|
||||||
if(year1<51) year1+=50; else year1-=50;
|
|
||||||
}
|
|
||||||
else if(year1==0) year1=100;
|
|
||||||
|
|
||||||
*year=year1+first_year-1;
|
|
||||||
flag=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // FULL_YEAR
|
|
||||||
{
|
|
||||||
if(*year<1 || *year>9999)
|
|
||||||
{
|
|
||||||
*year=dat->tm_year+1900;
|
|
||||||
flag=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(*month<1 || *month>12)
|
|
||||||
{
|
|
||||||
*month=dat->tm_mon+1;
|
|
||||||
flag=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(*day<1 || *day>31)
|
|
||||||
{
|
|
||||||
*day=dat->tm_mday;
|
|
||||||
flag=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((*month==4 || *month==6 || *month==9 || *month==11) && *day>30)
|
|
||||||
{
|
|
||||||
if((*day=dat->tm_mday)>30) *day=30;
|
|
||||||
flag=false;
|
|
||||||
}
|
|
||||||
else if (*month==2)
|
|
||||||
{
|
|
||||||
int tmpday;
|
|
||||||
|
|
||||||
if((*year)%4==0) // leap year?
|
|
||||||
{
|
|
||||||
if((*year)%100==0 && (*year)%400!=0) tmpday=28; // no
|
|
||||||
else tmpday=29; // yes
|
|
||||||
}
|
|
||||||
else tmpday=28;
|
|
||||||
|
|
||||||
if(*day>tmpday)
|
|
||||||
{
|
|
||||||
if((*day=dat->tm_mday)>tmpday) *day=tmpday;
|
|
||||||
flag=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
|
||||||
void DateTextView::GetYearRange(int *first_year, int *last_year)
|
|
||||||
{
|
|
||||||
*first_year=this->first_year;
|
|
||||||
*last_year=this->last_year;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////
|
|
||||||
uint32 DateTextView::GetDivider()
|
|
||||||
{
|
|
||||||
return divider;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////
|
|
||||||
void DateTextView::SetDivider(uint32 dvder)
|
|
||||||
{
|
|
||||||
if(dvder<0 || dvder>LAST_DIVIDER) dvder=0;
|
|
||||||
|
|
||||||
BString s(Text());
|
|
||||||
SetText((s.ReplaceAll(div[divider],div[dvder])).String());
|
|
||||||
this->divider=dvder;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////
|
|
||||||
uint32 DateTextView::GetDateFlags()
|
|
||||||
{
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////
|
|
||||||
void DateTextView::SetDateFlags(uint32 fmt)
|
|
||||||
{
|
|
||||||
int mday, mmonth, myear;
|
|
||||||
GetDate(&mday, &mmonth, &myear);
|
|
||||||
|
|
||||||
// Blocking changing of parameters of year
|
|
||||||
// (full/short year, full/half century)
|
|
||||||
fmt=fmt & 0xFFE7;
|
|
||||||
|
|
||||||
if(fmt<0 || fmt>LAST_FORMAT) fmt=0;
|
|
||||||
|
|
||||||
flags=fmt | (flags & 0xFFFE); // LAST_FORMAT==1, 1 bit
|
|
||||||
|
|
||||||
SetDate(mday, mmonth, myear);
|
|
||||||
}
|
|
||||||
-181
@@ -1,181 +0,0 @@
|
|||||||
##
|
|
||||||
## yab Haiku Makefile
|
|
||||||
##
|
|
||||||
## (c) Jan Bungeroth 2009 - 2012
|
|
||||||
## Artistic License.
|
|
||||||
##
|
|
||||||
## Use
|
|
||||||
## make
|
|
||||||
## to compile yab for Haiku.
|
|
||||||
##
|
|
||||||
## Needs a valid installation of at least: gcc, flex, bison, perl, ncurses
|
|
||||||
##
|
|
||||||
|
|
||||||
##
|
|
||||||
## Haiku stuff
|
|
||||||
##
|
|
||||||
HAIKUOPT = -DHAIKU -DLIBRARY_PATH=\"`finddir B_USER_SETTINGS_DIRECTORY`/yab\"
|
|
||||||
#
|
|
||||||
|
|
||||||
##
|
|
||||||
## Find haiku systenm archetecture from the package file name
|
|
||||||
##
|
|
||||||
SYSTEMARCH:= $(shell catattr SYS:PACKAGE_FILE /boot/system/kernel_x86*|cut --fields=4 -d-|cut -d. --fields 1)
|
|
||||||
#
|
|
||||||
|
|
||||||
##
|
|
||||||
## Find used archetecture using the getarch command
|
|
||||||
##
|
|
||||||
USEDARCH := $(shell getarch)
|
|
||||||
ifeq ($(SYSTEMARCH),$(USEDARCH))
|
|
||||||
ARCHADD:=
|
|
||||||
else
|
|
||||||
ARCHADD := /$(USEDARCH)
|
|
||||||
endif
|
|
||||||
#
|
|
||||||
|
|
||||||
##
|
|
||||||
## Use our own column list view
|
|
||||||
##
|
|
||||||
COLUMN = column/ColumnListView.o
|
|
||||||
|
|
||||||
##
|
|
||||||
## enable debug
|
|
||||||
##
|
|
||||||
# DBG = -g
|
|
||||||
#
|
|
||||||
|
|
||||||
##
|
|
||||||
## enable optimization
|
|
||||||
##
|
|
||||||
OPT = -O
|
|
||||||
#
|
|
||||||
##
|
|
||||||
## set libtrary name
|
|
||||||
##
|
|
||||||
YABLIBRARY := libyab1.so
|
|
||||||
##
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## GCC Options
|
|
||||||
##
|
|
||||||
GCC = gcc
|
|
||||||
GCC_OPT = $(DBG) $(OPT) -I. -I/boot/home/config/include/ -I/boot/home/config/include/ncurses/ -DHAVE_CONFIG -DUNIX $(HAIKUOPT)
|
|
||||||
GPP = g++
|
|
||||||
GPP_OPT = $(DBG) $(OPT) -I. -DHAVE_CONFIG -DUNIX $(HAIKUOPT)
|
|
||||||
##
|
|
||||||
## find out if we need to change the library to libyab_x86.so and use gcc instead of ld
|
|
||||||
ifeq ($(USEDARCH), x86)
|
|
||||||
LD = gcc
|
|
||||||
YABLIBRARY:=libyab1_x86.so
|
|
||||||
else
|
|
||||||
LD = ld
|
|
||||||
endif
|
|
||||||
ifeq ($(SYSTEMARCH),x86_64)
|
|
||||||
LD=gcc
|
|
||||||
endif
|
|
||||||
#
|
|
||||||
|
|
||||||
LD_OPT = -shared
|
|
||||||
|
|
||||||
##
|
|
||||||
## Libraries
|
|
||||||
##
|
|
||||||
##LIBPATH = -L/boot/home/config/lib
|
|
||||||
LIBPATHS = $(shell findpaths -a `getarch` B_FIND_PATH_LIB_DIRECTORY;findpaths -a `getarch` B_FIND_PATH_DEVELOP_LIB_DIRECTORY) .
|
|
||||||
LIBPATH=$(addprefix -L,$(LIBPATHS))
|
|
||||||
##LIBPATH = -L`finddir B_SYSTEM_LIB_DIRECTORY` ##/boot/system/lib
|
|
||||||
LIB = -lbe -lroot -ltranslation -ltracker -lmedia -llocalestub -lgame
|
|
||||||
|
|
||||||
## flags for flex (-d for debugging)
|
|
||||||
FLEXFLAGS = -i -I -L -s
|
|
||||||
|
|
||||||
## flags for bison (-t -v for debugging)
|
|
||||||
BISONFLAGS = -d -l -t -v
|
|
||||||
|
|
||||||
YAB_OBJECTS = YabInterface.o YabWindow.o YabView.o YabBitmapView.o YabText.o YabFilePanel.o YabFilePanelLooper.o YabList.o \
|
|
||||||
function.o io.o graphic.o symbol.o bison.o \
|
|
||||||
$(COLUMN) column/YabColumnType.o column/ColorTools.o \
|
|
||||||
YabStackView.o SplitPane.o URLView.o YabTabView.o Spinner.o $(TABLIB) CalendarControl.o
|
|
||||||
|
|
||||||
##
|
|
||||||
## Compile and link
|
|
||||||
##
|
|
||||||
yab: $(YABLIBRARY) YabMain.o main.o bison.o flex.o RdefApply YAB.rdef
|
|
||||||
$(GPP) $(GPP_OPT) -o $@ YabMain.o main.o bison.o flex.o $(LIBPATH) $(YABLIBRARY) $(LIB)
|
|
||||||
LIBRARY_PATH=$$LIBRARY_PATH:. $@ RdefApply YAB.rdef $@
|
|
||||||
addattr -t mime BEOS:TYPE application/x-vnd.be-elfexecutable $@
|
|
||||||
|
|
||||||
$(YABLIBRARY): $(YAB_OBJECTS)
|
|
||||||
$(LD) $(LD_OPT) -o $@ $+ $(LIBPATH) $(LIB)
|
|
||||||
|
|
||||||
YabMain.o: YabMain.cpp
|
|
||||||
$(GPP) $(GPP_OPT) -c YabMain.cpp -o YabMain.o
|
|
||||||
YabInterface.o: YabInterface.cpp YabInterface.h YabMenu.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabInterface.cpp -o YabInterface.o
|
|
||||||
YabWindow.o: YabWindow.cpp YabWindow.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabWindow.cpp -o YabWindow.o
|
|
||||||
YabView.o: YabView.cpp YabView.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabView.cpp -o YabView.o
|
|
||||||
YabBitmapView.o: YabBitmapView.cpp YabBitmapView.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabBitmapView.cpp -o YabBitmapView.o
|
|
||||||
YabFilePanel.o: YabFilePanel.cpp YabFilePanel.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabFilePanel.cpp -o YabFilePanel.o
|
|
||||||
YabFilePanelLooper.o: YabFilePanelLooper.cpp YabFilePanelLooper.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabFilePanelLooper.cpp -o YabFilePanelLooper.o
|
|
||||||
YabList.o: YabList.cpp YabList.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabList.cpp -o YabList.o
|
|
||||||
YabText.o: YabText.cpp YabText.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabText.cpp -o YabText.o
|
|
||||||
bison.o: bison.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c bison.c -o bison.o
|
|
||||||
flex.o: flex.c bison.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c flex.c -o flex.o
|
|
||||||
function.o: function.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c function.c -o function.o
|
|
||||||
io.o: io.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c io.c -o io.o
|
|
||||||
graphic.o: graphic.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c graphic.c -o graphic.o
|
|
||||||
symbol.o: symbol.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c symbol.c -o symbol.o
|
|
||||||
main.o: main.c yabasic.h config.h
|
|
||||||
$(GCC) $(GCC_OPT) -c main.c -o main.o
|
|
||||||
flex.c: yabasic.flex
|
|
||||||
flex $(FLEXFLAGS) -t yabasic.flex >flex.c
|
|
||||||
bison.c: yabasic.bison
|
|
||||||
bison $(BISONFLAGS) --output-file bison.c yabasic.bison
|
|
||||||
YabStackView.o: YabStackView.cpp YabStackView.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabStackView.cpp -o YabStackView.o
|
|
||||||
SplitPane.o: SplitPane.cpp SplitPane.h
|
|
||||||
$(GPP) $(GPP_OPT) -c SplitPane.cpp -o SplitPane.o
|
|
||||||
URLView.o: URLView.cpp URLView.h
|
|
||||||
$(GPP) $(GPP_OPT) -c URLView.cpp -o URLView.o
|
|
||||||
Spinner.o: Spinner.cpp Spinner.h
|
|
||||||
$(GPP) $(GPP_OPT) -c Spinner.cpp -o Spinner.o
|
|
||||||
column/ColumnListView.o: column/ColumnListView.cpp column/ColumnListView.h column/ObjectList.h
|
|
||||||
$(GPP) $(GPP_OPT) -c column/ColumnListView.cpp -o column/ColumnListView.o
|
|
||||||
column/ColorTools.o: column/ColorTools.cpp column/ColorTools.h
|
|
||||||
$(GPP) $(GPP_OPT) -c column/ColorTools.cpp -o column/ColorTools.o
|
|
||||||
column/YabColumnType.o: column/YabColumnType.cpp column/YabColumnType.h
|
|
||||||
$(GPP) $(GPP_OPT) -c column/YabColumnType.cpp -o column/YabColumnType.o
|
|
||||||
YabTabView.o: YabTabView.cpp YabTabView.h
|
|
||||||
$(GPP) $(GPP_OPT) -c YabTabView.cpp -o YabTabView.o
|
|
||||||
CalendarControl.o: CalendarControl.cpp CalendarControl.h DateTextView.cpp MonthWindow.cpp MonthView.cpp MouseSenseStringView.cpp
|
|
||||||
$(GPP) $(GPP_OPT) -c CalendarControl.cpp -o CalendarControl.o
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f core *.o column/*.o flex.* bison.* yab yabasic.output $(YABLIBRARY)
|
|
||||||
|
|
||||||
install: yab $(YABLIBRARY)
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p /boot/system/non-packaged/bin$(ARCHADD)
|
|
||||||
mkdir -p /boot/system/non-packaged/lib$(ARCHADD)
|
|
||||||
mkdir -p /boot/system/non-packaged/develop/lib$(ARCHADD)
|
|
||||||
cp -f yab /boot/system/non-packaged/bin$(ARCHADD)/
|
|
||||||
cp -f $(YABLIBRARY) /boot/system/non-packaged/lib$(ARCHADD)/
|
|
||||||
cp -f $(YABLIBRARY) /boot/system/non-packaged/develop/lib$(ARCHADD)/
|
|
||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2017, Dario Casalinuovo. All rights reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _MEDIA_CLIENT_PLAY
|
|
||||||
#define _MEDIA_CLIENT_PLAY
|
|
||||||
|
|
||||||
int media_play(const char* uri);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,960 +0,0 @@
|
|||||||
// Calendar Control version 2.5
|
|
||||||
// by Al.V. Sarikov.
|
|
||||||
// Kherson, Ukraine, 2006.
|
|
||||||
// E-mail: avix@ukrpost.net.
|
|
||||||
// Home page: http://avix.pp.ru.
|
|
||||||
|
|
||||||
// Control which allows to work with dates:
|
|
||||||
// enter date to text field and choose it from calendar.
|
|
||||||
|
|
||||||
// Distributed under BSD license (see LICENSE file).
|
|
||||||
|
|
||||||
#include <Bitmap.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <ControlLook.h>
|
|
||||||
#include "MouseSenseStringView.cpp"
|
|
||||||
|
|
||||||
|
|
||||||
class MonthView : public BView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MonthView(int day, int month, int year, int first_year, int last_year);
|
|
||||||
~MonthView();
|
|
||||||
virtual void AttachedToWindow(void);
|
|
||||||
virtual void Draw(BRect r);
|
|
||||||
virtual void KeyDown(const char *bytes, int32 numBytes);
|
|
||||||
virtual void MessageReceived(BMessage *msg);
|
|
||||||
virtual void MouseDown(BPoint p);
|
|
||||||
virtual void MouseUp(BPoint p);
|
|
||||||
void MouseMoved(BPoint pt, uint32 transit, const BMessage *msg);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void DrawMonth();
|
|
||||||
|
|
||||||
BMessenger *msng;
|
|
||||||
MouseSenseStringView *yearMStringView[2];
|
|
||||||
MouseSenseStringView *monthMStringView[2];
|
|
||||||
|
|
||||||
MouseSenseStringView *todayStringView;
|
|
||||||
BStringView *monthStringView;
|
|
||||||
BStringView *yearStringView;
|
|
||||||
char *weekdayNames[7];
|
|
||||||
char *monthNames[12];
|
|
||||||
int monthDays[12];
|
|
||||||
|
|
||||||
BBitmap *Bmp;
|
|
||||||
BView *BmpView;
|
|
||||||
|
|
||||||
int cday, cmonth, cyear; // current date in window
|
|
||||||
int cwday1; // day of week of 1st of month in window
|
|
||||||
int cwday; // day of week of current day of month in window
|
|
||||||
|
|
||||||
int first_year, last_year;
|
|
||||||
|
|
||||||
int tday, tmonth, tyear; // today
|
|
||||||
int twday; // is needed to calculate days of week
|
|
||||||
|
|
||||||
float h_cell, w_cell; // height and width of cell for one number of day of nonth
|
|
||||||
|
|
||||||
BRect cursor; // rectangle arounding chosen date
|
|
||||||
|
|
||||||
BRect cursorPressed; // rectangle arounding date where mouse was pressed
|
|
||||||
bool MousePressed; // is mouse pressed on date
|
|
||||||
int dayPressed; // date where mouse is pressed
|
|
||||||
|
|
||||||
bool NewMonth; // if true field must be cleared
|
|
||||||
|
|
||||||
int which_focused; // 0 - if month, 1 - if year,
|
|
||||||
// 2 - if days of month, 3 - if today
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
MonthView::MonthView(int day, int month, int year, int first_year, int last_year)
|
|
||||||
:BView(BRect(0,0,100,100), "MonthViewAViX", B_FOLLOW_LEFT, B_WILL_DRAW)
|
|
||||||
{
|
|
||||||
this->cday=day;
|
|
||||||
this->cmonth=month;
|
|
||||||
this->cyear=year;
|
|
||||||
|
|
||||||
this->first_year=first_year;
|
|
||||||
this->last_year=last_year;
|
|
||||||
|
|
||||||
struct tm *dat;
|
|
||||||
time_t tmp;
|
|
||||||
time(&tmp);
|
|
||||||
dat=localtime(&tmp);
|
|
||||||
|
|
||||||
tday=dat->tm_mday;
|
|
||||||
tmonth=dat->tm_mon+1;
|
|
||||||
tyear=dat->tm_year+1900; // new day coming when window is opened is not handled
|
|
||||||
// because it is very rear case
|
|
||||||
twday=dat->tm_wday;
|
|
||||||
|
|
||||||
weekdayNames[0]=(char*)"Mo";
|
|
||||||
weekdayNames[1]=(char*)"Tu";
|
|
||||||
weekdayNames[2]=(char*)"We";
|
|
||||||
weekdayNames[3]=(char*)"Th";
|
|
||||||
weekdayNames[4]=(char*)"Fr";
|
|
||||||
weekdayNames[5]=(char*)"Sa";
|
|
||||||
weekdayNames[6]=(char*)"Su";
|
|
||||||
|
|
||||||
monthNames[0]=(char*)"January";
|
|
||||||
monthNames[1]=(char*)"February";
|
|
||||||
monthNames[2]=(char*)"March";
|
|
||||||
monthNames[3]=(char*)"April";
|
|
||||||
monthNames[4]=(char*)"May";
|
|
||||||
monthNames[5]=(char*)"June";
|
|
||||||
monthNames[6]=(char*)"July";
|
|
||||||
monthNames[7]=(char*)"August";
|
|
||||||
monthNames[8]=(char*)"September";
|
|
||||||
monthNames[9]=(char*)"October";
|
|
||||||
monthNames[10]=(char*)"November";
|
|
||||||
monthNames[11]=(char*)"December";
|
|
||||||
|
|
||||||
monthDays[0]=31;
|
|
||||||
monthDays[1]=28;
|
|
||||||
monthDays[2]=31;
|
|
||||||
monthDays[3]=30;
|
|
||||||
monthDays[4]=31;
|
|
||||||
monthDays[5]=30;
|
|
||||||
monthDays[6]=31;
|
|
||||||
monthDays[7]=31;
|
|
||||||
monthDays[8]=30;
|
|
||||||
monthDays[9]=31;
|
|
||||||
monthDays[10]=30;
|
|
||||||
monthDays[11]=31;
|
|
||||||
|
|
||||||
NewMonth=false; // first field is cleared and clearing is not needed
|
|
||||||
|
|
||||||
MousePressed=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MonthView::~MonthView()
|
|
||||||
{
|
|
||||||
delete todayStringView;
|
|
||||||
delete monthStringView;
|
|
||||||
delete monthMStringView[0];
|
|
||||||
delete monthMStringView[1];
|
|
||||||
delete yearStringView;
|
|
||||||
delete yearMStringView[0];
|
|
||||||
delete yearMStringView[1];
|
|
||||||
delete msng;
|
|
||||||
Bmp->RemoveChild(BmpView);
|
|
||||||
delete BmpView;
|
|
||||||
delete Bmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthView::AttachedToWindow(void)
|
|
||||||
{
|
|
||||||
SetFont(be_plain_font);
|
|
||||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
// Calculate size of cell needed for number of day of month
|
|
||||||
font_height h;
|
|
||||||
be_plain_font->GetHeight(&h);
|
|
||||||
h_cell = (int)(h.ascent+h.descent+h.leading+6);
|
|
||||||
w_cell = StringWidth("4")*4;
|
|
||||||
|
|
||||||
// add today's date
|
|
||||||
BString s("");
|
|
||||||
s << tday << " " << monthNames[tmonth-1] << " " << tyear;
|
|
||||||
|
|
||||||
msng=new BMessenger(this);
|
|
||||||
todayStringView=new MouseSenseStringView(new BMessage('TODA'), msng,
|
|
||||||
BRect(10,10,100,100),"todayMStringViewAViX", s.String());
|
|
||||||
todayStringView->ResizeToPreferred();
|
|
||||||
todayStringView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
AddChild(todayStringView);
|
|
||||||
|
|
||||||
// add month selection
|
|
||||||
monthStringView=new BStringView(BRect(10,10,100,100),"monthStringViewAViX", monthNames[8]);
|
|
||||||
monthStringView->SetAlignment(B_ALIGN_CENTER);
|
|
||||||
monthStringView->ResizeToPreferred();
|
|
||||||
monthStringView->SetText(monthNames[cmonth-1]);
|
|
||||||
monthStringView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
AddChild(monthStringView);
|
|
||||||
|
|
||||||
// add year selection
|
|
||||||
s.SetTo("");
|
|
||||||
if(cyear<10) s.Append("000");
|
|
||||||
else if(cyear<100) s.Append("00");
|
|
||||||
else if(cyear<1000) s.Append("0");
|
|
||||||
s << cyear;
|
|
||||||
yearStringView=new BStringView(BRect(10,10,100,100),"yearStringViewAViX",
|
|
||||||
"0000");
|
|
||||||
yearStringView->ResizeToPreferred();
|
|
||||||
yearStringView->SetText(s.String());
|
|
||||||
yearStringView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
AddChild(yearStringView);
|
|
||||||
|
|
||||||
ResizeTo(w_cell*7+1,h_cell*7+3+16+yearStringView->Bounds().bottom+todayStringView->Bounds().bottom);
|
|
||||||
Window()->ResizeTo(Bounds().right, Bounds().bottom);
|
|
||||||
|
|
||||||
// year to the left button
|
|
||||||
yearMStringView[0]=new MouseSenseStringView(new BMessage('YEA0'),msng,
|
|
||||||
BRect(10,10,100,100),
|
|
||||||
"yearMStringViewAViX0",
|
|
||||||
"<<");
|
|
||||||
AddChild(yearMStringView[0]);
|
|
||||||
yearMStringView[0]->ResizeToPreferred();
|
|
||||||
yearMStringView[0]->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
// year to the right button
|
|
||||||
yearMStringView[1]=new MouseSenseStringView(new BMessage('YEA1'),msng,
|
|
||||||
BRect(10,10,100,100),
|
|
||||||
"yearMStringViewAViX1",
|
|
||||||
">>");
|
|
||||||
AddChild(yearMStringView[1]);
|
|
||||||
yearMStringView[1]->ResizeToPreferred();
|
|
||||||
yearMStringView[1]->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
// month to the left button
|
|
||||||
monthMStringView[0]=new MouseSenseStringView(new BMessage('MON0'),msng,
|
|
||||||
BRect(10,10,100,100),
|
|
||||||
"monthMStringViewAViX0",
|
|
||||||
"<<");
|
|
||||||
AddChild(monthMStringView[0]);
|
|
||||||
monthMStringView[0]->ResizeToPreferred();
|
|
||||||
monthMStringView[0]->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
// month to the right button
|
|
||||||
monthMStringView[1]=new MouseSenseStringView(new BMessage('MON1'),msng,
|
|
||||||
BRect(10,10,100,100),
|
|
||||||
"monthMStringViewAViX1",
|
|
||||||
">>");
|
|
||||||
AddChild(monthMStringView[1]);
|
|
||||||
monthMStringView[1]->ResizeToPreferred();
|
|
||||||
monthMStringView[1]->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
// move all in correct position
|
|
||||||
todayStringView->MoveTo((Bounds().right-todayStringView->Bounds().right)/2,
|
|
||||||
Bounds().bottom-todayStringView->Bounds().bottom-2);
|
|
||||||
|
|
||||||
if(tyear<first_year || tyear>last_year) todayStringView->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_3_TINT));
|
|
||||||
|
|
||||||
yearMStringView[1]->MoveTo(Bounds().right-yearMStringView[1]->Bounds().right,5);
|
|
||||||
yearStringView->MoveTo(yearMStringView[1]->Frame().left-yearStringView->Bounds().right,5);
|
|
||||||
yearMStringView[0]->MoveTo(yearStringView->Frame().left-yearMStringView[0]->Bounds().right,5);
|
|
||||||
|
|
||||||
monthStringView->MoveTo((yearMStringView[0]->Frame().left-monthStringView->Bounds().right)/2,5);
|
|
||||||
monthMStringView[0]->MoveTo(monthStringView->Frame().left-monthMStringView[0]->Bounds().right,5);
|
|
||||||
monthMStringView[1]->MoveTo(monthStringView->Frame().right,5);
|
|
||||||
|
|
||||||
which_focused=2; // days of month
|
|
||||||
|
|
||||||
// Bitmap for the dates
|
|
||||||
Bmp=new BBitmap(Bounds(),B_RGB32,true);
|
|
||||||
BmpView=new BView(Bmp->Bounds(),"BV",0,B_WILL_DRAW);
|
|
||||||
Bmp->AddChild(BmpView);
|
|
||||||
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
BmpView->FillRect(BmpView->Frame());
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BRect bmpRect(Bounds());
|
|
||||||
bmpRect.top = yearStringView->Frame().bottom + 2;
|
|
||||||
bmpRect.bottom = todayStringView->Frame().top - 5;
|
|
||||||
BmpView->FillRect(bmpRect);
|
|
||||||
|
|
||||||
BmpView->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_1_TINT));
|
|
||||||
BmpView->StrokeLine(BPoint(0,bmpRect.top), BPoint(BmpView->Bounds().right,bmpRect.top));
|
|
||||||
BmpView->StrokeLine(BPoint(0,bmpRect.bottom), BPoint(BmpView->Bounds().right,bmpRect.bottom));
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_TEXT_COLOR));
|
|
||||||
|
|
||||||
float y=yearStringView->Frame().bottom+h_cell;
|
|
||||||
float x=0;
|
|
||||||
for(int i=0;i<7;i++)
|
|
||||||
{
|
|
||||||
BmpView->DrawString(weekdayNames[i],BPoint(x+(w_cell-StringWidth(weekdayNames[i]))/2,y));
|
|
||||||
x+=w_cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
|
|
||||||
DrawMonth();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthView::Draw(BRect r)
|
|
||||||
{
|
|
||||||
Window()->Lock();
|
|
||||||
DrawBitmap(Bmp, BPoint(0,0));
|
|
||||||
Window()->Unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthView::DrawMonth()
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
|
|
||||||
float y=yearStringView->Frame().bottom+h_cell;
|
|
||||||
float x=0;
|
|
||||||
|
|
||||||
if(NewMonth)
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BmpView->FillRect(BRect(0,y+1, BmpView->Bounds().right,todayStringView->Frame().top - 6));
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_TEXT_COLOR));
|
|
||||||
BmpView->SetLowColor(255,255,255);
|
|
||||||
NewMonth=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int byear=cyear; // base year
|
|
||||||
if(tyear<byear) byear=tyear;
|
|
||||||
|
|
||||||
int day1=0, m=0, k=byear;
|
|
||||||
|
|
||||||
while(k<cyear)
|
|
||||||
{
|
|
||||||
day1++;
|
|
||||||
|
|
||||||
if(k%4==0) // leap year?
|
|
||||||
if((k%100!=0) || (k%400==0)) day1++; // yes
|
|
||||||
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
while(++m<cmonth)
|
|
||||||
{
|
|
||||||
day1+=(monthDays[m-1]-28);
|
|
||||||
if(m==2) if((cyear%4)==0) if((cyear%100!=0) || (cyear%400==0)) day1++;
|
|
||||||
}
|
|
||||||
day1++; // day1 is number of 1st day of chosen month in chosen year
|
|
||||||
day1=day1%7;
|
|
||||||
|
|
||||||
int day2=0;
|
|
||||||
m=0;
|
|
||||||
k=byear;
|
|
||||||
while(k<tyear)
|
|
||||||
{
|
|
||||||
day2++;
|
|
||||||
if((k%4)==0) if((k%100!=0) || (k%400==0)) day2++;
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
while(++m<tmonth)
|
|
||||||
{
|
|
||||||
day2+=(monthDays[m-1]-28);
|
|
||||||
if(m==2) if((tyear%4)==0) if((tyear%100!=0) || (tyear%400==0)) day2++;
|
|
||||||
}
|
|
||||||
day2+=tday; // day2 - number of today's day in today's year
|
|
||||||
day2=day2%7;
|
|
||||||
|
|
||||||
k=(twday==0) ? 6 : twday-1;
|
|
||||||
|
|
||||||
k=k-day2+day1;
|
|
||||||
while(k<0) k+=7;
|
|
||||||
k=k%7;
|
|
||||||
cwday1=k;
|
|
||||||
|
|
||||||
x=w_cell*k+1;
|
|
||||||
y+=h_cell;
|
|
||||||
|
|
||||||
int qu_days=monthDays[cmonth-1]; // quantity of days in month
|
|
||||||
|
|
||||||
if(cmonth==2) if(cyear%4==0) if((cyear%100!=0) || (cyear%400==0)) qu_days=29;
|
|
||||||
|
|
||||||
BString s;
|
|
||||||
int t=0;
|
|
||||||
while(t<qu_days)
|
|
||||||
{
|
|
||||||
t++;
|
|
||||||
|
|
||||||
s<<t;
|
|
||||||
|
|
||||||
if(cyear==tyear) if(cmonth==tmonth) if(t==tday) BmpView->SetHighColor(236,0,0,0);
|
|
||||||
BmpView->DrawString(s.String(),BPoint(x+(w_cell-StringWidth(s.String()))/2,y));
|
|
||||||
if(cyear==tyear) if(cmonth==tmonth) if(t==tday) BmpView->SetHighColor(0,0,0,0);
|
|
||||||
|
|
||||||
if(t==cday)
|
|
||||||
{
|
|
||||||
cwday=k;
|
|
||||||
if(which_focused==2) BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
else
|
|
||||||
// BmpView->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_3_TINT));
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
cursor.Set(x,y-h_cell+5,x+w_cell-1,y+4);
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
x+=w_cell;
|
|
||||||
k++;
|
|
||||||
s.SetTo("");
|
|
||||||
|
|
||||||
if(k==7)
|
|
||||||
{
|
|
||||||
k=0;
|
|
||||||
y+=h_cell;
|
|
||||||
x=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
|
||||||
void MonthView::KeyDown(const char *bytes, int32 numBytes)
|
|
||||||
{
|
|
||||||
switch(bytes[0])
|
|
||||||
{
|
|
||||||
case B_TAB:
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
switch(which_focused)
|
|
||||||
{
|
|
||||||
case 0: // months
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
BmpView->StrokeLine(BPoint(monthMStringView[0]->Frame().left,
|
|
||||||
monthMStringView[0]->Frame().bottom+1),
|
|
||||||
BPoint(monthMStringView[1]->Frame().right,
|
|
||||||
monthMStringView[1]->Frame().bottom+1));
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1: // years
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
BmpView->StrokeLine(BPoint(yearMStringView[0]->Frame().left,
|
|
||||||
yearMStringView[0]->Frame().bottom+1),
|
|
||||||
BPoint(yearMStringView[1]->Frame().right,
|
|
||||||
yearMStringView[1]->Frame().bottom+1));
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2: // days of month
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_3_TINT));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3: // today
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
BmpView->StrokeLine(BPoint(todayStringView->Frame().left,
|
|
||||||
todayStringView->Frame().bottom+1),
|
|
||||||
BPoint(todayStringView->Frame().right,
|
|
||||||
todayStringView->Frame().bottom+1));
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// changing which_focused
|
|
||||||
if(modifiers() & B_SHIFT_KEY)
|
|
||||||
{
|
|
||||||
if(which_focused==0)
|
|
||||||
which_focused=3;
|
|
||||||
else which_focused--;
|
|
||||||
}
|
|
||||||
else // simply Tab
|
|
||||||
{
|
|
||||||
if(which_focused==3)
|
|
||||||
which_focused=0;
|
|
||||||
else which_focused++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// drawing with new which_focused
|
|
||||||
switch(which_focused)
|
|
||||||
{
|
|
||||||
case 0: // months
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeLine(BPoint(monthMStringView[0]->Frame().left,
|
|
||||||
monthMStringView[0]->Frame().bottom+1),
|
|
||||||
BPoint(monthMStringView[1]->Frame().right,
|
|
||||||
monthMStringView[1]->Frame().bottom+1));
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1: // years
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeLine(BPoint(yearMStringView[0]->Frame().left,
|
|
||||||
yearMStringView[0]->Frame().bottom+1),
|
|
||||||
BPoint(yearMStringView[1]->Frame().right,
|
|
||||||
yearMStringView[1]->Frame().bottom+1));
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2: // days of month
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3: // today
|
|
||||||
{
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeLine(BPoint(todayStringView->Frame().left,
|
|
||||||
todayStringView->Frame().bottom+1),
|
|
||||||
BPoint(todayStringView->Frame().right,
|
|
||||||
todayStringView->Frame().bottom+1));
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
Draw(Bounds());
|
|
||||||
break;
|
|
||||||
} // B_TAB
|
|
||||||
|
|
||||||
case B_DOWN_ARROW:
|
|
||||||
{
|
|
||||||
if(which_focused==0) // month
|
|
||||||
{
|
|
||||||
BMessage msg('MON0');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==1) // year
|
|
||||||
{
|
|
||||||
BMessage msg('YEA0');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==2) // days of month
|
|
||||||
{
|
|
||||||
int qu_days=monthDays[cmonth-1];
|
|
||||||
if(cmonth==2) if(cyear%4==0) if((cyear%100!=0) || (cyear%400==0)) qu_days=29;
|
|
||||||
if((cday+7)<=qu_days)
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
cursor.OffsetBySelf(0, h_cell);
|
|
||||||
cday+=7;
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case B_UP_ARROW:
|
|
||||||
{
|
|
||||||
// Test whether Ctrl+UpArrow is pressed
|
|
||||||
if(modifiers() & B_CONTROL_KEY)
|
|
||||||
Window()->PostMessage(B_QUIT_REQUESTED);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(which_focused==0) // month
|
|
||||||
{
|
|
||||||
BMessage msg('MON1');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==1) // year
|
|
||||||
{
|
|
||||||
BMessage msg('YEA1');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==2) // days of month
|
|
||||||
{
|
|
||||||
if((cday-7)>=1)
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
cursor.OffsetBySelf(0, -h_cell);
|
|
||||||
cday-=7;
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case B_LEFT_ARROW:
|
|
||||||
{
|
|
||||||
if(which_focused==0) // month
|
|
||||||
{
|
|
||||||
BMessage msg('MON0');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==1) // year
|
|
||||||
{
|
|
||||||
BMessage msg('YEA0');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==2) // days of month
|
|
||||||
{
|
|
||||||
if(cday>1)
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
if(cwday>0) // by dates no matter of day of week
|
|
||||||
{
|
|
||||||
cursor.OffsetBySelf(-w_cell,0);
|
|
||||||
cwday--;
|
|
||||||
}
|
|
||||||
else // cwday==0
|
|
||||||
{
|
|
||||||
cursor.OffsetBySelf(w_cell*6,-h_cell);
|
|
||||||
cwday=6;
|
|
||||||
}
|
|
||||||
cday--;
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
else // 1st of month, go month before
|
|
||||||
{
|
|
||||||
if(cyear>first_year || cmonth>1) // one can go
|
|
||||||
{
|
|
||||||
int cm=(cmonth==1) ? 12 : cmonth-1;
|
|
||||||
int qu_days=monthDays[cm-1];
|
|
||||||
if(cm==2) if(cyear%4==0)
|
|
||||||
if((cyear%100!=0) || (cyear%400==0)) qu_days=29;
|
|
||||||
// it is correct not to pay attention to year changing
|
|
||||||
// because if we moved to february then year was not changed
|
|
||||||
// but if month is other then february
|
|
||||||
// then it has the same number of days every year.
|
|
||||||
cday=qu_days;
|
|
||||||
|
|
||||||
BMessage msg('MON0');
|
|
||||||
MessageReceived(&msg); // here month, cwday and year (if needed) will be changed
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case B_RIGHT_ARROW:
|
|
||||||
{
|
|
||||||
if(which_focused==0) // month
|
|
||||||
{
|
|
||||||
BMessage msg('MON1');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==1) // year
|
|
||||||
{
|
|
||||||
BMessage msg('YEA1');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==2) // days of month
|
|
||||||
{
|
|
||||||
int qu_days=monthDays[cmonth-1];
|
|
||||||
if(cmonth==2) if(cyear%4==0) if((cyear%100!=0) || (cyear%400==0)) qu_days=29;
|
|
||||||
if(cday<qu_days)
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
if(cwday<6) // by dates no matter of day of week
|
|
||||||
{
|
|
||||||
cursor.OffsetBySelf(w_cell,0);
|
|
||||||
cwday++;
|
|
||||||
}
|
|
||||||
else // cwday==6
|
|
||||||
{
|
|
||||||
cursor.OffsetBySelf(-w_cell*6,h_cell);
|
|
||||||
cwday=0;
|
|
||||||
}
|
|
||||||
cday++;
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(0,0,0);
|
|
||||||
BmpView->Sync();
|
|
||||||
Bmp->Unlock();
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
else // last of month, go next month
|
|
||||||
{
|
|
||||||
if(cyear<last_year || cmonth<12) // one can go
|
|
||||||
{
|
|
||||||
cday=1;
|
|
||||||
BMessage msg('MON1');
|
|
||||||
MessageReceived(&msg); // here month, cwday and year (if needed) will be changed
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case B_ESCAPE:
|
|
||||||
{
|
|
||||||
Window()->PostMessage(B_QUIT_REQUESTED);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case B_ENTER:
|
|
||||||
case B_SPACE:
|
|
||||||
{
|
|
||||||
if(which_focused==2)
|
|
||||||
{
|
|
||||||
// here it is needed to send dayPressed (==cwday), cyear, cmonth
|
|
||||||
// to window and leave
|
|
||||||
BMessage *msg=new BMessage('MVME');
|
|
||||||
msg->AddInt32("day",cday);
|
|
||||||
msg->AddInt32("month",cmonth);
|
|
||||||
msg->AddInt32("year",cyear);
|
|
||||||
Window()->PostMessage(msg);
|
|
||||||
}
|
|
||||||
else if(which_focused==3)
|
|
||||||
{
|
|
||||||
BMessage msg('TODA');
|
|
||||||
MessageReceived(&msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
BView::KeyDown(bytes, numBytes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
|
||||||
void MonthView::MessageReceived(BMessage *msg)
|
|
||||||
{
|
|
||||||
switch(msg->what)
|
|
||||||
{
|
|
||||||
case 'YEA0': // year before
|
|
||||||
{
|
|
||||||
if(cyear<=first_year) break;
|
|
||||||
cyear--;
|
|
||||||
NewMonth=true;
|
|
||||||
BString s("");
|
|
||||||
if(cyear<10) s.Append("000");
|
|
||||||
else if(cyear<100) s.Append("00");
|
|
||||||
else if(cyear<1000) s.Append("0");
|
|
||||||
s<<cyear;
|
|
||||||
yearStringView->SetText(s.String());
|
|
||||||
|
|
||||||
if(cmonth==2) if(cday==29) // one can do simplier: if cday==29, then make
|
|
||||||
// cday=28, because two leap years one after other can't be
|
|
||||||
{
|
|
||||||
if(cyear%4!=0) cday=28;
|
|
||||||
else if(cyear%100==0 && cyear%400!=0) cday=28;
|
|
||||||
}
|
|
||||||
|
|
||||||
DrawMonth();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'YEA1': // year after
|
|
||||||
{
|
|
||||||
if(cyear>=last_year) break;
|
|
||||||
cyear++;
|
|
||||||
NewMonth=true;
|
|
||||||
BString s("");
|
|
||||||
if(cyear<10) s.Append("000");
|
|
||||||
else if(cyear<100) s.Append("00");
|
|
||||||
else if(cyear<1000) s.Append("0");
|
|
||||||
s<<cyear;
|
|
||||||
yearStringView->SetText(s.String());
|
|
||||||
|
|
||||||
if(cmonth==2) if(cday==29)
|
|
||||||
{
|
|
||||||
if(cyear%4!=0) cday=28;
|
|
||||||
else if(cyear%100==0 && cyear%400!=0) cday=28;
|
|
||||||
}
|
|
||||||
|
|
||||||
DrawMonth();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'MON0': // month before
|
|
||||||
{
|
|
||||||
if(cmonth>1) cmonth--;
|
|
||||||
else if(cyear>first_year)
|
|
||||||
{
|
|
||||||
cmonth=12;
|
|
||||||
cyear--;
|
|
||||||
|
|
||||||
BString s("");
|
|
||||||
if(cyear<10) s.Append("000");
|
|
||||||
else if(cyear<100) s.Append("00");
|
|
||||||
else if(cyear<1000) s.Append("0");
|
|
||||||
s<<cyear;
|
|
||||||
yearStringView->SetText(s.String());
|
|
||||||
}
|
|
||||||
else break; // nothing is changed
|
|
||||||
|
|
||||||
NewMonth=true;
|
|
||||||
monthStringView->SetText(monthNames[cmonth-1]);
|
|
||||||
|
|
||||||
if(cmonth==2)
|
|
||||||
{
|
|
||||||
int tmpday=28;
|
|
||||||
if(cyear%4==0) if((cyear%100!=0) || (cyear%400==0)) tmpday=29;
|
|
||||||
if(cday>tmpday) cday=tmpday;
|
|
||||||
}
|
|
||||||
else if(cday>monthDays[cmonth-1]) cday=monthDays[cmonth-1];
|
|
||||||
|
|
||||||
DrawMonth();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'MON1': // month after
|
|
||||||
{
|
|
||||||
if(cmonth<12) cmonth++;
|
|
||||||
else if(cyear<last_year)
|
|
||||||
{
|
|
||||||
cmonth=1;
|
|
||||||
cyear++;
|
|
||||||
|
|
||||||
BString s("");
|
|
||||||
if(cyear<10) s.Append("000");
|
|
||||||
else if(cyear<100) s.Append("00");
|
|
||||||
else if(cyear<1000) s.Append("0");
|
|
||||||
s<<cyear;
|
|
||||||
yearStringView->SetText(s.String());
|
|
||||||
}
|
|
||||||
else break; // nothing is changed
|
|
||||||
|
|
||||||
NewMonth=true;
|
|
||||||
monthStringView->SetText(monthNames[cmonth-1]);
|
|
||||||
|
|
||||||
if(cmonth==2)
|
|
||||||
{
|
|
||||||
int tmpday=28;
|
|
||||||
if(cyear%4==0) if((cyear%100!=0) || (cyear%400==0)) tmpday=29;
|
|
||||||
if(cday>tmpday) cday=tmpday;
|
|
||||||
}
|
|
||||||
else if(cday>monthDays[cmonth-1]) cday=monthDays[cmonth-1];
|
|
||||||
|
|
||||||
DrawMonth();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'TODA': // to place to today's date
|
|
||||||
{
|
|
||||||
if(tyear<first_year || tyear>last_year) break;
|
|
||||||
|
|
||||||
NewMonth=true;
|
|
||||||
|
|
||||||
cyear=tyear;
|
|
||||||
cmonth=tmonth;
|
|
||||||
cday=tday;
|
|
||||||
|
|
||||||
BString s("");
|
|
||||||
if(cyear<10) s.Append("000");
|
|
||||||
else if(cyear<100) s.Append("00");
|
|
||||||
else if(cyear<1000) s.Append("0");
|
|
||||||
s<<cyear;
|
|
||||||
yearStringView->SetText(s.String());
|
|
||||||
monthStringView->SetText(monthNames[cmonth-1]);
|
|
||||||
|
|
||||||
DrawMonth();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
BView::MessageReceived(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////
|
|
||||||
void MonthView::MouseDown(BPoint p)
|
|
||||||
{
|
|
||||||
// It's necessary to define whether mouse cursor is on one of dates
|
|
||||||
BRect r;
|
|
||||||
|
|
||||||
int k=cwday1;
|
|
||||||
float x=w_cell*k+1;
|
|
||||||
float y=yearStringView->Frame().bottom+h_cell+h_cell;
|
|
||||||
|
|
||||||
int qu_days=monthDays[cmonth-1]; // quantity of days in month
|
|
||||||
|
|
||||||
if(cmonth==2) if(cyear%4==0) if((cyear%100!=0) || (cyear%400==0)) qu_days=29;
|
|
||||||
|
|
||||||
bool flag=false; // whether mouse is pressed just on date
|
|
||||||
int t=0;
|
|
||||||
while(t<qu_days)
|
|
||||||
{
|
|
||||||
t++;
|
|
||||||
r.Set(x,y-h_cell+5,x+w_cell-1,y+4);
|
|
||||||
|
|
||||||
if(r.Contains(p))
|
|
||||||
{
|
|
||||||
flag=true;
|
|
||||||
dayPressed=t;
|
|
||||||
cursorPressed.Set(r.left,r.top,r.right,r.bottom);
|
|
||||||
MousePressed=true;
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursorPressed);
|
|
||||||
Bmp->Unlock();
|
|
||||||
Invalidate();
|
|
||||||
break; // exit while
|
|
||||||
}
|
|
||||||
|
|
||||||
x+=w_cell;
|
|
||||||
k++;
|
|
||||||
|
|
||||||
if(k==7)
|
|
||||||
{
|
|
||||||
k=0;
|
|
||||||
y+=h_cell;
|
|
||||||
x=1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthView::MouseUp(BPoint p)
|
|
||||||
{
|
|
||||||
if(!MousePressed) return;
|
|
||||||
|
|
||||||
if(cursorPressed.Contains(p))
|
|
||||||
{
|
|
||||||
// here it is needed to send dayPressed, cyear, cmonth
|
|
||||||
// to window and leave
|
|
||||||
BMessage *msg=new BMessage('MVME');
|
|
||||||
msg->AddInt32("day",dayPressed);
|
|
||||||
msg->AddInt32("month",cmonth);
|
|
||||||
msg->AddInt32("year",cyear);
|
|
||||||
Window()->PostMessage(msg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Bmp->Lock();
|
|
||||||
BmpView->SetHighColor(255,255,255);
|
|
||||||
BmpView->StrokeRect(cursorPressed);
|
|
||||||
BmpView->SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
|
|
||||||
BmpView->StrokeRect(cursor);
|
|
||||||
Bmp->Unlock();
|
|
||||||
Invalidate();
|
|
||||||
MousePressed=false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthView::MouseMoved(BPoint pt, uint32 transit, const BMessage *msg)
|
|
||||||
{
|
|
||||||
BPoint point;
|
|
||||||
uint32 buttons;
|
|
||||||
GetMouse(&point,&buttons);
|
|
||||||
|
|
||||||
if(transit==B_ENTERED_VIEW)
|
|
||||||
{
|
|
||||||
if( (buttons & B_PRIMARY_MOUSE_BUTTON)==0 &&
|
|
||||||
(buttons & B_SECONDARY_MOUSE_BUTTON)==0 &&
|
|
||||||
(buttons & B_PRIMARY_MOUSE_BUTTON)==0 )
|
|
||||||
MousePressed = false;
|
|
||||||
else
|
|
||||||
MousePressed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(transit==B_EXITED_VIEW || transit==B_OUTSIDE_VIEW)
|
|
||||||
MouseUp(Bounds().LeftTop());
|
|
||||||
}
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
// Calendar Control version 2.5
|
|
||||||
// by Al.V. Sarikov.
|
|
||||||
// Kherson, Ukraine, 2006.
|
|
||||||
// E-mail: avix@ukrpost.net.
|
|
||||||
// Home page: http://avix.pp.ru.
|
|
||||||
|
|
||||||
// Control which allows to work with dates:
|
|
||||||
// enter date to text field and choose it from calendar.
|
|
||||||
|
|
||||||
// Distributed under BSD license (see LICENSE file).
|
|
||||||
|
|
||||||
#include <Point.h>
|
|
||||||
#include <Screen.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <StringView.h>
|
|
||||||
#include <Window.h>
|
|
||||||
|
|
||||||
#include "MonthView.cpp"
|
|
||||||
|
|
||||||
class MonthWindow: public BWindow
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MonthWindow(BPoint LT, BMessenger *msng, int day, int month, int year,
|
|
||||||
int first_year, int last_year);
|
|
||||||
virtual void MessageReceived(BMessage *msg);
|
|
||||||
virtual bool QuitRequested(void);
|
|
||||||
virtual void WindowActivated(bool active);
|
|
||||||
private:
|
|
||||||
MonthView *myMonthView;
|
|
||||||
BMessenger *messenger;
|
|
||||||
|
|
||||||
int first_year;
|
|
||||||
int last_year;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
MonthWindow::MonthWindow(BPoint LT, BMessenger *msng, int day, int month, int year, int first_year, int last_year)
|
|
||||||
:BWindow(BRect(LT,BPoint(LT.x+200,LT.y+200)),"MonthWindowAViX",
|
|
||||||
B_BORDERED_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_MOVABLE|B_AVOID_FOCUS)
|
|
||||||
{
|
|
||||||
this->first_year=first_year;
|
|
||||||
this->last_year=last_year;
|
|
||||||
|
|
||||||
myMonthView = new MonthView(day, month, year, first_year, last_year);
|
|
||||||
|
|
||||||
AddChild(myMonthView);
|
|
||||||
myMonthView->MakeFocus(true);
|
|
||||||
|
|
||||||
messenger = msng;
|
|
||||||
|
|
||||||
BRect screenFrame = BScreen(this).Frame();
|
|
||||||
if(LT.x < 0)
|
|
||||||
LT.x = 0;
|
|
||||||
if(LT.x > screenFrame.right - Bounds().Width())
|
|
||||||
LT.x = screenFrame.right - Bounds().Width();
|
|
||||||
if(LT.y > screenFrame.bottom - Bounds().Height())
|
|
||||||
LT.y = screenFrame.bottom - Bounds().Height();
|
|
||||||
MoveTo(LT);
|
|
||||||
|
|
||||||
Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthWindow::MessageReceived(BMessage *msg)
|
|
||||||
{
|
|
||||||
if(msg->what=='MVME')
|
|
||||||
{
|
|
||||||
// Is date correct?
|
|
||||||
int32 day, month, year;
|
|
||||||
if(msg->FindInt32("day",&day)!=B_OK) return;
|
|
||||||
if(msg->FindInt32("month",&month)!=B_OK) return;
|
|
||||||
if(msg->FindInt32("year",&year)!=B_OK) return;
|
|
||||||
|
|
||||||
if(year<first_year || year>last_year) return;
|
|
||||||
if(month<1 || month>12) return;
|
|
||||||
int32 tmp;
|
|
||||||
|
|
||||||
tmp=31;
|
|
||||||
if(month==4 || month==6 || month==9 || month==11)
|
|
||||||
tmp=30;
|
|
||||||
else if(month==2)
|
|
||||||
{
|
|
||||||
if(year%4==0)
|
|
||||||
{
|
|
||||||
if(year%100==0 && year%400!=0)
|
|
||||||
tmp=28;
|
|
||||||
else
|
|
||||||
tmp=29;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tmp=28;
|
|
||||||
}
|
|
||||||
if(day<1 || day>tmp) return;
|
|
||||||
messenger->SendMessage(msg);
|
|
||||||
Quit();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BWindow::MessageReceived(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool MonthWindow::QuitRequested(void)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MonthWindow::WindowActivated(bool active)
|
|
||||||
{
|
|
||||||
// exit if unfocused
|
|
||||||
if(!active) Quit();
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
// Calendar Control version 2.5
|
|
||||||
// by Al.V. Sarikov.
|
|
||||||
// Kherson, Ukraine, 2006.
|
|
||||||
// E-mail: avix@ukrpost.net.
|
|
||||||
// Home page: http://avix.pp.ru.
|
|
||||||
|
|
||||||
// Control which allows to work with dates:
|
|
||||||
// enter date to text field and choose it from calendar.
|
|
||||||
|
|
||||||
// Distributed under BSD license (see LICENSE file).
|
|
||||||
|
|
||||||
#include <ControlLook.h>
|
|
||||||
#include <Message.h>
|
|
||||||
#include <Messenger.h>
|
|
||||||
#include <Point.h>
|
|
||||||
#include <Rect.h>
|
|
||||||
#include <StringView.h>
|
|
||||||
|
|
||||||
class MouseSenseStringView:public BStringView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MouseSenseStringView(BMessage *msg,
|
|
||||||
BMessenger *msng,
|
|
||||||
BRect frame,
|
|
||||||
const char *name,
|
|
||||||
const char *text,
|
|
||||||
uint32 resizingMode=B_FOLLOW_LEFT|B_FOLLOW_TOP,
|
|
||||||
uint32 flags=B_WILL_DRAW);
|
|
||||||
virtual void MouseDown(BPoint p);
|
|
||||||
virtual void MouseUp(BPoint p);
|
|
||||||
void Draw(BRect(update));
|
|
||||||
|
|
||||||
private:
|
|
||||||
BMessage *msg;
|
|
||||||
BMessenger *msng;
|
|
||||||
bool isMouseDown;
|
|
||||||
};
|
|
||||||
|
|
||||||
MouseSenseStringView::MouseSenseStringView(BMessage *msg,
|
|
||||||
BMessenger *msng,
|
|
||||||
BRect frame,
|
|
||||||
const char *name,
|
|
||||||
const char *text,
|
|
||||||
uint32 resizingMode,
|
|
||||||
uint32 flags)
|
|
||||||
:BStringView(frame,name,text,resizingMode,flags)
|
|
||||||
{
|
|
||||||
this->msg=msg;
|
|
||||||
this->msng=msng;
|
|
||||||
isMouseDown = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MouseSenseStringView::MouseDown(BPoint p)
|
|
||||||
{
|
|
||||||
isMouseDown = true;
|
|
||||||
// if(msg!=NULL) if(msng!=NULL)
|
|
||||||
// msng->SendMessage(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MouseSenseStringView::MouseUp(BPoint p)
|
|
||||||
{
|
|
||||||
BPoint mouse;
|
|
||||||
uint32 buttons;
|
|
||||||
GetMouse(&mouse, &buttons);
|
|
||||||
if(Bounds().Contains(mouse))
|
|
||||||
if(msg!=NULL) if(msng!=NULL)
|
|
||||||
msng->SendMessage(msg);
|
|
||||||
isMouseDown = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MouseSenseStringView::Draw(BRect update)
|
|
||||||
{
|
|
||||||
BString t(Text());
|
|
||||||
BRect r1(Bounds());
|
|
||||||
r1.right = r1.right/2;
|
|
||||||
BRect r2(Bounds());
|
|
||||||
r2.left= r2.right/4;
|
|
||||||
r2.right= r2.right*3/4;
|
|
||||||
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
uint32 flags = 0;
|
|
||||||
|
|
||||||
if(t == "<<")
|
|
||||||
{
|
|
||||||
be_control_look->DrawArrowShape(this, r1, update, base, 0);
|
|
||||||
be_control_look->DrawArrowShape(this, r2, update, base, 0);
|
|
||||||
}
|
|
||||||
else if(t == ">>")
|
|
||||||
{
|
|
||||||
be_control_look->DrawArrowShape(this, r1, update, base, 1);
|
|
||||||
be_control_look->DrawArrowShape(this, r2, update, base, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BStringView::Draw(update);
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#!yab
|
|
||||||
|
|
||||||
doc RdefApply
|
|
||||||
doc adds icon, application signature and version info attributes from an rdef file.
|
|
||||||
doc
|
|
||||||
doc Copyright © 2015 Jim Saxton, Fat Elk Software
|
|
||||||
|
|
||||||
if (peek("argument") >= 2) then
|
|
||||||
filename$=peek$("argument")
|
|
||||||
Outfilename$=peek$("argument")
|
|
||||||
make$=peek$("argument")
|
|
||||||
make=0
|
|
||||||
if (make$="M") make=1
|
|
||||||
readicon()
|
|
||||||
else
|
|
||||||
print"RdefApply"
|
|
||||||
print "Adds icon, application signature and version info attributes from an rdef file.
|
|
||||||
"
|
|
||||||
print "usage:"
|
|
||||||
print "RdefApply <RdefFilename> <OutputFilename> <M>"
|
|
||||||
print "if M is used, OutoutFilename is created if it does not exist
|
|
||||||
or the creation date is set if it does exist."
|
|
||||||
endif
|
|
||||||
|
|
||||||
sub readicon()
|
|
||||||
|
|
||||||
if (not open(1,filename$)) print "Could not open file'"+filename$+"' for reading":exit
|
|
||||||
|
|
||||||
if (make=1) system("touch "+Outfilename$)
|
|
||||||
close #1
|
|
||||||
system("rc -o "+filename$+".rsrc "+filename$)
|
|
||||||
system("resattr -O -o "+Outfilename$+" "+filename$+".rsrc")
|
|
||||||
end sub
|
|
||||||
|
|
||||||
-654
@@ -1,654 +0,0 @@
|
|||||||
/*
|
|
||||||
Spinner.cpp: A number spinner control.
|
|
||||||
Written by DarkWyrm <bpmagic@columbus.rr.com>, Copyright 2004
|
|
||||||
Released under the MIT license.
|
|
||||||
|
|
||||||
Original BScrollBarButton class courtesy Haiku project
|
|
||||||
*/
|
|
||||||
#include "Spinner.h"
|
|
||||||
#include <String.h>
|
|
||||||
#include <ScrollBar.h>
|
|
||||||
#include <Window.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <Font.h>
|
|
||||||
#include <Box.h>
|
|
||||||
#include <MessageFilter.h>
|
|
||||||
#include <ControlLook.h>
|
|
||||||
#include "global.h"
|
|
||||||
#include <TextView.h>
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
M_UP='mmup',
|
|
||||||
M_DOWN,
|
|
||||||
M_TEXT_CHANGED='mtch'
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
ARROW_LEFT=0,
|
|
||||||
ARROW_RIGHT,
|
|
||||||
ARROW_UP,
|
|
||||||
ARROW_DOWN,
|
|
||||||
ARROW_NONE
|
|
||||||
} arrow_direction;
|
|
||||||
|
|
||||||
class SpinnerMsgFilter : public BMessageFilter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SpinnerMsgFilter(void);
|
|
||||||
~SpinnerMsgFilter(void);
|
|
||||||
virtual filter_result Filter(BMessage *msg, BHandler **target);
|
|
||||||
};
|
|
||||||
|
|
||||||
class SpinnerArrowButton : public BView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SpinnerArrowButton(BPoint location, const char *name,
|
|
||||||
arrow_direction dir);
|
|
||||||
~SpinnerArrowButton(void);
|
|
||||||
void AttachedToWindow(void);
|
|
||||||
void DetachedToWindow(void);
|
|
||||||
void MouseDown(BPoint pt);
|
|
||||||
void MouseUp(BPoint pt);
|
|
||||||
void MouseMoved(BPoint pt, uint32 code, const BMessage *msg);
|
|
||||||
void Draw(BRect update);
|
|
||||||
void SetEnabled(bool value);
|
|
||||||
bool IsEnabled(void) const { return enabled; }
|
|
||||||
void SetViewColor(rgb_color color);
|
|
||||||
|
|
||||||
private:
|
|
||||||
arrow_direction fDirection;
|
|
||||||
BPoint tri1,tri2,tri3;
|
|
||||||
Spinner *parent;
|
|
||||||
bool mousedown;
|
|
||||||
bool enabled;
|
|
||||||
rgb_color myColor;
|
|
||||||
};
|
|
||||||
|
|
||||||
class SpinnerPrivateData
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SpinnerPrivateData(void)
|
|
||||||
{
|
|
||||||
thumbframe.Set(0,0,0,0);
|
|
||||||
enabled=true;
|
|
||||||
tracking=false;
|
|
||||||
mousept.Set(0,0);
|
|
||||||
thumbinc=1.0;
|
|
||||||
repeaterid=-1;
|
|
||||||
exit_repeater=false;
|
|
||||||
arrowdown=ARROW_NONE;
|
|
||||||
|
|
||||||
#ifdef TEST_MODE
|
|
||||||
sbinfo.proportional=true;
|
|
||||||
sbinfo.double_arrows=false;
|
|
||||||
sbinfo.knob=0;
|
|
||||||
sbinfo.min_knob_size=14;
|
|
||||||
#else
|
|
||||||
get_scroll_bar_info(&sbinfo);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
~SpinnerPrivateData(void)
|
|
||||||
{
|
|
||||||
if(repeaterid!=-1)
|
|
||||||
{
|
|
||||||
exit_repeater=false;
|
|
||||||
kill_thread(repeaterid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
thread_id repeaterid;
|
|
||||||
scroll_bar_info sbinfo;
|
|
||||||
BRect thumbframe;
|
|
||||||
bool enabled;
|
|
||||||
bool tracking;
|
|
||||||
BPoint mousept;
|
|
||||||
float thumbinc;
|
|
||||||
bool exit_repeater;
|
|
||||||
arrow_direction arrowdown;
|
|
||||||
};
|
|
||||||
|
|
||||||
Spinner::Spinner(BRect frame, const char *name, const char *label, int32 min, int32 max, int32 step, BMessage *msg,
|
|
||||||
uint32 resize,uint32 flags)
|
|
||||||
: BControl(frame, name,NULL,msg,resize,flags)
|
|
||||||
{
|
|
||||||
|
|
||||||
BRect r(Bounds());
|
|
||||||
if(r.Height()<14*2)
|
|
||||||
r.bottom=r.top+14*2;
|
|
||||||
ResizeTo(r.Width(),r.Height());
|
|
||||||
|
|
||||||
r.right-=14;
|
|
||||||
|
|
||||||
font_height fh;
|
|
||||||
BFont font;
|
|
||||||
font.GetHeight(&fh);
|
|
||||||
float textheight=fh.ascent+fh.descent+fh.leading;
|
|
||||||
|
|
||||||
BString t("");
|
|
||||||
t << max;
|
|
||||||
BFont f(be_plain_font);
|
|
||||||
float width1 = f.StringWidth(t.String())+2;
|
|
||||||
float width2 = f.StringWidth(label);
|
|
||||||
ResizeTo(width1+width2+30, textheight+6); //14*2-2); //+18+14 length of textcontrol
|
|
||||||
|
|
||||||
|
|
||||||
r = Bounds();
|
|
||||||
r.right -= 14+3; //Distance between textcontrol and spinnerbutton
|
|
||||||
|
|
||||||
r.bottom=r.top+textheight+8; //+10; //Changed from 8 to 10, because the spinnerbutton look nicer
|
|
||||||
r.OffsetTo(0, ( (Bounds().Height()-r.Height())/2) );
|
|
||||||
|
|
||||||
fTextControl=new BTextControl(r,"textcontrol",label,"0",new BMessage(M_TEXT_CHANGED),
|
|
||||||
B_FOLLOW_ALL,B_WILL_DRAW|B_NAVIGABLE);
|
|
||||||
|
|
||||||
AddChild(fTextControl);
|
|
||||||
|
|
||||||
BTextView *tview=fTextControl->TextView();
|
|
||||||
|
|
||||||
tview->SetAlignment(B_ALIGN_RIGHT); //change from left to right not completed
|
|
||||||
tview->SetWordWrap(false);
|
|
||||||
|
|
||||||
if (strcmp(label, "") == 0) //check if Label was set
|
|
||||||
{
|
|
||||||
fTextControl->SetDivider(width2);
|
|
||||||
}
|
|
||||||
else if (strcmp(label,"") != 0)
|
|
||||||
{
|
|
||||||
fTextControl->SetDivider(width2+4);
|
|
||||||
}
|
|
||||||
//fTextControl->SetDivider(width2+5);
|
|
||||||
//fTextControl->SetAlignment(B_ALIGN_RIGHT,B_ALIGN_RIGHT);
|
|
||||||
BString string("QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,/qwertyuiop{}| "
|
|
||||||
"asdfghjkl:\"zxcvbnm<>?!@#$%^&*()-_=+`~\r");
|
|
||||||
|
|
||||||
for(int32 i=0; i<string.CountChars(); i++)
|
|
||||||
{
|
|
||||||
char c=string.ByteAt(i);
|
|
||||||
tview->DisallowChar(c);
|
|
||||||
}
|
|
||||||
r=Bounds();
|
|
||||||
r.left=r.right-15;
|
|
||||||
//r.bottom/=2+4;
|
|
||||||
//r.top
|
|
||||||
|
|
||||||
fUpButton=new SpinnerArrowButton(BPoint(r.left, r.top-1),"up",ARROW_UP); //to make one line with the textcontrol
|
|
||||||
AddChild(fUpButton);
|
|
||||||
|
|
||||||
r=Bounds();
|
|
||||||
r.left=r.right-15;
|
|
||||||
r.top=r.bottom/2; //remove +1 to make one line with the textcontrol
|
|
||||||
|
|
||||||
fDownButton=new SpinnerArrowButton(BPoint(r.left, r.top),"down",ARROW_DOWN);
|
|
||||||
AddChild(fDownButton);
|
|
||||||
|
|
||||||
fStep=step;
|
|
||||||
fMin=min;
|
|
||||||
fMax=max;
|
|
||||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
privatedata=new SpinnerPrivateData;
|
|
||||||
fFilter=new SpinnerMsgFilter;
|
|
||||||
|
|
||||||
SetValue(min);
|
|
||||||
}
|
|
||||||
|
|
||||||
Spinner::~Spinner(void)
|
|
||||||
{
|
|
||||||
delete privatedata;
|
|
||||||
delete fFilter;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::AttachedToWindow(void)
|
|
||||||
{
|
|
||||||
Window()->AddCommonFilter(fFilter);
|
|
||||||
fTextControl->SetTarget(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::DetachedFromWindow(void)
|
|
||||||
{
|
|
||||||
Window()->RemoveCommonFilter(fFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetValue(int32 value)
|
|
||||||
{
|
|
||||||
if(value>GetMax() || value<GetMin())
|
|
||||||
return;
|
|
||||||
|
|
||||||
BControl::SetValue(value);
|
|
||||||
|
|
||||||
char string[50];
|
|
||||||
sprintf(string,"%ld",value);
|
|
||||||
fTextControl->SetText(string);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetViewColor(rgb_color color)
|
|
||||||
{
|
|
||||||
BControl::SetViewColor(color);
|
|
||||||
fTextControl->SetViewColor(color);
|
|
||||||
fTextControl->SetLowColor(color);
|
|
||||||
fUpButton->SetViewColor(color);
|
|
||||||
fDownButton->SetViewColor(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetLabel(const char *text)
|
|
||||||
{
|
|
||||||
fTextControl->SetLabel(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::ValueChanged(int32 value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::MessageReceived(BMessage *msg)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(msg->what==M_TEXT_CHANGED)
|
|
||||||
{
|
|
||||||
BString string(fTextControl->Text());
|
|
||||||
int32 newvalue=0;
|
|
||||||
|
|
||||||
sscanf(string.String(),"%ld",&newvalue);
|
|
||||||
if(newvalue>=GetMin() && newvalue<=GetMax())
|
|
||||||
{
|
|
||||||
// new value is in range, so set it and go
|
|
||||||
SetValue(newvalue);
|
|
||||||
Invoke();
|
|
||||||
Draw(Bounds());
|
|
||||||
ValueChanged(Value());
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// new value is out of bounds. Clip to range if current value is not
|
|
||||||
// at the end of its range
|
|
||||||
if(newvalue<GetMin() && Value()!=GetMin())
|
|
||||||
{
|
|
||||||
SetValue(GetMin());
|
|
||||||
Invoke();
|
|
||||||
Draw(Bounds());
|
|
||||||
ValueChanged(Value());
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if(newvalue>GetMax() && Value()!=GetMax())
|
|
||||||
{
|
|
||||||
SetValue(GetMax());
|
|
||||||
Invoke();
|
|
||||||
Draw(Bounds());
|
|
||||||
ValueChanged(Value());
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char string[100];
|
|
||||||
sprintf(string,"%ld",Value());
|
|
||||||
fTextControl->SetText(string);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
BControl::MessageReceived(msg);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetSteps(int32 stepsize)
|
|
||||||
{
|
|
||||||
fStep=stepsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetRange(int32 min, int32 max)
|
|
||||||
{
|
|
||||||
SetMin(min);
|
|
||||||
SetMax(max);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::GetRange(int32 *min, int32 *max)
|
|
||||||
{
|
|
||||||
*min=fMin;
|
|
||||||
*max=fMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetMax(int32 max)
|
|
||||||
{
|
|
||||||
fMax=max;
|
|
||||||
if(Value()>fMax)
|
|
||||||
SetValue(fMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetMin(int32 min)
|
|
||||||
{
|
|
||||||
fMin=min;
|
|
||||||
if(Value()<fMin)
|
|
||||||
SetValue(fMin);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::SetEnabled(bool value)
|
|
||||||
{
|
|
||||||
if(IsEnabled()==value)
|
|
||||||
return;
|
|
||||||
|
|
||||||
BControl::SetEnabled(value);
|
|
||||||
fTextControl->SetEnabled(value);
|
|
||||||
fTextControl->TextView()->MakeSelectable(value);
|
|
||||||
fUpButton->SetEnabled(value);
|
|
||||||
fDownButton->SetEnabled(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Spinner::MakeFocus(bool value)
|
|
||||||
{
|
|
||||||
fTextControl->MakeFocus(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SpinnerArrowButton::SpinnerArrowButton(BPoint location,
|
|
||||||
const char *name, arrow_direction dir)
|
|
||||||
:BView(BRect(0,0,16,12).OffsetToCopy(location),
|
|
||||||
name, B_FOLLOW_ALL, B_WILL_DRAW)
|
|
||||||
{
|
|
||||||
fDirection=dir;
|
|
||||||
enabled=true;
|
|
||||||
myColor = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
mousedown=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SpinnerArrowButton::~SpinnerArrowButton(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::MouseDown(BPoint pt)
|
|
||||||
{
|
|
||||||
if(enabled==false)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!IsEnabled())
|
|
||||||
return;
|
|
||||||
|
|
||||||
mousedown=true;
|
|
||||||
int redcost = 1000;
|
|
||||||
Draw(Bounds());
|
|
||||||
|
|
||||||
BRect bounds = Bounds();
|
|
||||||
uint32 buttons;
|
|
||||||
BPoint point;
|
|
||||||
|
|
||||||
int32 step=parent->GetSteps();
|
|
||||||
int32 newvalue=parent->Value();
|
|
||||||
int32 waitvalue=150000;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if(fDirection==ARROW_UP)
|
|
||||||
{
|
|
||||||
parent->privatedata->arrowdown=ARROW_UP;
|
|
||||||
newvalue+=step;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
parent->privatedata->arrowdown=ARROW_DOWN;
|
|
||||||
newvalue-=step;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( newvalue>=parent->GetMin() && newvalue<=parent->GetMax())
|
|
||||||
{
|
|
||||||
// new value is in range, so set it and go
|
|
||||||
parent->SetValue(newvalue);
|
|
||||||
parent->Invoke();
|
|
||||||
// parent->Draw(parent->Bounds());
|
|
||||||
parent->ValueChanged(parent->Value());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// new value is out of bounds. Clip to range if current value is not
|
|
||||||
// at the end of its range
|
|
||||||
if(newvalue<parent->GetMin() && parent->Value()!=parent->GetMin())
|
|
||||||
{
|
|
||||||
parent->SetValue(parent->GetMin());
|
|
||||||
parent->Invoke();
|
|
||||||
// parent->Draw(parent->Bounds());
|
|
||||||
parent->ValueChanged(parent->Value());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if(newvalue>parent->GetMax() && parent->Value()!=parent->GetMax())
|
|
||||||
{
|
|
||||||
parent->SetValue(parent->GetMax());
|
|
||||||
parent->Invoke();
|
|
||||||
// parent->Draw(parent->Bounds());
|
|
||||||
parent->ValueChanged(parent->Value());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// cases which go here are if new value is <minimum and value already at
|
|
||||||
// minimum or if > maximum and value already at maximum
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Window()->UpdateIfNeeded();
|
|
||||||
|
|
||||||
snooze(waitvalue);
|
|
||||||
|
|
||||||
GetMouse(&point, &buttons, false);
|
|
||||||
|
|
||||||
bool inside = bounds.Contains(point);
|
|
||||||
|
|
||||||
// if ((parent->Value() == B_CONTROL_ON) != inside)
|
|
||||||
// parent->SetValue(inside ? B_CONTROL_ON : B_CONTROL_OFF);
|
|
||||||
|
|
||||||
if(waitvalue<=50000)
|
|
||||||
waitvalue=50000;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
waitvalue -= redcost;
|
|
||||||
redcost = redcost*10;
|
|
||||||
}
|
|
||||||
|
|
||||||
} while (buttons != 0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::MouseUp(BPoint pt)
|
|
||||||
{
|
|
||||||
if(enabled)
|
|
||||||
{
|
|
||||||
mousedown=false;
|
|
||||||
|
|
||||||
if(parent)
|
|
||||||
{
|
|
||||||
parent->privatedata->arrowdown=ARROW_NONE;
|
|
||||||
parent->privatedata->exit_repeater=true;
|
|
||||||
}
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::MouseMoved(BPoint pt, uint32 transit, const BMessage *msg)
|
|
||||||
{
|
|
||||||
if(enabled==false)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(transit==B_ENTERED_VIEW)
|
|
||||||
{
|
|
||||||
BPoint point;
|
|
||||||
uint32 buttons;
|
|
||||||
GetMouse(&point,&buttons);
|
|
||||||
if( (buttons & B_PRIMARY_MOUSE_BUTTON)==0 &&
|
|
||||||
(buttons & B_SECONDARY_MOUSE_BUTTON)==0 &&
|
|
||||||
(buttons & B_PRIMARY_MOUSE_BUTTON)==0 )
|
|
||||||
mousedown=false;
|
|
||||||
else
|
|
||||||
mousedown=true;
|
|
||||||
Draw(Bounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(transit==B_EXITED_VIEW || transit==B_OUTSIDE_VIEW)
|
|
||||||
MouseUp(Bounds().LeftTop());
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::Draw(BRect update)
|
|
||||||
{
|
|
||||||
BRect rect(Bounds());
|
|
||||||
rgb_color background = B_TRANSPARENT_COLOR;
|
|
||||||
if (Parent())
|
|
||||||
background = Parent()->ViewColor();
|
|
||||||
if (background == B_TRANSPARENT_COLOR)
|
|
||||||
background = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
|
|
||||||
uint32 flags = 0;
|
|
||||||
if(!parent->IsEnabled())
|
|
||||||
flags |= BControlLook::B_DISABLED;
|
|
||||||
if(mousedown)
|
|
||||||
flags = 1 << 2;
|
|
||||||
BRect r(Bounds());
|
|
||||||
if(fDirection == ARROW_UP)
|
|
||||||
r.bottom = r.bottom*2;
|
|
||||||
else
|
|
||||||
r.top = - r.bottom;
|
|
||||||
be_control_look->DrawButtonFrame(this, r, update, base, background, flags);
|
|
||||||
be_control_look->DrawButtonBackground(this, r, update, base, flags);
|
|
||||||
|
|
||||||
rect.InsetBy(2.0,2.0);
|
|
||||||
base = ui_color(B_PANEL_TEXT_COLOR);
|
|
||||||
float tint = B_NO_TINT;
|
|
||||||
if(!parent->IsEnabled())
|
|
||||||
tint = B_LIGHTEN_MAX_TINT;
|
|
||||||
be_control_look->DrawArrowShape(this, rect, update, base, fDirection, flags, tint);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::AttachedToWindow(void)
|
|
||||||
{
|
|
||||||
parent=(Spinner*)Parent();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::DetachedToWindow(void)
|
|
||||||
{
|
|
||||||
parent=NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::SetEnabled(bool value)
|
|
||||||
{
|
|
||||||
enabled=value;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpinnerArrowButton::SetViewColor(rgb_color color)
|
|
||||||
{
|
|
||||||
myColor = color;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
SpinnerMsgFilter::SpinnerMsgFilter(void)
|
|
||||||
: BMessageFilter(B_PROGRAMMED_DELIVERY, B_ANY_SOURCE,B_KEY_DOWN)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SpinnerMsgFilter::~SpinnerMsgFilter(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
filter_result SpinnerMsgFilter::Filter(BMessage *msg, BHandler **target)
|
|
||||||
{
|
|
||||||
int32 c;
|
|
||||||
msg->FindInt32("raw_char",&c);
|
|
||||||
switch(c)
|
|
||||||
{
|
|
||||||
case B_ENTER:
|
|
||||||
{
|
|
||||||
BTextView *text=dynamic_cast<BTextView*>(*target);
|
|
||||||
if(text && text->IsFocus())
|
|
||||||
{
|
|
||||||
BView *view=text->Parent();
|
|
||||||
while(view)
|
|
||||||
{
|
|
||||||
Spinner *spin=dynamic_cast<Spinner*>(view);
|
|
||||||
if(spin)
|
|
||||||
{
|
|
||||||
BString string(text->Text());
|
|
||||||
int32 newvalue=0;
|
|
||||||
|
|
||||||
sscanf(string.String(),"%ld",&newvalue);
|
|
||||||
if(newvalue!=spin->Value())
|
|
||||||
{
|
|
||||||
spin->SetValue(newvalue);
|
|
||||||
spin->Invoke();
|
|
||||||
}
|
|
||||||
return B_SKIP_MESSAGE;
|
|
||||||
}
|
|
||||||
view=view->Parent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return B_DISPATCH_MESSAGE;
|
|
||||||
}
|
|
||||||
case B_TAB:
|
|
||||||
{
|
|
||||||
return B_DISPATCH_MESSAGE;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
case B_TAB:
|
|
||||||
{
|
|
||||||
// Cause Tab characters to perform keybaord navigation
|
|
||||||
BHandler *h=*target;
|
|
||||||
BView *v=NULL;
|
|
||||||
|
|
||||||
h=h->NextHandler();
|
|
||||||
while(h)
|
|
||||||
{
|
|
||||||
v=dynamic_cast<BView*>(h);
|
|
||||||
if(v)
|
|
||||||
{
|
|
||||||
*target=v->Window();
|
|
||||||
return B_DISPATCH_MESSAGE;
|
|
||||||
}
|
|
||||||
h=h->NextHandler();
|
|
||||||
}
|
|
||||||
return B_SKIP_MESSAGE;
|
|
||||||
// return B_DISPATCH_MESSAGE;
|
|
||||||
}*/
|
|
||||||
case B_UP_ARROW:
|
|
||||||
case B_DOWN_ARROW:
|
|
||||||
{
|
|
||||||
BTextView *text=dynamic_cast<BTextView*>(*target);
|
|
||||||
if(text && text->IsFocus())
|
|
||||||
{
|
|
||||||
// We have a text view. See if it currently has the focus and belongs
|
|
||||||
// to a Spinner control. If so, change the value of the spinner
|
|
||||||
|
|
||||||
// TextViews are complicated beasts which are actually multiple views.
|
|
||||||
// Travel up the hierarchy to see if any of the target's ancestors are
|
|
||||||
// a Spinner.
|
|
||||||
|
|
||||||
BView *view=text->Parent();
|
|
||||||
while(view)
|
|
||||||
{
|
|
||||||
Spinner *spin=dynamic_cast<Spinner*>(view);
|
|
||||||
if(spin)
|
|
||||||
{
|
|
||||||
int32 step=spin->GetSteps();
|
|
||||||
if(c==B_DOWN_ARROW)
|
|
||||||
step=0-step;
|
|
||||||
|
|
||||||
spin->SetValue(spin->Value()+step);
|
|
||||||
spin->Invoke();
|
|
||||||
return B_SKIP_MESSAGE;
|
|
||||||
}
|
|
||||||
view=view->Parent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return B_DISPATCH_MESSAGE;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return B_DISPATCH_MESSAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// shut the stupid compiler up
|
|
||||||
return B_SKIP_MESSAGE;
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
#ifndef SPINNER_H_
|
|
||||||
#define SPINNER_H_
|
|
||||||
|
|
||||||
#include <Control.h>
|
|
||||||
#include <TextView.h>
|
|
||||||
#include <Button.h>
|
|
||||||
#include <StringView.h>
|
|
||||||
#include <TextControl.h>
|
|
||||||
|
|
||||||
class SpinnerPrivateData;
|
|
||||||
class SpinnerArrowButton;
|
|
||||||
class SpinnerMsgFilter;
|
|
||||||
|
|
||||||
class Spinner : public BControl
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Spinner(BRect frame, const char *name, const char *label, int32 min, int32 max, int32 step, BMessage *msg,
|
|
||||||
uint32 resize=B_FOLLOW_LEFT|B_FOLLOW_TOP,uint32 flags=B_WILL_DRAW|B_NAVIGABLE);
|
|
||||||
virtual ~Spinner(void);
|
|
||||||
virtual void AttachedToWindow(void);
|
|
||||||
virtual void DetachedFromWindow(void);
|
|
||||||
virtual void ValueChanged(int32 value);
|
|
||||||
virtual void MessageReceived(BMessage *msg);
|
|
||||||
virtual void SetViewColor(rgb_color color);
|
|
||||||
|
|
||||||
virtual void SetSteps(int32 stepsize);
|
|
||||||
int32 GetSteps(void) const { return fStep; }
|
|
||||||
|
|
||||||
virtual void SetRange(int32 min, int32 max);
|
|
||||||
void GetRange(int32 *min, int32 *max);
|
|
||||||
|
|
||||||
virtual void SetMax(int32 max);
|
|
||||||
int32 GetMax(void) const { return fMax; }
|
|
||||||
virtual void SetMin(int32 min);
|
|
||||||
int32 GetMin(void) const { return fMin; }
|
|
||||||
|
|
||||||
virtual void MakeFocus(bool value=true);
|
|
||||||
|
|
||||||
virtual void SetValue(int32 value);
|
|
||||||
// int32 Value();
|
|
||||||
virtual void SetLabel(const char *text);
|
|
||||||
BTextControl *TextControl(void) const { return fTextControl; }
|
|
||||||
|
|
||||||
virtual void SetEnabled(bool value);
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class SpinnerArrowButton;
|
|
||||||
friend class SpinnerPrivateData;
|
|
||||||
|
|
||||||
BTextControl *fTextControl;
|
|
||||||
SpinnerArrowButton *fUpButton, *fDownButton;
|
|
||||||
SpinnerPrivateData *privatedata;
|
|
||||||
|
|
||||||
int32 fStep;
|
|
||||||
int32 fMin, fMax;
|
|
||||||
SpinnerMsgFilter *fFilter;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,726 +0,0 @@
|
|||||||
/*******************************************************
|
|
||||||
* SplitPane©
|
|
||||||
*
|
|
||||||
* SplitPane is a usefull UI component. It alows the
|
|
||||||
* use to ajust two view Horizontaly or Vertacly so
|
|
||||||
* that they are a desired size. This type of Pane
|
|
||||||
* shows up most comonly in Mail/News Readers.
|
|
||||||
*
|
|
||||||
* @author YNOP (ynop@acm.org)
|
|
||||||
* @version beta
|
|
||||||
* @date Dec. 10 1999
|
|
||||||
*******************************************************/
|
|
||||||
#include <AppKit.h>
|
|
||||||
#include <InterfaceKit.h>
|
|
||||||
#include <StorageKit.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <Path.h>
|
|
||||||
#include <TranslationKit.h>
|
|
||||||
#include <TranslationUtils.h>
|
|
||||||
|
|
||||||
//#include <stdio.h>
|
|
||||||
|
|
||||||
#include "SplitPane.h"
|
|
||||||
//#include "SplitPaneConfig.h"
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Setup the main view. Add in all the niffty components
|
|
||||||
* we have made and get things rolling
|
|
||||||
*******************************************************/
|
|
||||||
SplitPane::SplitPane(BRect frame, const char* name, BView *one, BView *two,uint32 Mode):BView(frame, name, Mode,B_WILL_DRAW|B_FRAME_EVENTS){
|
|
||||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); // This is default get from parent if exist
|
|
||||||
//SetViewColor(B_TRANSPARENT_32_BIT); // go tran so we have control over drawing
|
|
||||||
BRect b;
|
|
||||||
b = Bounds();
|
|
||||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
|
||||||
PaneOne = one;
|
|
||||||
PaneTwo = two;
|
|
||||||
|
|
||||||
align = B_VERTICAL; // Most people use it this way
|
|
||||||
pos = (int)b.Width()/2; // Center is a good start place
|
|
||||||
thickness = 10;
|
|
||||||
jump = 1; // 1 makes a smother slide
|
|
||||||
VOneDetachable = false;
|
|
||||||
VTwoDetachable = false;
|
|
||||||
pad = 1;
|
|
||||||
MinSizeOne = 0; // full left
|
|
||||||
MinSizeTwo = 0; // full right
|
|
||||||
poslocked = false; // free movement
|
|
||||||
alignlocked = false; // free alignment
|
|
||||||
Draggin = false;
|
|
||||||
attached = false;
|
|
||||||
|
|
||||||
WinOne = NULL;
|
|
||||||
WinTwo = NULL;
|
|
||||||
ConfigWindow = NULL;
|
|
||||||
|
|
||||||
AddChild(one);
|
|
||||||
AddChild(two);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* When ready grap the parents color and refreash.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::AttachedToWindow(){
|
|
||||||
//SetViewColor(Parent()->ViewColor());
|
|
||||||
attached = true;
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* If we are being resized. Fix the stuff we need to fix
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::FrameResized(float,float){
|
|
||||||
// if bar is on the left side follow left
|
|
||||||
// else if it is on the right side follow the right
|
|
||||||
// Need to implements smart follow still
|
|
||||||
Update();
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* The main draw stuff here. basicly just the slider
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::Draw(BRect f){
|
|
||||||
SetHighColor(160,160,160);
|
|
||||||
|
|
||||||
if(align == B_VERTICAL){
|
|
||||||
SetHighColor(185,185,185);
|
|
||||||
// SetHighColor(145,145,145);
|
|
||||||
//FillRect(BRect(pos,Bounds().top+pad+1,pos,Bounds().bottom-pad-1)); // 145
|
|
||||||
FillRect(BRect(pos,Bounds().top+pad+1,pos,Bounds().bottom-pad-1)); // 145
|
|
||||||
|
|
||||||
SetHighColor(255,255,255);
|
|
||||||
FillRect(BRect(pos+1,Bounds().top+pad+1,pos+2,Bounds().bottom-pad-1)); // 255
|
|
||||||
|
|
||||||
//SetHighColor(216,216,216);
|
|
||||||
SetHighColor(Parent()->ViewColor());
|
|
||||||
FillRect(BRect(pos+2,Bounds().top+pad+1,pos+thickness-2,Bounds().bottom-pad-1));// 216
|
|
||||||
|
|
||||||
if(thickness>9)
|
|
||||||
{
|
|
||||||
float y = (Bounds().bottom - Bounds().top)/2;
|
|
||||||
float x = pos + (thickness/2);
|
|
||||||
SetPenSize(2);
|
|
||||||
SetHighColor(255,255,255);
|
|
||||||
StrokeLine(BPoint(x-3,y-11),BPoint(x+3,y-5));
|
|
||||||
StrokeLine(BPoint(x-3,y-7),BPoint(x+3,y-1));
|
|
||||||
StrokeLine(BPoint(x-3,y-3),BPoint(x+3,y+3));
|
|
||||||
StrokeLine(BPoint(x-3,y+1),BPoint(x+3,y+7));
|
|
||||||
StrokeLine(BPoint(x-3,y+5),BPoint(x+3,y+11));
|
|
||||||
SetPenSize(1);
|
|
||||||
SetHighColor(145,145,145);
|
|
||||||
StrokeLine(BPoint(x-3,y-10),BPoint(x+3,y-4));
|
|
||||||
StrokeLine(BPoint(x-3,y-6),BPoint(x+3,y+0));
|
|
||||||
StrokeLine(BPoint(x-3,y-2),BPoint(x+3,y+4));
|
|
||||||
StrokeLine(BPoint(x-3,y+2),BPoint(x+3,y+8));
|
|
||||||
StrokeLine(BPoint(x-3,y+6),BPoint(x+3,y+12));
|
|
||||||
}
|
|
||||||
|
|
||||||
SetHighColor(185,185,185);
|
|
||||||
// SetHighColor(145,145,145);
|
|
||||||
FillRect(BRect(pos+thickness-2,Bounds().top+pad+1,pos+thickness-2,Bounds().bottom-pad-1)) ;// 145
|
|
||||||
|
|
||||||
SetHighColor(145,145,145);
|
|
||||||
FillRect(BRect(pos+thickness-1,Bounds().top+pad+1,pos+thickness-1,Bounds().bottom-pad-1)); // 96
|
|
||||||
//FillRect(BRect(pos+thickness,Bounds().top+pad+1,pos+thickness,Bounds().bottom-pad-1));
|
|
||||||
}else{
|
|
||||||
SetHighColor(185,185,185);
|
|
||||||
// SetHighColor(145,145,145);
|
|
||||||
//FillRect(BRect(Bounds().left+pad+1,pos,Bounds().right-pad-1,pos)); // 145
|
|
||||||
FillRect(BRect(Bounds().left+pad+1,pos,Bounds().right-pad-1,pos)); // 145
|
|
||||||
|
|
||||||
SetHighColor(255,255,255);
|
|
||||||
FillRect(BRect(Bounds().left+pad+1,pos+1,Bounds().right-pad-1,pos+2)); // 255
|
|
||||||
|
|
||||||
//SetHighColor(216,216,216);
|
|
||||||
SetHighColor(Parent()->ViewColor());
|
|
||||||
FillRect(BRect(Bounds().left+pad+1,pos+2,Bounds().right-pad-1,pos+thickness-2));// 216
|
|
||||||
|
|
||||||
if(thickness>9)
|
|
||||||
{
|
|
||||||
SetHighColor(255,255,255);
|
|
||||||
float x = (Bounds().right - Bounds().left)/2;
|
|
||||||
float y = pos + (thickness/2);
|
|
||||||
SetPenSize(2);
|
|
||||||
StrokeLine(BPoint(x-11,y-3),BPoint(x-5,y+3));
|
|
||||||
StrokeLine(BPoint(x-7,y-3),BPoint(x-1,y+3));
|
|
||||||
StrokeLine(BPoint(x-3,y-3),BPoint(x+3,y+3));
|
|
||||||
StrokeLine(BPoint(x+1,y-3),BPoint(x+7,y+3));
|
|
||||||
StrokeLine(BPoint(x+5,y-3),BPoint(x+11,y+3));
|
|
||||||
SetPenSize(1);
|
|
||||||
SetHighColor(145,145,145);
|
|
||||||
StrokeLine(BPoint(x-10,y-3),BPoint(x-4,y+3));
|
|
||||||
StrokeLine(BPoint(x-6,y-3),BPoint(x+0,y+3));
|
|
||||||
StrokeLine(BPoint(x-2,y-3),BPoint(x+4,y+3));
|
|
||||||
StrokeLine(BPoint(x+2,y-3),BPoint(x+8,y+3));
|
|
||||||
StrokeLine(BPoint(x+6,y-3),BPoint(x+12,y+3));
|
|
||||||
}
|
|
||||||
|
|
||||||
SetHighColor(185,185,185);
|
|
||||||
// SetHighColor(145,145,145);
|
|
||||||
FillRect(BRect(Bounds().left+pad+1,pos+thickness-2,Bounds().right-pad-1,pos+thickness-2)) ;// 145
|
|
||||||
|
|
||||||
SetHighColor(145,145,145);
|
|
||||||
// SetHighColor(96,96,96);
|
|
||||||
FillRect(BRect(Bounds().left+pad+1,pos+thickness-1,Bounds().right-pad-1,pos+thickness-1)); // 96
|
|
||||||
//FillRect(BRect(Bounds().left+pad+1,pos+thickness,Bounds().right-pad-1,pos+thickness));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Keeps Modes for both panles uptodate and acctually
|
|
||||||
* is the func that sets the location of the slider
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::Update(){
|
|
||||||
Window()->Lock();
|
|
||||||
if(align == B_VERTICAL){
|
|
||||||
PaneOne->SetResizingMode(B_FOLLOW_LEFT|B_FOLLOW_TOP_BOTTOM);
|
|
||||||
PaneTwo->SetResizingMode(B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP_BOTTOM);
|
|
||||||
if(pos > (Bounds().Width()-thickness-MinSizeTwo)){
|
|
||||||
if(!poslocked){
|
|
||||||
pos = (int)Bounds().Width()-thickness-MinSizeTwo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(pos < MinSizeOne){
|
|
||||||
if(!poslocked){
|
|
||||||
pos = MinSizeOne;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
PaneOne->SetResizingMode(B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP);
|
|
||||||
PaneTwo->SetResizingMode(B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP_BOTTOM);
|
|
||||||
if(pos > (Bounds().Height()-thickness-MinSizeTwo)){
|
|
||||||
if(!poslocked){
|
|
||||||
pos = (int)Bounds().Height()-thickness-MinSizeTwo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(pos < MinSizeOne){
|
|
||||||
if(!poslocked){
|
|
||||||
pos = MinSizeOne;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// this block should go in FrameResized .. think about it
|
|
||||||
if(align == B_VERTICAL){
|
|
||||||
if(pos >= (Bounds().IntegerWidth()/2)){
|
|
||||||
//pos should follow the right side
|
|
||||||
// staying the same distans from it that
|
|
||||||
// it is right now
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
if(pos >= (Bounds().IntegerHeight()/2)){
|
|
||||||
//should follow bottom and stay the
|
|
||||||
// same distance that we are way from
|
|
||||||
// it now
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(PaneOne){
|
|
||||||
if(!WinOne){
|
|
||||||
if(align == B_VERTICAL){
|
|
||||||
PaneOne->MoveTo(pad,Bounds().top+pad);
|
|
||||||
PaneOne->ResizeTo(pos-pad, Bounds().Height()-pad-pad); // widht x height
|
|
||||||
}else{
|
|
||||||
PaneOne->MoveTo(pad,Bounds().top+pad);
|
|
||||||
PaneOne->ResizeTo(Bounds().Width()-pad-pad, pos-pad-pad); // widht x height
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(PaneTwo){
|
|
||||||
if(!WinTwo){
|
|
||||||
if(align == B_VERTICAL){
|
|
||||||
PaneTwo->MoveTo(pos+thickness,Bounds().top+pad);
|
|
||||||
PaneTwo->ResizeTo(Bounds().Width()-(pos+thickness)-pad, Bounds().Height()-pad-pad);
|
|
||||||
}else{
|
|
||||||
PaneTwo->MoveTo(Bounds().left+pad,pos+thickness);
|
|
||||||
PaneTwo->ResizeTo(Bounds().Width()-pad-pad, Bounds().Height()-pos-pad-thickness);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Window()->Unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Hook for when we click. This takes care of all the
|
|
||||||
* little stuff - Like where is the mouse and what is
|
|
||||||
* going on.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::MouseDown(BPoint where){
|
|
||||||
Window()->Lock();
|
|
||||||
BMessage *currentMsg = Window()->CurrentMessage();
|
|
||||||
if (currentMsg->what == B_MOUSE_DOWN) {
|
|
||||||
uint32 buttons = 0;
|
|
||||||
currentMsg->FindInt32("buttons", (int32 *)&buttons);
|
|
||||||
uint32 modifiers = 0;
|
|
||||||
currentMsg->FindInt32("modifiers", (int32 *)&modifiers);
|
|
||||||
uint32 clicks = 0;
|
|
||||||
currentMsg->FindInt32("clicks",(int32*)&clicks);
|
|
||||||
|
|
||||||
if (buttons & B_SECONDARY_MOUSE_BUTTON){
|
|
||||||
if(!alignlocked){
|
|
||||||
switch(align){
|
|
||||||
case B_VERTICAL:
|
|
||||||
align = B_HORIZONTAL;
|
|
||||||
break;
|
|
||||||
case B_HORIZONTAL:
|
|
||||||
align = B_VERTICAL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Update();
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*if(VOneDetachable){
|
|
||||||
WinOne = new BWindow(ConvertToScreen(PaneOne->Bounds()),"PanelOne",B_TITLED_WINDOW,B_ASYNCHRONOUS_CONTROLS);
|
|
||||||
RemoveChild(PaneOne);
|
|
||||||
WinOne->AddChild(PaneOne);
|
|
||||||
PaneOne->SetResizingMode(B_FOLLOW_ALL_SIDES);
|
|
||||||
// PaneOne->SetTarget(this);
|
|
||||||
WinOne->Show();
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
// if((buttons & B_PRIMARY_MOUSE_BUTTON) && (clicks >= 2)){
|
|
||||||
//Config window for split pane
|
|
||||||
// (new BAlert(NULL,"This is - or will be - a configuration panel for SplitPane.","Ok"))->Go();
|
|
||||||
//ConfigWindow = new SplitPaneConfig(this);
|
|
||||||
//ConfigWindow->Show();
|
|
||||||
//}else
|
|
||||||
if((buttons & B_PRIMARY_MOUSE_BUTTON) && !Draggin){
|
|
||||||
if(!poslocked){
|
|
||||||
Draggin= true; // this is so we can drag
|
|
||||||
here = where;
|
|
||||||
}
|
|
||||||
SetMouseEventMask(B_POINTER_EVENTS,B_LOCK_WINDOW_FOCUS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Window()->Unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* If we unclick then stop dragging or whatever it is
|
|
||||||
* we are doing
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::MouseUp(BPoint where){
|
|
||||||
Draggin = false; // stop following mouse
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* If the mouse moves while we dragg. Then follow it
|
|
||||||
* Also Invalidate so we update the views
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::MouseMoved(BPoint where,uint32 info,const BMessage *m){
|
|
||||||
if(Draggin){
|
|
||||||
switch(align){
|
|
||||||
case B_HORIZONTAL:
|
|
||||||
pos = (int)(where.y)-(thickness/2);//- here.x
|
|
||||||
break;
|
|
||||||
case B_VERTICAL:
|
|
||||||
pos = (int)(where.x)-(thickness/2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
// This code figures out which jump we are closest
|
|
||||||
// to and if needed we "snap" to that.
|
|
||||||
int c = Bounds().IntegerWidth() / pos
|
|
||||||
Jump * c ... hmmm this is not right at all
|
|
||||||
*/
|
|
||||||
|
|
||||||
if(pos < MinSizeOne){
|
|
||||||
pos = MinSizeOne;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(align == B_VERTICAL){
|
|
||||||
if(pos > (Bounds().Width() - thickness - MinSizeTwo)){
|
|
||||||
pos = (int)(Bounds().Width() - thickness - MinSizeTwo + 1);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
if(pos > (Bounds().Height() - thickness - MinSizeTwo)){
|
|
||||||
pos = (int)(Bounds().Height() - thickness - MinSizeTwo + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Update();
|
|
||||||
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* If you already have a view One, but want to change
|
|
||||||
* if for some odd reason. This should work.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::AddChildOne(BView *v){
|
|
||||||
RemoveChild(PaneOne);
|
|
||||||
PaneOne = v;
|
|
||||||
AddChild(PaneOne);
|
|
||||||
}
|
|
||||||
/*void SplitPane::MakePaneTwoFocus()
|
|
||||||
{
|
|
||||||
if(PaneTwo)
|
|
||||||
PaneTwo->MakeFocus();
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/*******************************************************
|
|
||||||
* If you already have a view Two, and want to put
|
|
||||||
* another view there, this is what to use.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::AddChildTwo(BView* v,bool IsAdded,bool ShowAfterHide)
|
|
||||||
{
|
|
||||||
if(!v->IsHidden())
|
|
||||||
v->Hide();
|
|
||||||
|
|
||||||
PaneTwo = v;
|
|
||||||
//WinTwo = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
PaneTwo = v;
|
|
||||||
if(IsAdded)
|
|
||||||
{
|
|
||||||
Update();
|
|
||||||
if(ShowAfterHide)
|
|
||||||
{
|
|
||||||
if(v->IsHidden())
|
|
||||||
v->Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
if(!IsAdded)
|
|
||||||
{
|
|
||||||
AddChild(PaneTwo);
|
|
||||||
}
|
|
||||||
PaneTwo = v;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets is we are horizontal or Vertical. We use the
|
|
||||||
* standard B_HORIZONTAL and B_VERTICAL flags for this
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetAlignment(uint a){
|
|
||||||
align = a;
|
|
||||||
if(attached){
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Returns wheather the slider is horizontal or vertical
|
|
||||||
*******************************************************/
|
|
||||||
uint SplitPane::GetAlignment(){
|
|
||||||
return align;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets the location of the bar. (we do no bounds
|
|
||||||
* checking for you so if its off the window thats
|
|
||||||
* your problem)
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetBarPosition(int i){
|
|
||||||
pos = i;
|
|
||||||
if(attached){
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Returns about where the bar is ...
|
|
||||||
*******************************************************/
|
|
||||||
int SplitPane::GetBarPosition(){
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets how thick the bar should be.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetBarThickness(int i){
|
|
||||||
thickness = i;
|
|
||||||
if(attached){
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Retuns to us the thickness of the slider bar
|
|
||||||
*******************************************************/
|
|
||||||
int SplitPane::GetBarThickness(){
|
|
||||||
return thickness;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets the amount of jump the bar has when it is
|
|
||||||
* moved. This can also be though of as snap. The bar
|
|
||||||
* will start at 0 and jump(snap) to everry J pixels.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetJump(int i){
|
|
||||||
jump = i;
|
|
||||||
if(attached){
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Lets you know what the jump is .. see SetJump
|
|
||||||
*******************************************************/
|
|
||||||
int SplitPane::GetJump(){
|
|
||||||
return jump;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Do we have a View One or is it NULL
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::HasViewOne(){
|
|
||||||
if(PaneOne) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Do we have a View Two .. or is it NULL too
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::HasViewTwo(){
|
|
||||||
if(PaneTwo) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets wheather View one is detachable from the
|
|
||||||
* slider view and from the app. This will creat a
|
|
||||||
* window that is detached (floating) from the app.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetViewOneDetachable(bool b){
|
|
||||||
VOneDetachable = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets view tow detachable or not
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetViewTwoDetachable(bool b){
|
|
||||||
VTwoDetachable = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Returns whether the view is detachable
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::IsViewOneDetachable(){
|
|
||||||
return VOneDetachable;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Returns if this view is detachable
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::IsViewTwoDetachable(){
|
|
||||||
return VTwoDetachable;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Tells the view if the user is alowed to open the
|
|
||||||
* configuration window for the slider.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetEditable(bool b){
|
|
||||||
//ADD CODE HERE YNOP
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Tells use if the split pane is user editable
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::IsEditable(){
|
|
||||||
return true; //ADD SOME MORE CODE HERE
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets the inset that the view has.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetViewInsetBy(int i){
|
|
||||||
pad = i;
|
|
||||||
if(attached){
|
|
||||||
Update();
|
|
||||||
} Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Returns to use the padding around the views
|
|
||||||
*******************************************************/
|
|
||||||
int SplitPane::GetViewInsetBy(){
|
|
||||||
return pad;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* This sets the minimum size that View one can be.
|
|
||||||
* if the user trys to go past this .. we just stop
|
|
||||||
* By default the minimum size is set to 0 (zero) so
|
|
||||||
* the user can put the slider anywhere.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetMinSizeOne(int i){
|
|
||||||
MinSizeOne = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Gives us the minimum size that one can be.
|
|
||||||
*******************************************************/
|
|
||||||
int SplitPane::GetMinSizeOne(){
|
|
||||||
return MinSizeOne;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* This sets the Minimum size that the second view
|
|
||||||
* can be.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetMinSizeTwo(int i){
|
|
||||||
MinSizeTwo = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Lets us know what that minimum size is.
|
|
||||||
*******************************************************/
|
|
||||||
int SplitPane::GetMinSizeTwo(){
|
|
||||||
return MinSizeTwo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Locks the bar from being moved by the User. The
|
|
||||||
* system can still move the bar (via SetBarPosition)
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetBarLocked(bool b){
|
|
||||||
poslocked = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Returns to use if the bar is in a locked state or
|
|
||||||
* not.
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::IsBarLocked(){
|
|
||||||
return poslocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Locks the alignment of the bar. The user can no
|
|
||||||
* longer toggle between Horizontal and Vertical
|
|
||||||
* Slider bar. Again you can still progomaticly set
|
|
||||||
* the position how ever you want.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetBarAlignmentLocked(bool b){
|
|
||||||
alignlocked = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Lets us know about the lock state of the bar
|
|
||||||
*******************************************************/
|
|
||||||
bool SplitPane::IsBarAlignmentLocked(){
|
|
||||||
return alignlocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Gets the Total state of the bar, alignment, size,
|
|
||||||
* position and many other things that are required
|
|
||||||
* to fully capture the state of the SplitPane.
|
|
||||||
* We pack all of this into a cute little BMessage
|
|
||||||
* so that it is esally expandable and can be saved
|
|
||||||
* off easyaly too. The SplitPane System does not
|
|
||||||
* however save the state for you. Your program must
|
|
||||||
* grab the state and save it in its config file.
|
|
||||||
*******************************************************/
|
|
||||||
BMessage* SplitPane::GetState(){
|
|
||||||
BMessage *state;
|
|
||||||
|
|
||||||
state = new BMessage(SPLITPANE_STATE);
|
|
||||||
|
|
||||||
state->AddBool("onedetachable",VOneDetachable);
|
|
||||||
state->AddBool("twodetachable",VTwoDetachable);
|
|
||||||
state->AddInt32("align",align);
|
|
||||||
state->AddInt32("pos",pos);
|
|
||||||
state->AddInt32("thick",thickness);
|
|
||||||
state->AddInt32("jump",jump);
|
|
||||||
state->AddInt32("pad",pad);
|
|
||||||
state->AddInt32("minsizeone",MinSizeOne);
|
|
||||||
state->AddInt32("minsizetwo",MinSizeTwo);
|
|
||||||
state->AddBool("poslock",poslocked);
|
|
||||||
state->AddBool("alignlock",alignlocked);
|
|
||||||
return state;
|
|
||||||
// delete state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Sets the state of the SplitPane from a BMessage
|
|
||||||
* like the one recived from GetState().
|
|
||||||
* This is one of three ways the user can rebuild the
|
|
||||||
* state of the SplitPane. The second is to simply
|
|
||||||
* send the SplitPane the state message, it is the
|
|
||||||
* same as calling SetState but it ashyncronouse.
|
|
||||||
* The third way is to use all the Get/Set methouds
|
|
||||||
* for each element of the SplitPane, this way is
|
|
||||||
* long and boarding. I suggest you just send the
|
|
||||||
* View a message :)
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::SetState(BMessage *state){
|
|
||||||
int32 Npos,Nthickness,Njump,Npad,NMSO,NMST;
|
|
||||||
int32 Nalign;//uint
|
|
||||||
|
|
||||||
if(state->FindBool("onedetachable",&VOneDetachable) != B_OK){
|
|
||||||
VOneDetachable = false;
|
|
||||||
}
|
|
||||||
if(state->FindBool("towdetachable",&VTwoDetachable) != B_OK){
|
|
||||||
VTwoDetachable = false;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("align",&Nalign) == B_OK){
|
|
||||||
align = Nalign;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("pos",&Npos) == B_OK){
|
|
||||||
pos = Npos;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("thick",&Nthickness) == B_OK){
|
|
||||||
thickness = Nthickness;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("jump",&Njump) == B_OK){
|
|
||||||
jump = Njump;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("pad",&Npad) == B_OK){
|
|
||||||
pad = Npad;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("minsizeonw",&NMSO) == B_OK){
|
|
||||||
MinSizeOne = NMSO;
|
|
||||||
}
|
|
||||||
if(state->FindInt32("minsizetwo",&NMST) == B_OK){
|
|
||||||
MinSizeTwo = NMST;
|
|
||||||
}
|
|
||||||
if(state->FindBool("poslock",&poslocked) != B_OK){
|
|
||||||
poslocked = false;
|
|
||||||
}
|
|
||||||
if(state->FindBool("alignlock",&alignlocked) != B_OK){
|
|
||||||
alignlocked = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Update();
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************
|
|
||||||
* Ok, hmm what does this do. NOT MUCH. if we get a
|
|
||||||
* STATE message then lets set the state. This is here
|
|
||||||
* to provide a asyncronuse way of seting the state and
|
|
||||||
* also to make life easyer.
|
|
||||||
*******************************************************/
|
|
||||||
void SplitPane::MessageReceived(BMessage *msg){
|
|
||||||
switch(msg->what){
|
|
||||||
case SPLITPANE_STATE:
|
|
||||||
SetState(msg);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
BView::MessageReceived(msg);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
/*******************************************************
|
|
||||||
* SplitPane©
|
|
||||||
*
|
|
||||||
* SplitPane is a usefull UI component. It alows the
|
|
||||||
* use to ajust two view Horizontaly or Vertacly so
|
|
||||||
* that they are a desired size. This type of Pane
|
|
||||||
* shows up most comonly in Mail/News Readers.
|
|
||||||
*
|
|
||||||
* @author YNOP (ynop@acm.org)
|
|
||||||
* @version beta
|
|
||||||
* @date Dec. 10 1999
|
|
||||||
*******************************************************/
|
|
||||||
#ifndef _SPLIT_PANE_VIEW_H
|
|
||||||
#define _SPLIT_PANE_VIEW_H
|
|
||||||
|
|
||||||
#include <Application.h>
|
|
||||||
#include <AppKit.h>
|
|
||||||
// #include <InterfaceKit.h>
|
|
||||||
#include <iostream>
|
|
||||||
#include <ScrollView.h>
|
|
||||||
#define SPLITPANE_STATE 'spst'
|
|
||||||
|
|
||||||
class SplitPane : public BView {
|
|
||||||
public:
|
|
||||||
SplitPane(BRect,const char*,BView*,BView*,uint32);
|
|
||||||
void AddChildOne(BView*);
|
|
||||||
void AddChildTwo(BView* v,bool IsAdded,bool ShowAfterHide);
|
|
||||||
void SetAlignment(uint);
|
|
||||||
uint GetAlignment();
|
|
||||||
void SetBarPosition(int);
|
|
||||||
int GetBarPosition();
|
|
||||||
void SetBarThickness(int);
|
|
||||||
int GetBarThickness();
|
|
||||||
void SetJump(int);
|
|
||||||
int GetJump();
|
|
||||||
bool HasViewOne();
|
|
||||||
bool HasViewTwo();
|
|
||||||
void SetViewOneDetachable(bool);
|
|
||||||
void SetViewTwoDetachable(bool);
|
|
||||||
bool IsViewOneDetachable();
|
|
||||||
bool IsViewTwoDetachable();
|
|
||||||
void SetEditable(bool);
|
|
||||||
bool IsEditable();
|
|
||||||
void SetViewInsetBy(int);
|
|
||||||
int GetViewInsetBy();
|
|
||||||
void SetMinSizeOne(int);
|
|
||||||
int GetMinSizeOne();
|
|
||||||
void SetMinSizeTwo(int);
|
|
||||||
int GetMinSizeTwo();
|
|
||||||
BMessage* GetState();
|
|
||||||
void SetBarLocked(bool);
|
|
||||||
bool IsBarLocked();
|
|
||||||
void SetBarAlignmentLocked(bool);
|
|
||||||
bool IsBarAlignmentLocked();
|
|
||||||
void SetState(BMessage*);
|
|
||||||
virtual void Draw(BRect);
|
|
||||||
virtual void AttachedToWindow();
|
|
||||||
virtual void FrameResized(float,float);
|
|
||||||
virtual void MouseDown(BPoint);
|
|
||||||
virtual void MouseUp(BPoint);
|
|
||||||
virtual void MouseMoved(BPoint,uint32,const BMessage*);
|
|
||||||
virtual void MessageReceived(BMessage*);
|
|
||||||
//void MakePaneTwoFocus();
|
|
||||||
private:
|
|
||||||
void Update();
|
|
||||||
BView *PaneOne;
|
|
||||||
BView *PaneTwo;
|
|
||||||
|
|
||||||
//State info
|
|
||||||
bool VOneDetachable;
|
|
||||||
bool VTwoDetachable;
|
|
||||||
uint align;
|
|
||||||
int pos;
|
|
||||||
int thickness;
|
|
||||||
int jump;
|
|
||||||
int pad;
|
|
||||||
int MinSizeOne;
|
|
||||||
int MinSizeTwo;
|
|
||||||
bool poslocked;
|
|
||||||
bool alignlocked;
|
|
||||||
//end State info
|
|
||||||
|
|
||||||
bool Draggin;
|
|
||||||
BPoint here;
|
|
||||||
bool attached;
|
|
||||||
|
|
||||||
BWindow *WinOne;
|
|
||||||
BWindow *WinTwo;
|
|
||||||
|
|
||||||
BWindow *ConfigWindow;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-1147
File diff suppressed because it is too large
Load Diff
-152
@@ -1,152 +0,0 @@
|
|||||||
/* URLView 2.11
|
|
||||||
written by William Kakes of Tall Hill Software.
|
|
||||||
|
|
||||||
This class provides an underlined and clickable BStringView
|
|
||||||
that will launch the web browser, e-mail program, or FTP client
|
|
||||||
when clicked on. Other features include hover-highlighting,
|
|
||||||
right-click menus, and drag-and-drop support.
|
|
||||||
|
|
||||||
You are free to use URLView in your own programs (both open-source
|
|
||||||
and closed-source) free of charge, but a mention in your read me
|
|
||||||
file or your program's about box would be appreciated. See
|
|
||||||
http://www.tallhill.com for current contact information.
|
|
||||||
|
|
||||||
URLView is provided as-is, with no warranties of any kind. If
|
|
||||||
you use it, you are on your own.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef TH_URL_VIEW_H
|
|
||||||
#define TH_URL_VIEW_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <Cursor.h>
|
|
||||||
#include <List.h>
|
|
||||||
#include <Mime.h>
|
|
||||||
#include <PopUpMenu.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <StringView.h>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// This is the link's mouse cursor (a replica of NetPositive's link cursor).
|
|
||||||
const uint8 url_cursor[] = { 16, 1, 1, 2,
|
|
||||||
// This is the cursor data.
|
|
||||||
0x00, 0x00, 0x38, 0x00, 0x24, 0x00, 0x24, 0x00,
|
|
||||||
0x13, 0xe0, 0x12, 0x5c, 0x09, 0x2a, 0x08, 0x01,
|
|
||||||
0x3c, 0x21, 0x4c, 0x71, 0x42, 0x71, 0x30, 0xf9,
|
|
||||||
0x0c, 0xf9, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
|
|
||||||
// This is the cursor mask.
|
|
||||||
0x00, 0x00, 0x38, 0x00, 0x3c, 0x00, 0x3c, 0x00,
|
|
||||||
0x1f, 0xe0, 0x1f, 0xfc, 0x0f, 0xfe, 0x0f, 0xff,
|
|
||||||
0x3f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x3f, 0xff,
|
|
||||||
0x0f, 0xff, 0x03, 0xfe, 0x01, 0xf8, 0x00, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// The default link color, blue.
|
|
||||||
const rgb_color blue = { 0, 0, 255 };
|
|
||||||
// The default clicked-link color, red.
|
|
||||||
const rgb_color dark_green = { 107, 142, 035 };
|
|
||||||
// The default link hover color, dark blue.
|
|
||||||
const rgb_color dark_blue = { 0, 0, 120 };
|
|
||||||
// The default disabled color, gray.
|
|
||||||
const rgb_color gray = { 100, 100, 100 };
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class URLView : public BStringView {
|
|
||||||
public:
|
|
||||||
URLView( BRect frame, const char *name, const char *label, const char *url,
|
|
||||||
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
|
||||||
uint32 flags = B_WILL_DRAW );
|
|
||||||
~URLView();
|
|
||||||
|
|
||||||
|
|
||||||
virtual void AttachedToWindow();
|
|
||||||
virtual void Draw( BRect updateRect );
|
|
||||||
virtual void MessageReceived( BMessage *message );
|
|
||||||
virtual void MouseDown( BPoint point );
|
|
||||||
virtual void MouseMoved( BPoint point, uint32 transit, const BMessage *message );
|
|
||||||
virtual void MouseUp( BPoint point );
|
|
||||||
virtual void WindowActivated( bool active );
|
|
||||||
|
|
||||||
virtual void AddAttribute( const char *name, const char *value );
|
|
||||||
virtual bool IsEnabled();
|
|
||||||
virtual void SetColor( rgb_color color );
|
|
||||||
virtual void SetColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
||||||
virtual void SetClickColor( rgb_color color );
|
|
||||||
virtual void SetClickColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
||||||
virtual void SetDisabledColor( rgb_color color );
|
|
||||||
virtual void SetDisabledColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
||||||
virtual void SetDraggable( bool draggable );
|
|
||||||
virtual void SetEnabled( bool enabled );
|
|
||||||
virtual void SetHoverColor( rgb_color color );
|
|
||||||
virtual void SetHoverColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
||||||
virtual void SetHoverEnabled( bool hover );
|
|
||||||
virtual void SetIconSize( icon_size iconSize );
|
|
||||||
virtual void SetUnderlineThickness( int thickness );
|
|
||||||
virtual void SetURL( const char *url );
|
|
||||||
//virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *message);
|
|
||||||
// virtual void MouseUp(BPoint point);
|
|
||||||
// virtual void MouseDown(BPoint point);
|
|
||||||
int mouseStateInfo;
|
|
||||||
int mouseMovedInfo;
|
|
||||||
int mouseX;
|
|
||||||
int mouseY;
|
|
||||||
uint mouseLButton;
|
|
||||||
uint mouseMButton;
|
|
||||||
uint mouseRButton;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void CopyToClipboard();
|
|
||||||
void CreateBookmark( const BString *fullName, const BString *title );
|
|
||||||
void CreatePerson( const BString *fullName, const BString *title );
|
|
||||||
BPopUpMenu *CreatePopupMenu();
|
|
||||||
void DoBookmarkDrag();
|
|
||||||
void DoPersonDrag();
|
|
||||||
BString GetImportantURL();
|
|
||||||
BRect GetTextRect();
|
|
||||||
BRect GetURLRect();
|
|
||||||
bool IsEmailLink();
|
|
||||||
bool IsFTPLink();
|
|
||||||
bool IsHTMLLink();
|
|
||||||
void LaunchURL();
|
|
||||||
void Redraw();
|
|
||||||
void WriteAttributes( int fd );
|
|
||||||
|
|
||||||
BString *url;
|
|
||||||
rgb_color color;
|
|
||||||
rgb_color clickColor;
|
|
||||||
rgb_color hoverColor;
|
|
||||||
rgb_color disabledColor;
|
|
||||||
bool enabled;
|
|
||||||
bool hoverEnabled;
|
|
||||||
bool draggable;
|
|
||||||
int underlineThickness;
|
|
||||||
int iconSize;
|
|
||||||
|
|
||||||
bool selected;
|
|
||||||
bool hovering;
|
|
||||||
bool draggedOut;
|
|
||||||
bool inPopup;
|
|
||||||
const BCursor *linkCursor;
|
|
||||||
BPoint dragOffset;
|
|
||||||
BList *attributes;
|
|
||||||
|
|
||||||
|
|
||||||
int prevMouseStateInfo;
|
|
||||||
typedef struct kp {
|
|
||||||
BString *key;
|
|
||||||
BString *value;
|
|
||||||
} KeyPair;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // TH_URL_VIEW
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
|
|
||||||
resource vector_icon {
|
|
||||||
$"6E6369660E0500020006023C43C6B9E5E23A85A83CEE414268F44A445900C6D7"
|
|
||||||
$"F5FF6B94DD03EC66660200060238C5F1BB105D3DFDC23B9CD045487847B50700"
|
|
||||||
$"FFFFFFFFC1CCFF020006023B3049396B0ABA90833C646E4A101543299500FFFF"
|
|
||||||
$"FFFFEBEFFF020006023C71E33A0C78BA15E43C7D2149055549455700E3EDFFFF"
|
|
||||||
$"9EC2FF03FFACAC0200060239D53438FFCBBBC1973C666F4ADC3246DC6C00C1CC"
|
|
||||||
$"FFFFFFFFFF03003CB0020006023C0AE63B3927BC611E3D03FF4C25624A1A9600"
|
|
||||||
$"A3043CFFFF90AF03C93B3B030D296402000602BD498B3E1159BF219BBE7D2F4C"
|
|
||||||
$"1B8F4A331300BD0F0FFFE98484040174100A08325E385E40564E5E545E605058"
|
|
||||||
$"4C3E510A062E2C2E3E3E454A3C4A2A3A250A042E2C2E3E3E453E320A042E2C3E"
|
|
||||||
$"324A2A3A250A043E323E454A3C4A2A0A0338423C4D3C440A0622422254325C3E"
|
|
||||||
$"513E402E3A0A0422422254325C32490A04224232493E402E3A0A043249325C3E"
|
|
||||||
$"513E400A063E423E544E5C5A505A3F4A390A04C222C20F4E495A3F523C0A043E"
|
|
||||||
$"42C222C20F523C4A390A054151C08BC8834E5C4E49C22AC2130A053E423E54C0"
|
|
||||||
$"8BC8834151C22AC2130A044E494E5C5A505A3F110A0D0100000A0001061815FF"
|
|
||||||
$"01178400040A00010618001501178600040A010107000A080109000A0B010520"
|
|
||||||
$"20210A050108000A00010A1001178400040A02010D000A0A010E000A0902040F"
|
|
||||||
$"000A06010B000A0C010C000A0001011001178400040A030102000A040103000A"
|
|
||||||
$"07010400"
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
resource app_signature "application/x-vnd.yab-app";
|
|
||||||
|
|
||||||
resource app_version {
|
|
||||||
major = 1,
|
|
||||||
middle = 7,
|
|
||||||
minor = 5,
|
|
||||||
|
|
||||||
variety = B_APPV_FINAL,
|
|
||||||
internal = 3,
|
|
||||||
|
|
||||||
short_info = "Yab BASIC programming language",
|
|
||||||
long_info = "Yab allows fast prototyping with simple and clean code. yab contains a large number of BeAPI specific commands for GUI creation and much, much more."
|
|
||||||
};
|
|
||||||
|
|
||||||
resource app_flags 1;
|
|
||||||
Binary file not shown.
@@ -1,117 +0,0 @@
|
|||||||
#include <Bitmap.h>
|
|
||||||
#include <Path.h>
|
|
||||||
#include <Picture.h>
|
|
||||||
#include <Region.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include "YabWindow.h"
|
|
||||||
#include "YabBitmapView.h"
|
|
||||||
|
|
||||||
YabBitmapView::YabBitmapView(BRect frame, const char *name, uint32 resizingMode, uint32 flags)
|
|
||||||
: BView(frame, name, resizingMode, flags)
|
|
||||||
{
|
|
||||||
bmp = new BBitmap(BRect(0,0, frame.Width(), frame.Height()), B_RGBA32, true);
|
|
||||||
BView *myView = new BView(BRect(0,0, frame.Width(), frame.Height()), "canvas", B_FOLLOW_NONE, 0);
|
|
||||||
bmp->AddChild(myView);
|
|
||||||
SetDrawingMode(B_OP_COPY);
|
|
||||||
SetViewColor(0,0,0,255);
|
|
||||||
mouseMovedInfo = 1;
|
|
||||||
mouseStateInfo = -1;
|
|
||||||
prevMouseStateInfo = 0;
|
|
||||||
mouseX = 0;
|
|
||||||
mouseY = 0;
|
|
||||||
mouseLButton = 0;
|
|
||||||
mouseMButton = 0;
|
|
||||||
mouseRButton = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
YabBitmapView::~YabBitmapView()
|
|
||||||
{
|
|
||||||
delete bmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
BBitmap* YabBitmapView::GetBitmap()
|
|
||||||
{
|
|
||||||
return bmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
BView* YabBitmapView::GetBitmapView()
|
|
||||||
{
|
|
||||||
return bmp->FindView("canvas");
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabBitmapView::Draw(BRect updateRect)
|
|
||||||
{
|
|
||||||
DrawBitmap(bmp, updateRect, updateRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabBitmapView::MouseMoved(BPoint point, uint32 transit, const BMessage *message)
|
|
||||||
{
|
|
||||||
BPoint ptCursor;
|
|
||||||
uint32 uButtons = 0;
|
|
||||||
GetMouse(&ptCursor, &uButtons, true);
|
|
||||||
|
|
||||||
mouseX = (int)ptCursor.x;
|
|
||||||
mouseY = (int)ptCursor.y;
|
|
||||||
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
||||||
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
||||||
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
||||||
|
|
||||||
switch(transit)
|
|
||||||
{
|
|
||||||
case B_INSIDE_VIEW:
|
|
||||||
if(prevMouseStateInfo==1)
|
|
||||||
mouseStateInfo = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mouseStateInfo = 1;
|
|
||||||
prevMouseStateInfo = 1;
|
|
||||||
}
|
|
||||||
mouseMovedInfo = 0;
|
|
||||||
break;
|
|
||||||
case B_ENTERED_VIEW:
|
|
||||||
mouseStateInfo = 1;
|
|
||||||
mouseMovedInfo = 0;
|
|
||||||
break;
|
|
||||||
case B_OUTSIDE_VIEW:
|
|
||||||
mouseStateInfo = 2;
|
|
||||||
mouseMovedInfo = 1;
|
|
||||||
break;
|
|
||||||
case B_EXITED_VIEW:
|
|
||||||
mouseStateInfo = 3;
|
|
||||||
mouseMovedInfo = 1;
|
|
||||||
prevMouseStateInfo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
BView::MouseMoved(point, transit, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabBitmapView::MouseDown(BPoint point)
|
|
||||||
{
|
|
||||||
BPoint ptCursor;
|
|
||||||
uint32 uButtons = 0;
|
|
||||||
GetMouse(&ptCursor, &uButtons, false);
|
|
||||||
|
|
||||||
mouseX = (int)ptCursor.x;
|
|
||||||
mouseY = (int)ptCursor.y;
|
|
||||||
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
||||||
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
||||||
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
||||||
mouseStateInfo = 4;
|
|
||||||
BView::MouseDown(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabBitmapView::MouseUp(BPoint point)
|
|
||||||
{
|
|
||||||
BPoint ptCursor;
|
|
||||||
uint32 uButtons = 0;
|
|
||||||
GetMouse(&ptCursor, &uButtons, false);
|
|
||||||
|
|
||||||
mouseX = (int)ptCursor.x;
|
|
||||||
mouseY = (int)ptCursor.y;
|
|
||||||
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
||||||
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
||||||
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
||||||
mouseStateInfo = 5;
|
|
||||||
BView::MouseUp(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#ifndef YABBITMAPVIEW_H
|
|
||||||
#define YABBITMAPVIEW_H
|
|
||||||
|
|
||||||
#include <View.h>
|
|
||||||
|
|
||||||
class YabBitmapView : public BView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabBitmapView(BRect frame, const char *name, uint32 resizingMode, uint32 flags);
|
|
||||||
~YabBitmapView();
|
|
||||||
virtual void Draw(BRect updateRect);
|
|
||||||
BBitmap* GetBitmap();
|
|
||||||
BView* GetBitmapView();
|
|
||||||
BBitmap *bmp;
|
|
||||||
|
|
||||||
virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *message);
|
|
||||||
virtual void MouseUp(BPoint point);
|
|
||||||
virtual void MouseDown(BPoint point);
|
|
||||||
int mouseStateInfo;
|
|
||||||
int mouseMovedInfo;
|
|
||||||
int mouseX;
|
|
||||||
int mouseY;
|
|
||||||
uint mouseLButton;
|
|
||||||
uint mouseMButton;
|
|
||||||
uint mouseRButton;
|
|
||||||
private:
|
|
||||||
int prevMouseStateInfo;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
#include <Directory.h>
|
|
||||||
#include <Entry.h>
|
|
||||||
#include <FilePanel.h>
|
|
||||||
#include <Messenger.h>
|
|
||||||
#include <Window.h>
|
|
||||||
#include "YabFilePanel.h"
|
|
||||||
#include "YabFilePanelLooper.h"
|
|
||||||
|
|
||||||
BEntry *YabFilePanel::MyFilePanel(const char *name, const char *directory, const char* filename, int mode)
|
|
||||||
{
|
|
||||||
BEntry *myEntry = NULL;
|
|
||||||
entry_ref ref;
|
|
||||||
|
|
||||||
sem_id semaphore = create_sem(0, "yabfilepanel");
|
|
||||||
YabFilePanelLooper *myLooper = new YabFilePanelLooper(semaphore);
|
|
||||||
myLooper->Run();
|
|
||||||
|
|
||||||
if(directory)
|
|
||||||
{
|
|
||||||
myEntry=new BEntry(directory);
|
|
||||||
if(myEntry->GetRef(&ref)!=B_OK)
|
|
||||||
{
|
|
||||||
myEntry->Unset();
|
|
||||||
myEntry->SetTo("/boot/home/");
|
|
||||||
myEntry->GetRef(&ref);
|
|
||||||
}
|
|
||||||
myEntry->Unset();
|
|
||||||
delete myEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
BFilePanel *myFilePanel = NULL;
|
|
||||||
switch(mode)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
myFilePanel = new BFilePanel(B_OPEN_PANEL, new BMessenger(myLooper, myLooper), &ref, B_FILE_NODE, false, NULL, NULL, true, true);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
myFilePanel = new BFilePanel(B_SAVE_PANEL, new BMessenger(myLooper, myLooper), &ref, B_FILE_NODE, false, NULL, NULL, true, true);
|
|
||||||
if (filename) myFilePanel->SetSaveText(filename);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
myFilePanel = new BFilePanel(B_OPEN_PANEL, new BMessenger(myLooper, myLooper), &ref, B_DIRECTORY_NODE, false, NULL, NULL, true, true);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
myFilePanel = new BFilePanel(B_OPEN_PANEL, new BMessenger(myLooper, myLooper), &ref, B_FILE_NODE|B_DIRECTORY_NODE, false, NULL, NULL, true, true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(name) myFilePanel->Window()->SetTitle(name);
|
|
||||||
myFilePanel->Show();
|
|
||||||
|
|
||||||
bool inloop = true;
|
|
||||||
while(inloop)
|
|
||||||
{
|
|
||||||
while(acquire_sem_etc(semaphore, 1, B_RELATIVE_TIMEOUT, 10000)==B_TIMED_OUT) ;
|
|
||||||
|
|
||||||
myEntry = myLooper->GetChosenFile();
|
|
||||||
inloop = false;
|
|
||||||
/*
|
|
||||||
if(mode!=2)
|
|
||||||
inloop = false;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(myEntry->IsDirectory())
|
|
||||||
inloop = false;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myFilePanel->Show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
myLooper->Lock();
|
|
||||||
myLooper->Quit();
|
|
||||||
|
|
||||||
delete_sem(semaphore);
|
|
||||||
delete myFilePanel;
|
|
||||||
return myEntry;
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#ifndef YABFILEPANEL_H
|
|
||||||
#define YABFILEPANEL_H
|
|
||||||
|
|
||||||
class YabFilePanel
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BEntry *MyFilePanel(const char *name, const char *directory, const char* filename, int panelType);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
#include <Entry.h>
|
|
||||||
#include <Directory.h>
|
|
||||||
#include "YabFilePanelLooper.h"
|
|
||||||
|
|
||||||
YabFilePanelLooper::YabFilePanelLooper(sem_id semaphore) : BLooper("YabFilePanelLooper")
|
|
||||||
{
|
|
||||||
myEntry=new BEntry();
|
|
||||||
mySemaphore = semaphore;
|
|
||||||
}
|
|
||||||
|
|
||||||
BEntry *YabFilePanelLooper::GetChosenFile()
|
|
||||||
{
|
|
||||||
return myEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabFilePanelLooper::MessageReceived(BMessage *msg)
|
|
||||||
{
|
|
||||||
switch(msg->what)
|
|
||||||
{
|
|
||||||
case B_REFS_RECEIVED:
|
|
||||||
{
|
|
||||||
entry_ref ref;
|
|
||||||
if (msg->FindRef("refs", 0, &ref)==B_OK)
|
|
||||||
myEntry->SetTo(&ref);
|
|
||||||
else
|
|
||||||
myEntry->Unset();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_SAVE_REQUESTED:
|
|
||||||
{
|
|
||||||
const char *selected;
|
|
||||||
entry_ref ref;
|
|
||||||
|
|
||||||
if (msg->FindString("name", &selected)!=B_OK)
|
|
||||||
myEntry->Unset();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (msg->FindRef("directory", 0, &ref)==B_OK)
|
|
||||||
{
|
|
||||||
BDirectory *myDirectory = new BDirectory(&ref);
|
|
||||||
myEntry->SetTo(myDirectory, selected);
|
|
||||||
myDirectory->Unset();
|
|
||||||
delete myDirectory;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
myEntry->Unset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_CANCEL:
|
|
||||||
release_sem(mySemaphore);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#ifndef YABFPLOOPER_H
|
|
||||||
#define YABFPLOOPER_H
|
|
||||||
|
|
||||||
#include <Looper.h>
|
|
||||||
#include <Message.h>
|
|
||||||
#include <Entry.h>
|
|
||||||
|
|
||||||
class YabFilePanelLooper : public BLooper
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabFilePanelLooper(sem_id semaphore);
|
|
||||||
void MessageReceived(BMessage *msg);
|
|
||||||
BEntry *GetChosenFile();
|
|
||||||
private:
|
|
||||||
BEntry *myEntry;
|
|
||||||
sem_id mySemaphore;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-11085
File diff suppressed because it is too large
Load Diff
@@ -1,534 +0,0 @@
|
|||||||
#ifndef YABINTERFACE_H
|
|
||||||
#define YABINTERFACE_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#include <Application.h>
|
|
||||||
#include <FilePanel.h>
|
|
||||||
#include <GraphicsDefs.h>
|
|
||||||
#include <ListItem.h>
|
|
||||||
#include <Menu.h>
|
|
||||||
#include <PropertyInfo.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <TranslatorRoster.h>
|
|
||||||
#include "YabList.h"
|
|
||||||
#include "global.h"
|
|
||||||
#include "config.h"
|
|
||||||
#include <FileGameSound.h>
|
|
||||||
class YabInterface : public BApplication
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabInterface(int argc, char** argv, const char* signature);
|
|
||||||
~YabInterface();
|
|
||||||
|
|
||||||
status_t GetSupportedSuites(BMessage *msg);
|
|
||||||
BHandler *ResolveSpecifier(BMessage *msg, int32 index, BMessage *spec, int32 form, const char *prop);
|
|
||||||
const char* GetApplicationDirectory();
|
|
||||||
void OpenWindow(const BRect frame, const char* id, const char* title);
|
|
||||||
int CloseWindow(const char* view);
|
|
||||||
void MessageReceived(BMessage *message);
|
|
||||||
bool QuitRequested();
|
|
||||||
bool ExitRequested();
|
|
||||||
void CreateButton(BRect frame, const char* id, const char* title, const char* window);
|
|
||||||
int CreateImage(BPoint coordinates, const char* imagefile, const char* window);
|
|
||||||
int CreateImage(BRect frame, const char* imagefile, const char* window);
|
|
||||||
int CreateSVG(BRect frame, const char* imagefile, const char* window);
|
|
||||||
void DrawText(BPoint coordinates, const char* text, const char* window);
|
|
||||||
void DrawRect(BRect frame, const char* window);
|
|
||||||
void DrawClear(const char* window, bool isExit);
|
|
||||||
void CreateAlert(const char* text, const char* button1, const char* option);
|
|
||||||
void CreateMenu(const char* menuhead, const char* menuitem, const char *shortcut, const char* window);
|
|
||||||
void CreateTextControl(BRect frame, const char *id, const char* label, const char* text, const char* window);
|
|
||||||
void CreateCheckBox(double x, double y, const char *id, const char* label, int isActivated, const char* window);
|
|
||||||
void CreateRadioButton(double x, double y, const char* groupID, const char* label, int isActivated, const char* window);
|
|
||||||
void CreateListBox(BRect frame, const char* title, int scrollbar, const char* window);
|
|
||||||
void CreateDropBox(BRect frame, const char* title, const char* label, const char* window);
|
|
||||||
void CreateItem(const char* id, const char* item);
|
|
||||||
void RemoveItem(const char* title, const char* item);
|
|
||||||
void ClearItems(const char* title);
|
|
||||||
void CreateText(double x, double y, const char *id, const char* text, const char* window);
|
|
||||||
void Text2(BRect frame, const char *id, const char* text, const char* window);
|
|
||||||
void TextAlign(const char* txt, const char *option);
|
|
||||||
const char* LoadFilePanel(const char* mode, const char* title, const char* directory);
|
|
||||||
const char* SaveFilePanel(const char* mode, const char* title, const char* directory, const char*filename);
|
|
||||||
void SetLayout(const char* layout, const char* window);
|
|
||||||
void WindowSet(const char* option, const char* value, const char* window);
|
|
||||||
void WindowSet(const char* option, int r, int g, int b, const char* window);
|
|
||||||
void WindowSet(const char* option, double x, double y, const char* window);
|
|
||||||
void WindowSet(const char* option, const char* window);
|
|
||||||
void WindowClear(const char* window);
|
|
||||||
void TextEdit(BRect frame, const char* title, int scrollbar, const char* window);
|
|
||||||
void TextAdd(const char* title, const char* text);
|
|
||||||
void TextSet(const char* title, const char* option);
|
|
||||||
void TextSet(const char* title, const char* option, int value);
|
|
||||||
void TextSet(const char* title, const char* option, const char* value);
|
|
||||||
void TextColor(const char* title, const char* option, const char* command);
|
|
||||||
void TextColor(const char* title, const char* option, int r, int g, int b);
|
|
||||||
void TextClear(const char* title);
|
|
||||||
const char* TextGet(const char* title);
|
|
||||||
const char* TextGet(const char* title, int linenum);
|
|
||||||
const char* TextGet6(const char* title, const char* option);
|
|
||||||
int TextGet(const char* title, const char* option);
|
|
||||||
double TextGet(const char* title, const char* option, int line);
|
|
||||||
int TextGet(const char* title, const char* option, const char* option2);
|
|
||||||
void DrawSet1(const char* option, const char* window);
|
|
||||||
void DrawSet2(int fillorstroke, const char* mypattern);
|
|
||||||
void View(BRect frame, const char* id, const char* view);
|
|
||||||
void BoxView(BRect frame, const char* id, const char* text, int lineType, const char* view);
|
|
||||||
void BoxViewSet(const char* id, const char* option, const char* value);
|
|
||||||
void Tab(BRect frame, const char* id, const char* names, const char* view);
|
|
||||||
void TabSet(const char* id, int num);
|
|
||||||
void TabAdd(const char* id, const char* name);
|
|
||||||
void TabDel(const char* id, int num);
|
|
||||||
int TabViewGet(const char* id);
|
|
||||||
void DrawDot(double x, double y, const char* window);
|
|
||||||
void DrawLine(double x1, double y1, double x2, double y2, const char* window);
|
|
||||||
void DrawCircle(double x, double y, double r, const char* window);
|
|
||||||
void DrawEllipse(double x, double y, double r1, double r2, const char* window);
|
|
||||||
void DrawCurve(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, const char* window);
|
|
||||||
void Slider(BRect frame, const char* id, const char* title, int min, int max, const char* view);
|
|
||||||
void Slider(BRect frame, const char* id, const char* title, int min, int max, const char* option, const char* view);
|
|
||||||
void SetSlider(const char* id, const char* label1, const char* label2);
|
|
||||||
void SetSlider(const char* id, const char* bottomtop, int count);
|
|
||||||
void SetSlider(const char* id, const char* part, int r, int g, int b);
|
|
||||||
void SetSlider(const char* id, int value);
|
|
||||||
void SetOption(const char* id, const char* option, const char* value);
|
|
||||||
void SetOption(const char* id, const char* option, int r, int g, int b);
|
|
||||||
void SetOption(const char* id, const char* option, double x, double y);
|
|
||||||
void SetOption(const char* id, const char* option);
|
|
||||||
void SetOption(const char* id, const char* option, int value);
|
|
||||||
void DropZone(const char* view);
|
|
||||||
void ColorControl(double x, double y, const char* id, const char* view);
|
|
||||||
void ColorControl(const char* id, int r, int g, int b);
|
|
||||||
void TextControl(const char* id, const char* text);
|
|
||||||
void TextControl(const char* id, int mode);
|
|
||||||
void TextControl(const char* id, const char* option, const char* value);
|
|
||||||
void TextControl(const char* id);
|
|
||||||
void TreeBox1(BRect frame, const char* id, int scrollbarType, const char* view);
|
|
||||||
void TreeBox2(const char* id, const char* item);
|
|
||||||
void TreeBox3(const char* id, const char* head, const char* item, int isExpanded);
|
|
||||||
void TreeBox4(const char* id);
|
|
||||||
void TreeBox5(const char* id, const char* item);
|
|
||||||
void TreeBox7(const char* id, int pos);
|
|
||||||
void TreeBox8(const char* id, int pos);
|
|
||||||
void TreeBox9(const char* id, const char* head, const char* item);
|
|
||||||
void TreeBox10(const char* id, const char* head);
|
|
||||||
void TreeBox11(const char* id, const char* head);
|
|
||||||
void TreeBox12(const char* id, const char* item, int pos);
|
|
||||||
void Launch(const char* strg);
|
|
||||||
const char* TreeboxGet(const char* treebox, int pos);
|
|
||||||
int TreeboxCount(const char* treebox);
|
|
||||||
void ButtonImage(double x, double y,const char* id,const char* enabledon, const char* enabledoff, const char* disabled, const char* view);
|
|
||||||
void 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);
|
|
||||||
void CheckboxSet(const char* id, int isActivated);
|
|
||||||
void RadioSet(const char* id, int isActivated);
|
|
||||||
void ToolTips(const char* view, const char* text);
|
|
||||||
void ToolTipsNew(const char* view, const char* text, const char* color, int r, int g, int b);
|
|
||||||
void ToolTipsColor(const char* color, int r, int g, int b);
|
|
||||||
void TreeSort(const char* view);
|
|
||||||
void ListSort(const char* view);
|
|
||||||
void FileBox(BRect frame, const char* id, bool scrollbartype, const char* option, const char* view);
|
|
||||||
void FileBoxAdd(const char* id, const char* name, int32 pos, double maxWidth, double minWidth, double width, const char* option);
|
|
||||||
void FileBoxClear(const char* view);
|
|
||||||
void ColumnBoxAdd(const char* id, int column, int position, int height, const char* item);
|
|
||||||
void ColumnBoxSelect(const char *columnbox, int position);
|
|
||||||
void ColumnBoxRemove(const char *columnbox, int position);
|
|
||||||
void ColumnBoxColor(const char *columnbox, const char* option, int r, int g, int b);
|
|
||||||
int Printer(const char* docname, const char *view, const char* config);
|
|
||||||
void PrinterConfig(const char* config);
|
|
||||||
void Calendar(double x, double y, const char* id, const char* format, const char* date, const char* view);
|
|
||||||
const char* Calendar(const char* id);
|
|
||||||
void Calendar(const char* id, const char* date);
|
|
||||||
void MouseSet(const char* opt);
|
|
||||||
void Scrollbar(const char* id, int format, const char* view);
|
|
||||||
void ScrollbarSet(const char* scrollview, const char* option, double position);
|
|
||||||
void ScrollbarSet(const char* scrollview, const char* option, double opt1, double opt2);
|
|
||||||
void ScrollbarSet(const char* scrollview, const char* option);
|
|
||||||
double ScrollbarGet(const char* scrollview, const char* option);
|
|
||||||
const char* ListboxGet(const char* listbox, int pos);
|
|
||||||
int ListboxCount(const char* listbox);
|
|
||||||
void ListboxAdd(const char* listbox, const char* item);
|
|
||||||
void ListboxAdd(const char* listbox, int pos, const char* item);
|
|
||||||
void ListboxSelect(const char* listbox, int pos);
|
|
||||||
void ListboxRemove(const char* listbox, int pos);
|
|
||||||
void SplitView(BRect frame, const char* id, int isVertical, int style, const char* view);
|
|
||||||
void SplitView(const char* splitView, const char* option, double position);
|
|
||||||
void SplitView(const char* splitView, const char* option, double left, double right);
|
|
||||||
double SplitViewGet(const char* splitView, const char* option);
|
|
||||||
void StackViews(BRect frame, const char* id, int number, const char* view);
|
|
||||||
void StackViews(const char* stackView, int num);
|
|
||||||
int StackViewGet(const char* stackView);
|
|
||||||
void DrawSet3(const char* option, int transparency);
|
|
||||||
void TextURL(double x, double y, const char* id, const char* text, const char* url, const char* view);
|
|
||||||
void TextURL(const char* id, const char* option, int r, int g, int b);
|
|
||||||
void Menu(const char* menuHead, int isRadio, const char* view);
|
|
||||||
void SubMenu(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* modifiers, const char* view);
|
|
||||||
void SubMenu(const char* menuHead, const char* menuItem, int isRadio, const char* view);
|
|
||||||
void SpinControl(double x, double y, const char* id, const char* label, int min, int max, int step, const char* view);
|
|
||||||
void SpinControl(const char* spinControl, int value);
|
|
||||||
int SpinControlGet(const char *spinControl);
|
|
||||||
const char* PopUpMenu(double x, double y, const char* menuItems, const char* view);
|
|
||||||
void DropBoxSelect(const char* dropbox, int position);
|
|
||||||
void DropBoxClear(const char* dropbox);
|
|
||||||
void DropBoxRemove(const char* dropbox, int position);
|
|
||||||
int DropBoxCount(const char* dropbox);
|
|
||||||
const char* DropBoxGet(const char* dropbox, int position);
|
|
||||||
int ColorControlGet(const char* colorcontrol, const char* option);
|
|
||||||
int SliderGet(const char* slider);
|
|
||||||
void SubMenu3(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* option, const char* view);
|
|
||||||
void Menu3(const char* menuHead, const char* menuItem, const char* option,const char* view);
|
|
||||||
double ScrollbarWidth();
|
|
||||||
double MenuHeight();
|
|
||||||
double TabHeight();
|
|
||||||
const char* ColumnBoxGet(const char *columnbox, int column, int position);
|
|
||||||
int ColumnBoxCount(const char *columnbox);
|
|
||||||
const char* TextControlGet(const char* id);
|
|
||||||
int WindowGet(const char* view, const char* option);
|
|
||||||
int ViewGet(const char* view, const char* option); //vasper
|
|
||||||
double DrawGet(const char* option, const char* txt, const char* view);
|
|
||||||
int DrawGet(BPoint coord, const char* option, const char* view);
|
|
||||||
const char* DrawGet(const char* option);
|
|
||||||
void ClipboardCopy(const char* text);
|
|
||||||
const char* ClipboardPaste();
|
|
||||||
int DeskbarParam(const char* option);
|
|
||||||
int DesktopParam(bool isWidth);
|
|
||||||
int NewAlert(const char* text, const char* button1, const char* button2, const char* button3, const char* option);
|
|
||||||
int ThreadKill(const char* option, int id);
|
|
||||||
int ThreadGet(const char* option, const char* appname);
|
|
||||||
const int IsMouseIn(const char* view);
|
|
||||||
const char* GetMouseIn();
|
|
||||||
const char* GetMouseMessages(const char* view);
|
|
||||||
const char* KeyboardMessages(const char* view);
|
|
||||||
const char* GetMessageString();
|
|
||||||
int MessageSend(const char* app, const char* msg);
|
|
||||||
void SetLocalize(const char* path);
|
|
||||||
void Bitmap(double w, double h, const char* id);
|
|
||||||
int BitmapColor(double x, double y, const char* id, const char* option);
|
|
||||||
void BitmapDraw(double x, double y, const char* bitmap, const char* mode, const char* view);
|
|
||||||
void BitmapDraw(BRect frame, const char* bitmap, const char* mode, const char* view);
|
|
||||||
void BitmapGet(BRect frame, const char* id, const char* bitmap);
|
|
||||||
void BitmapGet(double w, const char* id, const char* path);
|
|
||||||
int BitmapGet(const char* id, const char* option);
|
|
||||||
int BitmapLoad(const char* id, const char* option);
|
|
||||||
void BitmapGetIcon(const char* id, const char* option, const char* path);
|
|
||||||
void BitmapDrag(const char* bitmap);
|
|
||||||
void BitmapRemove(const char* bitmap);
|
|
||||||
void Screenshot(BRect frame, const char* bitmap);
|
|
||||||
int BitmapSave(const char* id, const char* filename, const char* type);
|
|
||||||
void Canvas(BRect frame, const char* id, const char* view);
|
|
||||||
int Sound(const char* filename);
|
|
||||||
int SoundStop(int32 id);
|
|
||||||
int SoundWait(int32 id);
|
|
||||||
int MediaSound(const char* filename);
|
|
||||||
int MediaSoundStop(int32 finished);
|
|
||||||
int IsComputerOn();
|
|
||||||
void ShortCut(const char* view, const char* key, const char* msg);
|
|
||||||
void DrawSet(const char* option, const char* color,const char* view);
|
|
||||||
void Treebox13(const char* id,const char* option, int pos);
|
|
||||||
int TreeboxGetOpt(const char* id, const char* option, int pos);
|
|
||||||
int ListboxGetNum(const char* id);
|
|
||||||
int DropboxGetNum(const char* id);
|
|
||||||
int TreeboxGetNum(const char* id);
|
|
||||||
int ColumnboxGetNum(const char* id);
|
|
||||||
void Attribute1(const char* type, const char* name, const char* value, const char* filename);
|
|
||||||
void AttributeClear(const char* name, const char* filename);
|
|
||||||
const char* AttributeGet1(const char* name, const char* filename);
|
|
||||||
double AttributeGet2(const char* name, const char* filename);
|
|
||||||
|
|
||||||
const int GetErrorCode();
|
|
||||||
void Error(const char* id, const char* type);
|
|
||||||
void ErrorGen(const char* msg);
|
|
||||||
void SetCurrentLineNumber(int line, const char* libname);
|
|
||||||
void SetMainFileName(const char* name);
|
|
||||||
void KillThread(int code);
|
|
||||||
void StatusBar(BRect frame, const char* id, const char* label1, const char* label2, const char* view);
|
|
||||||
void StatusBarSet(const char* id, const char* label1, const char* label2, double state);
|
|
||||||
void StatusBarSet(BRect frame, const char* id, const char* view);
|
|
||||||
void StatusBarSet(const char* id, int r, int g, int b);
|
|
||||||
void RefsReceived(BMessage *message);
|
|
||||||
|
|
||||||
private:
|
|
||||||
BFileGameSound* fPlayer;
|
|
||||||
int status;
|
|
||||||
void RemoveView(BView* myView);
|
|
||||||
void GetMMsgInfo(BString &t, int mouseStateInfo, int mouseLButton, int mouseMButton, int mouseRButton, int x, int y, const char* name);
|
|
||||||
BBitmap* loadImage(const char* name);
|
|
||||||
static int compare(BListItem **firstArg, BListItem **secondArg);
|
|
||||||
void CleanupYabTabView(BView* view);
|
|
||||||
void CleanupSubchildView(BView* view);
|
|
||||||
|
|
||||||
BTranslatorRoster *Roster;
|
|
||||||
char ApplicationDirectory[1024];
|
|
||||||
char loadPanel[1280];
|
|
||||||
char columntext[4096];
|
|
||||||
char mousemessagebuffer[64];
|
|
||||||
char keyboardbuffer[27];
|
|
||||||
char messagebuffer[32567];
|
|
||||||
char attrbuffer[32567];
|
|
||||||
char mouseoverbuffer[256];
|
|
||||||
BFilePanel *fopen, *fsave;
|
|
||||||
thread_id myThread;
|
|
||||||
int errorCode;
|
|
||||||
bool drawStroking;
|
|
||||||
int yabAlpha;
|
|
||||||
pattern yabPattern;
|
|
||||||
YabList *viewList;
|
|
||||||
int currentLineNumber;
|
|
||||||
const char* mainFileName;
|
|
||||||
bool exiting;
|
|
||||||
BPropertyInfo *myProps;
|
|
||||||
BString localMessage;
|
|
||||||
BString currentLib;
|
|
||||||
BList *yabbitmaps;
|
|
||||||
BList *yabcanvas;
|
|
||||||
BString lastMouseMsg;
|
|
||||||
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
typedef
|
|
||||||
struct YabInterface
|
|
||||||
YabInterface;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int mmain(int argc, char** argv, YabInterface* yab); /* ANSI C prototypes */
|
|
||||||
extern const char* yi_GetApplicationDirectory(YabInterface *yab);
|
|
||||||
extern void yi_OpenWindow(double x1,double y1,double x2,double y2, const char* id, const char* title, YabInterface* yab);
|
|
||||||
extern int yi_CloseWindow(const char* view, YabInterface* yab);
|
|
||||||
extern void yi_CreateButton(double x1,double y1,double x2,double y2, const char* id, const char* title, const char* window, YabInterface* yab);
|
|
||||||
extern int yi_CreateImage(double x,double y,const char* imagefile, const char* window, YabInterface* yab);
|
|
||||||
extern int yi_CreateImage2(double x1,double y1,double x2, double y2,const char* imagefile, const char* window, YabInterface* yab);
|
|
||||||
extern int yi_CreateSVG(double x1,double y1,double x2, double y2,const char* imagefile, const char* window, YabInterface* yab);
|
|
||||||
extern void yi_CreateMenu(const char* menuhead, const char* menuitem, const char *shortcut, const char* window, YabInterface* yab);
|
|
||||||
extern 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);
|
|
||||||
extern void yi_CreateCheckBox(double x, double y, const char *id, const char* label, int isActivated, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_CreateRadioButton(double x, double y, const char* groupID, const char* label, int isActivated, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_CreateListBox(double x1,double y1,double x2,double y2, const char* title, int scrollbar, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_CreateDropBox(double x1, double y1,double x2,double y2, const char* title,const char* label, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_CreateItem(const char* id,const char* item, YabInterface *yab);
|
|
||||||
extern void yi_RemoveItem(const char* title,const char* item, YabInterface *yab);
|
|
||||||
extern void yi_ClearItems(const char* title, YabInterface *yab);
|
|
||||||
extern void yi_DrawText(double x, double y, const char* text, const char* window, YabInterface* yab);
|
|
||||||
extern void yi_DrawRect(double x1, double y1, double x2, double y2, const char* window, YabInterface* yab);
|
|
||||||
extern void yi_DrawClear(const char* window, YabInterface* yab);
|
|
||||||
extern void yi_CreateAlert(const char* text, const char* button1, const char* type, YabInterface* yab);
|
|
||||||
extern void yi_CreateText(double x, double y, const char *id, const char* text, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_Text2(double x1, double y1, double x2, double y2, const char *id, const char* text, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_TextAlign(const char* txt, const char *option, YabInterface *yab);
|
|
||||||
extern void yi_Translate(char* text, char result[]);
|
|
||||||
extern void yi_MenuTranslate(char* text, char result[]);
|
|
||||||
extern void yi_SetLocalize();
|
|
||||||
extern void yi_StopLocalize();
|
|
||||||
extern const char* yi_LoadFilePanel(const char* mode, const char* title, const char* directory, YabInterface* yab);
|
|
||||||
extern const char* yi_SaveFilePanel(const char* mode, const char* title, const char* directory, const char*filename, YabInterface* yab);
|
|
||||||
extern void yi_SetLayout(const char* layout, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_WindowSet1(const char* option, const char* value, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_WindowSet2(const char* option, int r, int g, int b, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_WindowSet3(const char* option, double x, double y, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_WindowSet4(const char* option, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_WindowClear(const char* window, YabInterface *yab);
|
|
||||||
extern void yi_TextEdit(double x1, double y1, double x2, double y2, const char* title, int scrollbar, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_TextAdd(const char* title, const char* text, YabInterface *yab);
|
|
||||||
extern void yi_TextSet(const char* title, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_TextClear(const char* title, YabInterface *yab);
|
|
||||||
extern const char* yi_TextGet(const char* title, YabInterface *yab);
|
|
||||||
extern const char* yi_TextGet3(const char* title, int linenum, YabInterface *yab);
|
|
||||||
extern const char* yi_TextGet6(const char* title, const char* option, YabInterface *yab);
|
|
||||||
extern double yi_TextGet4(const char* title, const char* option, int line, YabInterface *yab);
|
|
||||||
extern int yi_TextGet5(const char* title, const char* option, const char* option2, YabInterface *yab);
|
|
||||||
extern void yi_TextSet2(const char* title, const char* option, int value, YabInterface *yab);
|
|
||||||
extern void yi_TextSet3(const char* title, const char* option, const char* value, YabInterface *yab);
|
|
||||||
extern void yi_TextColor1(const char* title, const char* option, const char* command, YabInterface *yab);
|
|
||||||
extern void yi_TextColor2(const char* title, const char* option, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern int yi_TextGet2(const char* title, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_DrawSet1(const char* option, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_DrawSet2(int fillorstroke, const char* mypattern, YabInterface *yab);
|
|
||||||
extern void yi_View(double x1, double y1, double x2, double y2, const char* id, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_BoxView(double x1, double y1, double x2, double y2, const char* id, const char* text, int lineType, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_BoxViewSet(const char* id, const char* option, const char* value, YabInterface *yab);
|
|
||||||
extern void yi_Tab(double x1, double y1, double x2, double y2, const char* id, const char* names, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_TabSet(const char* id, int num, YabInterface *yab);
|
|
||||||
extern void yi_TabAdd(const char* id, const char* name, YabInterface *yab);
|
|
||||||
extern void yi_TabDel(const char* id, int num, YabInterface *yab);
|
|
||||||
extern int yi_TabViewGet(const char* id, YabInterface *yab);
|
|
||||||
extern void yi_DrawDot(double x, double y, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_DrawLine(double x1, double y1, double x2, double y2, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_DrawCircle(double x, double y, double r, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_DrawEllipse(double x, double y, double r1, double r2, const char* window, YabInterface *yab);
|
|
||||||
extern void yi_DrawCurve(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, const char* window, YabInterface *yab);
|
|
||||||
extern 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);
|
|
||||||
extern 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);
|
|
||||||
extern void yi_SetSlider1(const char* id, const char* label1, const char* label2, YabInterface *yab);
|
|
||||||
extern void yi_SetSlider2(const char* id, const char* bottomtop, int count, YabInterface *yab);
|
|
||||||
extern void yi_SetSlider3(const char* id, const char* part, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern void yi_SetSlider4(const char* id, int value, YabInterface *yab);
|
|
||||||
extern void yi_SetOption1(const char* id, const char* option, const char* value, YabInterface *yab);
|
|
||||||
extern void yi_SetOption2(const char* id, const char* option, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern void yi_SetOption3(const char* id, const char* option, double x, double y, YabInterface *yab);
|
|
||||||
extern void yi_SetOption4(const char* id, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_SetOption5(const char* id, const char* option, int value, YabInterface *yab);
|
|
||||||
extern void yi_DropZone(const char* view, YabInterface *yab);
|
|
||||||
extern void yi_ColorControl1(double x, double y, const char* id, const char* view, YabInterface* yab);
|
|
||||||
extern void yi_ColorControl2(const char* id, int r, int g, int b, YabInterface* yab);
|
|
||||||
extern void yi_TextControl2(const char* id, const char* text, YabInterface* yab);
|
|
||||||
extern void yi_TextControl3(const char* id, int mode, YabInterface* yab);
|
|
||||||
extern void yi_TextControl5(const char* id, YabInterface* yab);
|
|
||||||
extern void yi_TextControl4(const char* id, const char* option, const char* value, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox1(double x1, double y1, double x2, double y2, const char* id, int scrollbarType, const char* view, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox2(const char* id, const char* item, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox3(const char* id, const char* head, const char* item, int isExpanded, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox4(const char* id, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox5(const char* id, const char* item, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox7(const char* id, int pos, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox8(const char* id, int pos, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox9(const char* id, const char* head, const char* item, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox10(const char* id, const char* head, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox11(const char* id, const char* head, YabInterface* yab);
|
|
||||||
extern void yi_TreeBox12(const char* id, const char* item, int pos, YabInterface* yab);
|
|
||||||
extern const char* yi_TreeboxGet(const char* treebox, int pos, YabInterface* yab);
|
|
||||||
extern int yi_TreeboxCount(const char* treebox, YabInterface* yab);
|
|
||||||
extern void yi_ButtonImage(double x,double y,const char* id,const char* enabledon, const char* enabledoff, const char* disabled, const char* view, YabInterface *yab);
|
|
||||||
extern 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);
|
|
||||||
extern void yi_CheckboxSet(const char* id, int isActivated, YabInterface* yab);
|
|
||||||
extern void yi_RadioSet(const char* id, int isActivated, YabInterface* yab);
|
|
||||||
extern const char* yi_TextControlGet(const char* id, YabInterface* yab);
|
|
||||||
extern void yi_ToolTip(const char* view, const char* text, YabInterface *yab);
|
|
||||||
extern void yi_ToolTipNew(const char* view, const char* text, const char* color, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern void yi_ToolTipColor(const char* color, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern void yi_TreeSort(const char* view, YabInterface *yab);
|
|
||||||
extern void yi_ListSort(const char* view, YabInterface *yab);
|
|
||||||
extern void yi_FileBox(double x1, double y1, double x2, double y2, const char* id, int scrollbartype, const char* option, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_FileBoxAdd2(const char* id, const char* name, int pos, double maxWidth, double minWidth, double width, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_FileBoxClear(const char* view, YabInterface *yab);
|
|
||||||
extern void yi_ColumnBoxAdd(const char* id, int column, int position, int height, const char* item, YabInterface *yab);
|
|
||||||
extern void yi_ColumnBoxSelect(const char *columnbox, int position, YabInterface *yab);
|
|
||||||
extern void yi_ColumnBoxRemove(const char *columnbox, int position, YabInterface *yab);
|
|
||||||
extern void yi_ColumnBoxColor(const char *columnbox, const char* option, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern int yi_Printer(const char* docname, const char *view, const char* config, YabInterface *yab);
|
|
||||||
extern void yi_PrinterConfig(const char* config, YabInterface *yab);
|
|
||||||
extern const char* yi_ColumnBoxGet(const char *columnbox, int column, int position, YabInterface *yab);
|
|
||||||
extern int yi_ColumnBoxCount(const char *columnbox, YabInterface *yab);
|
|
||||||
extern int yi_DeskbarPosition(YabInterface *yab);
|
|
||||||
extern int yi_DeskbarExpanded(YabInterface *yab);
|
|
||||||
extern int yi_DeskbarWidth(YabInterface *yab);
|
|
||||||
extern int yi_DeskbarHeight(YabInterface *yab);
|
|
||||||
extern int yi_DeskbarX(YabInterface *yab);
|
|
||||||
extern int yi_DeskbarY(YabInterface *yab);
|
|
||||||
extern int yi_DesktopWidth(YabInterface *yab);
|
|
||||||
extern int yi_DesktopHeight(YabInterface *yab);
|
|
||||||
extern int yi_WindowGet(const char* view, const char* option, YabInterface *yab);
|
|
||||||
extern int yi_ViewGet(const char* view, const char* option, YabInterface *yab); //vasper
|
|
||||||
extern void yi_ClipboardCopy(const char* text, YabInterface *yab);
|
|
||||||
extern const char* yi_ClipboardPaste(YabInterface *yab);
|
|
||||||
extern int yi_NewAlert(const char* text, const char* button1, const char* button2, const char* button3, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_Calendar1(double x, double y, const char* id, const char* format, const char* date, const char* view, YabInterface *yab);
|
|
||||||
extern const char* yi_Calendar2(const char* id, YabInterface *yab);
|
|
||||||
extern void yi_Calendar3(const char* id, const char* date, YabInterface *yab);
|
|
||||||
extern void yi_MouseSet(const char* opt, YabInterface *yab);
|
|
||||||
extern void yi_Scrollbar(const char* id, int format, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_ScrollbarSet1(const char* scrollview, const char* option, double position, YabInterface *yab);
|
|
||||||
extern void yi_ScrollbarSet2(const char* scrollview, const char* option, double opt1, double opt2, YabInterface *yab);
|
|
||||||
extern void yi_ScrollbarSet3(const char* scrollview, const char* option, YabInterface *yab);
|
|
||||||
extern double yi_ScrollbarGet(const char* scrollview, const char* option, YabInterface *yab);
|
|
||||||
extern const char* yi_ListboxGet(const char* listbox, int pos, YabInterface *yab);
|
|
||||||
extern int yi_ListboxCount(const char* listbox, YabInterface *yab);
|
|
||||||
extern void yi_ListboxAdd1(const char* listbox, const char* item, YabInterface *yab);
|
|
||||||
extern void yi_ListboxAdd2(const char* listbox, int pos, const char* item, YabInterface *yab);
|
|
||||||
extern void yi_ListboxSelect(const char* listbox, int pos, YabInterface *yab);
|
|
||||||
extern void yi_ListboxRemove(const char* listbox, int pos, YabInterface *yab);
|
|
||||||
extern void yi_SplitView1(double x1,double y1,double x2,double y2, const char* id, int isVertical, int style, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_SplitView2(const char* splitView, const char* option, double position, YabInterface *yab);
|
|
||||||
extern void yi_SplitView3(const char* splitView, const char* option, double left, double right, YabInterface *yab);
|
|
||||||
extern double yi_SplitViewGet(const char* splitView, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_StackView1(double x1,double y1,double x2,double y2, const char* id, int number, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_StackView2(const char* stackView, int num, YabInterface *yab);
|
|
||||||
extern int yi_StackViewGet(const char* stackView, YabInterface *yab);
|
|
||||||
extern void yi_DrawSet3(const char* option, int transparency, YabInterface *yab);
|
|
||||||
extern void yi_TextURL1(double x, double y, const char* id, const char* text, const char* url, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_TextURL2(const char* id, const char* option, int r, int g, int b, YabInterface *yab);
|
|
||||||
extern void yi_Menu2(const char* menuHead, int isRadio, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_SubMenu1(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* modifiers, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_SubMenu2(const char* menuHead, const char* menuItem, int isRadio, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_SpinControl1(double x, double y, const char* id, const char* label, int min, int max, int step, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_SpinControl2(const char* spinControl, int value, YabInterface *yab);
|
|
||||||
extern int yi_SpinControlGet(const char *spinControl, YabInterface *yab);
|
|
||||||
extern const char* yi_PopUpMenu(double x, double y, const char* menuItems, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_DropBoxSelect(const char* dropbox, int position, YabInterface *yab);
|
|
||||||
extern void yi_DropBoxClear(const char* dropbox, YabInterface *yab);
|
|
||||||
extern void yi_DropBoxRemove(const char* dropbox, int position, YabInterface *yab);
|
|
||||||
extern int yi_DropBoxCount(const char* dropbox, YabInterface *yab);
|
|
||||||
extern const char* yi_DropBoxGet(const char* dropbox, int position, YabInterface *yab);
|
|
||||||
extern int yi_ColorControlGet(const char* colorcontrol, const char* option, YabInterface *yab);
|
|
||||||
extern int yi_SliderGet(const char* slider, YabInterface *yab);
|
|
||||||
extern void yi_SubMenu3(const char* menuHead, const char* menuItem, const char* subMenuItem, const char* option, const char* view, YabInterface *yab);
|
|
||||||
extern void yi_Menu3(const char* menuHead, const char* menuItem, const char* option,const char* view, YabInterface *yab);
|
|
||||||
extern double yi_MenuHeight(YabInterface *yab);
|
|
||||||
extern double yi_TabHeight(YabInterface *yab);
|
|
||||||
extern double yi_ScrollbarWidth(YabInterface *yab);
|
|
||||||
extern double yi_DrawGet1(const char* option, const char* txt, const char* view, YabInterface* yab);
|
|
||||||
extern double yi_DrawGet2(const char* option, const char* view, YabInterface* yab);
|
|
||||||
extern const char* yi_DrawGet3(const char* option, YabInterface* yab);
|
|
||||||
extern int yi_DrawGet4(double x, double y, const char* option, const char* view, YabInterface* yab);
|
|
||||||
extern void yi_exit(int code, YabInterface *yab);
|
|
||||||
extern void yi_Launch(const char* strg, YabInterface *yab);
|
|
||||||
extern const int yi_IsMouseIn(const char* view, YabInterface* yab);
|
|
||||||
extern const char* yi_GetMouseIn(YabInterface* yab);
|
|
||||||
extern const char* yi_GetMouseMessages(const char* view, YabInterface* yab);
|
|
||||||
extern const char* yi_KeyboardMessages(const char* view, YabInterface* yab);
|
|
||||||
extern const char* yi_CheckMessages(YabInterface* yab);
|
|
||||||
extern int yi_MessageSend(const char* app, const char* msg,YabInterface* yab);
|
|
||||||
extern int yi_ThreadKill(const char* option, int id,YabInterface* yab);
|
|
||||||
extern int yi_ThreadGet(const char* option, const char* appname,YabInterface* yab);
|
|
||||||
extern void yi_Bitmap(double w, double h, const char* id,YabInterface* yab);
|
|
||||||
extern int yi_BitmapColor(double x, double y, const char* id, const char* option, YabInterface *yab);
|
|
||||||
extern void yi_BitmapDraw(double x, double y, const char* bitmap, const char* mode, const char* view,YabInterface* yab);
|
|
||||||
extern void yi_BitmapDraw2(double x1, double y1, double x2, double y2, const char* bitmap, const char* mode, const char* view,YabInterface* yab);
|
|
||||||
extern void yi_BitmapGet(double x1, double y1, double x2, double y2, const char* id, const char* bitmap,YabInterface* yab);
|
|
||||||
extern void yi_BitmapGet2(double w, const char* id, const char* path, YabInterface* yab);
|
|
||||||
extern void yi_BitmapGetIcon(const char* id, const char* option, const char* path, YabInterface* yab);
|
|
||||||
extern int yi_BitmapGetNum(const char* id, const char* option, YabInterface* yab);
|
|
||||||
extern int yi_BitmapLoad(const char* filename, const char* bitmap, YabInterface* yab);
|
|
||||||
extern void yi_BitmapDrag(const char* bitmap,YabInterface* yab);
|
|
||||||
extern void yi_BitmapRemove(const char* bitmap,YabInterface* yab);
|
|
||||||
extern void yi_Screenshot(double x1, double y1, double x2, double y2, const char* bitmap, YabInterface* yab);
|
|
||||||
extern int yi_BitmapSave(const char* id, const char* filename, const char* type, YabInterface* yab);
|
|
||||||
extern void yi_Canvas(double x1, double y1, double x2, double y2, const char* id, const char* view, YabInterface *yab);
|
|
||||||
extern int yi_Sound(const char* filename, YabInterface* yab);
|
|
||||||
extern int yi_SoundStop(int id, YabInterface* yab);
|
|
||||||
extern int yi_SoundWait(int id, YabInterface* yab);
|
|
||||||
extern int yi_MediaSound(const char* filename, YabInterface* yab);
|
|
||||||
extern int yi_MediaSoundStop(int id, YabInterface* yab);
|
|
||||||
extern int yi_IsComputerOn(YabInterface* yab);
|
|
||||||
extern void yi_ShortCut(const char* view, const char* key, const char* msg, YabInterface* yab);
|
|
||||||
extern void yi_DrawSet4(const char* option, const char* color,const char* view, YabInterface* yab);
|
|
||||||
extern void yi_Treebox13(const char* id,const char* option, int pos, YabInterface* yab);
|
|
||||||
extern int yi_TreeboxGetOpt(const char* id, const char* option, int pos, YabInterface* yab);
|
|
||||||
extern int yi_ListboxGetNum(const char* id, YabInterface* yab);
|
|
||||||
extern int yi_DropboxGetNum(const char* id, YabInterface* yab);
|
|
||||||
extern int yi_TreeboxGetNum(const char* id, YabInterface* yab);
|
|
||||||
extern int yi_ColumnboxGetNum(const char* id, YabInterface* yab);
|
|
||||||
extern void yi_SetLocalize2(const char* path, YabInterface* yab);
|
|
||||||
extern void yi_SetCurrentLineNumber(int line, const char* libname, YabInterface* yab);
|
|
||||||
extern void yi_SetMainFileName(const char* name, YabInterface* yab);
|
|
||||||
extern void yi_beep();
|
|
||||||
extern 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);
|
|
||||||
extern void yi_StatusBarSet(const char* id, const char* label1, const char* label2, double state, YabInterface* yab);
|
|
||||||
extern void yi_StatusBarSet2(double x1, double y1, double x2, double y2, const char* id, const char* view, YabInterface* yab);
|
|
||||||
extern void yi_StatusBarSet3(const char* id, int r, int g, int b, YabInterface* yab);
|
|
||||||
extern void yi_Attribute1(const char* type, const char* name, const char* value, const char* filename, YabInterface* yab);
|
|
||||||
extern void yi_AttributeClear(const char* name, const char* filename, YabInterface* yab);
|
|
||||||
extern const char* yi_AttributeGet1(const char* name, const char* filename, YabInterface* yab);
|
|
||||||
extern double yi_AttributeGet2(const char* name, const char* filename, YabInterface* yab);
|
|
||||||
extern char* refsRec; //refs received
|
|
||||||
|
|
||||||
#ifdef LOCALIZE
|
|
||||||
const char* _L(const char* text);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /*YABINTERFACE_H*/
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
#include <List.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include "YabList.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
YabList::YabList()
|
|
||||||
{
|
|
||||||
idList = new BList(1);
|
|
||||||
viewList = new BList(1);
|
|
||||||
typeList = new BList(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
YabList::~YabList()
|
|
||||||
{
|
|
||||||
DelAll();
|
|
||||||
delete idList;
|
|
||||||
delete viewList;
|
|
||||||
delete typeList;
|
|
||||||
}
|
|
||||||
|
|
||||||
int YabList::ViewNum(const char* id)
|
|
||||||
{
|
|
||||||
int tmp=-1;
|
|
||||||
if(id)
|
|
||||||
{
|
|
||||||
for(int i=0; i<idList->CountItems(); i++)
|
|
||||||
if(!strcmp(id, ((BString*)(idList->ItemAt(i)))->String() ))
|
|
||||||
{
|
|
||||||
tmp = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabList::AddView(const char* id, const BView* view, int type)
|
|
||||||
{
|
|
||||||
idList->AddItem((void*)new BString(id));
|
|
||||||
viewList->AddItem((void*)view);
|
|
||||||
typeList->AddItem((void*)(addr_t)type);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabList::DelView(const char* id)
|
|
||||||
{
|
|
||||||
int i = ViewNum(id);
|
|
||||||
if(i!=-1)
|
|
||||||
{
|
|
||||||
idList->RemoveItem(i);
|
|
||||||
viewList->RemoveItem(i);
|
|
||||||
typeList->RemoveItem(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabList::DelAll()
|
|
||||||
{
|
|
||||||
idList->MakeEmpty();
|
|
||||||
viewList->MakeEmpty();
|
|
||||||
typeList->MakeEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
const void* YabList::GetView(const char* id)
|
|
||||||
{
|
|
||||||
int t = ViewNum(id);
|
|
||||||
if(t>=0)
|
|
||||||
return viewList->ItemAt(t);
|
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int YabList::GetType(const char* id)
|
|
||||||
{
|
|
||||||
return (int)(addr_t)typeList->ItemAt(ViewNum(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
const int YabList::CountItems()
|
|
||||||
{
|
|
||||||
return typeList->CountItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
const void* YabList::ItemAt(int i)
|
|
||||||
{
|
|
||||||
return viewList->ItemAt(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabList::PrintOut()
|
|
||||||
{
|
|
||||||
printf("\n");
|
|
||||||
for(int i=0; i<idList->CountItems(); i++)
|
|
||||||
printf("\t View %s and the id %d %d \n", ((BString*)(idList->ItemAt(i)))->String() , idList->ItemAt(i), viewList->ItemAt(i));
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#ifndef YABLIST_H
|
|
||||||
#define YABLIST_H
|
|
||||||
|
|
||||||
#include <String.h>
|
|
||||||
#include <View.h>
|
|
||||||
|
|
||||||
class YabList
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabList();
|
|
||||||
~YabList();
|
|
||||||
void AddView(const char* id, const BView* view, int type);
|
|
||||||
void DelView(const char* id);
|
|
||||||
void DelAll();
|
|
||||||
const void* GetView(const char* id);
|
|
||||||
const int GetType(const char* id);
|
|
||||||
const int CountItems();
|
|
||||||
const void* ItemAt(int i);
|
|
||||||
void PrintOut();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int ViewNum(const char* id);
|
|
||||||
BList* idList;
|
|
||||||
BList* viewList;
|
|
||||||
BList* typeList;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
#include <File.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "YabInterface.h"
|
|
||||||
|
|
||||||
char t[1024];
|
|
||||||
const char* readSignature(int argc, char** argv)
|
|
||||||
{
|
|
||||||
BString tmp("application/x-vnd.yab-app");
|
|
||||||
/* Do not make changes above this comment without changing yab-IDE
|
|
||||||
to compensate for these changes.*/
|
|
||||||
for(int i=1; i<argc; i++)
|
|
||||||
{
|
|
||||||
if(argv[i][0]!='-')
|
|
||||||
{
|
|
||||||
BFile file(argv[i], B_READ_ONLY);
|
|
||||||
if(file.InitCheck()==B_OK)
|
|
||||||
{
|
|
||||||
char readData[1024];
|
|
||||||
int pos;
|
|
||||||
file.Read(readData,1024);
|
|
||||||
BString tmpString(readData);
|
|
||||||
pos = tmpString.IFindFirst("MIMETYPE");
|
|
||||||
if(pos!=B_ERROR)
|
|
||||||
{
|
|
||||||
int quote1, quote2;
|
|
||||||
quote1 = tmpString.FindFirst("\"",pos);
|
|
||||||
if(quote1!=B_ERROR)
|
|
||||||
{
|
|
||||||
quote2 = tmpString.FindFirst("\"",quote1+1);
|
|
||||||
if(quote2!=B_ERROR)
|
|
||||||
{
|
|
||||||
tmp.SetTo("");
|
|
||||||
tmpString.CopyInto(tmp,quote1+1,quote2-quote1-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strcpy(t,tmp.String());
|
|
||||||
return (const char*)t;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
YabInterface *yabInterface = new YabInterface(argc, argv, readSignature(argc, argv));
|
|
||||||
yabInterface->Run();
|
|
||||||
ret = yabInterface->GetErrorCode();
|
|
||||||
delete yabInterface;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#ifndef YABMENU_H
|
|
||||||
#define YABMENU_H
|
|
||||||
|
|
||||||
class YabMenu : public BMenu
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabMenu(const char* name) : BMenu(name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyHide()
|
|
||||||
{
|
|
||||||
Hide();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
// #include <string.h>
|
|
||||||
#include "YabStackView.h"
|
|
||||||
|
|
||||||
|
|
||||||
YabStackView::YabStackView(BRect frame, const char *name, int32 number_of_views, uint32 resizingMode, uint32 flags, const BFont *labelFont) : BView(frame, name, resizingMode, flags)
|
|
||||||
{
|
|
||||||
myViews = new BView*[number_of_views];
|
|
||||||
// init
|
|
||||||
for(int i=0; i < number_of_views; i++)
|
|
||||||
{
|
|
||||||
myViews[i] = NULL;
|
|
||||||
}
|
|
||||||
myCurrent = 0;
|
|
||||||
myBounds = Bounds();
|
|
||||||
myNumOfViews = number_of_views;
|
|
||||||
}
|
|
||||||
|
|
||||||
YabStackView::~YabStackView()
|
|
||||||
{
|
|
||||||
delete[] myViews;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabStackView::AddViews(BView** stackedViews)
|
|
||||||
{
|
|
||||||
for(int32 i = 0; i < myNumOfViews; i++)
|
|
||||||
{
|
|
||||||
myViews[i] = stackedViews[i];
|
|
||||||
if(i != myCurrent) myViews[i]->Hide();
|
|
||||||
AddChild(myViews[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void YabStackView::SelectView(int32 index)
|
|
||||||
{
|
|
||||||
if(index != myCurrent && index >= 0 && index < myNumOfViews)
|
|
||||||
{
|
|
||||||
Invalidate(myBounds);
|
|
||||||
myViews[myCurrent]->Hide();
|
|
||||||
myCurrent = index;
|
|
||||||
Invalidate(myBounds);
|
|
||||||
myViews[myCurrent]->Show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 YabStackView::CurrentView()
|
|
||||||
{
|
|
||||||
return myCurrent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#ifndef YAB_STACKVIEW_H_
|
|
||||||
#define YAB_STACKVIEW_H_
|
|
||||||
|
|
||||||
#include <View.h>
|
|
||||||
|
|
||||||
class YabStackView : public BView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabStackView(BRect frame, const char *name, int32 number_of_views, uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP, uint32 flags = B_NAVIGABLE | B_WILL_DRAW | B_FRAME_EVENTS, const BFont *labelFont = be_plain_font);
|
|
||||||
~YabStackView();
|
|
||||||
|
|
||||||
void AddViews(BView** stackedViews);
|
|
||||||
int32 CurrentView();
|
|
||||||
virtual void SelectView(int32 index);
|
|
||||||
|
|
||||||
private:
|
|
||||||
BView** myViews;
|
|
||||||
int32 myCurrent;
|
|
||||||
BRect myBounds;
|
|
||||||
int32 myNumOfViews;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,219 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// Copyright (c) 2001-2005, Haiku
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
// copy of this software and associated documentation files (the "Software"),
|
|
||||||
// to deal in the Software without restriction, including without limitation
|
|
||||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
// and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
// Software is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
// DEALINGS IN THE SOFTWARE.
|
|
||||||
//
|
|
||||||
// File Name: YabTabView.cpp
|
|
||||||
// Author: Marc Flerackers (mflerackers@androme.be)
|
|
||||||
// Modified by Jan Bungeroth (jan@be-logos.org)
|
|
||||||
// Modified by Kacper Kasper (kacperkasper@gmail.com)
|
|
||||||
// Description: YabTabView provides the framework for containing and
|
|
||||||
// managing groups of BView objects. Modified for *sane*
|
|
||||||
// view handling (they stay connected to the window).
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <List.h>
|
|
||||||
#include <Rect.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "YabTabView.h"
|
|
||||||
|
|
||||||
|
|
||||||
YabTabView::YabTabView(BRect frame, const char* name, button_width width, uint32 resizingMode, uint32 flags)
|
|
||||||
: BTabView(frame, name, width, resizingMode, flags)
|
|
||||||
{
|
|
||||||
fTabNames = new BList;
|
|
||||||
|
|
||||||
FocusChanged = 1;
|
|
||||||
OldTabView = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
YabTabView::~YabTabView()
|
|
||||||
{
|
|
||||||
for(int i=0; i<CountTabs(); i++)
|
|
||||||
{
|
|
||||||
delete (BString*)fTabNames->RemoveItem(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete fTabNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabTabView::AddTab(BView *tabView, const char* label)
|
|
||||||
{
|
|
||||||
if(tabView)
|
|
||||||
{
|
|
||||||
BTab *tab = new BTab();
|
|
||||||
BTabView::AddTab(tabView, tab);
|
|
||||||
tab->SetLabel(label);
|
|
||||||
// HACK
|
|
||||||
// YAB assumes all views have a window, but that's not true for tabs
|
|
||||||
if(CountTabs() > 1)
|
|
||||||
AddChild(tabView);
|
|
||||||
tabView->Hide();
|
|
||||||
|
|
||||||
fTabNames->AddItem(new BString(label));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void YabTabView::Select(int32 index)
|
|
||||||
{
|
|
||||||
if (index < 0 || index >= CountTabs())
|
|
||||||
index = Selection();
|
|
||||||
|
|
||||||
BTab* tab = TabAt(index);
|
|
||||||
if (tab)
|
|
||||||
{
|
|
||||||
FocusChanged = index+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// HACK
|
|
||||||
// YAB assumes all views have a window, but that's not true for tabs
|
|
||||||
int32 prevSelected = Selection();
|
|
||||||
RemoveChild(tab->View());
|
|
||||||
tab->View()->Show();
|
|
||||||
BTabView::Select(index);
|
|
||||||
if(prevSelected > -1) {
|
|
||||||
BTab* prevTab = TabAt(prevSelected);
|
|
||||||
prevTab->View()->Hide();
|
|
||||||
AddChild(prevTab->View());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabTabView::MakeFocus(bool focused)
|
|
||||||
{
|
|
||||||
BView::MakeFocus(focused);
|
|
||||||
|
|
||||||
SetFocusTab(Selection(), focused);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabTabView::SetFocusTab(int32 tab, bool focused)
|
|
||||||
{
|
|
||||||
FocusChanged = (FocusTab() != tab) ? 1 : 0;
|
|
||||||
|
|
||||||
BTabView::SetFocusTab(tab, focused);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabTabView::RemovingTab(int32 index)
|
|
||||||
{
|
|
||||||
BTabView::RemoveTab(index);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
void YabTabView::RemovingTab(int32 index, bool focused)
|
|
||||||
{
|
|
||||||
int oldindex=index;
|
|
||||||
int index_a;
|
|
||||||
int tab;
|
|
||||||
if (index < 0 || index >= CountTabs())
|
|
||||||
return NULL;
|
|
||||||
BTab* tab = (BTab*)fTabNames->RemoveItem(index);
|
|
||||||
if (tab==NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
tab->Deselect();
|
|
||||||
BTab::Private(tab).SetTabView(Null);
|
|
||||||
if (fContainerView->GetLayout())
|
|
||||||
fContainerView->GetLayout()->RemoveItem(index);
|
|
||||||
if (CountTabs()==0)
|
|
||||||
fFocus = -1;
|
|
||||||
else if (index <= fSelection)
|
|
||||||
Select (fSelection-1);
|
|
||||||
if (fFocus >=0) {
|
|
||||||
if(fFocus == CountTabs() -1 || CountTabs() == 0)
|
|
||||||
BTabView::Select(f.Focus, false);
|
|
||||||
else
|
|
||||||
BTabView::Select(f.Focus, true);
|
|
||||||
}
|
|
||||||
return tab;
|
|
||||||
BTabView::RemoveTab(oldindex);
|
|
||||||
BTabView::Select(1);
|
|
||||||
|
|
||||||
|
|
||||||
BTab* tab = TabAt(index);
|
|
||||||
if (tab)
|
|
||||||
{
|
|
||||||
FocusChanged = index;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 prevSelected = 1; //Selection();
|
|
||||||
RemoveChild(tab->View());
|
|
||||||
tab->View()->Show();
|
|
||||||
BTabView::Select(index);
|
|
||||||
if(prevSelected > -1) {
|
|
||||||
BTab* prevTab = TabAt(prevSelected); //prevSelected);
|
|
||||||
prevTab->View()->Hide();
|
|
||||||
AddChild(prevTab->View());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
const char* YabTabView::GetTabName(int32 index) const
|
|
||||||
{
|
|
||||||
if(index < 0 || index >= CountTabs())
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return ((BString*)fTabNames->ItemAt(index))->String();
|
|
||||||
}
|
|
||||||
void YabTabView::PrintOut()
|
|
||||||
{
|
|
||||||
//printf("\n %d",fTabNames->CountItems());
|
|
||||||
if (fTabNames->CountItems()==0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else if(fTabNames->CountItems()>0)
|
|
||||||
{
|
|
||||||
printf("\n");
|
|
||||||
for(int i=0; i<fTabNames->CountItems(); i++)
|
|
||||||
printf("\t View %s and the id %d\n", ((BString*)(fTabNames->ItemAt(i)))->String() , fTabNames->ItemAt(i));
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void YabTabView::FindTabName(const char* tabname )
|
|
||||||
{
|
|
||||||
BString test = NULL;
|
|
||||||
//printf("\n %d",fTabNames->CountItems());
|
|
||||||
if (fTabNames->CountItems()<=0)
|
|
||||||
{
|
|
||||||
//return NULL;
|
|
||||||
}
|
|
||||||
else if(fTabNames->CountItems()>0)
|
|
||||||
{
|
|
||||||
//printf("%s \n", tabname);
|
|
||||||
for(int i=0; i<fTabNames->CountItems(); i++)
|
|
||||||
{
|
|
||||||
printf("%s\n", ((BString*)(fTabNames->ItemAt(i)))->String());
|
|
||||||
test=((BString*)(fTabNames->ItemAt(i)))->String();
|
|
||||||
|
|
||||||
if (test == tabname)
|
|
||||||
{
|
|
||||||
//printf("stimmt");
|
|
||||||
printf("%s %d",test,i );
|
|
||||||
printf("\n");
|
|
||||||
//return tabname;
|
|
||||||
//return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// Copyright (c) 2001-2002, OpenBeOS
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
// copy of this software and associated documentation files (the "Software"),
|
|
||||||
// to deal in the Software without restriction, including without limitation
|
|
||||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
// and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
// Software is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
// DEALINGS IN THE SOFTWARE.
|
|
||||||
//
|
|
||||||
// File Name: YabTabView.h
|
|
||||||
// Author: Marc Flerackers (mflerackers@androme.be)
|
|
||||||
// Jan Bungeroth (jan@be-logos.org)
|
|
||||||
// Kacper Kasper (kacperkasper@gmail.com)
|
|
||||||
// Description: YabTabView provides the framework for containing and
|
|
||||||
// managing groups of BView objects.
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef YABTAB_VIEW_H
|
|
||||||
#define YABTAB_VIEW_H
|
|
||||||
|
|
||||||
// Standard Includes -----------------------------------------------------------
|
|
||||||
|
|
||||||
#include <TabView.h>
|
|
||||||
|
|
||||||
// YabTabView class ------------------------------------------------------------------
|
|
||||||
class YabTabView : public BTabView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabTabView(BRect frame, const char *name,
|
|
||||||
button_width width = B_WIDTH_AS_USUAL,
|
|
||||||
uint32 resizingMode = B_FOLLOW_ALL,
|
|
||||||
uint32 flags = B_FULL_UPDATE_ON_RESIZE |
|
|
||||||
B_WILL_DRAW | B_NAVIGABLE_JUMP |
|
|
||||||
B_FRAME_EVENTS | B_NAVIGABLE);
|
|
||||||
~YabTabView();
|
|
||||||
|
|
||||||
virtual const char* GetTabName(int32 index) const;
|
|
||||||
|
|
||||||
virtual void AddTab(BView *target, const char* tabname);
|
|
||||||
virtual void Select(int32 index);
|
|
||||||
virtual void MakeFocus(bool focused = true);
|
|
||||||
virtual void RemovingTab(int32 index);
|
|
||||||
virtual void SetFocusTab(int32 tab, bool focused);
|
|
||||||
void PrintOut();
|
|
||||||
void FindTabName(const char* tabname);
|
|
||||||
int32 FocusChanged;
|
|
||||||
int32 OldTabView;
|
|
||||||
|
|
||||||
//void MoveTab(int32 index, int32 newIndex);
|
|
||||||
private:
|
|
||||||
BList *fTabNames;
|
|
||||||
|
|
||||||
int32 fSelection;
|
|
||||||
int32 fInitialSelection;
|
|
||||||
int32 fFocus;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-920
@@ -1,920 +0,0 @@
|
|||||||
#include <Input.h>
|
|
||||||
#include "YabText.h"
|
|
||||||
|
|
||||||
const uint32 YABTEXT_ANALYSE = 'YTan';
|
|
||||||
const uint32 YABTEXT_FILECHANGED = 'YTfc';
|
|
||||||
const uint32 YABTEXT_PARSE_LINE = 'YTpl';
|
|
||||||
const uint32 YABTEXT_UNDO_HIGHLIGHTING = 'YTuh';
|
|
||||||
|
|
||||||
const rgb_color Blue = {0,0,255,255};
|
|
||||||
const rgb_color Red = {255,0,0,255};
|
|
||||||
const rgb_color Grey = {185,185,185,255};
|
|
||||||
const rgb_color Green = {0,200,000,255};
|
|
||||||
const rgb_color Magenta = {200,0,255,255};
|
|
||||||
|
|
||||||
YabText::YabText(BRect frame, const char* name, BRect textRect, uint32 resizeMode, uint32 flags)
|
|
||||||
: BTextView(frame, name, textRect, resizeMode, flags)
|
|
||||||
{
|
|
||||||
isCaseSensitive = false;
|
|
||||||
hasChanged = false;
|
|
||||||
|
|
||||||
// Standard definitions
|
|
||||||
bgcolor.blue = bgcolor.red = bgcolor.green = bgcolor.alpha = 255; // background
|
|
||||||
textcolor.blue = textcolor.red = textcolor.green = 0; textcolor.alpha = 255;
|
|
||||||
|
|
||||||
generic_cmd_color = Blue;
|
|
||||||
format_cmd_color = Red;
|
|
||||||
special_cmd_color = Green;
|
|
||||||
comment_color = Grey;
|
|
||||||
punc_symbol_color = Magenta;
|
|
||||||
|
|
||||||
SetStylable(true);
|
|
||||||
// BFont myFont(be_fixed_font);
|
|
||||||
// myFontSize = 12;
|
|
||||||
// f = myFont;
|
|
||||||
// f.SetSize(myFontSize);
|
|
||||||
// SetFontAndColor(0,1,&f,B_FONT_ALL,&textcolor);
|
|
||||||
|
|
||||||
SearchOffset = 0;
|
|
||||||
SetDoesUndo(true);
|
|
||||||
|
|
||||||
hasAutoCompletion = true;
|
|
||||||
words = new BList(0);
|
|
||||||
number_of_letters = 3;
|
|
||||||
isJapanese = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
YabText::~YabText()
|
|
||||||
{
|
|
||||||
BString *anItem;
|
|
||||||
for ( int32 i = 0; (anItem = (BString*)words->ItemAt(i)); i++ )
|
|
||||||
delete anItem;
|
|
||||||
delete words;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::AddWord(BString *word)
|
|
||||||
{
|
|
||||||
words->AddItem((void*)word);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::HasAutoCompletion(bool flag)
|
|
||||||
{
|
|
||||||
hasAutoCompletion = flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::SetAutoCompleteStart(int num)
|
|
||||||
{
|
|
||||||
number_of_letters = num;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::AddCommand(const char* command, int colorGroup)
|
|
||||||
{
|
|
||||||
switch(colorGroup)
|
|
||||||
{
|
|
||||||
case 0: generic_matches.push_back(command);
|
|
||||||
break;
|
|
||||||
case 1: green_matches.push_back(command);
|
|
||||||
break;
|
|
||||||
case 2: purple_matches.push_back(command);
|
|
||||||
break;
|
|
||||||
case 3: comment_matches.push_back(command);
|
|
||||||
break;
|
|
||||||
case 4: punctuation.push_back(command[0]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::SetColors(int id, int r, int g, int b)
|
|
||||||
{
|
|
||||||
switch(id)
|
|
||||||
{
|
|
||||||
case 0: generic_cmd_color.red = r;
|
|
||||||
generic_cmd_color.green = g;
|
|
||||||
generic_cmd_color.blue = b;
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
break;
|
|
||||||
case 1: format_cmd_color.red = r;
|
|
||||||
format_cmd_color.green = g;
|
|
||||||
format_cmd_color.blue = b;
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
break;
|
|
||||||
case 2: special_cmd_color.red = r;
|
|
||||||
special_cmd_color.green = g;
|
|
||||||
special_cmd_color.blue = b;
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
break;
|
|
||||||
case 3: comment_color.red = r;
|
|
||||||
comment_color.green = g;
|
|
||||||
comment_color.blue = b;
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
break;
|
|
||||||
case 4: punc_symbol_color.red = r;
|
|
||||||
punc_symbol_color.green = g;
|
|
||||||
punc_symbol_color.blue = b;
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
break;
|
|
||||||
case 5: SetViewColor(r,g,b);
|
|
||||||
Invalidate();
|
|
||||||
break;
|
|
||||||
case 6: {
|
|
||||||
textcolor.red = r;
|
|
||||||
textcolor.green = g;
|
|
||||||
textcolor.blue = b;
|
|
||||||
BFont default_font;
|
|
||||||
GetFontAndColor(0, &default_font);
|
|
||||||
// BFont default_font(be_fixed_font);
|
|
||||||
// default_font.SetSize(myFontSize);
|
|
||||||
SetFontAndColor(0,TextLength()-1,&default_font,B_FONT_ALL,&textcolor);
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::AttachedToWindow()
|
|
||||||
{
|
|
||||||
SetViewColor(bgcolor);
|
|
||||||
SetColorSpace(B_RGB32);
|
|
||||||
BTextView::AttachedToWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::Select(int32 start,int32 finish)
|
|
||||||
{
|
|
||||||
BTextView::Select(start,finish);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 YabText::CountPhysicalLines()
|
|
||||||
{
|
|
||||||
return BTextView::CountLines();
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::KeyDown(const char* bytes, int32 numBytes)
|
|
||||||
{
|
|
||||||
isAutoComplete = false;
|
|
||||||
bool shouldBeChanged = true;
|
|
||||||
bool passon = true;
|
|
||||||
switch(bytes[0])
|
|
||||||
{
|
|
||||||
case B_ENTER:
|
|
||||||
{
|
|
||||||
//update previous line on enter
|
|
||||||
BMessage msg(YABTEXT_PARSE_LINE);
|
|
||||||
int32 start,finish;
|
|
||||||
GetSelection(&start,&finish);
|
|
||||||
if(msg.AddInt32("start",start) == B_OK && msg.AddInt32("finish",finish) == B_OK)
|
|
||||||
{
|
|
||||||
BMessenger msgr(this);
|
|
||||||
msgr.SendMessage(&msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case B_LEFT_ARROW:
|
|
||||||
{
|
|
||||||
shouldBeChanged = false;
|
|
||||||
if(modifiers() & B_CONTROL_KEY)
|
|
||||||
{
|
|
||||||
passon = false;
|
|
||||||
int32 startoffset, endoffset;
|
|
||||||
GetSelection(&startoffset, &endoffset);
|
|
||||||
bool inloop = true;
|
|
||||||
while(inloop)
|
|
||||||
{
|
|
||||||
startoffset--;
|
|
||||||
if(startoffset < 0)
|
|
||||||
{
|
|
||||||
if(modifiers() & B_SHIFT_KEY)
|
|
||||||
Select(0,endoffset);
|
|
||||||
else
|
|
||||||
Select(0,0);
|
|
||||||
ScrollToSelection();
|
|
||||||
inloop = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char tmp = ByteAt(startoffset);
|
|
||||||
|
|
||||||
if(tmp == ' ' || tmp == ':' || tmp == '/' || tmp == '\n' || tmp == '.' || tmp == '(' || tmp == ')' || tmp == '"' || tmp == '\t' || tmp == '-' || tmp == '+' || tmp == '*' || tmp == '^' || tmp == ',' || tmp == ';' || tmp == '=' || tmp == '\r')
|
|
||||||
{
|
|
||||||
if(modifiers() & B_SHIFT_KEY)
|
|
||||||
Select(startoffset,endoffset);
|
|
||||||
else
|
|
||||||
Select(startoffset,startoffset);
|
|
||||||
ScrollToSelection();
|
|
||||||
inloop = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case B_RIGHT_ARROW:
|
|
||||||
{
|
|
||||||
shouldBeChanged = false;
|
|
||||||
int cur = CurrentLine();
|
|
||||||
if(modifiers() & B_CONTROL_KEY)
|
|
||||||
{
|
|
||||||
// passon = false;
|
|
||||||
int32 startoffset, endoffset;
|
|
||||||
GetSelection(&startoffset, &endoffset);
|
|
||||||
bool inloop = true;
|
|
||||||
while(inloop)
|
|
||||||
{
|
|
||||||
endoffset++;
|
|
||||||
if(endoffset > TextLength() )
|
|
||||||
{
|
|
||||||
if(modifiers() & B_SHIFT_KEY)
|
|
||||||
Select(startoffset,endoffset);
|
|
||||||
else
|
|
||||||
Select(endoffset, endoffset);
|
|
||||||
ScrollToSelection();
|
|
||||||
inloop = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char tmp = ByteAt(endoffset);
|
|
||||||
int a = LineAt(endoffset);
|
|
||||||
|
|
||||||
if(tmp == ' ' || tmp == ':' || tmp == '/' || tmp == '\n' || tmp == '.' || tmp == '(' || tmp == ')' || tmp == '"' || tmp == '\t' || tmp == '-' || tmp == '+' || tmp == '*' || tmp == '^' || tmp == ',' || tmp == ';' || tmp == '=' || tmp == '\r' || a!=cur)
|
|
||||||
{
|
|
||||||
if(a!=cur) endoffset --;
|
|
||||||
if(modifiers() & B_SHIFT_KEY)
|
|
||||||
Select(startoffset,endoffset);
|
|
||||||
else
|
|
||||||
Select(endoffset,endoffset);
|
|
||||||
ScrollToSelection();
|
|
||||||
inloop = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case B_UP_ARROW:
|
|
||||||
case B_DOWN_ARROW:
|
|
||||||
case B_PAGE_UP:
|
|
||||||
case B_PAGE_DOWN:
|
|
||||||
case B_HOME:
|
|
||||||
case B_END:
|
|
||||||
case B_INSERT:
|
|
||||||
case B_FUNCTION_KEY:
|
|
||||||
case B_ESCAPE:
|
|
||||||
shouldBeChanged = false;
|
|
||||||
break;
|
|
||||||
case B_BACKSPACE:
|
|
||||||
{
|
|
||||||
int32 a,b;
|
|
||||||
GetSelection(&a, &b);
|
|
||||||
if(a == b && a == 0) shouldBeChanged = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case B_DELETE:
|
|
||||||
{
|
|
||||||
int32 a,b;
|
|
||||||
GetSelection(&a, &b);
|
|
||||||
if(a == b && a == TextLength()) shouldBeChanged = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(shouldBeChanged && !hasChanged) hasChanged = true;
|
|
||||||
|
|
||||||
if(passon) BTextView::KeyDown(bytes,numBytes);
|
|
||||||
|
|
||||||
if(isAutoComplete)
|
|
||||||
{
|
|
||||||
Select(autoOffset, autoEnd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int YabText::FindFirstOnLine(char c,int offset,int eol)
|
|
||||||
{
|
|
||||||
for(int i=offset;i<eol;i++)
|
|
||||||
{
|
|
||||||
if(ByteAt(i) == c)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 YabText::OffsetAtIndex(int32 index) //const
|
|
||||||
{
|
|
||||||
//int text_length = TextLength();
|
|
||||||
int i;
|
|
||||||
//if(index <= 0)
|
|
||||||
// return 0;
|
|
||||||
int count = 0;
|
|
||||||
int last=0;
|
|
||||||
for(i=0;count < index;i++)
|
|
||||||
{
|
|
||||||
if(ByteAt(i) == '\n')
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
last = i+1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return last;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 YabText::LineAt(int32 offset) //const
|
|
||||||
{
|
|
||||||
std::vector<int> sols;
|
|
||||||
std::vector<int> eols;
|
|
||||||
FillSolEol(sols,eols,0,TextLength()-1);
|
|
||||||
|
|
||||||
for(int i=0;i<sols.size();i++)
|
|
||||||
{
|
|
||||||
if(offset >= sols[i] && offset <= eols[i])
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::FillSolEol(std::vector<int>& s,std::vector<int>& e,int start,int finish)
|
|
||||||
{
|
|
||||||
int i=start;
|
|
||||||
int text_length = TextLength();
|
|
||||||
for(i=start;i>=0;i--)
|
|
||||||
{
|
|
||||||
if(ByteAt(i) == '\n')
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
start=i+1;
|
|
||||||
|
|
||||||
i = finish;
|
|
||||||
for(i=finish;i<text_length;i++)
|
|
||||||
{
|
|
||||||
if(ByteAt(i) == '\n')
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finish=i;
|
|
||||||
|
|
||||||
for(i=start;i<=finish;i++)
|
|
||||||
{
|
|
||||||
if(ByteAt(i) == '\n')
|
|
||||||
{
|
|
||||||
e.push_back(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
e.push_back(i);
|
|
||||||
|
|
||||||
s.push_back(start);
|
|
||||||
for(i=0;i<e.size()-1;i++)
|
|
||||||
{
|
|
||||||
s.push_back(e[i]+1);
|
|
||||||
}
|
|
||||||
//s.push_back(e[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void YabText::GoToLine(int32 index)
|
|
||||||
{
|
|
||||||
if(TextLength()<=0)
|
|
||||||
return;
|
|
||||||
if(index<=0) index = 0;
|
|
||||||
if(index > CountLines()) index = CountLines();
|
|
||||||
|
|
||||||
// if(index < 0 || index > CountLines() || TextLength() <= 0)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
std::vector<int> eols;
|
|
||||||
std::vector<int> sols;
|
|
||||||
|
|
||||||
FillSolEol(sols,eols,0,TextLength()-1);
|
|
||||||
Select(sols[index],eols[index]);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
int32 YabText::CountLines()
|
|
||||||
{
|
|
||||||
std::vector<int> eols;
|
|
||||||
std::vector<int> sols;
|
|
||||||
FillSolEol(sols,eols,0,TextLength()-1);
|
|
||||||
return eols.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::ParseAll(int start,int finish,bool IsInteractive)
|
|
||||||
{
|
|
||||||
// BFont font(be_fixed_font);
|
|
||||||
// font.SetSize(myFontSize);
|
|
||||||
BFont default_font;
|
|
||||||
GetFontAndColor(0, &default_font);
|
|
||||||
|
|
||||||
int text_length = TextLength();
|
|
||||||
if(text_length > 0)
|
|
||||||
{
|
|
||||||
std::vector<int> eols;
|
|
||||||
std::vector<int> sols;
|
|
||||||
FillSolEol(sols,eols,start,finish);
|
|
||||||
|
|
||||||
int i;
|
|
||||||
int size;
|
|
||||||
/*
|
|
||||||
if(!IsInteractive)
|
|
||||||
{
|
|
||||||
size = text_length;
|
|
||||||
std::vector<rgb_color> colorVec(size,textcolor);
|
|
||||||
|
|
||||||
for(i=0;i<sols.size();i++)
|
|
||||||
{
|
|
||||||
ParseLine(sols[i],eols[i],colorVec);
|
|
||||||
}
|
|
||||||
|
|
||||||
int offset_size=1;
|
|
||||||
std::vector<int> offsets;
|
|
||||||
offsets.push_back(0);
|
|
||||||
|
|
||||||
for(i=1;i<size;i++)
|
|
||||||
{
|
|
||||||
if(colorVec[i-1].blue != colorVec[i].blue ||
|
|
||||||
colorVec[i-1].green != colorVec[i].green ||
|
|
||||||
colorVec[i-1].red != colorVec[i].red)
|
|
||||||
{
|
|
||||||
offsets.push_back(i);
|
|
||||||
offset_size++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
text_run_array* tra = (text_run_array*)malloc(sizeof(text_run_array)*(size));
|
|
||||||
tra->count = offset_size;
|
|
||||||
for(i=0;i<offset_size;i++)
|
|
||||||
{
|
|
||||||
tra->runs[i].color=colorVec[offsets[i]];
|
|
||||||
tra->runs[i].font=font;
|
|
||||||
tra->runs[i].offset=offsets[i];
|
|
||||||
}
|
|
||||||
SetRunArray(0,text_length-1,tra);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{*/
|
|
||||||
for(i=0;i<sols.size();i++)
|
|
||||||
{
|
|
||||||
IParseLine(sols[i],eols[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::IParseLine(int sol,int eol)
|
|
||||||
{
|
|
||||||
int size = eol-sol+1;
|
|
||||||
std::vector<rgb_color> colorVec(size,textcolor);
|
|
||||||
|
|
||||||
for(int k=0;k<size;k++)
|
|
||||||
colorVec[k] = textcolor;
|
|
||||||
|
|
||||||
int i,j;
|
|
||||||
int pos;
|
|
||||||
int text_length = TextLength();
|
|
||||||
|
|
||||||
// punctuation first
|
|
||||||
for(i=sol;i<eol;i++)
|
|
||||||
{
|
|
||||||
for(int j=0; j<punctuation.size(); j++)
|
|
||||||
if(ByteAt(i) == punctuation[j])
|
|
||||||
colorVec[i-sol] = punc_symbol_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// words second
|
|
||||||
ICheckWordLists(sol,eol,colorVec);
|
|
||||||
|
|
||||||
/*
|
|
||||||
for(i=sol;i<eol;i++)
|
|
||||||
{
|
|
||||||
BString word("");
|
|
||||||
for(j=i; j<eol; j++)
|
|
||||||
word << (char)ByteAt(j);
|
|
||||||
if(isIgnoring)
|
|
||||||
{
|
|
||||||
for(int k=i;k<j;k++)
|
|
||||||
colorVec[k-sol] = comment_color;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("%s\n", word.String());
|
|
||||||
if(Contains(comment_matches,word))
|
|
||||||
{
|
|
||||||
printf("\t%s\n", word.String());
|
|
||||||
isIgnoring = true;
|
|
||||||
for(int k=i;k<j;k++)
|
|
||||||
colorVec[k-sol] = comment_color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
if(FindFirstOnLine('#',sol,eol) == 0)
|
|
||||||
for(i=0;i<eol;i++)
|
|
||||||
colorVec[i-sol] = comment_color;
|
|
||||||
*/
|
|
||||||
|
|
||||||
//START COLOURING***********************************
|
|
||||||
|
|
||||||
// BFont default_font(be_fixed_font);
|
|
||||||
// default_font.SetSize(myFontSize);
|
|
||||||
|
|
||||||
BFont default_font;
|
|
||||||
GetFontAndColor(0, &default_font);
|
|
||||||
|
|
||||||
// INS HERE
|
|
||||||
|
|
||||||
int plLength=0;
|
|
||||||
int plStart=0;
|
|
||||||
for(i=sol;i<eol;i++)
|
|
||||||
{
|
|
||||||
if(i == sol)
|
|
||||||
{
|
|
||||||
plLength = 1;
|
|
||||||
plStart = i;
|
|
||||||
}
|
|
||||||
else if(colorVec[i-sol-1].blue != colorVec[i-sol].blue ||
|
|
||||||
colorVec[i-sol-1].green != colorVec[i-sol].green ||
|
|
||||||
colorVec[i-sol-1].red != colorVec[i-sol].red)
|
|
||||||
{
|
|
||||||
if(!isJapanese) SetFontAndColor(plStart,plStart+plLength,&default_font,B_FONT_ALL,&colorVec[i-sol-1]);
|
|
||||||
plLength = 1;
|
|
||||||
plStart = i;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plLength++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(plLength > 0)
|
|
||||||
if(!isJapanese) SetFontAndColor(plStart,plStart+plLength,&default_font,B_FONT_ALL,&colorVec[i-sol-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::ParseLine(int sol,int eol,std::vector<rgb_color>& colorVec)//,std::vector<rgb_color>& colorVec)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int offset = sol;
|
|
||||||
int pos;
|
|
||||||
int text_length = TextLength();
|
|
||||||
//assert(sol >=0 && eol >=0 && sol < text_length && eol < text_length);
|
|
||||||
//Setup some defaults....
|
|
||||||
/*
|
|
||||||
TwoColorPlateau('\'',sol,eol,comment_color,colorVec);//,displaced);//-displaced
|
|
||||||
TwoColorPlateau('`',sol,eol,comment_color,colorVec);//,displaced);
|
|
||||||
TwoColorPlateau('\\',sol,eol,comment_color,colorVec);//,displaced);*/
|
|
||||||
|
|
||||||
for(i=sol;i<eol;i++)
|
|
||||||
{
|
|
||||||
if(ByteAt(i) == '[' || ByteAt(i) == ']')
|
|
||||||
{
|
|
||||||
if(i-1 >= 0 && ByteAt(i-1) == '\\')
|
|
||||||
{
|
|
||||||
colorVec[i-1] = punc_symbol_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
colorVec[i] = punc_symbol_color;
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(ByteAt(i) == '&' || ByteAt(i) == '{' || ByteAt(i) == '}')//
|
|
||||||
{
|
|
||||||
if(i-1 >= 0 && ByteAt(i-1) == '\\')
|
|
||||||
{
|
|
||||||
colorVec[i-1] = punc_symbol_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
colorVec[i] = punc_symbol_color;
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(ByteAt(i) == '$')
|
|
||||||
{
|
|
||||||
if(i-1 >= 0 && ByteAt(i-1) == '\\')
|
|
||||||
{
|
|
||||||
colorVec[i-1] = textcolor;
|
|
||||||
colorVec[i] = textcolor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(ByteAt(i) == '\\' && i+1 < eol)
|
|
||||||
{
|
|
||||||
if(ByteAt(i+1) == '#')
|
|
||||||
{
|
|
||||||
colorVec[i] = punc_symbol_color;
|
|
||||||
colorVec[i+1] = punc_symbol_color;
|
|
||||||
}else if(ByteAt(i+1) == '\'' || ByteAt(i+1) == '`')
|
|
||||||
{
|
|
||||||
colorVec[i] = textcolor;
|
|
||||||
colorVec[i+1] = textcolor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*if(toupper((char)ByteAt(i)) == 'B')
|
|
||||||
{
|
|
||||||
if(i+3 < eol && toupper((char)ByteAt(i+1)) == 'E' &&
|
|
||||||
toupper((char)ByteAt(i+2)) == 'O' && toupper((char)ByteAt(i+3)) == 'S')
|
|
||||||
{
|
|
||||||
colorVec[i] = Blue;
|
|
||||||
colorVec[i+1] = Red;
|
|
||||||
}
|
|
||||||
else if(i+4 < eol && toupper((char)ByteAt(i+1)) == 'E' &&
|
|
||||||
toupper((char)ByteAt(i+2)) == 'T' && toupper((char)ByteAt(i+3)) == 'E'
|
|
||||||
&& toupper((char)ByteAt(i+3)) == 'X')
|
|
||||||
{
|
|
||||||
colorVec[i] = Blue;
|
|
||||||
colorVec[i+1] = Red;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
offset = sol;
|
|
||||||
while((pos = FindFirstOnLine('%',offset,eol))>= 0 && offset < eol)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(pos - 1 >= 0 && ByteAt(pos-1) == '\\')
|
|
||||||
{
|
|
||||||
colorVec[pos-1] = punc_symbol_color;
|
|
||||||
colorVec[pos] = punc_symbol_color;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(i=pos;i<eol;i++)
|
|
||||||
colorVec[i] = comment_color;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset= pos+1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::ICheckWordLists(int sol,int eol,std::vector<rgb_color>& colorVec)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=sol;i<eol;i++)
|
|
||||||
{
|
|
||||||
BString match="";
|
|
||||||
|
|
||||||
int j=i;
|
|
||||||
for(j=i;j < eol;j++)
|
|
||||||
{
|
|
||||||
if(isalpha(ByteAt(j)) || (char)ByteAt(j) == ':' || (char)ByteAt(j) == '$' || ((char)ByteAt(j)>='0' && (char)ByteAt(j)<='9'))
|
|
||||||
// if(ByteAt(j)>32)
|
|
||||||
{
|
|
||||||
match << (char)ByteAt(j);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if((match.Length() > 0) && (i==sol || !isalpha(ByteAt(i-1))))
|
|
||||||
{
|
|
||||||
if(Contains(green_matches,match))
|
|
||||||
{
|
|
||||||
for(int k=i;k<j;k++)
|
|
||||||
colorVec[k-sol] = format_cmd_color;
|
|
||||||
}
|
|
||||||
else if(Contains(purple_matches,match))
|
|
||||||
{
|
|
||||||
for(int k=i;k<j;k++)
|
|
||||||
colorVec[k-sol] = special_cmd_color;
|
|
||||||
}
|
|
||||||
else if(Contains(generic_matches,match))
|
|
||||||
{
|
|
||||||
for(int k=i;k<j;k++)
|
|
||||||
colorVec[k-sol] = generic_cmd_color;
|
|
||||||
}
|
|
||||||
else if(Contains(comment_matches,match))
|
|
||||||
{
|
|
||||||
for(int k=i;k<j;k++)
|
|
||||||
colorVec[k-sol] = comment_color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::InsertText(const char* text,int32 length,int32 offset,const text_run_array* runner)
|
|
||||||
{
|
|
||||||
hasChanged = true;
|
|
||||||
BString replace = text;
|
|
||||||
if(length == 1 && hasAutoCompletion)
|
|
||||||
{
|
|
||||||
BString itext(""); //Text();
|
|
||||||
// BString lastWord = "";
|
|
||||||
int32 myOffset = offset - 1;
|
|
||||||
while(myOffset>=0)
|
|
||||||
{
|
|
||||||
if(ByteAt(myOffset) == ' ' || ByteAt(myOffset) == '\n' || ByteAt(myOffset) == '\t')
|
|
||||||
break;
|
|
||||||
myOffset --;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(offset-myOffset>number_of_letters)
|
|
||||||
{
|
|
||||||
for(int i=myOffset+1; i<offset; i++)
|
|
||||||
itext << (char)ByteAt(i);
|
|
||||||
|
|
||||||
itext << text;
|
|
||||||
|
|
||||||
BString *anItem;
|
|
||||||
for ( int32 i = 0; (anItem = (BString*)words->ItemAt(i)); i++ )
|
|
||||||
{
|
|
||||||
if(anItem->Compare(itext, offset-myOffset+length-1) == 0)
|
|
||||||
{
|
|
||||||
autoOffset = offset + 1;
|
|
||||||
isAutoComplete = true;
|
|
||||||
BString sleepy(anItem->String());
|
|
||||||
sleepy.CopyInto(replace, offset-myOffset-1, anItem->Length());
|
|
||||||
length = replace.Length();
|
|
||||||
autoEnd = anItem->Length()+myOffset+1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BTextView::InsertText(replace.String(),length,offset,NULL);
|
|
||||||
|
|
||||||
if(text[0] != B_ENTER)
|
|
||||||
{
|
|
||||||
BMessage msg(YABTEXT_ANALYSE);
|
|
||||||
if(msg.AddInt32("offset",offset)==B_OK && msg.AddInt32("length",length)==B_OK)
|
|
||||||
//&& msg.AddString("text",text) == B_OK)
|
|
||||||
{
|
|
||||||
BMessenger msgr(this);
|
|
||||||
msgr.SendMessage(&msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::DeleteText(int32 start, int32 finish)
|
|
||||||
{
|
|
||||||
BMessage msg(YABTEXT_ANALYSE);
|
|
||||||
if(msg.AddInt32("start",start)==B_OK && msg.AddInt32("finish",finish)==B_OK)
|
|
||||||
{
|
|
||||||
BMessenger msgr(this);
|
|
||||||
msgr.SendMessage(&msg);
|
|
||||||
}
|
|
||||||
BTextView::DeleteText(start,finish);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::SetText(const char* text,int32 length,const text_run_array* runs )
|
|
||||||
{
|
|
||||||
hasChanged = true;
|
|
||||||
BTextView::SetText(text,length,runs);
|
|
||||||
// ParseAll(0,length-1,false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::UpdateColors()
|
|
||||||
{
|
|
||||||
SetFontAndColor(0,TextLength(),&f,B_FONT_ALL,&textcolor);
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
//const char* text = Text();
|
|
||||||
//Delete(0,TextLength()-1);
|
|
||||||
//SetText(text,strlen(text));//,TextLength()-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::UpdateFontSize()
|
|
||||||
{
|
|
||||||
f.SetSize(myFontSize);
|
|
||||||
SetFontAndColor(0,TextLength(),&f,B_FONT_ALL,&textcolor);
|
|
||||||
ParseAll(0,TextLength()-1,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::SetText(BFile* file,int32 offset,int32 length,const text_run_array* runs )
|
|
||||||
{
|
|
||||||
hasChanged = true;
|
|
||||||
BTextView::SetText(file,offset,length,runs);
|
|
||||||
// ParseAll(offset,length-1,false);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool YabText::Contains(std::vector<BString>& v,BString s)
|
|
||||||
{
|
|
||||||
for(int i=0;i<v.size();i++)
|
|
||||||
{
|
|
||||||
if(isCaseSensitive)
|
|
||||||
{
|
|
||||||
if(v[i].Compare(s) == 0)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(v[i].ICompare(s) == 0)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
bool YabText::CanEndLine(int32 offset)
|
|
||||||
{
|
|
||||||
if(ByteAt(offset) == B_ENTER || )
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void YabText::MessageReceived(BMessage* msg)
|
|
||||||
{
|
|
||||||
switch(msg->what)
|
|
||||||
{
|
|
||||||
case B_INPUT_METHOD_EVENT:
|
|
||||||
{
|
|
||||||
int32 be_op;
|
|
||||||
if(msg->FindInt32("be:opcode", &be_op) == B_OK)
|
|
||||||
{
|
|
||||||
if(be_op == B_INPUT_METHOD_STARTED) isJapanese = true;
|
|
||||||
if(be_op == B_INPUT_METHOD_STOPPED) isJapanese = false;
|
|
||||||
}
|
|
||||||
BTextView::MessageReceived(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABTEXT_UNDO_HIGHLIGHTING:
|
|
||||||
{
|
|
||||||
int32 start,finish;
|
|
||||||
if(msg->FindInt32("start",&start)==B_OK && msg->FindInt32("finish",&finish)==B_OK)
|
|
||||||
{
|
|
||||||
Select(start,finish);
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case YABTEXT_PARSE_LINE:
|
|
||||||
{
|
|
||||||
int32 start,finish;
|
|
||||||
if(msg->FindInt32("start",&start)==B_OK && msg->FindInt32("finish",&finish)==B_OK)
|
|
||||||
{
|
|
||||||
int32 sel_start,sel_finish;
|
|
||||||
GetSelection(&sel_start,&sel_finish);
|
|
||||||
ParseAll(min(sel_start,start),max(sel_finish,finish),true);
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case YABTEXT_ANALYSE:
|
|
||||||
{
|
|
||||||
int32 start,finish;
|
|
||||||
if(msg->FindInt32("start",&start)==B_OK && msg->FindInt32("finish",&finish)==B_OK)
|
|
||||||
{
|
|
||||||
ParseAll(start,finish,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 offset,length;
|
|
||||||
if(msg->FindInt32("offset",&offset)==B_OK
|
|
||||||
&& msg->FindInt32("length",&length)==B_OK)
|
|
||||||
{
|
|
||||||
GetSelection(&start,&finish);
|
|
||||||
ParseAll(offset,finish,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}break;
|
|
||||||
/*
|
|
||||||
case B_CUT:
|
|
||||||
case B_COPY:
|
|
||||||
case B_PASTE:
|
|
||||||
{
|
|
||||||
BMessage msg(UPDATE_CLIPBOARD_MENU_STATUS);
|
|
||||||
BMessenger msgr(Window());
|
|
||||||
msgr.SendMessage(&msg);
|
|
||||||
}*/
|
|
||||||
default:
|
|
||||||
BTextView::MessageReceived(msg);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void YabText::LoadFile (entry_ref *ref)
|
|
||||||
{
|
|
||||||
if (ref == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
BFile file(ref, B_READ_ONLY);
|
|
||||||
if (file.InitCheck() != B_OK) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
off_t length;
|
|
||||||
file.GetSize(&length);
|
|
||||||
if (length == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetText (&file, 0, length);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
bool YabText::HasChanged()
|
|
||||||
{
|
|
||||||
return hasChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::SetChanged(bool changed)
|
|
||||||
{
|
|
||||||
hasChanged = changed;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool YabText::IsCaseSensitive()
|
|
||||||
{
|
|
||||||
return isCaseSensitive;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabText::SetCaseSensitive(bool caseSensitive)
|
|
||||||
{
|
|
||||||
isCaseSensitive = caseSensitive;
|
|
||||||
}
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
#ifndef YABTEXT_H
|
|
||||||
#define YABTEXT_H
|
|
||||||
|
|
||||||
#include <TextView.h>
|
|
||||||
#include <Font.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <Window.h>
|
|
||||||
#include <Message.h>
|
|
||||||
#include <Messenger.h>
|
|
||||||
|
|
||||||
class YabText : public BTextView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabText(BRect frame, const char* name, BRect textRect, uint32 resizeMode, uint32 flags);
|
|
||||||
~YabText();
|
|
||||||
void AddCommand(const char* command, int colorGroup);
|
|
||||||
virtual void AttachedToWindow();
|
|
||||||
virtual void Select(int32 start,int32 finish);
|
|
||||||
void SetColors(int, int, int, int);
|
|
||||||
int32 CountPhysicalLines(); //?
|
|
||||||
virtual void KeyDown(const char* bytes, int32 numBytes);
|
|
||||||
int FindFirstOnLine(char c,int offset,int eol);
|
|
||||||
int32 OffsetAtIndex(int32 index);// const;
|
|
||||||
int32 LineAt(int32 offset);// const;
|
|
||||||
void FillSolEol(std::vector<int>& s,std::vector<int>& e,int start,int finish);
|
|
||||||
// void GoToLine(int32 index);
|
|
||||||
int32 CountLines();
|
|
||||||
void ParseAll(int start,int finish,bool IsInteractive);
|
|
||||||
void IParseLine(int sol,int eol); // TODO!
|
|
||||||
void ParseLine(int sol,int eol,std::vector<rgb_color>& colorVec); // TODO!
|
|
||||||
void ICheckWordLists(int sol,int eol,std::vector<rgb_color>& colorVec);
|
|
||||||
void SetText(const char* text,int32 length,const text_run_array* runs = NULL);
|
|
||||||
void UpdateColors();
|
|
||||||
void UpdateFontSize();
|
|
||||||
void SetText(BFile* file,int32 offset,int32 length,const text_run_array* runs = NULL);
|
|
||||||
bool Contains(std::vector<BString>& v,BString s);
|
|
||||||
// virtual bool CanEndLine(int32 offset);
|
|
||||||
// void LoadFile(entry_ref *ref);
|
|
||||||
virtual void MessageReceived(BMessage* msg);
|
|
||||||
|
|
||||||
bool HasChanged();
|
|
||||||
void SetChanged(bool changed);
|
|
||||||
bool IsCaseSensitive();
|
|
||||||
void SetCaseSensitive(bool caseSensitive);
|
|
||||||
|
|
||||||
void SetNormalFocus();
|
|
||||||
void SetAttachedFocus();
|
|
||||||
|
|
||||||
void AddWord(BString *word);
|
|
||||||
void SetAutoCompleteStart(int num);
|
|
||||||
void HasAutoCompletion(bool flag);
|
|
||||||
|
|
||||||
int SearchOffset;
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool isCaseSensitive, hasChanged, isJapanese;
|
|
||||||
int myFontSize;
|
|
||||||
rgb_color bgcolor;
|
|
||||||
rgb_color textcolor, punc_symbol_color, comment_color, ignore_color;
|
|
||||||
rgb_color format_cmd_color, special_cmd_color, generic_cmd_color;
|
|
||||||
BFont f;
|
|
||||||
|
|
||||||
std::vector <BString> green_matches;
|
|
||||||
std::vector <BString> purple_matches;
|
|
||||||
std::vector <BString> generic_matches;
|
|
||||||
std::vector <BString> comment_matches;
|
|
||||||
std::vector <char> punctuation;
|
|
||||||
|
|
||||||
BList *words;
|
|
||||||
bool hasAutoCompletion, isAutoComplete;
|
|
||||||
int32 autoOffset, autoEnd;
|
|
||||||
int number_of_letters;
|
|
||||||
|
|
||||||
bool min(int32 a, int32 b)
|
|
||||||
{
|
|
||||||
return (a<=b?a:b);
|
|
||||||
};
|
|
||||||
bool max(int32 a, int32 b)
|
|
||||||
{
|
|
||||||
return (a>=b?a:b);
|
|
||||||
};
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void InsertText(const char* text,int32 length,int32 offset,const text_run_array* runner);
|
|
||||||
virtual void DeleteText(int32 start, int32 finish);
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2009, Axel Dörfler, axeld@pinc-software.de.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
// #include <MessageRunner.h>
|
|
||||||
#include <StringView.h>
|
|
||||||
#include <Window.h>
|
|
||||||
|
|
||||||
#include "ToolTip.h"
|
|
||||||
|
|
||||||
class MouseToolTip : public BToolTip {
|
|
||||||
public:
|
|
||||||
MouseToolTip()
|
|
||||||
{
|
|
||||||
fView = new MouseView();
|
|
||||||
SetSticky(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~MouseToolTip()
|
|
||||||
{
|
|
||||||
delete fView;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual BView* View() const
|
|
||||||
{
|
|
||||||
return fView;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
BStringView* fView;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class ImmediateView : public BStringView {
|
|
||||||
public:
|
|
||||||
ImmediateView(const char* name, const char* label)
|
|
||||||
:
|
|
||||||
BStringView(name, label)
|
|
||||||
{
|
|
||||||
SetToolTip("Easy but immediate!");
|
|
||||||
ToolTip()->SetSticky(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void MouseMoved(BPoint where, uint32 transit,
|
|
||||||
const BMessage* dragMessage)
|
|
||||||
{
|
|
||||||
if (transit == B_ENTERED_VIEW)
|
|
||||||
ShowToolTip(ToolTip());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class Window : public BWindow {
|
|
||||||
public:
|
|
||||||
Window();
|
|
||||||
|
|
||||||
virtual bool QuitRequested();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class Application : public BApplication {
|
|
||||||
public:
|
|
||||||
Application();
|
|
||||||
|
|
||||||
virtual void ReadyToRun();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
|
|
||||||
Window::Window()
|
|
||||||
:
|
|
||||||
BWindow(BRect(100, 100, 520, 430), "ToolTip-Test",
|
|
||||||
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS)
|
|
||||||
{
|
|
||||||
BView* simple = new BStringView("1", "Simple Tool Tip");
|
|
||||||
simple->SetToolTip("This is a really\nsimple tool tip!");
|
|
||||||
|
|
||||||
BView* custom = new BStringView("2", "Custom Tool Tip");
|
|
||||||
custom->SetToolTip(new CustomToolTip());
|
|
||||||
|
|
||||||
BView* changing = new BStringView("3", "Changing Tool Tip");
|
|
||||||
changing->SetToolTip(new ChangingToolTip());
|
|
||||||
|
|
||||||
BView* mouse = new BStringView("3", "Mouse Tool Tip (sticky)");
|
|
||||||
mouse->SetToolTip(new MouseToolTip());
|
|
||||||
|
|
||||||
BView* immediate = new ImmediateView("3", "Immediate Tool Tip (sticky)");
|
|
||||||
|
|
||||||
BLayoutBuilder::Group<>(this, B_VERTICAL)
|
|
||||||
.Add(simple)
|
|
||||||
.Add(custom)
|
|
||||||
.Add(changing)
|
|
||||||
.Add(mouse)
|
|
||||||
.Add(immediate);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
Window::QuitRequested()
|
|
||||||
{
|
|
||||||
be_app->PostMessage(B_QUIT_REQUESTED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
|
|
||||||
Application::Application()
|
|
||||||
: BApplication("application/x-vnd.haiku-tooltiptest")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Application::ReadyToRun()
|
|
||||||
{
|
|
||||||
BWindow *window = new Window();
|
|
||||||
window->Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
Application app;
|
|
||||||
|
|
||||||
app.Run();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-341
@@ -1,341 +0,0 @@
|
|||||||
#include <Bitmap.h>
|
|
||||||
#include <Path.h>
|
|
||||||
#include <Picture.h>
|
|
||||||
#include <Region.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include "YabWindow.h"
|
|
||||||
#include "YabView.h"
|
|
||||||
|
|
||||||
YabView::YabView(BRect frame, const char *name, uint32 resizingMode, uint32 flags)
|
|
||||||
: BView(frame, name, resizingMode, flags)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
SetViewColor(216,216,216,255);
|
|
||||||
SetLowColor(216,216,216,255);
|
|
||||||
SetHighColor(0,0,0,255);
|
|
||||||
*/
|
|
||||||
|
|
||||||
rgb_color b1 = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
rgb_color b2 = {0,0,0,255};
|
|
||||||
|
|
||||||
SetViewColor(b1);
|
|
||||||
SetLowColor(b1);
|
|
||||||
SetHighColor(b2);
|
|
||||||
|
|
||||||
drawList = new BList(1);
|
|
||||||
|
|
||||||
YabDrawing *t = new YabDrawing();
|
|
||||||
t->command = 6;
|
|
||||||
t->r = 0; t->g = 0;
|
|
||||||
t->b = 0; t->alpha = 255;
|
|
||||||
drawList->AddItem(t);
|
|
||||||
|
|
||||||
YabDrawing *t2 = new YabDrawing();
|
|
||||||
t2->command = 7;
|
|
||||||
t2->r = b1.red; t2->g = b1.green;
|
|
||||||
t2->b = b1.blue; t2->alpha = 255;
|
|
||||||
drawList->AddItem(t2);
|
|
||||||
|
|
||||||
mouseMovedInfo = 1;
|
|
||||||
mouseStateInfo = -1;
|
|
||||||
prevMouseStateInfo = 0;
|
|
||||||
|
|
||||||
mouseX = 0;
|
|
||||||
mouseY = 0;
|
|
||||||
mouseLButton = 0;
|
|
||||||
mouseMButton = 0;
|
|
||||||
mouseRButton = 0;
|
|
||||||
dropZone = false;
|
|
||||||
pressedKeys.SetTo("");
|
|
||||||
SetDrawingMode(B_OP_COPY);
|
|
||||||
|
|
||||||
// BTab uses view Name() as displayed label storage, so SetLabel changes it
|
|
||||||
// this interferes with yab method of referencing views by name
|
|
||||||
// to be removed
|
|
||||||
nameWAForTabView = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
YabView::~YabView()
|
|
||||||
{
|
|
||||||
while(drawList->CountItems()>0)
|
|
||||||
{
|
|
||||||
YabDrawing *t = (YabDrawing*)drawList->LastItem();
|
|
||||||
drawList->RemoveItem(t);
|
|
||||||
if(t->command == 0) delete [] t->chardata;
|
|
||||||
delete t;
|
|
||||||
}
|
|
||||||
delete drawList;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::MessageReceived(BMessage *msg)
|
|
||||||
{
|
|
||||||
entry_ref ref;
|
|
||||||
switch (msg->what)
|
|
||||||
{
|
|
||||||
case B_SIMPLE_DATA:
|
|
||||||
{
|
|
||||||
if(dropZone)
|
|
||||||
{
|
|
||||||
BString tmp("");
|
|
||||||
int32 count;
|
|
||||||
uint32 type;
|
|
||||||
const char* name;
|
|
||||||
int i =0;
|
|
||||||
|
|
||||||
while(msg->FindRef("refs", i, &ref) == B_OK)
|
|
||||||
{
|
|
||||||
BEntry dropEntry(&ref);
|
|
||||||
BPath tmpDirectory;
|
|
||||||
dropEntry.GetPath(&tmpDirectory);
|
|
||||||
tmp << Name();
|
|
||||||
tmp << ":_Dropped";
|
|
||||||
tmp << ":" << tmpDirectory.Path();
|
|
||||||
tmp << "|";
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
YabWindow *yabWin = (YabWindow*)Window();
|
|
||||||
yabWin->dropMsg.SetTo(tmp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
BView::MessageReceived(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
BView::MessageReceived(msg);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::Draw(BRect updateRect)
|
|
||||||
{
|
|
||||||
SetFont(be_plain_font);
|
|
||||||
updateRect = Bounds();
|
|
||||||
SetDrawingMode(B_OP_OVER);
|
|
||||||
for(int i=0; i<drawList->CountItems(); i++)
|
|
||||||
{
|
|
||||||
YabDrawing *e = (YabDrawing*)drawList->ItemAt(i);
|
|
||||||
switch(e->command)
|
|
||||||
{
|
|
||||||
case 0: DrawString(e->chardata, BPoint(e->x1, e->y1));
|
|
||||||
break;
|
|
||||||
case 1: StrokeLine(BPoint(e->x1,e->y1),BPoint(e->x2,e->y2), e->p);
|
|
||||||
break;
|
|
||||||
case 2: StrokeEllipse(BPoint(e->x1,e->y1), e->x2, e->y2, e->p);
|
|
||||||
break;
|
|
||||||
case 3: FillEllipse(BPoint(e->x1,e->y1), e->x2, e->y2, e->p);
|
|
||||||
break;
|
|
||||||
case 4: StrokeRect(BRect(e->x1,e->y1,e->x2,e->y2), e->p);
|
|
||||||
break;
|
|
||||||
case 5: FillRect(BRect(e->x1,e->y1,e->x2,e->y2), e->p);
|
|
||||||
break;
|
|
||||||
case 6: {
|
|
||||||
if(e->alpha == 255)
|
|
||||||
SetDrawingMode(B_OP_OVER);
|
|
||||||
else
|
|
||||||
SetDrawingMode(B_OP_ALPHA);
|
|
||||||
SetHighColor(e->r,e->g,e->b,e->alpha);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 7: {
|
|
||||||
if(e->alpha == 255)
|
|
||||||
SetDrawingMode(B_OP_OVER);
|
|
||||||
else
|
|
||||||
SetDrawingMode(B_OP_ALPHA);
|
|
||||||
SetLowColor(e->r,e->g,e->b,e->alpha);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 8: {
|
|
||||||
BPoint p[4];
|
|
||||||
p[0].Set(e->x1,e->y1);
|
|
||||||
p[1].Set(e->x2,e->y2);
|
|
||||||
p[2].Set(e->x3,e->y3);
|
|
||||||
p[3].Set(e->x4,e->y4);
|
|
||||||
SetPenSize(1.01);
|
|
||||||
StrokeBezier(p, e->p);
|
|
||||||
SetPenSize(1.0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 9: {
|
|
||||||
BPoint p[4];
|
|
||||||
p[0].Set(e->x1,e->y1);
|
|
||||||
p[1].Set(e->x2,e->y2);
|
|
||||||
p[2].Set(e->x3,e->y3);
|
|
||||||
p[3].Set(e->x4,e->y4);
|
|
||||||
SetPenSize(2.0);
|
|
||||||
FillBezier(p, e->p);
|
|
||||||
SetPenSize(1.0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 10: {
|
|
||||||
drawing_mode mode = DrawingMode();
|
|
||||||
if(IsPrinting())
|
|
||||||
SetDrawingMode(B_OP_OVER);
|
|
||||||
else
|
|
||||||
SetDrawingMode(B_OP_ALPHA);
|
|
||||||
DrawBitmap(e->bitmap, BPoint(e->x1, e->y1));
|
|
||||||
SetDrawingMode(mode);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 11: {
|
|
||||||
drawing_mode mode = DrawingMode();
|
|
||||||
if(IsPrinting())
|
|
||||||
SetDrawingMode(B_OP_OVER);
|
|
||||||
else
|
|
||||||
SetDrawingMode(B_OP_ALPHA);
|
|
||||||
DrawBitmap(e->bitmap, BRect(e->x1, e->y1, e->x2, e->y2));
|
|
||||||
SetDrawingMode(mode);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 12: {
|
|
||||||
// SetFont(&e->font, B_FONT_FAMILY_AND_STYLE);
|
|
||||||
// SetFont(&e->font, B_FONT_SIZE);
|
|
||||||
SetFont(&e->font, B_FONT_ALL);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::MouseDown(BPoint point)
|
|
||||||
{
|
|
||||||
BPoint ptCursor;
|
|
||||||
uint32 uButtons = 0;
|
|
||||||
GetMouse(&ptCursor, &uButtons, false);
|
|
||||||
|
|
||||||
mouseX = (int)ptCursor.x;
|
|
||||||
mouseY = (int)ptCursor.y;
|
|
||||||
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
||||||
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
||||||
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
||||||
mouseStateInfo = 4;
|
|
||||||
BView::MouseDown(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::MouseUp(BPoint point)
|
|
||||||
{
|
|
||||||
BPoint ptCursor;
|
|
||||||
uint32 uButtons = 0;
|
|
||||||
GetMouse(&ptCursor, &uButtons, false);
|
|
||||||
|
|
||||||
mouseX = (int)ptCursor.x;
|
|
||||||
mouseY = (int)ptCursor.y;
|
|
||||||
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
||||||
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
||||||
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
||||||
mouseStateInfo = 5;
|
|
||||||
BView::MouseUp(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::MouseMoved(BPoint point, uint32 transit, const BMessage *message)
|
|
||||||
{
|
|
||||||
BPoint ptCursor;
|
|
||||||
uint32 uButtons = 0;
|
|
||||||
GetMouse(&ptCursor, &uButtons, true);
|
|
||||||
|
|
||||||
mouseX = (int)ptCursor.x;
|
|
||||||
mouseY = (int)ptCursor.y;
|
|
||||||
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
||||||
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
||||||
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
||||||
|
|
||||||
switch(transit)
|
|
||||||
{
|
|
||||||
case B_INSIDE_VIEW:
|
|
||||||
if(prevMouseStateInfo==1)
|
|
||||||
mouseStateInfo = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mouseStateInfo = 1;
|
|
||||||
prevMouseStateInfo = 1;
|
|
||||||
}
|
|
||||||
mouseMovedInfo = 0;
|
|
||||||
break;
|
|
||||||
case B_ENTERED_VIEW:
|
|
||||||
mouseStateInfo = 1;
|
|
||||||
mouseMovedInfo = 0;
|
|
||||||
break;
|
|
||||||
case B_OUTSIDE_VIEW:
|
|
||||||
mouseStateInfo = 2;
|
|
||||||
mouseMovedInfo = 1;
|
|
||||||
break;
|
|
||||||
case B_EXITED_VIEW:
|
|
||||||
mouseStateInfo = 3;
|
|
||||||
mouseMovedInfo = 1;
|
|
||||||
prevMouseStateInfo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
BView::MouseMoved(point, transit, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::KeyDown(const char *bytes, int32 numBytes)
|
|
||||||
{
|
|
||||||
BMessage *msg = Window()->CurrentMessage();
|
|
||||||
if(msg)
|
|
||||||
{
|
|
||||||
pressedKeys.SetTo("");
|
|
||||||
int32 key, modifiers;
|
|
||||||
msg->FindInt32("key", &key);
|
|
||||||
msg->FindInt32("modifiers", &modifiers);
|
|
||||||
if(modifiers&B_CONTROL_KEY) pressedKeys << "ctrl-";
|
|
||||||
if(modifiers&B_COMMAND_KEY) pressedKeys << "command-";
|
|
||||||
if(modifiers&B_OPTION_KEY) pressedKeys << "option-";
|
|
||||||
if(modifiers&B_SHIFT_KEY) pressedKeys << "shift-";
|
|
||||||
switch(bytes[0])
|
|
||||||
{
|
|
||||||
case B_BACKSPACE: pressedKeys << "backspace"; break;
|
|
||||||
case B_ENTER: pressedKeys << "enter"; break;
|
|
||||||
case B_TAB: pressedKeys << "tab"; break;
|
|
||||||
case B_ESCAPE: pressedKeys << "esc"; break;
|
|
||||||
case B_LEFT_ARROW: pressedKeys << "left"; break;
|
|
||||||
case B_RIGHT_ARROW: pressedKeys << "right"; break;
|
|
||||||
case B_UP_ARROW: pressedKeys << "up"; break;
|
|
||||||
case B_DOWN_ARROW: pressedKeys << "down"; break;
|
|
||||||
case B_INSERT: pressedKeys << "insert"; break;
|
|
||||||
case B_DELETE: pressedKeys << "del"; break;
|
|
||||||
case B_HOME: pressedKeys << "home"; break;
|
|
||||||
case B_END: pressedKeys << "end"; break;
|
|
||||||
case B_PAGE_UP: pressedKeys << "pageup"; break;
|
|
||||||
case B_PAGE_DOWN: pressedKeys << "pagedown"; break;
|
|
||||||
case B_FUNCTION_KEY:
|
|
||||||
{
|
|
||||||
switch(key)
|
|
||||||
{
|
|
||||||
case B_F1_KEY: pressedKeys << "f1"; break;
|
|
||||||
case B_F2_KEY: pressedKeys << "f2"; break;
|
|
||||||
case B_F3_KEY: pressedKeys << "f3"; break;
|
|
||||||
case B_F4_KEY: pressedKeys << "f4"; break;
|
|
||||||
case B_F5_KEY: pressedKeys << "f5"; break;
|
|
||||||
case B_F6_KEY: pressedKeys << "f6"; break;
|
|
||||||
case B_F7_KEY: pressedKeys << "f7"; break;
|
|
||||||
case B_F8_KEY: pressedKeys << "f8"; break;
|
|
||||||
case B_F9_KEY: pressedKeys << "f9"; break;
|
|
||||||
case B_F10_KEY: pressedKeys << "f10"; break;
|
|
||||||
case B_F11_KEY: pressedKeys << "f11"; break;
|
|
||||||
case B_F12_KEY: pressedKeys << "f12"; break;
|
|
||||||
case B_PRINT_KEY: pressedKeys << "print"; break;
|
|
||||||
case B_SCROLL_KEY: pressedKeys << "scroll"; break;
|
|
||||||
case B_PAUSE_KEY: pressedKeys << "pause"; break;
|
|
||||||
default:
|
|
||||||
pressedKeys.SetTo(bytes);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
pressedKeys.SetTo(bytes);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pressedKeys.SetTo(bytes);
|
|
||||||
|
|
||||||
if(bytes[0]!=B_TAB) BView::KeyDown(bytes,numBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabView::KeyUp(const char *bytes, int32 numBytes)
|
|
||||||
{
|
|
||||||
pressedKeys.SetTo("");
|
|
||||||
BView::KeyUp(bytes,numBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
#ifndef YABVIEW_H
|
|
||||||
#define YABVIEW_H
|
|
||||||
|
|
||||||
#include <String.h>
|
|
||||||
#include <View.h>
|
|
||||||
|
|
||||||
struct YabDrawing
|
|
||||||
{
|
|
||||||
int command;
|
|
||||||
double x1,y1,x2,y2,x3,y3,x4,y4;
|
|
||||||
int r,g,b,alpha;
|
|
||||||
const char* chardata;
|
|
||||||
pattern p;
|
|
||||||
BBitmap *bitmap;
|
|
||||||
BFont font;
|
|
||||||
};
|
|
||||||
|
|
||||||
class YabView : public BView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabView(BRect frame, const char *name, uint32 resizingMode, uint32 flags);
|
|
||||||
~YabView();
|
|
||||||
virtual void MessageReceived(BMessage *msg);
|
|
||||||
virtual void Draw(BRect updateRect);
|
|
||||||
virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *message);
|
|
||||||
virtual void MouseUp(BPoint point);
|
|
||||||
virtual void MouseDown(BPoint point);
|
|
||||||
virtual void KeyUp(const char *bytes, int32 numBytes);
|
|
||||||
virtual void KeyDown(const char *bytes, int32 numBytes);
|
|
||||||
const char* NameForTabView() { return nameWAForTabView; }
|
|
||||||
BList *drawList;
|
|
||||||
int mouseMovedInfo;
|
|
||||||
int mouseStateInfo;
|
|
||||||
int mouseX;
|
|
||||||
int mouseY;
|
|
||||||
uint mouseLButton;
|
|
||||||
uint mouseMButton;
|
|
||||||
uint mouseRButton;
|
|
||||||
bool dropZone;
|
|
||||||
BString pressedKeys;
|
|
||||||
private:
|
|
||||||
int prevMouseStateInfo;
|
|
||||||
// TODO: revisit at a later time, more info in constructor
|
|
||||||
BString nameWAForTabView;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,362 +0,0 @@
|
|||||||
#include "global.h"
|
|
||||||
#include <Application.h>
|
|
||||||
#include <Bitmap.h>
|
|
||||||
#include <Button.h>
|
|
||||||
#include <CheckBox.h>
|
|
||||||
#include <ColorControl.h>
|
|
||||||
#include <ListView.h>
|
|
||||||
#include <Menu.h>
|
|
||||||
#include <MenuBar.h>
|
|
||||||
#include <MenuItem.h>
|
|
||||||
#include <OutlineListView.h>
|
|
||||||
#include <RadioButton.h>
|
|
||||||
#include <Slider.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <TextControl.h>
|
|
||||||
#include <Window.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "YabWindow.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 YABSPINCONTROL = 'YBsp';
|
|
||||||
const uint32 YABSHORTCUT = 'YBsh';
|
|
||||||
|
|
||||||
|
|
||||||
YabWindow::YabWindow(BRect frame, const char* title, const char* id, window_look winlook, window_feel winfeel, uint32 flags)
|
|
||||||
: BWindow (frame, title, winlook, winfeel, flags)
|
|
||||||
{
|
|
||||||
messageString.SetTo("");
|
|
||||||
idString.SetTo(id);
|
|
||||||
showing = 1;
|
|
||||||
dropMsg.SetTo("");
|
|
||||||
WActivated=-1;
|
|
||||||
WFrameMoved=-1;
|
|
||||||
WFrameResized=-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
YabWindow::~YabWindow()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabWindow::WindowActivated(bool state)
|
|
||||||
{
|
|
||||||
if (state)
|
|
||||||
WActivated=1;
|
|
||||||
else
|
|
||||||
WActivated=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabWindow::FrameMoved(BPoint new_position)
|
|
||||||
{
|
|
||||||
WFrameMoved=1;
|
|
||||||
Wpx=(int)new_position.x;
|
|
||||||
Wpy=(int)new_position.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabWindow::FrameResized(float new_width, float new_height)
|
|
||||||
{
|
|
||||||
WFrameResized=1;
|
|
||||||
Wph=(int)new_height;
|
|
||||||
Wpw=(int)new_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
void YabWindow::MessageReceived(BMessage *message)
|
|
||||||
{
|
|
||||||
// if(message) message->PrintToStream();
|
|
||||||
switch(message->what)
|
|
||||||
{
|
|
||||||
case YABBUTTON:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BButton *myButtonPressed;
|
|
||||||
message->FindPointer("source",(void **) &myButtonPressed);
|
|
||||||
tmpMessage += myButtonPressed->Name();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABMENU:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BMenuItem *mySelectedMenu;
|
|
||||||
message->FindPointer("source",(void **) &mySelectedMenu);
|
|
||||||
BMenu *myMenu = mySelectedMenu->Menu();
|
|
||||||
tmpMessage += ((BMenuBar*)myMenu->Supermenu())->Parent()->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += myMenu->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += mySelectedMenu->Label();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABSUBMENU:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BMenuItem *mySelectedMenu;
|
|
||||||
message->FindPointer("source",(void **) &mySelectedMenu);
|
|
||||||
BMenu *myMenu = mySelectedMenu->Menu();
|
|
||||||
tmpMessage += ((BMenuBar*)myMenu->Supermenu()->Supermenu())->Parent()->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += myMenu->Supermenu()->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += myMenu->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += mySelectedMenu->Label();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABTEXTCONTROL:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BTextControl *myTextControl;
|
|
||||||
message->FindPointer("source",(void **) &myTextControl);
|
|
||||||
tmpMessage += myTextControl->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += myTextControl->Text();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABCHECKBOX:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BCheckBox *myCheckBox;
|
|
||||||
message->FindPointer("source",(void **) &myCheckBox);
|
|
||||||
tmpMessage += myCheckBox->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
if(myCheckBox->Value()==B_CONTROL_ON)
|
|
||||||
tmpMessage += "ON|";
|
|
||||||
else
|
|
||||||
tmpMessage += "OFF|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABRADIOBUTTON:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BRadioButton *myRadioButton;
|
|
||||||
message->FindPointer("source",(void **) &myRadioButton);
|
|
||||||
tmpMessage += myRadioButton->Name();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABLISTBOXINVOKE:
|
|
||||||
{
|
|
||||||
BListView *myList;
|
|
||||||
message->FindPointer("source",(void **) &myList);
|
|
||||||
int i = myList->CurrentSelection();
|
|
||||||
if(i>=0)
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
tmpMessage += myList->Name();
|
|
||||||
tmpMessage += ":_Invoke:";
|
|
||||||
// tmpMessage += ((BStringItem*)(myList->ItemAt(i)))->Text();
|
|
||||||
tmpMessage << i+1;
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABLISTBOXSELECT:
|
|
||||||
{
|
|
||||||
BListView *myList;
|
|
||||||
message->FindPointer("source",(void **) &myList);
|
|
||||||
int i = myList->CurrentSelection();
|
|
||||||
if(i>=0)
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
tmpMessage += myList->Name();
|
|
||||||
tmpMessage += ":_Select:";
|
|
||||||
// tmpMessage += ((BStringItem*)(myList->ItemAt(i)))->Text();
|
|
||||||
tmpMessage << i+1;
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABDROPBOX:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BMenuItem *myMenuItem;
|
|
||||||
message->FindPointer("source",(void **) &myMenuItem);
|
|
||||||
tmpMessage += (myMenuItem->Menu())->Supermenu()->Parent()->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage += myMenuItem->Label();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABSLIDER:
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
BSlider *mySlider;
|
|
||||||
message->FindPointer("source",(void **) &mySlider);
|
|
||||||
tmpMessage += mySlider->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
tmpMessage << mySlider->Value();
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABCOLORCONTROL:
|
|
||||||
{
|
|
||||||
rgb_color col;
|
|
||||||
BString tmpMessage("");
|
|
||||||
BColorControl *myCControl;
|
|
||||||
message->FindPointer("source",(void **) &myCControl);
|
|
||||||
tmpMessage += myCControl->Name();
|
|
||||||
tmpMessage += ":";
|
|
||||||
col = myCControl->ValueAsColor();
|
|
||||||
tmpMessage << col.red << ":" << col.green << ":" << col.blue;
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABTREEBOXINVOKE:
|
|
||||||
{
|
|
||||||
BOutlineListView *myList;
|
|
||||||
message->FindPointer("source",(void **) &myList);
|
|
||||||
int i = myList->FullListCurrentSelection();
|
|
||||||
if(i>=0)
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
const char* txt = ((BStringItem*)(myList->FullListItemAt(i)))->Text();
|
|
||||||
tmpMessage += myList->Name();
|
|
||||||
tmpMessage += ":_Invoke:";
|
|
||||||
tmpMessage << i+1;
|
|
||||||
/*
|
|
||||||
int n = tmpMessage.Length();
|
|
||||||
BListItem *superitem = myList->Superitem(myList->FullListItemAt(i));
|
|
||||||
while(superitem)
|
|
||||||
{
|
|
||||||
BString t("");
|
|
||||||
t << ((BStringItem*)superitem)->Text() << ":";
|
|
||||||
tmpMessage.Insert(t,n);
|
|
||||||
superitem = myList->Superitem(superitem);
|
|
||||||
}
|
|
||||||
tmpMessage += txt;*/
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABTREEBOXSELECT:
|
|
||||||
{
|
|
||||||
BOutlineListView *myList;
|
|
||||||
message->FindPointer("source",(void **) &myList);
|
|
||||||
int i = myList->FullListCurrentSelection();
|
|
||||||
if(i>=0)
|
|
||||||
{
|
|
||||||
BString tmpMessage("");
|
|
||||||
const char* txt = ((BStringItem*)(myList->FullListItemAt(i)))->Text();
|
|
||||||
tmpMessage += myList->Name();
|
|
||||||
tmpMessage += ":_Select:";
|
|
||||||
tmpMessage << i+1;
|
|
||||||
/*
|
|
||||||
int n = tmpMessage.Length();
|
|
||||||
BListItem *superitem = myList->Superitem(myList->FullListItemAt(i));
|
|
||||||
while(superitem)
|
|
||||||
{
|
|
||||||
BString t("");
|
|
||||||
t << ((BStringItem*)superitem)->Text() << ":";
|
|
||||||
tmpMessage.Insert(t,n);
|
|
||||||
superitem = myList->Superitem(superitem);
|
|
||||||
}
|
|
||||||
tmpMessage += txt;*/
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABFILEBOXSELECT:
|
|
||||||
{
|
|
||||||
BColumnListView *myList;
|
|
||||||
message->FindPointer("source",(void **) &myList);
|
|
||||||
BRow *myRow = NULL;
|
|
||||||
if(myList) myRow = myList->CurrentSelection();
|
|
||||||
if(myRow)
|
|
||||||
{
|
|
||||||
// if(!myList->IsFocus()) myList->MakeFocus();
|
|
||||||
BString tmpMessage("");
|
|
||||||
tmpMessage += myList->Name();
|
|
||||||
tmpMessage += ":_Select:";
|
|
||||||
tmpMessage << myList->IndexOf(myRow)+1;
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABFILEBOXINVOKE:
|
|
||||||
{
|
|
||||||
BColumnListView *myList;
|
|
||||||
message->FindPointer("source",(void **) &myList);
|
|
||||||
BRow *myRow = NULL;
|
|
||||||
if(myList) myRow = myList->CurrentSelection();
|
|
||||||
if(myRow)
|
|
||||||
{
|
|
||||||
// if(!myList->IsFocus()) myList->MakeFocus();
|
|
||||||
BString tmpMessage("");
|
|
||||||
tmpMessage += myList->Name();
|
|
||||||
tmpMessage += ":_Invoke:";
|
|
||||||
tmpMessage << myList->IndexOf(myRow)+1;
|
|
||||||
tmpMessage += "|";
|
|
||||||
messageString += tmpMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case YABSHORTCUT:
|
|
||||||
{
|
|
||||||
const char* myMsg;
|
|
||||||
if(message->FindString("shortcut", &myMsg) == B_OK)
|
|
||||||
{
|
|
||||||
messageString += myMsg;
|
|
||||||
messageString += "|";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
BWindow::MessageReceived(message);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const BString YabWindow::getMessages()
|
|
||||||
{
|
|
||||||
BString tmp(messageString);
|
|
||||||
tmp += dropMsg;
|
|
||||||
messageString.SetTo("");
|
|
||||||
dropMsg.SetTo("");
|
|
||||||
return (const BString)tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool YabWindow::QuitRequested()
|
|
||||||
{
|
|
||||||
messageString += idString;
|
|
||||||
messageString += ":_QuitRequested|";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool YabWindow::IsPaper(uint8* a)
|
|
||||||
{
|
|
||||||
if(a[32] != 0) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#ifndef YABWINDOW_H
|
|
||||||
#define YABWINDOW_H
|
|
||||||
|
|
||||||
#include <FilePanel.h>
|
|
||||||
#include <List.h>
|
|
||||||
#include <Menu.h>
|
|
||||||
#include <PopUpMenu.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <Window.h>
|
|
||||||
|
|
||||||
class YabWindow : public BWindow
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
YabWindow(BRect frame, const char* title, const char* id, window_look winlook, window_feel winfeel, uint32 flags);
|
|
||||||
~YabWindow();
|
|
||||||
virtual void MessageReceived(BMessage *message);
|
|
||||||
virtual bool QuitRequested();
|
|
||||||
const BString getMessages();
|
|
||||||
virtual void WindowActivated(bool state);
|
|
||||||
virtual void FrameMoved(BPoint new_position);
|
|
||||||
virtual void FrameResized(float new_width, float new_height);
|
|
||||||
int layout;
|
|
||||||
int showing;
|
|
||||||
int WActivated;
|
|
||||||
int WFrameResized;
|
|
||||||
int Wpx;
|
|
||||||
int Wpy;
|
|
||||||
int Wph;
|
|
||||||
int Wpw;
|
|
||||||
int WFrameMoved;
|
|
||||||
BString dropMsg;
|
|
||||||
BString idString;
|
|
||||||
private:
|
|
||||||
bool IsPaper(uint8* a);
|
|
||||||
BString messageString;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
/
|
|
||||||
/ File: ColorTools.cpp
|
|
||||||
/
|
|
||||||
/ Description: Additional experimental color manipulation functions.
|
|
||||||
/
|
|
||||||
/ Copyright 2000, Be Incorporated, All Rights Reserved
|
|
||||||
/
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#include "ColorTools.h"
|
|
||||||
|
|
||||||
#if B_BEOS_VERSION <= B_BEOS_VERSION_MAUI
|
|
||||||
|
|
||||||
namespace BExperimental {
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
#define DB_INLINE
|
|
||||||
#else
|
|
||||||
#define DB_INLINE inline
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static DB_INLINE void mix_color_func(rgb_color* target, const rgb_color other, uint8 amount)
|
|
||||||
{
|
|
||||||
target->red = (uint8)( ((int16(other.red)-int16(target->red))*amount)/255
|
|
||||||
+ target->red );
|
|
||||||
target->green = (uint8)( ((int16(other.green)-int16(target->green))*amount)/255
|
|
||||||
+ target->green );
|
|
||||||
target->blue = (uint8)( ((int16(other.blue)-int16(target->blue))*amount)/255
|
|
||||||
+ target->blue );
|
|
||||||
target->alpha = (uint8)( ((int16(other.alpha)-int16(target->alpha))*amount)/255
|
|
||||||
+ target->alpha );
|
|
||||||
}
|
|
||||||
|
|
||||||
static DB_INLINE void blend_color_func(rgb_color* target, const rgb_color other, uint8 amount)
|
|
||||||
{
|
|
||||||
const uint8 alphaMix = (uint8)( ((int16(other.alpha)-int16(255-target->alpha))*amount)/255
|
|
||||||
+ (255-target->alpha) );
|
|
||||||
target->red = (uint8)( ((int16(other.red)-int16(target->red))*alphaMix)/255
|
|
||||||
+ target->red );
|
|
||||||
target->green = (uint8)( ((int16(other.green)-int16(target->green))*alphaMix)/255
|
|
||||||
+ target->green );
|
|
||||||
target->blue = (uint8)( ((int16(other.blue)-int16(target->blue))*alphaMix)/255
|
|
||||||
+ target->blue );
|
|
||||||
target->alpha = (uint8)( ((int16(other.alpha)-int16(target->alpha))*amount)/255
|
|
||||||
+ target->alpha );
|
|
||||||
}
|
|
||||||
|
|
||||||
static DB_INLINE void disable_color_func(rgb_color* target, const rgb_color background)
|
|
||||||
{
|
|
||||||
blend_color_func(target, background, 255-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
rgb_color mix_color(rgb_color color1, rgb_color color2, uint8 amount)
|
|
||||||
{
|
|
||||||
mix_color_func(&color1, color2, amount);
|
|
||||||
return color1;
|
|
||||||
}
|
|
||||||
|
|
||||||
rgb_color blend_color(rgb_color color1, rgb_color color2, uint8 amount)
|
|
||||||
{
|
|
||||||
blend_color_func(&color1, color2, amount);
|
|
||||||
return color1;
|
|
||||||
}
|
|
||||||
|
|
||||||
rgb_color disable_color(rgb_color color, rgb_color background)
|
|
||||||
{
|
|
||||||
disable_color_func(&color, background);
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
/
|
|
||||||
/ File: ColorTools.h
|
|
||||||
/
|
|
||||||
/ Description: Additional experimental color manipulation functions.
|
|
||||||
/
|
|
||||||
/ Copyright 2000, Be Incorporated, All Rights Reserved
|
|
||||||
/
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _COLOR_TOOLS_H
|
|
||||||
#define _COLOR_TOOLS_H
|
|
||||||
|
|
||||||
#include <GraphicsDefs.h>
|
|
||||||
|
|
||||||
#if B_BEOS_VERSION <= B_BEOS_VERSION_MAUI
|
|
||||||
|
|
||||||
namespace BExperimental {
|
|
||||||
|
|
||||||
// Comparison operators.
|
|
||||||
|
|
||||||
inline bool operator==(const rgb_color c1, const rgb_color c2)
|
|
||||||
{
|
|
||||||
return (*((uint32*)&c1)) == (*((uint32*)&c2));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator!=(const rgb_color c1, const rgb_color c2)
|
|
||||||
{
|
|
||||||
return (*((uint32*)&c1)) != (*((uint32*)&c2));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Color creation.
|
|
||||||
|
|
||||||
#ifndef HAIKU
|
|
||||||
|
|
||||||
inline rgb_color make_color(uint8 red, uint8 green, uint8 blue, uint8 alpha=255)
|
|
||||||
{
|
|
||||||
rgb_color c;
|
|
||||||
c.red = red;
|
|
||||||
c.green = green;
|
|
||||||
c.blue = blue;
|
|
||||||
c.alpha = alpha;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Mix two colors together, ignoring their relative alpha channels.
|
|
||||||
// If amount is 0, the result is color1; if 255, the result is color2;
|
|
||||||
// if another value, it is somewhere in-between. The resulting alpha
|
|
||||||
// channel is mixed exactly like the other color channels.
|
|
||||||
//rgb_color mix_color(rgb_color color1, rgb_color color2, uint8 amount);
|
|
||||||
|
|
||||||
// Blend two colors together, weighting by their relative alpha channels.
|
|
||||||
// The resulting color is the same as mix_color(), except that the amount
|
|
||||||
// used from color1 and color2's color channels is dependent on that color's
|
|
||||||
// alpha channel. For example, if color1.alpha is 0 and color2.alpha is
|
|
||||||
// 255, the resulting red, green, and blue values will be the same as those
|
|
||||||
// in color2, regardless of 'amount'.
|
|
||||||
rgb_color blend_color(rgb_color color1, rgb_color color2, uint8 amount);
|
|
||||||
|
|
||||||
// Return a color that is the disabled representation of 'color' when drawn
|
|
||||||
// on a solid color 'background'.
|
|
||||||
rgb_color disable_color(rgb_color color, rgb_color background);
|
|
||||||
|
|
||||||
} // namespace BExperimental
|
|
||||||
|
|
||||||
using namespace BExperimental;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,409 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
/
|
|
||||||
/ File: ColumnListView.h
|
|
||||||
/
|
|
||||||
/ Description: Experimental multi-column list view.
|
|
||||||
/
|
|
||||||
/ Copyright 2000+, Be Incorporated, All Rights Reserved
|
|
||||||
/
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _COLUMN_LIST_VIEW_H
|
|
||||||
#define _COLUMN_LIST_VIEW_H
|
|
||||||
|
|
||||||
#include <BeBuild.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <List.h>
|
|
||||||
#include <Invoker.h>
|
|
||||||
#include <ListView.h>
|
|
||||||
|
|
||||||
class BScrollBar;
|
|
||||||
|
|
||||||
namespace BPrivate {
|
|
||||||
|
|
||||||
class OutlineView;
|
|
||||||
class TitleView;
|
|
||||||
class BRowContainer;
|
|
||||||
class RecursiveOutlineIterator;
|
|
||||||
|
|
||||||
} // ns BPrivate
|
|
||||||
|
|
||||||
class BField;
|
|
||||||
class BRow;
|
|
||||||
class BColumn;
|
|
||||||
class BColumnListView;
|
|
||||||
|
|
||||||
enum LatchType {
|
|
||||||
B_NO_LATCH = 0,
|
|
||||||
B_OPEN_LATCH = 1,
|
|
||||||
B_PRESSED_LATCH = 2,
|
|
||||||
B_CLOSED_LATCH = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
B_ALLOW_COLUMN_NONE = 0,
|
|
||||||
B_ALLOW_COLUMN_MOVE = 1,
|
|
||||||
B_ALLOW_COLUMN_RESIZE = 2,
|
|
||||||
B_ALLOW_COLUMN_POPUP = 4,
|
|
||||||
B_ALLOW_COLUMN_REMOVE = 8
|
|
||||||
} column_flags;
|
|
||||||
|
|
||||||
enum ColumnListViewColor {
|
|
||||||
B_COLOR_BACKGROUND = 0,
|
|
||||||
B_COLOR_TEXT = 1,
|
|
||||||
B_COLOR_ROW_DIVIDER = 2,
|
|
||||||
B_COLOR_SELECTION = 3,
|
|
||||||
B_COLOR_SELECTION_TEXT = 4,
|
|
||||||
B_COLOR_NON_FOCUS_SELECTION = 5,
|
|
||||||
B_COLOR_EDIT_BACKGROUND = 6,
|
|
||||||
B_COLOR_EDIT_TEXT = 7,
|
|
||||||
B_COLOR_HEADER_BACKGROUND = 8,
|
|
||||||
B_COLOR_HEADER_TEXT = 9,
|
|
||||||
B_COLOR_SEPARATOR_LINE = 10,
|
|
||||||
B_COLOR_SEPARATOR_BORDER = 11,
|
|
||||||
|
|
||||||
B_COLOR_TOTAL = 12
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ColumnListViewFont {
|
|
||||||
B_FONT_ROW = 0,
|
|
||||||
B_FONT_HEADER = 1,
|
|
||||||
|
|
||||||
B_FONT_TOTAL = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// A single row/column intersection in the list.
|
|
||||||
class BField {
|
|
||||||
public:
|
|
||||||
BField();
|
|
||||||
virtual ~BField();
|
|
||||||
};
|
|
||||||
|
|
||||||
// A single line in the list. Each line contains a BField object
|
|
||||||
// for each column in the list, associated by their "logical field"
|
|
||||||
// index. Hierarchies are formed by adding other BRow objects as
|
|
||||||
// a parent of a row, using the AddRow() function in BColumnListView().
|
|
||||||
class BRow {
|
|
||||||
public:
|
|
||||||
BRow(float height = 16.0);
|
|
||||||
virtual ~BRow();
|
|
||||||
virtual bool HasLatch() const;
|
|
||||||
|
|
||||||
int32 CountFields() const;
|
|
||||||
BField* GetField(int32 logicalFieldIndex);
|
|
||||||
const BField* GetField(int32 logicalFieldIndex) const;
|
|
||||||
void SetField(BField* field,
|
|
||||||
int32 logicalFieldIndex);
|
|
||||||
|
|
||||||
float Height() const;
|
|
||||||
bool IsExpanded() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
// Blows up into the debugger if the validation fails.
|
|
||||||
void ValidateFields() const;
|
|
||||||
void ValidateField(const BField* field,
|
|
||||||
int32 logicalFieldIndex) const;
|
|
||||||
private:
|
|
||||||
BList fFields;
|
|
||||||
BPrivate::
|
|
||||||
BRowContainer* fChildList;
|
|
||||||
bool fIsExpanded;
|
|
||||||
float fHeight;
|
|
||||||
BRow* fNextSelected;
|
|
||||||
BRow* fPrevSelected;
|
|
||||||
BRow* fParent;
|
|
||||||
BColumnListView* fList;
|
|
||||||
|
|
||||||
|
|
||||||
friend class BColumnListView;
|
|
||||||
friend class BPrivate::RecursiveOutlineIterator;
|
|
||||||
friend class BPrivate::OutlineView;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Information about a single column in the list. A column knows
|
|
||||||
// how to display the BField objects that occur at its location in
|
|
||||||
// each of the list's rows. See ColumnTypes.h for particular
|
|
||||||
// subclasses of BField and BColumn that handle common data types.
|
|
||||||
class BColumn {
|
|
||||||
public:
|
|
||||||
BColumn(float width, float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual ~BColumn();
|
|
||||||
|
|
||||||
float Width() const;
|
|
||||||
void SetWidth(float width);
|
|
||||||
float MinWidth() const;
|
|
||||||
float MaxWidth() const;
|
|
||||||
|
|
||||||
virtual void DrawTitle(BRect rect, BView* targetView);
|
|
||||||
virtual void DrawField(BField* field, BRect rect,
|
|
||||||
BView* targetView);
|
|
||||||
virtual int CompareFields(BField* field1, BField* field2);
|
|
||||||
|
|
||||||
virtual void MouseMoved(BColumnListView* parent, BRow* row,
|
|
||||||
BField* field, BRect fieldRect,
|
|
||||||
BPoint point, uint32 buttons, int32 code);
|
|
||||||
virtual void MouseDown(BColumnListView* parent, BRow* row,
|
|
||||||
BField* field, BRect fieldRect,
|
|
||||||
BPoint point, uint32 buttons);
|
|
||||||
virtual void MouseUp(BColumnListView* parent, BRow* row,
|
|
||||||
BField* field);
|
|
||||||
|
|
||||||
virtual void GetColumnName(BString* into) const;
|
|
||||||
virtual float GetPreferredWidth(BField* field,
|
|
||||||
BView* parent) const;
|
|
||||||
|
|
||||||
bool IsVisible() const;
|
|
||||||
void SetVisible(bool);
|
|
||||||
|
|
||||||
bool WantsEvents() const;
|
|
||||||
void SetWantsEvents(bool);
|
|
||||||
|
|
||||||
bool ShowHeading() const;
|
|
||||||
void SetShowHeading(bool);
|
|
||||||
|
|
||||||
alignment Alignment() const;
|
|
||||||
void SetAlignment(alignment);
|
|
||||||
|
|
||||||
int32 LogicalFieldNum() const;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\param field The BField derivative to validate.
|
|
||||||
|
|
||||||
Implement this function on your BColumn derivatives to validate
|
|
||||||
BField derivatives that your BColumn will be drawing/manipulating.
|
|
||||||
|
|
||||||
This function will be called when BFields are added to the Column,
|
|
||||||
use dynamic_cast<> to determine if it is of a kind that your
|
|
||||||
BColumn know how ot handle. return false if it is not.
|
|
||||||
|
|
||||||
\note The debugger will be called if you return false from here
|
|
||||||
with information about what type of BField and BColumn and the
|
|
||||||
logical field index where it occured.
|
|
||||||
|
|
||||||
\note Do not call the inherited version of this, it just returns
|
|
||||||
true;
|
|
||||||
*/
|
|
||||||
virtual bool AcceptsField(const BField* field) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
float fWidth;
|
|
||||||
float fMinWidth;
|
|
||||||
float fMaxWidth;
|
|
||||||
bool fVisible;
|
|
||||||
int32 fFieldID;
|
|
||||||
BColumnListView* fList;
|
|
||||||
bool fSortAscending;
|
|
||||||
bool fWantsEvents;
|
|
||||||
bool fShowHeading;
|
|
||||||
alignment fAlignment;
|
|
||||||
|
|
||||||
friend class BPrivate::OutlineView;
|
|
||||||
friend class BColumnListView;
|
|
||||||
friend class BPrivate::TitleView;
|
|
||||||
};
|
|
||||||
|
|
||||||
// The column list view class.
|
|
||||||
class BColumnListView : public BView, public BInvoker {
|
|
||||||
public:
|
|
||||||
BColumnListView(BRect rect,
|
|
||||||
const char* name, uint32 resizingMode,
|
|
||||||
uint32 flags, border_style = B_NO_BORDER,
|
|
||||||
bool showHorizontalScrollbar = true);
|
|
||||||
BColumnListView(const char* name,
|
|
||||||
uint32 flags, border_style = B_NO_BORDER,
|
|
||||||
bool showHorizontalScrollbar = true);
|
|
||||||
virtual ~BColumnListView();
|
|
||||||
|
|
||||||
// Interaction
|
|
||||||
virtual bool InitiateDrag(BPoint, bool wasSelected);
|
|
||||||
virtual void MessageDropped(BMessage*, BPoint point);
|
|
||||||
virtual void ExpandOrCollapse(BRow* row, bool expand);
|
|
||||||
virtual status_t Invoke(BMessage* message = NULL);
|
|
||||||
virtual void ItemInvoked();
|
|
||||||
virtual void SetInvocationMessage(BMessage* message);
|
|
||||||
BMessage* InvocationMessage() const;
|
|
||||||
uint32 InvocationCommand() const;
|
|
||||||
BRow* FocusRow() const;
|
|
||||||
void SetFocusRow(int32 index, bool select = false);
|
|
||||||
void SetFocusRow(BRow* row, bool select = false);
|
|
||||||
void SetMouseTrackingEnabled(bool);
|
|
||||||
|
|
||||||
// Selection
|
|
||||||
list_view_type SelectionMode() const;
|
|
||||||
void Deselect(BRow* row);
|
|
||||||
void AddToSelection(BRow* row);
|
|
||||||
void DeselectAll();
|
|
||||||
BRow* CurrentSelection(BRow* lastSelected = 0) const;
|
|
||||||
virtual void SelectionChanged();
|
|
||||||
virtual void SetSelectionMessage(BMessage* message);
|
|
||||||
BMessage* SelectionMessage();
|
|
||||||
uint32 SelectionCommand() const;
|
|
||||||
void SetSelectionMode(list_view_type type);
|
|
||||||
// list_view_type is defined in ListView.h.
|
|
||||||
|
|
||||||
// Sorting
|
|
||||||
void SetSortingEnabled(bool);
|
|
||||||
bool SortingEnabled() const;
|
|
||||||
void SetSortColumn(BColumn* column, bool add,
|
|
||||||
bool ascending);
|
|
||||||
void ClearSortColumns();
|
|
||||||
|
|
||||||
// The status view is a little area in the lower left hand corner.
|
|
||||||
void AddStatusView(BView* view);
|
|
||||||
BView* RemoveStatusView();
|
|
||||||
|
|
||||||
// Column Manipulation
|
|
||||||
void AddColumn(BColumn* column,
|
|
||||||
int32 logicalFieldIndex);
|
|
||||||
void MoveColumn(BColumn* column, int32 index);
|
|
||||||
void RemoveColumn(BColumn* column);
|
|
||||||
int32 CountColumns() const;
|
|
||||||
BColumn* ColumnAt(int32 index) const;
|
|
||||||
BColumn* ColumnAt(BPoint point) const;
|
|
||||||
void SetColumnVisible(BColumn* column,
|
|
||||||
bool isVisible);
|
|
||||||
void SetColumnVisible(int32, bool);
|
|
||||||
bool IsColumnVisible(int32) const;
|
|
||||||
void SetColumnFlags(column_flags flags);
|
|
||||||
void ResizeColumnToPreferred(int32 index);
|
|
||||||
void ResizeAllColumnsToPreferred();
|
|
||||||
|
|
||||||
// Row manipulation
|
|
||||||
const BRow* RowAt(int32 index, BRow *parent = 0) const;
|
|
||||||
BRow* RowAt(int32 index, BRow *parent = 0);
|
|
||||||
const BRow* RowAt(BPoint) const;
|
|
||||||
BRow* RowAt(BPoint);
|
|
||||||
bool GetRowRect(const BRow* row, BRect* _rect) const;
|
|
||||||
bool FindParent(BRow* row, BRow** _parent,
|
|
||||||
bool *_isVisible) const;
|
|
||||||
int32 IndexOf(BRow* row);
|
|
||||||
int32 CountRows(BRow* parent = 0) const;
|
|
||||||
void AddRow(BRow* row, BRow* parent = NULL);
|
|
||||||
void AddRow(BRow* row, int32 index,
|
|
||||||
BRow* parent = NULL);
|
|
||||||
|
|
||||||
void ScrollTo(const BRow* Row);
|
|
||||||
void ScrollTo(BPoint point);
|
|
||||||
|
|
||||||
// Does not delete row or children at this time.
|
|
||||||
// todo: Make delete row and children
|
|
||||||
void RemoveRow(BRow* row);
|
|
||||||
|
|
||||||
void UpdateRow(BRow* row);
|
|
||||||
void Clear();
|
|
||||||
|
|
||||||
// Appearance (DEPRECATED)
|
|
||||||
void GetFont(BFont* font) const
|
|
||||||
{ BView::GetFont(font); }
|
|
||||||
virtual void SetFont(const BFont* font,
|
|
||||||
uint32 mask = B_FONT_ALL);
|
|
||||||
virtual void SetHighColor(rgb_color);
|
|
||||||
void SetSelectionColor(rgb_color);
|
|
||||||
void SetBackgroundColor(rgb_color);
|
|
||||||
void SetEditColor(rgb_color);
|
|
||||||
const rgb_color SelectionColor() const;
|
|
||||||
const rgb_color BackgroundColor() const;
|
|
||||||
const rgb_color EditColor() const;
|
|
||||||
|
|
||||||
// Appearance (NEW STYLE)
|
|
||||||
void SetColor(ColumnListViewColor colorIndex,
|
|
||||||
rgb_color color);
|
|
||||||
void SetFont(ColumnListViewFont fontIndex,
|
|
||||||
const BFont* font,
|
|
||||||
uint32 mask = B_FONT_ALL);
|
|
||||||
rgb_color Color(ColumnListViewColor colorIndex) const;
|
|
||||||
void GetFont(ColumnListViewFont fontIndex,
|
|
||||||
BFont* font) const;
|
|
||||||
|
|
||||||
BPoint SuggestTextPosition(const BRow* row,
|
|
||||||
const BColumn* column = NULL) const;
|
|
||||||
|
|
||||||
void SetLatchWidth(float width);
|
|
||||||
float LatchWidth() const;
|
|
||||||
virtual void DrawLatch(BView* view, BRect frame,
|
|
||||||
LatchType type, BRow* row);
|
|
||||||
virtual void MakeFocus(bool isfocus = true);
|
|
||||||
void SaveState(BMessage* archive);
|
|
||||||
void LoadState(BMessage* archive);
|
|
||||||
|
|
||||||
BView* ScrollView() const
|
|
||||||
{ return (BView*)fOutlineView; }
|
|
||||||
void SetEditMode(bool state);
|
|
||||||
void Refresh();
|
|
||||||
|
|
||||||
virtual BSize MinSize();
|
|
||||||
virtual BSize PreferredSize();
|
|
||||||
virtual BSize MaxSize();
|
|
||||||
|
|
||||||
virtual void InvalidateLayout(bool descendants = false);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void MessageReceived(BMessage* message);
|
|
||||||
virtual void KeyDown(const char* bytes, int32 numBytes);
|
|
||||||
virtual void AttachedToWindow();
|
|
||||||
virtual void WindowActivated(bool active);
|
|
||||||
virtual void Draw(BRect updateRect);
|
|
||||||
|
|
||||||
virtual void DoLayout();
|
|
||||||
|
|
||||||
private:
|
|
||||||
void _Init(bool showHorizontalScrollbar);
|
|
||||||
void _GetChildViewRects(const BRect& bounds,
|
|
||||||
bool showHorizontalScrollBar,
|
|
||||||
BRect& titleRect, BRect& outlineRect,
|
|
||||||
BRect& vScrollBarRect,
|
|
||||||
BRect& hScrollBarRect);
|
|
||||||
|
|
||||||
rgb_color fColorList[B_COLOR_TOTAL];
|
|
||||||
BPrivate::TitleView* fTitleView;
|
|
||||||
BPrivate::OutlineView* fOutlineView;
|
|
||||||
BList fColumns;
|
|
||||||
BScrollBar* fHorizontalScrollBar;
|
|
||||||
BScrollBar* fVerticalScrollBar;
|
|
||||||
BList fSortColumns;
|
|
||||||
BView* fStatusView;
|
|
||||||
BMessage* fSelectionMessage;
|
|
||||||
bool fSortingEnabled;
|
|
||||||
float fLatchWidth;
|
|
||||||
border_style fBorderStyle;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // _COLUMN_LIST_VIEW_H
|
|
||||||
@@ -1,704 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
/
|
|
||||||
/ File: ColumnTypes.h
|
|
||||||
/
|
|
||||||
/ Description: Experimental classes that implement particular column/field
|
|
||||||
/ data types for use in BColumnListView.
|
|
||||||
/
|
|
||||||
/ Copyright 2000+, Be Incorporated, All Rights Reserved
|
|
||||||
/
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#include "ColumnTypes.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <parsedate.h>
|
|
||||||
|
|
||||||
#define kTEXT_MARGIN 8
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BTitledColumn::BTitledColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BColumn(width, minWidth, maxWidth, align),
|
|
||||||
fTitle(title)
|
|
||||||
{
|
|
||||||
font_height fh;
|
|
||||||
|
|
||||||
be_plain_font->GetHeight(&fh);
|
|
||||||
fFontHeight = fh.descent + fh.leading;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::DrawTitle(BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BString out_string(fTitle);
|
|
||||||
|
|
||||||
parent->TruncateString(&out_string, B_TRUNCATE_END, width + 2);
|
|
||||||
DrawString(out_string.String(), parent, rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::GetColumnName(BString* into) const
|
|
||||||
{
|
|
||||||
*into = fTitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::DrawString(const char* string, BView* parent, BRect rect)
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
float y;
|
|
||||||
BFont font;
|
|
||||||
font_height finfo;
|
|
||||||
|
|
||||||
parent->GetFont(&font);
|
|
||||||
font.GetHeight(&finfo);
|
|
||||||
y = rect.top + ((rect.Height() - (finfo.ascent + finfo.descent + finfo.leading)) / 2) +
|
|
||||||
(finfo.ascent + finfo.descent) - 2;
|
|
||||||
|
|
||||||
switch (Alignment())
|
|
||||||
{
|
|
||||||
case B_ALIGN_LEFT:
|
|
||||||
parent->MovePenTo(rect.left + kTEXT_MARGIN, y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_CENTER:
|
|
||||||
parent->MovePenTo(rect.left + kTEXT_MARGIN + ((width - font.StringWidth(string)) / 2), y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_RIGHT:
|
|
||||||
parent->MovePenTo(rect.right - kTEXT_MARGIN - font.StringWidth(string), y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
parent->DrawString(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::SetTitle(const char* title)
|
|
||||||
{
|
|
||||||
fTitle.SetTo(title);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::Title(BString* forTitle) const
|
|
||||||
{
|
|
||||||
if (forTitle)
|
|
||||||
forTitle->SetTo(fTitle.String());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
float BTitledColumn::FontHeight() const
|
|
||||||
{
|
|
||||||
return fFontHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BStringField::BStringField(const char* string)
|
|
||||||
:fWidth(0),
|
|
||||||
fString(string),
|
|
||||||
fClippedString(string)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BStringField::SetString(const char* val)
|
|
||||||
{
|
|
||||||
fString = val;
|
|
||||||
fClippedString = "";
|
|
||||||
fWidth = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
const char* BStringField::String() const
|
|
||||||
{
|
|
||||||
return fString.String();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BStringField::SetWidth(float width)
|
|
||||||
{
|
|
||||||
fWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
float BStringField::Width()
|
|
||||||
{
|
|
||||||
return fWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BStringField::SetClippedString(const char* val)
|
|
||||||
{
|
|
||||||
fClippedString = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
const char* BStringField::ClippedString()
|
|
||||||
{
|
|
||||||
return fClippedString.String();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BStringColumn::BStringColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, uint32 truncate, alignment align)
|
|
||||||
:BTitledColumn(title, width, minWidth, maxWidth, align),
|
|
||||||
fTruncate(truncate)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BStringColumn::DrawField(BField* _field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BStringField* field = static_cast<BStringField*>(_field);
|
|
||||||
|
|
||||||
if (width != field->Width())
|
|
||||||
{
|
|
||||||
BString out_string(field->String());
|
|
||||||
|
|
||||||
parent->TruncateString(&out_string, fTruncate, width + 2);
|
|
||||||
field->SetClippedString(out_string.String());
|
|
||||||
field->SetWidth(width);
|
|
||||||
}
|
|
||||||
DrawString(field->ClippedString(), parent, rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
int BStringColumn::CompareFields(BField* field1, BField* field2)
|
|
||||||
{
|
|
||||||
return(ICompare(((BStringField*)field1)->String(),
|
|
||||||
(((BStringField*)field2)->String())));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool BStringColumn::AcceptsField(const BField *field) const
|
|
||||||
{
|
|
||||||
return static_cast<bool>(dynamic_cast<const BStringField*>(field));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BDateField::BDateField(time_t *t)
|
|
||||||
:fTime(*localtime(t)),
|
|
||||||
fUnixTime(*t),
|
|
||||||
fSeconds(0),
|
|
||||||
fClippedString(""),
|
|
||||||
fWidth(0)
|
|
||||||
{
|
|
||||||
fSeconds = mktime(&fTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BDateField::SetWidth(float width)
|
|
||||||
{
|
|
||||||
fWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
float BDateField::Width()
|
|
||||||
{
|
|
||||||
return fWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BDateField::SetClippedString(const char* val)
|
|
||||||
{
|
|
||||||
fClippedString = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
const char* BDateField::ClippedString()
|
|
||||||
{
|
|
||||||
return fClippedString.String();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
time_t BDateField::Seconds()
|
|
||||||
{
|
|
||||||
return fSeconds;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
time_t BDateField::UnixTime()
|
|
||||||
{
|
|
||||||
return fUnixTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BDateColumn::BDateColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BTitledColumn(title, width, minWidth, maxWidth, align),
|
|
||||||
fTitle(title)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
const char *kTIME_FORMATS[] = {
|
|
||||||
"%A, %B %d %Y, %I:%M:%S %p", // Monday, July 09 1997, 05:08:15 PM
|
|
||||||
"%a, %b %d %Y, %I:%M:%S %p", // Mon, Jul 09 1997, 05:08:15 PM
|
|
||||||
"%a, %b %d %Y, %I:%M %p", // Mon, Jul 09 1997, 05:08 PM
|
|
||||||
"%b %d %Y, %I:%M %p", // Jul 09 1997, 05:08 PM
|
|
||||||
"%m/%d/%y, %I:%M %p", // 07/09/97, 05:08 PM
|
|
||||||
"%m/%d/%y", // 07/09/97
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
void BDateColumn::DrawField(BField* _field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BDateField* field = (BDateField*)_field;
|
|
||||||
|
|
||||||
if (field->Width() != rect.Width())
|
|
||||||
{
|
|
||||||
char dateString[256];
|
|
||||||
time_t curtime = field->UnixTime();
|
|
||||||
tm time_data;
|
|
||||||
BFont font;
|
|
||||||
|
|
||||||
parent->GetFont(&font);
|
|
||||||
localtime_r(&curtime, &time_data);
|
|
||||||
for (int32 index = 0; ; index++)
|
|
||||||
{
|
|
||||||
if (!kTIME_FORMATS[index])
|
|
||||||
break;
|
|
||||||
strftime(dateString, 256, kTIME_FORMATS[index], &time_data);
|
|
||||||
if (font.StringWidth(dateString) <= width)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (font.StringWidth(dateString) > width)
|
|
||||||
{
|
|
||||||
BString out_string(dateString);
|
|
||||||
|
|
||||||
parent->TruncateString(&out_string, B_TRUNCATE_MIDDLE, width + 2);
|
|
||||||
strcpy(dateString, out_string.String());
|
|
||||||
}
|
|
||||||
field->SetClippedString(dateString);
|
|
||||||
field->SetWidth(width);
|
|
||||||
}
|
|
||||||
|
|
||||||
DrawString(field->ClippedString(), parent, rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
int BDateColumn::CompareFields(BField* field1, BField* field2)
|
|
||||||
{
|
|
||||||
return((BDateField*)field1)->Seconds() - ((BDateField*)field2)->Seconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BSizeField::BSizeField(off_t size)
|
|
||||||
:fSize(size)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BSizeField::SetSize(off_t size)
|
|
||||||
{
|
|
||||||
fSize = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
off_t BSizeField::Size()
|
|
||||||
{
|
|
||||||
return fSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BSizeColumn::BSizeColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BTitledColumn(title, width, minWidth, maxWidth, align)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
const int64 kKB_SIZE = 1024;
|
|
||||||
const int64 kMB_SIZE = 1048576;
|
|
||||||
const int64 kGB_SIZE = 1073741824;
|
|
||||||
const int64 kTB_SIZE = kGB_SIZE * kKB_SIZE;
|
|
||||||
|
|
||||||
const char *kSIZE_FORMATS[] = {
|
|
||||||
"%.2f %s",
|
|
||||||
"%.1f %s",
|
|
||||||
"%.f %s",
|
|
||||||
"%.f%s",
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
void BSizeColumn::DrawField(BField* _field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
char str[256];
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BFont font;
|
|
||||||
BString string;
|
|
||||||
off_t size = ((BSizeField*)_field)->Size();
|
|
||||||
|
|
||||||
parent->GetFont(&font);
|
|
||||||
if (size < kKB_SIZE)
|
|
||||||
{
|
|
||||||
sprintf(str, "%Ld bytes", size);
|
|
||||||
if (font.StringWidth(str) > width)
|
|
||||||
sprintf(str, "%Ld B", size);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const char* suffix;
|
|
||||||
float float_value;
|
|
||||||
if (size >= kTB_SIZE)
|
|
||||||
{
|
|
||||||
suffix = "TB";
|
|
||||||
float_value = (float)size / kTB_SIZE;
|
|
||||||
}
|
|
||||||
else if (size >= kGB_SIZE)
|
|
||||||
{
|
|
||||||
suffix = "GB";
|
|
||||||
float_value = (float)size / kGB_SIZE;
|
|
||||||
}
|
|
||||||
else if (size >= kMB_SIZE)
|
|
||||||
{
|
|
||||||
suffix = "MB";
|
|
||||||
float_value = (float)size / kMB_SIZE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
suffix = "KB";
|
|
||||||
float_value = (float)size / kKB_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int32 index = 0; ; index++)
|
|
||||||
{
|
|
||||||
if (!kSIZE_FORMATS[index])
|
|
||||||
break;
|
|
||||||
|
|
||||||
sprintf(str, kSIZE_FORMATS[index], float_value, suffix);
|
|
||||||
// strip off an insignificant zero so we don't get readings
|
|
||||||
// such as 1.00
|
|
||||||
char *period = 0;
|
|
||||||
char *tmp (NULL);
|
|
||||||
for (tmp = str; *tmp; tmp++)
|
|
||||||
{
|
|
||||||
if (*tmp == '.')
|
|
||||||
period = tmp;
|
|
||||||
}
|
|
||||||
if (period && period[1] && period[2] == '0')
|
|
||||||
// move the rest of the string over the insignificant zero
|
|
||||||
for (tmp = &period[2]; *tmp; tmp++)
|
|
||||||
*tmp = tmp[1];
|
|
||||||
if (font.StringWidth(str) <= width)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
string = str;
|
|
||||||
parent->TruncateString(&string, B_TRUNCATE_MIDDLE, width + 2);
|
|
||||||
DrawString(string.String(), parent, rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
int BSizeColumn::CompareFields(BField* field1, BField* field2)
|
|
||||||
{
|
|
||||||
return ((BSizeField*)field1)->Size() - ((BSizeField*)field2)->Size();
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BIntegerField::BIntegerField(int32 number)
|
|
||||||
:fInteger(number)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BIntegerField::SetValue(int32 value)
|
|
||||||
{
|
|
||||||
fInteger = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
int32 BIntegerField::Value()
|
|
||||||
{
|
|
||||||
return fInteger;
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BIntegerColumn::BIntegerColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BTitledColumn(title, width, minWidth, maxWidth, align)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BIntegerColumn::DrawField(BField *field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
char formatted[256];
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BString string;
|
|
||||||
|
|
||||||
sprintf(formatted, "%d", (int)((BIntegerField*)field)->Value());
|
|
||||||
|
|
||||||
string = formatted;
|
|
||||||
parent->TruncateString(&string, B_TRUNCATE_MIDDLE, width + 2);
|
|
||||||
DrawString(string.String(), parent, rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
int BIntegerColumn::CompareFields(BField *field1, BField *field2)
|
|
||||||
{
|
|
||||||
return (((BIntegerField*)field1)->Value() - ((BIntegerField*)field2)->Value());
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
GraphColumn::GraphColumn(const char* name, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BIntegerColumn(name, width, minWidth, maxWidth, align)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void GraphColumn::DrawField(BField* field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
int number = ((BIntegerField*)field)->Value();
|
|
||||||
|
|
||||||
if (number > 100)
|
|
||||||
number = 100;
|
|
||||||
else if (number < 0)
|
|
||||||
number = 0;
|
|
||||||
|
|
||||||
BRect graphRect(rect);
|
|
||||||
graphRect.InsetBy(5, 3);
|
|
||||||
parent->StrokeRect(graphRect);
|
|
||||||
if (number > 0) {
|
|
||||||
graphRect.InsetBy(1, 1);
|
|
||||||
float val = graphRect.Width() * (float) number / 100;
|
|
||||||
graphRect.right = graphRect.left + val;
|
|
||||||
parent->SetHighColor(0, 0, 190);
|
|
||||||
parent->FillRect(graphRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
parent->SetDrawingMode(B_OP_INVERT);
|
|
||||||
parent->SetHighColor(128, 128, 128);
|
|
||||||
char numstr[256];
|
|
||||||
sprintf(numstr, "%d%%", number);
|
|
||||||
|
|
||||||
float width = be_plain_font->StringWidth(numstr);
|
|
||||||
parent->MovePenTo(rect.left + rect.Width() / 2 - width / 2, rect.bottom - FontHeight());
|
|
||||||
parent->DrawString(numstr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BBitmapField::BBitmapField(BBitmap *bitmap)
|
|
||||||
:fBitmap(bitmap)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
const BBitmap* BBitmapField::Bitmap()
|
|
||||||
{
|
|
||||||
return fBitmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BBitmapField::SetBitmap(BBitmap* bitmap)
|
|
||||||
{
|
|
||||||
fBitmap = bitmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// #pragma mark -
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BBitmapColumn::BBitmapColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BTitledColumn(title, width, minWidth, maxWidth, align)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BBitmapColumn::DrawField(BField* field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
BBitmapField *bitmapField = static_cast<BBitmapField *>(field);
|
|
||||||
const BBitmap *bitmap = bitmapField->Bitmap();
|
|
||||||
|
|
||||||
if (bitmap != NULL)
|
|
||||||
{
|
|
||||||
float x = 0.0;
|
|
||||||
float y;
|
|
||||||
BRect r = bitmap->Bounds();
|
|
||||||
|
|
||||||
y = rect.top + ((rect.Height() - r.Height()) / 2);
|
|
||||||
|
|
||||||
switch (Alignment())
|
|
||||||
{
|
|
||||||
case B_ALIGN_LEFT:
|
|
||||||
x = rect.left + kTEXT_MARGIN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_CENTER:
|
|
||||||
x = rect.left + ((rect.Width() - r.Width()) / 2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_RIGHT:
|
|
||||||
x = rect.right - kTEXT_MARGIN - r.Width();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
parent->SetDrawingMode(B_OP_ALPHA);
|
|
||||||
parent->DrawBitmap(bitmap, BPoint(x, y));
|
|
||||||
parent->SetDrawingMode(B_OP_OVER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
int BBitmapColumn::CompareFields(BField* /*field1*/, BField* /*field2*/)
|
|
||||||
{
|
|
||||||
// Comparing bitmaps doesn't really make sense...
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool
|
|
||||||
BBitmapColumn::AcceptsField(const BField *field) const
|
|
||||||
{
|
|
||||||
return static_cast<bool>(dynamic_cast<const BBitmapField*>(field));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,289 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
/
|
|
||||||
/ File: ColumnTypes.h
|
|
||||||
/
|
|
||||||
/ Description: Experimental classes that implement particular column/field
|
|
||||||
/ data types for use in BColumnListView.
|
|
||||||
/
|
|
||||||
/ Copyright 2000+, Be Incorporated, All Rights Reserved
|
|
||||||
/
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _COLUMN_TYPES_H
|
|
||||||
#define _COLUMN_TYPES_H
|
|
||||||
|
|
||||||
#include "ColumnListView.h"
|
|
||||||
#include <String.h>
|
|
||||||
#include <Font.h>
|
|
||||||
#include <Bitmap.h>
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Common base-class: a column that draws a standard title at its top.
|
|
||||||
|
|
||||||
class BTitledColumn : public BColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BTitledColumn (const char *title,
|
|
||||||
float width,
|
|
||||||
float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawTitle (BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
virtual void GetColumnName (BString* into) const;
|
|
||||||
|
|
||||||
void DrawString (const char*,
|
|
||||||
BView*,
|
|
||||||
BRect);
|
|
||||||
void SetTitle (const char* title);
|
|
||||||
void Title (BString* forTitle) const; // sets the BString arg to be the title
|
|
||||||
float FontHeight () const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
float fFontHeight;
|
|
||||||
BString fTitle;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Field and column classes for strings.
|
|
||||||
|
|
||||||
class BStringField : public BField
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BStringField (const char* string);
|
|
||||||
|
|
||||||
void SetString (const char* string);
|
|
||||||
const char* String () const;
|
|
||||||
void SetClippedString (const char* string);
|
|
||||||
const char* ClippedString ();
|
|
||||||
void SetWidth (float);
|
|
||||||
float Width ();
|
|
||||||
|
|
||||||
private:
|
|
||||||
float fWidth;
|
|
||||||
BString fString;
|
|
||||||
BString fClippedString;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
class BStringColumn : public BTitledColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BStringColumn (const char *title,
|
|
||||||
float width,
|
|
||||||
float maxWidth,
|
|
||||||
float minWidth,
|
|
||||||
uint32 truncate,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawField (BField* field,
|
|
||||||
BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
virtual int CompareFields (BField* field1,
|
|
||||||
BField* field2);
|
|
||||||
virtual bool AcceptsField (const BField* field) const;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
uint32 fTruncate;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Field and column classes for dates.
|
|
||||||
|
|
||||||
class BDateField : public BField
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BDateField (time_t* t);
|
|
||||||
void SetWidth (float);
|
|
||||||
float Width ();
|
|
||||||
void SetClippedString (const char*);
|
|
||||||
const char* ClippedString ();
|
|
||||||
time_t Seconds ();
|
|
||||||
time_t UnixTime ();
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct tm fTime;
|
|
||||||
time_t fUnixTime;
|
|
||||||
time_t fSeconds;
|
|
||||||
BString fClippedString;
|
|
||||||
float fWidth;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
class BDateColumn : public BTitledColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BDateColumn (const char* title,
|
|
||||||
float width,
|
|
||||||
float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawField (BField* field,
|
|
||||||
BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
virtual int CompareFields (BField* field1,
|
|
||||||
BField* field2);
|
|
||||||
private:
|
|
||||||
BString fTitle;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Field and column classes for numeric sizes.
|
|
||||||
|
|
||||||
class BSizeField : public BField
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BSizeField (off_t size);
|
|
||||||
void SetSize (off_t);
|
|
||||||
off_t Size ();
|
|
||||||
|
|
||||||
private:
|
|
||||||
off_t fSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
class BSizeColumn : public BTitledColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BSizeColumn (const char* title,
|
|
||||||
float width,
|
|
||||||
float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawField (BField* field,
|
|
||||||
BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
virtual int CompareFields (BField* field1,
|
|
||||||
BField* field2);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Field and column classes for integers.
|
|
||||||
|
|
||||||
class BIntegerField : public BField
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BIntegerField (int32 number);
|
|
||||||
void SetValue (int32);
|
|
||||||
int32 Value ();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int32 fInteger;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
class BIntegerColumn : public BTitledColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BIntegerColumn (const char* title,
|
|
||||||
float width,
|
|
||||||
float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawField (BField* field,
|
|
||||||
BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
virtual int CompareFields (BField* field1,
|
|
||||||
BField* field2);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Field and column classes for bitmaps
|
|
||||||
|
|
||||||
class BBitmapField : public BField
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BBitmapField (BBitmap* bitmap);
|
|
||||||
const BBitmap* Bitmap ();
|
|
||||||
void SetBitmap (BBitmap* bitmap);
|
|
||||||
|
|
||||||
private:
|
|
||||||
BBitmap* fBitmap;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
class BBitmapColumn : public BTitledColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BBitmapColumn (const char* title,
|
|
||||||
float width,
|
|
||||||
float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawField (BField*field,
|
|
||||||
BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
virtual int CompareFields (BField* field1, BField* field2);
|
|
||||||
virtual bool AcceptsField (const BField* field) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Column to display BIntegerField objects as a graph.
|
|
||||||
|
|
||||||
class GraphColumn : public BIntegerColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
GraphColumn (const char* name,
|
|
||||||
float width,
|
|
||||||
float minWidth,
|
|
||||||
float maxWidth,
|
|
||||||
alignment align = B_ALIGN_LEFT);
|
|
||||||
virtual void DrawField (BField*field,
|
|
||||||
BRect rect,
|
|
||||||
BView* parent);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1,800 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING **
|
|
||||||
** **
|
|
||||||
** DANGER, WILL ROBINSON! **
|
|
||||||
** **
|
|
||||||
** The interfaces contained here are part of BeOS's **
|
|
||||||
** **
|
|
||||||
** >> PRIVATE NOT FOR PUBLIC USE << **
|
|
||||||
** **
|
|
||||||
** implementation. **
|
|
||||||
** **
|
|
||||||
** These interfaces WILL CHANGE in future releases. **
|
|
||||||
** If you use them, your app WILL BREAK at some future time. **
|
|
||||||
** **
|
|
||||||
** (And yes, this does mean that binaries built from OpenTracker will not **
|
|
||||||
** be compatible with some future releases of the OS. When that happens, **
|
|
||||||
** we will provide an updated version of this file to keep compatibility.) **
|
|
||||||
** **
|
|
||||||
** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING **
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
//
|
|
||||||
// ObjectList is a wrapper around BList that adds type safety,
|
|
||||||
// optional object ownership, search, insert operations, etc.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef __OBJECT_LIST__
|
|
||||||
#define __OBJECT_LIST__
|
|
||||||
|
|
||||||
#ifndef _BE_H
|
|
||||||
#include <List.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <Debug.h>
|
|
||||||
|
|
||||||
template<class T> class BObjectList;
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
struct UnaryPredicate {
|
|
||||||
|
|
||||||
virtual int operator()(const T *) const
|
|
||||||
// virtual could be avoided here if FindBinaryInsertionIndex,
|
|
||||||
// etc. were member template functions
|
|
||||||
{ return 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
static int _unary_predicate_glue(const void *item, void *context);
|
|
||||||
|
|
||||||
friend class BObjectList<T>;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
int
|
|
||||||
UnaryPredicate<T>::_unary_predicate_glue(const void *item, void *context)
|
|
||||||
{
|
|
||||||
return ((UnaryPredicate<T> *)context)->operator()((const T *)item);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class _PointerList_ : public BList {
|
|
||||||
public:
|
|
||||||
_PointerList_(const _PointerList_ &list);
|
|
||||||
_PointerList_(int32 itemsPerBlock = 20, bool owning = false);
|
|
||||||
~_PointerList_();
|
|
||||||
|
|
||||||
typedef void *(* GenericEachFunction)(void *, void *);
|
|
||||||
typedef int (* GenericCompareFunction)(const void *, const void *);
|
|
||||||
typedef int (* GenericCompareFunctionWithState)(const void *, const void *,
|
|
||||||
void *);
|
|
||||||
typedef int (* UnaryPredicateGlue)(const void *, void *);
|
|
||||||
|
|
||||||
void *EachElement(GenericEachFunction, void *);
|
|
||||||
void SortItems(GenericCompareFunction);
|
|
||||||
void SortItems(GenericCompareFunctionWithState, void *state);
|
|
||||||
void HSortItems(GenericCompareFunction);
|
|
||||||
void HSortItems(GenericCompareFunctionWithState, void *state);
|
|
||||||
|
|
||||||
void *BinarySearch(const void *, GenericCompareFunction) const;
|
|
||||||
void *BinarySearch(const void *, GenericCompareFunctionWithState, void *state) const;
|
|
||||||
|
|
||||||
int32 BinarySearchIndex(const void *, GenericCompareFunction) const;
|
|
||||||
int32 BinarySearchIndex(const void *, GenericCompareFunctionWithState, void *state) const;
|
|
||||||
int32 BinarySearchIndexByPredicate(const void *, UnaryPredicateGlue) const;
|
|
||||||
|
|
||||||
bool Owning() const;
|
|
||||||
bool ReplaceItem(int32, void *);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool owning;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
class BObjectList : private _PointerList_ {
|
|
||||||
public:
|
|
||||||
|
|
||||||
// iteration and sorting
|
|
||||||
typedef T *(* EachFunction)(T *, void *);
|
|
||||||
typedef const T *(* ConstEachFunction)(const T *, void *);
|
|
||||||
typedef int (* CompareFunction)(const T *, const T *);
|
|
||||||
typedef int (* CompareFunctionWithState)(const T *, const T *, void *state);
|
|
||||||
|
|
||||||
BObjectList(int32 itemsPerBlock = 20, bool owning = false);
|
|
||||||
BObjectList(const BObjectList &list);
|
|
||||||
// clones list; if list is owning, makes copies of all
|
|
||||||
// the items
|
|
||||||
|
|
||||||
virtual ~BObjectList();
|
|
||||||
|
|
||||||
BObjectList &operator=(const BObjectList &list);
|
|
||||||
// clones list; if list is owning, makes copies of all
|
|
||||||
// the items
|
|
||||||
|
|
||||||
// adding and removing
|
|
||||||
// ToDo:
|
|
||||||
// change Add calls to return const item
|
|
||||||
bool AddItem(T *);
|
|
||||||
bool AddItem(T *, int32);
|
|
||||||
bool AddList(BObjectList *);
|
|
||||||
bool AddList(BObjectList *, int32);
|
|
||||||
|
|
||||||
bool RemoveItem(T *, bool deleteIfOwning = true);
|
|
||||||
// if owning, deletes the removed item
|
|
||||||
T *RemoveItemAt(int32);
|
|
||||||
// returns the removed item
|
|
||||||
|
|
||||||
void MakeEmpty();
|
|
||||||
|
|
||||||
// item access
|
|
||||||
T *ItemAt(int32) const;
|
|
||||||
|
|
||||||
bool ReplaceItem(int32 index, T *);
|
|
||||||
// if list is owning, deletes the item at <index> first
|
|
||||||
T *SwapWithItem(int32 index, T *newItem);
|
|
||||||
// same as ReplaceItem, except does not delete old item at <index>,
|
|
||||||
// returns it instead
|
|
||||||
|
|
||||||
T *FirstItem() const;
|
|
||||||
T *LastItem() const;
|
|
||||||
|
|
||||||
// misc. getters
|
|
||||||
int32 IndexOf(const T *) const;
|
|
||||||
bool HasItem(const T *) const;
|
|
||||||
bool IsEmpty() const;
|
|
||||||
int32 CountItems() const;
|
|
||||||
|
|
||||||
T *EachElement(EachFunction, void *);
|
|
||||||
const T *EachElement(ConstEachFunction, void *) const;
|
|
||||||
|
|
||||||
void SortItems(CompareFunction);
|
|
||||||
void SortItems(CompareFunctionWithState, void *state);
|
|
||||||
void HSortItems(CompareFunction);
|
|
||||||
void HSortItems(CompareFunctionWithState, void *state);
|
|
||||||
|
|
||||||
// linear search, returns first item that matches predicate
|
|
||||||
const T *FindIf(const UnaryPredicate<T> &) const;
|
|
||||||
T *FindIf(const UnaryPredicate<T> &);
|
|
||||||
|
|
||||||
// list must be sorted with CompareFunction for these to work
|
|
||||||
const T *BinarySearch(const T &, CompareFunction) const;
|
|
||||||
const T *BinarySearch(const T &, CompareFunctionWithState, void *state) const;
|
|
||||||
|
|
||||||
// Binary insertion - list must be sorted with CompareFunction for
|
|
||||||
// these to work
|
|
||||||
|
|
||||||
// simple insert
|
|
||||||
void BinaryInsert(T *, CompareFunction);
|
|
||||||
void BinaryInsert(T *, CompareFunctionWithState, void *state);
|
|
||||||
void BinaryInsert(T *, const UnaryPredicate<T> &);
|
|
||||||
|
|
||||||
// unique insert, returns false if item already in list
|
|
||||||
bool BinaryInsertUnique(T *, CompareFunction);
|
|
||||||
bool BinaryInsertUnique(T *, CompareFunctionWithState, void *state);
|
|
||||||
bool BinaryInsertUnique(T *, const UnaryPredicate<T> &);
|
|
||||||
|
|
||||||
// insert a copy of the item, returns new inserted item
|
|
||||||
T *BinaryInsertCopy(const T ©This, CompareFunction);
|
|
||||||
T *BinaryInsertCopy(const T ©This, CompareFunctionWithState, void *state);
|
|
||||||
|
|
||||||
// insert a copy of the item if not in list already
|
|
||||||
// returns new inserted item or existing item in case of a conflict
|
|
||||||
T *BinaryInsertCopyUnique(const T ©This, CompareFunction);
|
|
||||||
T *BinaryInsertCopyUnique(const T ©This, CompareFunctionWithState, void *state);
|
|
||||||
|
|
||||||
|
|
||||||
int32 FindBinaryInsertionIndex(const UnaryPredicate<T> &, bool *alreadyInList = 0) const;
|
|
||||||
// returns either the index into which a new item should be inserted
|
|
||||||
// or index of an existing item that matches the predicate
|
|
||||||
|
|
||||||
// deprecated API, will go away
|
|
||||||
BList *AsBList()
|
|
||||||
{ return this; }
|
|
||||||
const BList *AsBList() const
|
|
||||||
{ return this; }
|
|
||||||
private:
|
|
||||||
void SetItem(int32, T *);
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class Item, class Result, class Param1>
|
|
||||||
Result
|
|
||||||
WhileEachListItem(BObjectList<Item> *list, Result (Item::*func)(Param1), Param1 p1)
|
|
||||||
{
|
|
||||||
Result result = 0;
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if ((result = (list->ItemAt(index)->*func)(p1)) != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Result, class Param1>
|
|
||||||
Result
|
|
||||||
WhileEachListItem(BObjectList<Item> *list, Result (*func)(Item *, Param1), Param1 p1)
|
|
||||||
{
|
|
||||||
Result result = 0;
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if ((result = (*func)(list->ItemAt(index), p1)) != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Result, class Param1, class Param2>
|
|
||||||
Result
|
|
||||||
WhileEachListItem(BObjectList<Item> *list, Result (Item::*func)(Param1, Param2),
|
|
||||||
Param1 p1, Param2 p2)
|
|
||||||
{
|
|
||||||
Result result = 0;
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if ((result = (list->ItemAt(index)->*func)(p1, p2)) != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Result, class Param1, class Param2>
|
|
||||||
Result
|
|
||||||
WhileEachListItem(BObjectList<Item> *list, Result (*func)(Item *, Param1, Param2),
|
|
||||||
Param1 p1, Param2 p2)
|
|
||||||
{
|
|
||||||
Result result = 0;
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if ((result = (*func)(list->ItemAt(index), p1, p2)) != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Result, class Param1, class Param2, class Param3, class Param4>
|
|
||||||
Result
|
|
||||||
WhileEachListItem(BObjectList<Item> *list, Result (*func)(Item *, Param1, Param2,
|
|
||||||
Param3, Param4), Param1 p1, Param2 p2, Param3 p3, Param4 p4)
|
|
||||||
{
|
|
||||||
Result result = 0;
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if ((result = (*func)(list->ItemAt(index), p1, p2, p3, p4)) != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Result>
|
|
||||||
void
|
|
||||||
EachListItemIgnoreResult(BObjectList<Item> *list, Result (Item::*func)())
|
|
||||||
{
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
(list->ItemAt(index)->*func)();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Param1>
|
|
||||||
void
|
|
||||||
EachListItem(BObjectList<Item> *list, void (*func)(Item *, Param1), Param1 p1)
|
|
||||||
{
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
(func)(list->ItemAt(index), p1);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Param1, class Param2>
|
|
||||||
void
|
|
||||||
EachListItem(BObjectList<Item> *list, void (Item::*func)(Param1, Param2),
|
|
||||||
Param1 p1, Param2 p2)
|
|
||||||
{
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
(list->ItemAt(index)->*func)(p1, p2);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Param1, class Param2>
|
|
||||||
void
|
|
||||||
EachListItem(BObjectList<Item> *list, void (*func)(Item *,Param1, Param2),
|
|
||||||
Param1 p1, Param2 p2)
|
|
||||||
{
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
(func)(list->ItemAt(index), p1, p2);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Item, class Param1, class Param2, class Param3>
|
|
||||||
void
|
|
||||||
EachListItem(BObjectList<Item> *list, void (*func)(Item *,Param1, Param2,
|
|
||||||
Param3), Param1 p1, Param2 p2, Param3 p3)
|
|
||||||
{
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
(func)(list->ItemAt(index), p1, p2, p3);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Item, class Param1, class Param2, class Param3, class Param4>
|
|
||||||
void
|
|
||||||
EachListItem(BObjectList<Item> *list, void (*func)(Item *,Param1, Param2,
|
|
||||||
Param3, Param4), Param1 p1, Param2 p2, Param3 p3, Param4 p4)
|
|
||||||
{
|
|
||||||
int32 count = list->CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
(func)(list->ItemAt(index), p1, p2, p3, p4);
|
|
||||||
}
|
|
||||||
|
|
||||||
// inline code
|
|
||||||
|
|
||||||
inline bool
|
|
||||||
_PointerList_::Owning() const
|
|
||||||
{
|
|
||||||
return owning;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
BObjectList<T>::BObjectList(int32 itemsPerBlock, bool isOwning)
|
|
||||||
: _PointerList_(itemsPerBlock, isOwning)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
BObjectList<T>::BObjectList(const BObjectList<T> &list)
|
|
||||||
: _PointerList_(list)
|
|
||||||
{
|
|
||||||
owning = list.owning;
|
|
||||||
if (owning) {
|
|
||||||
// make our own copies in an owning list
|
|
||||||
int32 count = list.CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++) {
|
|
||||||
T *item = list.ItemAt(index);
|
|
||||||
if (item)
|
|
||||||
item = new T(*item);
|
|
||||||
SetItem(index, item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
BObjectList<T>::~BObjectList()
|
|
||||||
{
|
|
||||||
if (Owning())
|
|
||||||
// have to nuke elements first
|
|
||||||
MakeEmpty();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
BObjectList<T> &
|
|
||||||
BObjectList<T>::operator=(const BObjectList<T> &list)
|
|
||||||
{
|
|
||||||
owning = list.owning;
|
|
||||||
BObjectList<T> &result = (BObjectList<T> &)_PointerList_::operator=(list);
|
|
||||||
if (owning) {
|
|
||||||
// make our own copies in an owning list
|
|
||||||
int32 count = list.CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++) {
|
|
||||||
T *item = list.ItemAt(index);
|
|
||||||
if (item)
|
|
||||||
item = new T(*item);
|
|
||||||
SetItem(index, item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::AddItem(T *item)
|
|
||||||
{
|
|
||||||
// need to cast to void * to make T work for const pointers
|
|
||||||
return _PointerList_::AddItem((void *)item);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::AddItem(T *item, int32 atIndex)
|
|
||||||
{
|
|
||||||
return _PointerList_::AddItem((void *)item, atIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::AddList(BObjectList<T> *newItems)
|
|
||||||
{
|
|
||||||
return _PointerList_::AddList(newItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::AddList(BObjectList<T> *newItems, int32 atIndex)
|
|
||||||
{
|
|
||||||
return _PointerList_::AddList(newItems, atIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::RemoveItem(T *item, bool deleteIfOwning)
|
|
||||||
{
|
|
||||||
bool result = _PointerList_::RemoveItem((void *)item);
|
|
||||||
|
|
||||||
if (result && Owning() && deleteIfOwning)
|
|
||||||
delete item;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::RemoveItemAt(int32 index)
|
|
||||||
{
|
|
||||||
return (T *)_PointerList_::RemoveItem(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
inline T *
|
|
||||||
BObjectList<T>::ItemAt(int32 index) const
|
|
||||||
{
|
|
||||||
return (T *)_PointerList_::ItemAt(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::ReplaceItem(int32 index, T *item)
|
|
||||||
{
|
|
||||||
if (owning)
|
|
||||||
delete ItemAt(index);
|
|
||||||
return _PointerList_::ReplaceItem(index, (void *)item);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::SwapWithItem(int32 index, T *newItem)
|
|
||||||
{
|
|
||||||
T *result = ItemAt(index);
|
|
||||||
_PointerList_::ReplaceItem(index, (void *)newItem);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::SetItem(int32 index, T *newItem)
|
|
||||||
{
|
|
||||||
_PointerList_::ReplaceItem(index, (void *)newItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
int32
|
|
||||||
BObjectList<T>::IndexOf(const T *item) const
|
|
||||||
{
|
|
||||||
return _PointerList_::IndexOf((void *)const_cast<T *>(item));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::FirstItem() const
|
|
||||||
{
|
|
||||||
return (T *)_PointerList_::FirstItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::LastItem() const
|
|
||||||
{
|
|
||||||
return (T *)_PointerList_::LastItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::HasItem(const T *item) const
|
|
||||||
{
|
|
||||||
return _PointerList_::HasItem((void *)item);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::IsEmpty() const
|
|
||||||
{
|
|
||||||
return _PointerList_::IsEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
int32
|
|
||||||
BObjectList<T>::CountItems() const
|
|
||||||
{
|
|
||||||
return _PointerList_::CountItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::MakeEmpty()
|
|
||||||
{
|
|
||||||
if (owning) {
|
|
||||||
int32 count = CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
delete ItemAt(index);
|
|
||||||
}
|
|
||||||
_PointerList_::MakeEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::EachElement(EachFunction func, void *params)
|
|
||||||
{
|
|
||||||
return (T *)_PointerList_::EachElement((GenericEachFunction)func, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
const T *
|
|
||||||
BObjectList<T>::EachElement(ConstEachFunction func, void *params) const
|
|
||||||
{
|
|
||||||
return (const T *)
|
|
||||||
const_cast<BObjectList<T> *>(this)->_PointerList_::EachElement(
|
|
||||||
(GenericEachFunction)func, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
const T *
|
|
||||||
BObjectList<T>::FindIf(const UnaryPredicate<T> &predicate) const
|
|
||||||
{
|
|
||||||
int32 count = CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if (predicate.operator()(ItemAt(index)) == 0)
|
|
||||||
return ItemAt(index);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::FindIf(const UnaryPredicate<T> &predicate)
|
|
||||||
{
|
|
||||||
int32 count = CountItems();
|
|
||||||
for (int32 index = 0; index < count; index++)
|
|
||||||
if (predicate.operator()(ItemAt(index)) == 0)
|
|
||||||
return ItemAt(index);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::SortItems(CompareFunction function)
|
|
||||||
{
|
|
||||||
_PointerList_::SortItems((GenericCompareFunction)function);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::SortItems(CompareFunctionWithState function, void *state)
|
|
||||||
{
|
|
||||||
_PointerList_::SortItems((GenericCompareFunctionWithState)function, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::HSortItems(CompareFunction function)
|
|
||||||
{
|
|
||||||
_PointerList_::HSortItems((GenericCompareFunction)function);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::HSortItems(CompareFunctionWithState function, void *state)
|
|
||||||
{
|
|
||||||
_PointerList_::HSortItems((GenericCompareFunctionWithState)function, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
const T *
|
|
||||||
BObjectList<T>::BinarySearch(const T &key, CompareFunction func) const
|
|
||||||
{
|
|
||||||
return (const T *)_PointerList_::BinarySearch(&key,
|
|
||||||
(GenericCompareFunction)func);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
const T *
|
|
||||||
BObjectList<T>::BinarySearch(const T &key, CompareFunctionWithState func, void *state) const
|
|
||||||
{
|
|
||||||
return (const T *)_PointerList_::BinarySearch(&key,
|
|
||||||
(GenericCompareFunctionWithState)func, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::BinaryInsert(T *item, CompareFunction func)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(item,
|
|
||||||
(GenericCompareFunction)func);
|
|
||||||
if (index >= 0)
|
|
||||||
// already in list, add after existing
|
|
||||||
AddItem(item, index + 1);
|
|
||||||
else
|
|
||||||
AddItem(item, -index - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::BinaryInsert(T *item, CompareFunctionWithState func, void *state)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(item,
|
|
||||||
(GenericCompareFunctionWithState)func, state);
|
|
||||||
if (index >= 0)
|
|
||||||
// already in list, add after existing
|
|
||||||
AddItem(item, index + 1);
|
|
||||||
else
|
|
||||||
AddItem(item, -index - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::BinaryInsertUnique(T *item, CompareFunction func)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(item,
|
|
||||||
(GenericCompareFunction)func);
|
|
||||||
if (index >= 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
AddItem(item, -index - 1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::BinaryInsertUnique(T *item, CompareFunctionWithState func, void *state)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(item,
|
|
||||||
(GenericCompareFunctionWithState)func, state);
|
|
||||||
if (index >= 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
AddItem(item, -index - 1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::BinaryInsertCopy(const T ©This, CompareFunction func)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(©This,
|
|
||||||
(GenericCompareFunction)func);
|
|
||||||
|
|
||||||
if (index >= 0)
|
|
||||||
index++;
|
|
||||||
else
|
|
||||||
index = -index - 1;
|
|
||||||
|
|
||||||
T *newItem = new T(copyThis);
|
|
||||||
AddItem(newItem, index);
|
|
||||||
return newItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::BinaryInsertCopy(const T ©This, CompareFunctionWithState func, void *state)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(©This,
|
|
||||||
(GenericCompareFunctionWithState)func, state);
|
|
||||||
|
|
||||||
if (index >= 0)
|
|
||||||
index++;
|
|
||||||
else
|
|
||||||
index = -index - 1;
|
|
||||||
|
|
||||||
T *newItem = new T(copyThis);
|
|
||||||
AddItem(newItem, index);
|
|
||||||
return newItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::BinaryInsertCopyUnique(const T ©This, CompareFunction func)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(©This,
|
|
||||||
(GenericCompareFunction)func);
|
|
||||||
if (index >= 0)
|
|
||||||
return ItemAt(index);
|
|
||||||
|
|
||||||
index = -index - 1;
|
|
||||||
T *newItem = new T(copyThis);
|
|
||||||
AddItem(newItem, index);
|
|
||||||
return newItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
T *
|
|
||||||
BObjectList<T>::BinaryInsertCopyUnique(const T ©This, CompareFunctionWithState func,
|
|
||||||
void *state)
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndex(©This,
|
|
||||||
(GenericCompareFunctionWithState)func, state);
|
|
||||||
if (index >= 0)
|
|
||||||
return ItemAt(index);
|
|
||||||
|
|
||||||
index = -index - 1;
|
|
||||||
T *newItem = new T(copyThis);
|
|
||||||
AddItem(newItem, index);
|
|
||||||
return newItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
int32
|
|
||||||
BObjectList<T>::FindBinaryInsertionIndex(const UnaryPredicate<T> &pred, bool *alreadyInList)
|
|
||||||
const
|
|
||||||
{
|
|
||||||
int32 index = _PointerList_::BinarySearchIndexByPredicate(&pred,
|
|
||||||
(UnaryPredicateGlue)&UnaryPredicate<T>::_unary_predicate_glue);
|
|
||||||
|
|
||||||
if (alreadyInList)
|
|
||||||
*alreadyInList = index >= 0;
|
|
||||||
|
|
||||||
if (index < 0)
|
|
||||||
index = -index - 1;
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void
|
|
||||||
BObjectList<T>::BinaryInsert(T *item, const UnaryPredicate<T> &pred)
|
|
||||||
{
|
|
||||||
int32 index = FindBinaryInsertionIndex(pred);
|
|
||||||
AddItem(item, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool
|
|
||||||
BObjectList<T>::BinaryInsertUnique(T *item, const UnaryPredicate<T> &pred)
|
|
||||||
{
|
|
||||||
bool alreadyInList;
|
|
||||||
int32 index = FindBinaryInsertionIndex(pred, &alreadyInList);
|
|
||||||
if (alreadyInList)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
AddItem(item, index);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,444 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "YabColumnType.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <Application.h>
|
|
||||||
#include <BitmapStream.h>
|
|
||||||
#include <File.h>
|
|
||||||
#include <Path.h>
|
|
||||||
#include <Roster.h>
|
|
||||||
#include <TranslatorRoster.h>
|
|
||||||
#include <Translator.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <NodeInfo.h>
|
|
||||||
#ifdef ZETA
|
|
||||||
#include <sys_apps/Tracker/Icons.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define kTEXT_MARGIN 8
|
|
||||||
#define kIMG_MARGIN 2
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BTitledColumn::BTitledColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, alignment align)
|
|
||||||
:BColumn(width, minWidth, maxWidth, align),
|
|
||||||
fTitle(title)
|
|
||||||
{
|
|
||||||
font_height fh;
|
|
||||||
|
|
||||||
be_plain_font->GetHeight(&fh);
|
|
||||||
fFontHeight = fh.descent + fh.leading;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::DrawTitle(BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BString out_string(fTitle);
|
|
||||||
|
|
||||||
parent->TruncateString(&out_string, B_TRUNCATE_END, width + 2);
|
|
||||||
DrawString(out_string.String(), parent, rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::GetColumnName(BString* into) const
|
|
||||||
{
|
|
||||||
*into = fTitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::DrawString(const char* string, BView* parent, BRect rect)
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
float y;
|
|
||||||
BFont font;
|
|
||||||
font_height finfo;
|
|
||||||
|
|
||||||
parent->GetFont(&font);
|
|
||||||
font.GetHeight(&finfo);
|
|
||||||
y = rect.top + ((rect.Height() - (finfo.ascent + finfo.descent + finfo.leading)) / 2) +
|
|
||||||
(finfo.ascent + finfo.descent) - 2;
|
|
||||||
|
|
||||||
switch (Alignment())
|
|
||||||
{
|
|
||||||
case B_ALIGN_LEFT:
|
|
||||||
parent->MovePenTo(rect.left + kTEXT_MARGIN, y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_CENTER:
|
|
||||||
parent->MovePenTo(rect.left + kTEXT_MARGIN + ((width - font.StringWidth(string)) / 2), y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_RIGHT:
|
|
||||||
parent->MovePenTo(rect.right - kTEXT_MARGIN - font.StringWidth(string), y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
parent->DrawString(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::SetTitle(const char* title)
|
|
||||||
{
|
|
||||||
fTitle.SetTo(title);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
void BTitledColumn::Title(BString* forTitle) const
|
|
||||||
{
|
|
||||||
if (forTitle)
|
|
||||||
forTitle->SetTo(fTitle.String());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
float BTitledColumn::FontHeight() const
|
|
||||||
{
|
|
||||||
return fFontHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BYabField::BYabField(const char* string)
|
|
||||||
:fWidth(0), fString(string), fClippedString(string)
|
|
||||||
{
|
|
||||||
int n = fString.FindFirst("__Icon__=");
|
|
||||||
fBitmap = NULL;
|
|
||||||
if(n==0)
|
|
||||||
{
|
|
||||||
BString myPath;
|
|
||||||
fString.CopyInto(myPath, 9, fString.Length()-9);
|
|
||||||
BPath AppDirectory;
|
|
||||||
|
|
||||||
// app directory
|
|
||||||
BString ApplicationDirectory("");
|
|
||||||
app_info appinfo;
|
|
||||||
|
|
||||||
if(be_roster->GetRunningAppInfo(be_app->Team(), &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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BFile ImageFile;
|
|
||||||
BPath ImagePath;
|
|
||||||
|
|
||||||
if(myPath[0] == '/')
|
|
||||||
ImageFile.SetTo( myPath.String(), B_READ_ONLY);
|
|
||||||
else
|
|
||||||
// App directory.
|
|
||||||
if(ApplicationDirectory != "")
|
|
||||||
{
|
|
||||||
if( ImagePath.SetTo(ApplicationDirectory.String(), myPath.String()) == B_OK)
|
|
||||||
ImageFile.SetTo( ImagePath.Path(), B_READ_ONLY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ImageFile.InitCheck() != B_OK)
|
|
||||||
ImageFile.SetTo( myPath.String(), B_READ_ONLY);
|
|
||||||
|
|
||||||
if( ImageFile.InitCheck() == B_OK)
|
|
||||||
{
|
|
||||||
BTranslatorRoster *Roster = BTranslatorRoster::Default();
|
|
||||||
if( Roster)
|
|
||||||
{
|
|
||||||
BBitmapStream Stream;
|
|
||||||
if( Roster->Translate( &ImageFile, NULL, NULL, &Stream, B_TRANSLATOR_BITMAP) == B_OK)
|
|
||||||
Stream.DetachBitmap( &fBitmap);
|
|
||||||
delete Roster;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BYabField::SetString(const char* val, int height)
|
|
||||||
{
|
|
||||||
fString = val;
|
|
||||||
fClippedString = "";
|
|
||||||
fWidth = 0;
|
|
||||||
|
|
||||||
fBitmap = NULL;
|
|
||||||
if( ! fString.FindFirst("__Icon__=") )
|
|
||||||
{
|
|
||||||
BString myPath;
|
|
||||||
fString.CopyInto(myPath, 9, fString.Length()-9);
|
|
||||||
BPath AppDirectory;
|
|
||||||
|
|
||||||
// app directory
|
|
||||||
BString ApplicationDirectory("");
|
|
||||||
app_info appinfo;
|
|
||||||
|
|
||||||
if(be_roster->GetRunningAppInfo(be_app->Team(), &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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BFile ImageFile;
|
|
||||||
BPath ImagePath;
|
|
||||||
|
|
||||||
if(myPath[0] == '/')
|
|
||||||
ImageFile.SetTo( myPath.String(), B_READ_ONLY);
|
|
||||||
else
|
|
||||||
// App directory.
|
|
||||||
if(ApplicationDirectory != "")
|
|
||||||
{
|
|
||||||
if( ImagePath.SetTo(ApplicationDirectory.String(), myPath.String()) == B_OK)
|
|
||||||
ImageFile.SetTo( ImagePath.Path(), B_READ_ONLY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ImageFile.InitCheck() != B_OK)
|
|
||||||
ImageFile.SetTo( myPath.String(), B_READ_ONLY);
|
|
||||||
|
|
||||||
if( ImageFile.InitCheck() == B_OK)
|
|
||||||
{
|
|
||||||
BTranslatorRoster *Roster = BTranslatorRoster::Default();
|
|
||||||
if( Roster)
|
|
||||||
{
|
|
||||||
BBitmapStream Stream;
|
|
||||||
if( Roster->Translate( &ImageFile, NULL, NULL, &Stream, B_TRANSLATOR_BITMAP) == B_OK)
|
|
||||||
Stream.DetachBitmap( &fBitmap);
|
|
||||||
delete Roster;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if( ! fString.FindFirst("__Mime__=") )
|
|
||||||
{
|
|
||||||
BString myPath;
|
|
||||||
fString.CopyInto(myPath, 9, fString.Length()-9);
|
|
||||||
fBitmap = new BBitmap(BRect(0, 0, 15,15), B_CMAP8);
|
|
||||||
BMimeType mime(myPath.String());
|
|
||||||
mime.GetIcon(fBitmap, B_MINI_ICON);
|
|
||||||
}
|
|
||||||
else if( ! fString.FindFirst("__Path__=") )
|
|
||||||
{
|
|
||||||
BString myPath;
|
|
||||||
fString.CopyInto(myPath, 9, fString.Length()-9);
|
|
||||||
#ifdef ZETA
|
|
||||||
fBitmap = new BBitmap(BRect(0, 0, 15, 15), B_RGBA32);
|
|
||||||
BEntry fEntry = BEntry(myPath.String());
|
|
||||||
BBitmap icon = &GetTrackerIcon(fEntry, 16);
|
|
||||||
*fBitmap = icon;
|
|
||||||
#else
|
|
||||||
fBitmap = new BBitmap(BRect(0, 0,31, 31), B_RGBA32);
|
|
||||||
BNode *fNode = new BNode(myPath.String());
|
|
||||||
BNodeInfo fInfo(fNode);
|
|
||||||
int i;
|
|
||||||
i=32;
|
|
||||||
icon_size ics;
|
|
||||||
ics=(icon_size)i;
|
|
||||||
|
|
||||||
fInfo.GetTrackerIcon( fBitmap, ics );
|
|
||||||
//fInfo.GetTrackerIcon(fBitmap, B_MINI_ICON);
|
|
||||||
delete fNode;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
else if( ! fString.FindFirst("__SmIC__=") )
|
|
||||||
{
|
|
||||||
BString myPath;
|
|
||||||
fString.CopyInto(myPath, 9, fString.Length()-9);
|
|
||||||
#ifdef ZETA
|
|
||||||
fBitmap = new BBitmap(BRect(0, 0, 15, 15), B_RGBA32);
|
|
||||||
BEntry fEntry = BEntry(myPath.String());
|
|
||||||
BBitmap icon = &GetTrackerIcon(fEntry, 16);
|
|
||||||
*fBitmap = icon;
|
|
||||||
#else
|
|
||||||
fBitmap = new BBitmap(BRect(0, 0, 15, 15), B_RGBA32);
|
|
||||||
BNode *fNode = new BNode(myPath.String());
|
|
||||||
BNodeInfo fInfo(fNode);
|
|
||||||
int i;
|
|
||||||
i=16;
|
|
||||||
icon_size ics;
|
|
||||||
ics=(icon_size)i;
|
|
||||||
|
|
||||||
fInfo.GetTrackerIcon( fBitmap, ics );
|
|
||||||
//fInfo.GetTrackerIcon(fBitmap, B_MINI_ICON);
|
|
||||||
delete fNode;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char* BYabField::String() const
|
|
||||||
{
|
|
||||||
return fString.String();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BYabField::SetWidth(float width)
|
|
||||||
{
|
|
||||||
fWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
float BYabField::Width()
|
|
||||||
{
|
|
||||||
return fWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BYabField::SetClippedString(const char* val)
|
|
||||||
{
|
|
||||||
fClippedString = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char* BYabField::ClippedString()
|
|
||||||
{
|
|
||||||
return fClippedString.String();
|
|
||||||
}
|
|
||||||
|
|
||||||
const BBitmap* BYabField::Bitmap()
|
|
||||||
{
|
|
||||||
return fBitmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BYabField::SetBitmap(BBitmap* bitmap)
|
|
||||||
{
|
|
||||||
fBitmap = bitmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BYabField::HasBitmap()
|
|
||||||
{
|
|
||||||
if(fBitmap) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
|
|
||||||
BYabColumn::BYabColumn(const char* title, float width, float minWidth,
|
|
||||||
float maxWidth, uint32 truncate, alignment align)
|
|
||||||
:BTitledColumn(title, width, minWidth, maxWidth, align),
|
|
||||||
fTruncate(truncate)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BYabColumn::DrawField(BField* _field, BRect rect, BView* parent)
|
|
||||||
{
|
|
||||||
if(!((BYabField*)_field)->HasBitmap())
|
|
||||||
{
|
|
||||||
float width = rect.Width() - (2 * kTEXT_MARGIN);
|
|
||||||
BYabField* field = static_cast<BYabField*>(_field);
|
|
||||||
|
|
||||||
if (width != field->Width())
|
|
||||||
{
|
|
||||||
BString out_string(field->String());
|
|
||||||
|
|
||||||
parent->TruncateString(&out_string, fTruncate, width + 2);
|
|
||||||
field->SetClippedString(out_string.String());
|
|
||||||
field->SetWidth(width);
|
|
||||||
}
|
|
||||||
DrawString(field->ClippedString(), parent, rect);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BYabField *bitmapField = static_cast<BYabField *>(_field);
|
|
||||||
const BBitmap *bitmap = bitmapField->Bitmap();
|
|
||||||
|
|
||||||
if (bitmap != NULL)
|
|
||||||
{
|
|
||||||
float x = 0.0;
|
|
||||||
float y;
|
|
||||||
BRect r = bitmap->Bounds();
|
|
||||||
|
|
||||||
y = rect.top + ((rect.Height() - r.Height()) / 2);
|
|
||||||
|
|
||||||
switch (Alignment())
|
|
||||||
{
|
|
||||||
case B_ALIGN_LEFT:
|
|
||||||
x = rect.left + kIMG_MARGIN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_CENTER:
|
|
||||||
x = rect.left + ((rect.Width() - r.Width()) / 2);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_ALIGN_RIGHT:
|
|
||||||
x = rect.right - kIMG_MARGIN - r.Width();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
parent->SetDrawingMode(B_OP_ALPHA);
|
|
||||||
parent->DrawBitmap(bitmap, BPoint(x, y));
|
|
||||||
parent->SetDrawingMode(B_OP_OVER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BYabColumn::CompareFields(BField* field1, BField* field2)
|
|
||||||
{
|
|
||||||
return(ICompare(((BYabField*)field1)->String(),
|
|
||||||
(((BYabField*)field2)->String())));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
BYabColumn::AcceptsField(const BField *field) const
|
|
||||||
{
|
|
||||||
return static_cast<bool>(dynamic_cast<const BYabField*>(field));
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
/*
|
|
||||||
Open Tracker License
|
|
||||||
|
|
||||||
Terms and Conditions
|
|
||||||
|
|
||||||
Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice applies to all licensees
|
|
||||||
and shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of Be Incorporated shall not be
|
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings in
|
|
||||||
this Software without prior written authorization from Be Incorporated.
|
|
||||||
|
|
||||||
Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
|
|
||||||
of Be Incorporated in the United States and other countries. Other brand product
|
|
||||||
names are registered trademarks or trademarks of their respective holders.
|
|
||||||
All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef YAB_COLUMN_TYPES_H
|
|
||||||
#define YAB_COLUMN_TYPES_H
|
|
||||||
|
|
||||||
#include "../global.h"
|
|
||||||
#include <String.h>
|
|
||||||
#include <Font.h>
|
|
||||||
#include <Bitmap.h>
|
|
||||||
#include "ColumnListView.h"
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Common base-class: a column that draws a standard title at its top.
|
|
||||||
|
|
||||||
class BTitledColumn : public BColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BTitledColumn (const char *title, float width, float minWidth, float maxWidth, alignment align = B_ALIGN_LEFT);
|
|
||||||
|
|
||||||
virtual void DrawTitle(BRect rect, BView* parent);
|
|
||||||
virtual void GetColumnName(BString* into) const;
|
|
||||||
void DrawString(const char*, BView*, BRect);
|
|
||||||
void SetTitle(const char* title);
|
|
||||||
void Title(BString* forTitle) const; // sets the BString arg to be the title
|
|
||||||
float FontHeight() const;
|
|
||||||
private:
|
|
||||||
float fFontHeight;
|
|
||||||
BString fTitle;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=====================================================================
|
|
||||||
// Field and column classes for strings.
|
|
||||||
|
|
||||||
class BYabField : public BField
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BYabField (const char* string);
|
|
||||||
BYabField (BBitmap* bitmap);
|
|
||||||
|
|
||||||
void SetString(const char* string, int height);
|
|
||||||
const char* String() const;
|
|
||||||
void SetClippedString(const char* string);
|
|
||||||
const char*ClippedString();
|
|
||||||
void SetWidth(float);
|
|
||||||
float Width();
|
|
||||||
|
|
||||||
const BBitmap* Bitmap();
|
|
||||||
void SetBitmap(BBitmap* bitmap);
|
|
||||||
bool HasBitmap();
|
|
||||||
|
|
||||||
private:
|
|
||||||
BBitmap* fBitmap;
|
|
||||||
float fWidth;
|
|
||||||
BString fString;
|
|
||||||
BString fClippedString;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
class BYabColumn: public BTitledColumn
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BYabColumn(const char *title, float width, float maxWidth, float minWidth, uint32 truncate, alignment align = B_ALIGN_LEFT);
|
|
||||||
|
|
||||||
virtual void DrawField(BField* field, BRect rect, BView* parent);
|
|
||||||
virtual int CompareFields(BField* field1, BField* field2);
|
|
||||||
virtual bool AcceptsField(const BField* field) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
uint32 fTruncate;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-216
@@ -1,216 +0,0 @@
|
|||||||
#ifndef CONFIG_H
|
|
||||||
#define CONFIG_H
|
|
||||||
|
|
||||||
#define BEOS
|
|
||||||
// #define LIBBSVG
|
|
||||||
#define BUILD_TIME __DATE__
|
|
||||||
/* Version number of package */
|
|
||||||
#define VERSION "1.7.8"
|
|
||||||
/* architecture of build machine */
|
|
||||||
#define UNIX_ARCHITECTURE "BePC-Haiku"
|
|
||||||
|
|
||||||
/* config.h. Generated by configure. */
|
|
||||||
/* config.h.in. Generated from configure.in by autoheader. */
|
|
||||||
|
|
||||||
|
|
||||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
|
||||||
#define HAVE_ALLOCA 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
|
||||||
*/
|
|
||||||
#define HAVE_ALLOCA_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <ctype.h> header file. */
|
|
||||||
#define HAVE_CTYPE_H 1
|
|
||||||
|
|
||||||
/* defined, if ncurses.h is present */
|
|
||||||
#define HAVE_CURSES_HEADER 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `difftime' function. */
|
|
||||||
#define HAVE_DIFFTIME 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
|
||||||
#define HAVE_FCNTL_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <float.h> header file. */
|
|
||||||
#define HAVE_FLOAT_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `floor' function. */
|
|
||||||
#define HAVE_FLOOR 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `fork' function. */
|
|
||||||
#define HAVE_FORK 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
||||||
#define HAVE_INTTYPES_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `ncurses' library (-lncurses). */
|
|
||||||
#define HAVE_LIBNCURSES 0
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <limits.h> header file. */
|
|
||||||
#define HAVE_LIMITS_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <math.h> header file. */
|
|
||||||
#define HAVE_MATH_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
|
||||||
#define HAVE_MEMORY_H 1
|
|
||||||
|
|
||||||
/* defined, if ncurses.h is present */
|
|
||||||
#define HAVE_NCURSES_HEADER 0
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `pow' function. */
|
|
||||||
#define HAVE_POW 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `select' function. */
|
|
||||||
#define HAVE_SELECT 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <signal.h> header file. */
|
|
||||||
#define HAVE_SIGNAL_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `sqrt' function. */
|
|
||||||
#define HAVE_SQRT 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stddef.h> header file. */
|
|
||||||
#define HAVE_STDDEF_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
|
||||||
/* #undef HAVE_STDINT_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdio.h> header file. */
|
|
||||||
#define HAVE_STDIO_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
||||||
#define HAVE_STDLIB_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strchr' function. */
|
|
||||||
#define HAVE_STRCHR 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strerror' function. */
|
|
||||||
#define HAVE_STRERROR 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strftime' function. */
|
|
||||||
#define HAVE_STRFTIME 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <strings.h> header file. */
|
|
||||||
#define HAVE_STRINGS_H 1
|
|
||||||
|
|
||||||
/* defined, if strings.h is present */
|
|
||||||
#define HAVE_STRINGS_HEADER 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
|
||||||
#define HAVE_STRING_H 1
|
|
||||||
|
|
||||||
/* defined, if string.h is present */
|
|
||||||
#define HAVE_STRING_HEADER 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strpbrk' function. */
|
|
||||||
#define HAVE_STRPBRK 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strrchr' function. */
|
|
||||||
#define HAVE_STRRCHR 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strstr' function. */
|
|
||||||
#define HAVE_STRSTR 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
|
||||||
#define HAVE_SYS_SELECT_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
|
||||||
#define HAVE_SYS_SOCKET_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
||||||
#define HAVE_SYS_STAT_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
|
||||||
#define HAVE_SYS_TIME_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
#define HAVE_SYS_TYPES_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
|
|
||||||
#define HAVE_SYS_WAIT_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <time.h> header file. */
|
|
||||||
#define HAVE_TIME_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `tmpnam' function. */
|
|
||||||
#define HAVE_TMPNAM 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
|
||||||
#define HAVE_UNISTD_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `vfork' function. */
|
|
||||||
/* #undef HAVE_VFORK */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <vfork.h> header file. */
|
|
||||||
/* #undef HAVE_VFORK_H */
|
|
||||||
|
|
||||||
/* Define to 1 if `fork' works. */
|
|
||||||
#define HAVE_WORKING_FORK 1
|
|
||||||
|
|
||||||
/* Define to 1 if `vfork' works. */
|
|
||||||
/* #undef HAVE_WORKING_VFORK */
|
|
||||||
|
|
||||||
/* Name of package */
|
|
||||||
#define PACKAGE "yabasic"
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#define PACKAGE_BUGREPORT ""
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#define PACKAGE_NAME ""
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#define PACKAGE_STRING ""
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#define PACKAGE_TARNAME ""
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#define PACKAGE_VERSION ""
|
|
||||||
|
|
||||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
|
||||||
#define RETSIGTYPE void
|
|
||||||
|
|
||||||
/* Define to the type of arg 1 for `select'. */
|
|
||||||
#define SELECT_TYPE_ARG1 int
|
|
||||||
|
|
||||||
/* Define to the type of args 2, 3 and 4 for `select'. */
|
|
||||||
#define SELECT_TYPE_ARG234 (fd_set *)
|
|
||||||
|
|
||||||
/* Define to the type of arg 5 for `select'. */
|
|
||||||
#define SELECT_TYPE_ARG5 (struct timeval *)
|
|
||||||
|
|
||||||
/* If using the C implementation of alloca, define if you know the
|
|
||||||
direction of stack growth for your system; otherwise it will be
|
|
||||||
automatically deduced at run-time.
|
|
||||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
|
||||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
|
||||||
STACK_DIRECTION = 0 => direction of growth unknown */
|
|
||||||
/* #undef STACK_DIRECTION */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
|
||||||
#define STDC_HEADERS 1
|
|
||||||
|
|
||||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
|
||||||
#define TIME_WITH_SYS_TIME 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Define to 1 if the X Window System is missing or not being used. */
|
|
||||||
#define X_DISPLAY_MISSING 1
|
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
|
||||||
/* #undef const */
|
|
||||||
|
|
||||||
/* Define to `int' if <sys/types.h> does not define. */
|
|
||||||
/* #undef pid_t */
|
|
||||||
|
|
||||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
|
||||||
/* #undef size_t */
|
|
||||||
|
|
||||||
/* Define as `fork' if `vfork' does not work. */
|
|
||||||
#define vfork fork
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-2061
File diff suppressed because it is too large
Load Diff
@@ -1,3 +0,0 @@
|
|||||||
//define BUILD_NCURSES
|
|
||||||
#define BUILD_YABTEXT
|
|
||||||
#define BUILD_GAMESOUND
|
|
||||||
-2592
File diff suppressed because it is too large
Load Diff
Binary file not shown.
-2252
File diff suppressed because it is too large
Load Diff
-313
@@ -1,313 +0,0 @@
|
|||||||
// resattr.cpp
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <Entry.h>
|
|
||||||
#include <File.h>
|
|
||||||
#include <fs_attr.h>
|
|
||||||
#include <Resources.h>
|
|
||||||
|
|
||||||
// usage
|
|
||||||
static const char *kUsage =
|
|
||||||
"Usage: %s [ <options> ] -o <outFile> [ <inFile> ... ]\n"
|
|
||||||
"\n"
|
|
||||||
"Reads resources from zero or more input files and adds them as attributes\n"
|
|
||||||
"to the specified output file, or (in reverse mode) reads attributes from\n"
|
|
||||||
"zero or more input files and adds them as resources to the specified output\n"
|
|
||||||
"file. If not existent the output file is created as an empty file.\n"
|
|
||||||
"\n"
|
|
||||||
"Options:\n"
|
|
||||||
" -h, --help - Print this text.\n"
|
|
||||||
" -o <outfile> - Specifies the output file.\n"
|
|
||||||
" -O, --overwrite - Overwrite existing attributes. regardless of whether\n"
|
|
||||||
" an attribute does already exist, it is always written\n"
|
|
||||||
" when a respective resource is encountered in an input\n"
|
|
||||||
" file. The last input file specifying the attribute\n"
|
|
||||||
" wins. If the options is not given, already existing\n"
|
|
||||||
" attributes remain untouched. Otherwise the first input\n"
|
|
||||||
" file specifying an attribute wins.\n"
|
|
||||||
" -r, --reverse - Reverse mode: Reads attributes from input files and\n"
|
|
||||||
" writes resources. A unique resource ID is assigned to\n"
|
|
||||||
" each attribute, so there will be no conflicts if two\n"
|
|
||||||
" input files feature the same attribute.\n"
|
|
||||||
;
|
|
||||||
|
|
||||||
// command line args
|
|
||||||
static int sArgc;
|
|
||||||
static const char *const *sArgv;
|
|
||||||
|
|
||||||
// print_usage
|
|
||||||
void
|
|
||||||
print_usage(bool error)
|
|
||||||
{
|
|
||||||
// get nice program name
|
|
||||||
const char *programName = (sArgc > 0 ? sArgv[0] : "resattr");
|
|
||||||
if (const char *lastSlash = strrchr(programName, '/'))
|
|
||||||
programName = lastSlash + 1;
|
|
||||||
|
|
||||||
// print usage
|
|
||||||
fprintf((error ? stderr : stdout), kUsage, programName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// print_usage_and_exit
|
|
||||||
static
|
|
||||||
void
|
|
||||||
print_usage_and_exit(bool error)
|
|
||||||
{
|
|
||||||
print_usage(error);
|
|
||||||
exit(error ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// next_arg
|
|
||||||
static
|
|
||||||
const char*
|
|
||||||
next_arg(int argc, const char* const* argv, int& argi, bool dontFail = false)
|
|
||||||
{
|
|
||||||
if (argi + 1 >= argc) {
|
|
||||||
if (dontFail)
|
|
||||||
return NULL;
|
|
||||||
print_usage_and_exit(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return argv[++argi];
|
|
||||||
}
|
|
||||||
|
|
||||||
// write_attributes
|
|
||||||
static
|
|
||||||
void
|
|
||||||
write_attributes(BNode &out, const char *inFileName, BResources &resources,
|
|
||||||
bool overwrite)
|
|
||||||
{
|
|
||||||
// iterate through the resources
|
|
||||||
type_code type;
|
|
||||||
int32 id;
|
|
||||||
const char *name;
|
|
||||||
size_t size;
|
|
||||||
for (int resIndex = 0;
|
|
||||||
resources.GetResourceInfo(resIndex, &type, &id, &name, &size);
|
|
||||||
resIndex++) {
|
|
||||||
// if we shall not overwrite attributes, we skip the attribute, if it
|
|
||||||
// already exists
|
|
||||||
attr_info attrInfo;
|
|
||||||
if (!overwrite && out.GetAttrInfo(name, &attrInfo) == B_OK)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// get the resource
|
|
||||||
const void *data = resources.LoadResource(type, id, &size);
|
|
||||||
if (!data && size > 0) {
|
|
||||||
// should not happen
|
|
||||||
fprintf(stderr, "Failed to get resource `%s', type: %" B_PRIx32
|
|
||||||
", id: %" B_PRId32 " from input file `%s'\n", name, type, id,
|
|
||||||
inFileName);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// construct a name, if the resource doesn't have one
|
|
||||||
char nameBuffer[32];
|
|
||||||
if (!name) {
|
|
||||||
sprintf(nameBuffer, "unnamed_%d\n", resIndex);
|
|
||||||
name = nameBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// write the attribute
|
|
||||||
ssize_t bytesWritten = out.WriteAttr(name, type, 0LL, data, size);
|
|
||||||
if (bytesWritten < 0) {
|
|
||||||
fprintf(stderr, "Failed to write attribute `%s' to output file: "
|
|
||||||
"%s\n", name, strerror(bytesWritten));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// write_resources
|
|
||||||
static
|
|
||||||
void
|
|
||||||
write_resources(BResources &resources, const char *inFileName, BNode &in,
|
|
||||||
int32 &resID)
|
|
||||||
{
|
|
||||||
// iterate through the attributes
|
|
||||||
char name[B_ATTR_NAME_LENGTH];
|
|
||||||
while (in.GetNextAttrName(name) == B_OK) {
|
|
||||||
// get attribute info
|
|
||||||
attr_info attrInfo;
|
|
||||||
status_t error = in.GetAttrInfo(name, &attrInfo);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to get info for attribute `%s' of input "
|
|
||||||
"file `%s': %s\n", name, inFileName, strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// read attribute
|
|
||||||
char *data = new char[attrInfo.size];
|
|
||||||
ssize_t bytesRead = in.ReadAttr(name, attrInfo.type, 0LL, data,
|
|
||||||
attrInfo.size);
|
|
||||||
if (bytesRead < 0) {
|
|
||||||
fprintf(stderr, "Failed to read attribute `%s' of input "
|
|
||||||
"file `%s': %s\n", name, inFileName, strerror(bytesRead));
|
|
||||||
delete[] data;
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// find unique ID
|
|
||||||
const char *existingName;
|
|
||||||
size_t existingSize;
|
|
||||||
while (resources.GetResourceInfo(attrInfo.type, resID, &existingName,
|
|
||||||
&existingSize)) {
|
|
||||||
resID++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// write resource
|
|
||||||
error = resources.AddResource(attrInfo.type, resID++, data,
|
|
||||||
attrInfo.size, name);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to write resource `%s' to output "
|
|
||||||
"file: %s\n", name, strerror(error));
|
|
||||||
}
|
|
||||||
delete[] data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// resources_to_attributes
|
|
||||||
static
|
|
||||||
void
|
|
||||||
resources_to_attributes(const char *outputFile, const char **inputFiles,
|
|
||||||
int inputFileCount, bool overwrite)
|
|
||||||
{
|
|
||||||
// create output file, if it doesn't exist
|
|
||||||
if (!BEntry(outputFile).Exists()) {
|
|
||||||
BFile createdOut;
|
|
||||||
status_t error = createdOut.SetTo(outputFile,
|
|
||||||
B_READ_WRITE | B_CREATE_FILE);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to create output file `%s': %s\n",
|
|
||||||
outputFile, strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// open output file
|
|
||||||
BNode out;
|
|
||||||
status_t error = out.SetTo(outputFile);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to open output file `%s': %s\n", outputFile,
|
|
||||||
strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// iterate through the input files
|
|
||||||
for (int i = 0; i < inputFileCount; i++) {
|
|
||||||
// open input file
|
|
||||||
BFile in;
|
|
||||||
error = in.SetTo(inputFiles[i], B_READ_ONLY);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to open input file `%s': %s\n",
|
|
||||||
inputFiles[i], strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// open resources
|
|
||||||
BResources resources;
|
|
||||||
error = resources.SetTo(&in, false);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to read resources of input file `%s': %s\n",
|
|
||||||
inputFiles[i], strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add the attributes
|
|
||||||
write_attributes(out, inputFiles[i], resources, overwrite);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// resources_to_attributes
|
|
||||||
static
|
|
||||||
void
|
|
||||||
attributes_to_resources(const char *outputFile, const char **inputFiles,
|
|
||||||
int inputFileCount)
|
|
||||||
{
|
|
||||||
// open output file
|
|
||||||
BFile out;
|
|
||||||
status_t error = out.SetTo(outputFile, B_READ_WRITE | B_CREATE_FILE);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to open output file `%s': %s\n", outputFile,
|
|
||||||
strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// init output resources
|
|
||||||
BResources resources;
|
|
||||||
error = resources.SetTo(&out, false);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to init resources of output file `%s': %s\n",
|
|
||||||
outputFile, strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 resID = 0;
|
|
||||||
|
|
||||||
// iterate through the input files
|
|
||||||
for (int i = 0; i < inputFileCount; i++) {
|
|
||||||
// open input file
|
|
||||||
BNode in;
|
|
||||||
error = in.SetTo(inputFiles[i]);
|
|
||||||
if (error != B_OK) {
|
|
||||||
fprintf(stderr, "Failed to open input file `%s': %s\n",
|
|
||||||
inputFiles[i], strerror(error));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add the resources
|
|
||||||
|
|
||||||
write_resources(resources, inputFiles[i], in, resID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// main
|
|
||||||
int
|
|
||||||
main(int argc, const char *const *argv)
|
|
||||||
{
|
|
||||||
sArgc = argc;
|
|
||||||
sArgv = argv;
|
|
||||||
|
|
||||||
// parameters
|
|
||||||
const char *outputFile = NULL;
|
|
||||||
bool overwrite = false;
|
|
||||||
bool reverse = false;
|
|
||||||
const char **inputFiles = new const char*[argc];
|
|
||||||
int inputFileCount = 0;
|
|
||||||
|
|
||||||
// parse arguments
|
|
||||||
for (int argi = 1; argi < argc; argi++) {
|
|
||||||
const char *arg = argv[argi];
|
|
||||||
if (arg[0] == '-') {
|
|
||||||
if (strcmp(arg, "-h") == 0 || strcmp(arg, "--help") == 0) {
|
|
||||||
print_usage_and_exit(false);
|
|
||||||
} else if (strcmp(arg, "-o") == 0) {
|
|
||||||
outputFile = next_arg(argc, argv, argi);
|
|
||||||
} else if (strcmp(arg, "-O") == 0) {
|
|
||||||
overwrite = true;
|
|
||||||
} else if (strcmp(arg, "-r") == 0
|
|
||||||
|| strcmp(arg, "--reverse") == 0) {
|
|
||||||
reverse = true;
|
|
||||||
} else {
|
|
||||||
print_usage_and_exit(true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
inputFiles[inputFileCount++] = arg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// check parameters
|
|
||||||
if (!outputFile)
|
|
||||||
print_usage_and_exit(true);
|
|
||||||
|
|
||||||
if (reverse) {
|
|
||||||
attributes_to_resources(outputFile, inputFiles, inputFileCount);
|
|
||||||
} else {
|
|
||||||
resources_to_attributes(outputFile, inputFiles, inputFileCount,
|
|
||||||
overwrite);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
NAME= resattr
|
|
||||||
TYPE= APP
|
|
||||||
SRCS= resattr.cpp
|
|
||||||
RSRCS=
|
|
||||||
LIBS= /boot/develop/lib/x86/libroot.so /boot/develop/lib/x86/libbe.so
|
|
||||||
LIBPATHS=
|
|
||||||
SYSTEM_INCLUDE_PATHS= /boot/develop/headers/be /boot/develop/headers/cpp /boot/develop/headers/posix /boot/home/config/include
|
|
||||||
LOCAL_INCLUDE_PATHS=
|
|
||||||
OPTIMIZE=NONE
|
|
||||||
# specify any preprocessor symbols to be defined. The symbols will not
|
|
||||||
# have their values set automatically; you must supply the value (if any)
|
|
||||||
# to use. For example, setting DEFINES to "DEBUG=1" will cause the
|
|
||||||
# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG"
|
|
||||||
# would pass "-DDEBUG" on the compiler's command line.
|
|
||||||
DEFINES=
|
|
||||||
# specify special warning levels
|
|
||||||
# if unspecified default warnings will be used
|
|
||||||
# NONE = supress all warnings
|
|
||||||
# ALL = enable all warnings
|
|
||||||
WARNINGS =
|
|
||||||
# Build with debugging symbols if set to TRUE
|
|
||||||
SYMBOLS=
|
|
||||||
COMPILER_FLAGS=
|
|
||||||
LINKER_FLAGS=
|
|
||||||
|
|
||||||
## include the makefile-engine
|
|
||||||
include $(BUILDHOME)/etc/makefile-engine
|
|
||||||
-1775
File diff suppressed because it is too large
Load Diff
@@ -1,944 +0,0 @@
|
|||||||
%{
|
|
||||||
/*
|
|
||||||
|
|
||||||
YABASIC --- a simple Basic Interpreter
|
|
||||||
written by Marc-Oliver Ihm 1995-2004
|
|
||||||
homepage: www.yabasic.de
|
|
||||||
|
|
||||||
BISON part
|
|
||||||
|
|
||||||
This file is part of yabasic and may be copied only
|
|
||||||
under the terms of either the Artistic License or
|
|
||||||
the GNU General Public License (GPL), both of which
|
|
||||||
can be found at www.yabasic.de
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef YABASIC_INCLUDED
|
|
||||||
#include "yabasic.h" /* definitions of yabasic */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <malloc.h>
|
|
||||||
|
|
||||||
#if HAVE_ALLOCA_H
|
|
||||||
#ifndef WINDOWS
|
|
||||||
#include <alloca.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void __yy_bcopy(char *,char *,int); /* prototype missing */
|
|
||||||
|
|
||||||
int tileol; /* true, read should go to eon of line */
|
|
||||||
int mylineno=1; /* line number; counts fresh in every new file */
|
|
||||||
int main_lineno=1; /* line number of main */
|
|
||||||
int function_type=ftNONE; /* contains function type while parsing function */
|
|
||||||
char *current_function=NULL; /* name of currently parsed function */
|
|
||||||
int exported=FALSE; /* true, if function is exported */
|
|
||||||
int yylex(void);
|
|
||||||
extern struct libfile_name *current_libfile; /* defined in main.c: name of currently parsed file */
|
|
||||||
int missing_endif=0;
|
|
||||||
int missing_endif_line=0;
|
|
||||||
int missing_endsub=0;
|
|
||||||
int missing_endsub_line=0;
|
|
||||||
int missing_next=0;
|
|
||||||
int missing_next_line=0;
|
|
||||||
int missing_wend=0;
|
|
||||||
int missing_wend_line=0;
|
|
||||||
int missing_until=0;
|
|
||||||
int missing_until_line=0;
|
|
||||||
int missing_loop=0;
|
|
||||||
int missing_loop_line=0;
|
|
||||||
int in_loop=0;
|
|
||||||
|
|
||||||
void report_missing(int severity,char *text) {
|
|
||||||
if (missing_loop || missing_endif || missing_next || missing_until || missing_wend) {
|
|
||||||
error(severity,text);
|
|
||||||
string[0]='\0';
|
|
||||||
if (missing_endif)
|
|
||||||
sprintf(string,"if statement starting at line %d has seen no 'endif' yet",missing_endif_line);
|
|
||||||
else if (missing_next)
|
|
||||||
sprintf(string,"for-loop starting at line %d has seen no 'next' yet",missing_next_line);
|
|
||||||
else if (missing_wend)
|
|
||||||
sprintf(string,"while-loop starting at line %d has seen no 'wend' yet",missing_wend_line);
|
|
||||||
else if (missing_until)
|
|
||||||
sprintf(string,"repeat-loop starting at line %d has seen no 'until' yet",missing_until_line);
|
|
||||||
else if (missing_loop)
|
|
||||||
sprintf(string,"do-loop starting at line %d has seen no 'loop' yet",missing_wend_line);
|
|
||||||
if (string[0]) error(severity,string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
%}
|
|
||||||
|
|
||||||
%union {
|
|
||||||
double fnum; /* double number */
|
|
||||||
int inum; /* integer number */
|
|
||||||
int token; /* token of command */
|
|
||||||
int sep; /* number of newlines */
|
|
||||||
char *string; /* quoted string */
|
|
||||||
char *symbol; /* general symbol */
|
|
||||||
char *digits; /* string of digits */
|
|
||||||
char *docu; /* embedded documentation */
|
|
||||||
}
|
|
||||||
|
|
||||||
%type <fnum> const
|
|
||||||
%type <fnum> number
|
|
||||||
%type <symbol> symbol_or_lineno
|
|
||||||
%type <symbol> function_name
|
|
||||||
%type <symbol> function_or_array
|
|
||||||
%type <symbol> stringfunction_or_array
|
|
||||||
%type <sep> tSEP sep_list
|
|
||||||
|
|
||||||
%token <fnum> tFNUM
|
|
||||||
%token <symbol> tSYMBOL
|
|
||||||
%token <symbol> tSTRSYM
|
|
||||||
%token <symbol> tDOCU
|
|
||||||
%token <digits> tDIGITS
|
|
||||||
%token <string> tSTRING
|
|
||||||
|
|
||||||
%token tFOR tTO tSTEP tNEXT tWHILE tWEND tREPEAT tUNTIL tIMPORT
|
|
||||||
%token tGOTO tGOSUB tLABEL tON tSUB tENDSUB tLOCAL tSTATIC tEXPORT tERROR
|
|
||||||
%token tEXECUTE tEXECUTE2 tCOMPILE tRUNTIME_CREATED_SUB
|
|
||||||
%token tINTERRUPT tBREAK tCONTINUE tSWITCH tSEND tCASE tDEFAULT tLOOP tDO tSEP tEOPROG
|
|
||||||
%token tIF tTHEN tELSE tELSIF tENDIF tUSING
|
|
||||||
%token tPRINT tINPUT tLINE tRETURN tDIM tEND tEXIT tAT tSCREEN tSCREENSHOT
|
|
||||||
%token tREVERSE tCOLOUR
|
|
||||||
%token tAND tOR tNOT tEOR
|
|
||||||
%token tNEQ tLEQ tGEQ tLTN tGTN tEQU tPOW
|
|
||||||
%token tREAD tDATA tRESTORE
|
|
||||||
%token tOPEN tCLOSE tSEEK tTELL tAS tREADING tWRITING
|
|
||||||
%token tWAIT tBELL tLET tARDIM tARSIZE tBIND
|
|
||||||
%token tWINDOW tDOT tCIRCLE tCLEAR tFILL tPRINTER tSETUP
|
|
||||||
%token tBUTTON tALERT tMENU tCHECKBOX tRADIOBUTTON tTEXTCONTROL
|
|
||||||
%token tLISTBOX tDROPBOX tADD tREMOVE tLOCALIZE tFILEPANEL tSLIDER tSTATUSBAR
|
|
||||||
%token tLAYOUT tSET tTEXTEDIT tCOUNT tVIEW tBOXVIEW tTABVIEW tTEXTURL tBITMAP tCANVAS
|
|
||||||
%token tOPTION tDROPZONE tCOLORCONTROL tTREEBOX tCOLUMNBOX tCOLUMN tSORT tTOOLTIP tTOOLTIPNEW tCALENDAR
|
|
||||||
%token tCLIPBOARD tCOPY tSUBMENU tSELECT tSCROLLBAR tEXPAND tCOLLAPSE tSPLITVIEW tSTACKVIEW
|
|
||||||
%token tPOPUPMENU tSPINCONTROL tMSEND tNUMMESSAGE tTHREAD tSOUND tPLAY tSTOP tMEDIASOUND tSHORTCUT tISCOMPUTERON
|
|
||||||
%token tDRAW tTEXT tFLUSH tELLIPSE tSAVE
|
|
||||||
%token tRECT tGETCHAR tPUTCHAR tNEW tCURVE tLAUNCH tATTRIBUTE
|
|
||||||
|
|
||||||
%token tSIN tASIN tCOS tACOS tTAN tATAN tEXP tLOG
|
|
||||||
%token tSQRT tSQR tMYEOF tABS tSIG
|
|
||||||
%token tINT tFRAC tMOD tRAN tLEN tVAL tLEFT tRIGHT tMID tMIN tMAX
|
|
||||||
%token tSTR tINKEY tCHR tASC tHEX tDEC tBIN tUPPER tLOWER
|
|
||||||
%token tTRIM tLTRIM tRTRIM tINSTR tRINSTR
|
|
||||||
%token tSYSTEM tSYSTEM2 tPEEK tPEEK2 tPOKE
|
|
||||||
%token tDATE tTIME tTOKEN tTOKENALT tSPLIT tSPLITALT tGLOB
|
|
||||||
%token tMESSAGE tIMAGE tSVG tTRANSLATE tGET tMOUSE tISMOUSEIN
|
|
||||||
%token tKEYBOARD tPASTE tGETNUM
|
|
||||||
|
|
||||||
%left tOR
|
|
||||||
%left tAND
|
|
||||||
%left tNOT
|
|
||||||
%left tNEQ
|
|
||||||
%left tGEQ
|
|
||||||
%left tLEQ
|
|
||||||
%left tLTN
|
|
||||||
%left tGTN
|
|
||||||
%left tEQU
|
|
||||||
%left '-' '+'
|
|
||||||
%left '*' '/'
|
|
||||||
%left tPOW
|
|
||||||
%nonassoc UMINUS
|
|
||||||
|
|
||||||
%%
|
|
||||||
|
|
||||||
program: statement_list tEOPROG {YYACCEPT;}
|
|
||||||
;
|
|
||||||
|
|
||||||
statement_list: statement
|
|
||||||
| statement_list {if (errorlevel<=ERROR) {YYABORT;}}
|
|
||||||
tSEP {if ($3>=0) mylineno+=$3; else switchlib();} statement
|
|
||||||
;
|
|
||||||
|
|
||||||
statement: /* empty */
|
|
||||||
| string_assignment
|
|
||||||
| tLET string_assignment
|
|
||||||
| assignment
|
|
||||||
| tLET assignment
|
|
||||||
| tIMPORT {report_missing(ERROR,"do not import a library in a loop or an if-statement");switchlib();}
|
|
||||||
| tERROR string_expression {add_command(cERROR,NULL);}
|
|
||||||
| for_loop
|
|
||||||
| switch_number_or_string
|
|
||||||
| repeat_loop
|
|
||||||
| while_loop
|
|
||||||
| do_loop
|
|
||||||
| tBREAK {add_command(cBREAK,NULL);if (!in_loop) error(ERROR,"break outside loop");}
|
|
||||||
| tCONTINUE {add_command(cCONTINUE,NULL);if (!in_loop) error(ERROR,"continue outside loop");}
|
|
||||||
| function_definition
|
|
||||||
| function_or_array {create_call($1);add_command(cPOP,NULL);}
|
|
||||||
| stringfunction_or_array {create_call($1);add_command(cPOP,NULL);}
|
|
||||||
| tLOCAL {if (function_type==ftNONE) error(ERROR,"no use for 'local' outside functions");} local_list
|
|
||||||
| tSTATIC {if (function_type==ftNONE) error(ERROR,"no use for 'static' outside functions");} static_list
|
|
||||||
| if_clause
|
|
||||||
| short_if
|
|
||||||
| tGOTO symbol_or_lineno {create_goto((function_type!=ftNONE)?dotify($2,TRUE):$2);}
|
|
||||||
| tGOSUB symbol_or_lineno {create_gosub((function_type!=ftNONE)?dotify($2,TRUE):$2);}
|
|
||||||
| tON tINTERRUPT tBREAK {create_exception(TRUE);}
|
|
||||||
| tON tINTERRUPT tCONTINUE {create_exception(FALSE);}
|
|
||||||
| tON expression tGOTO {add_command(cSKIPPER,NULL);}
|
|
||||||
goto_list {add_command(cNOP,NULL);}
|
|
||||||
| tON expression tGOSUB {add_command(cSKIPPER,NULL);}
|
|
||||||
gosub_list {add_command(cNOP,NULL);}
|
|
||||||
| tLABEL symbol_or_lineno {create_label((function_type!=ftNONE)?dotify($2,TRUE):$2,cLABEL);}
|
|
||||||
| open_clause {add_command(cCHECKOPEN,NULL);}
|
|
||||||
| tCLOSE hashed_number {add_command(cCLOSE,NULL);}
|
|
||||||
| seek_clause {add_command(cCHECKSEEK,NULL);}
|
|
||||||
| tCOMPILE string_expression {add_command(cCOMPILE,NULL);}
|
|
||||||
| tEXECUTE '(' call_list ')' {create_execute(0);add_command(cPOP,NULL);add_command(cPOP,NULL);}
|
|
||||||
| tEXECUTE2 '(' call_list ')' {create_execute(1);add_command(cPOP,NULL);add_command(cPOP,NULL);}
|
|
||||||
| tPRINT printintro printlist {create_colour(0);create_print('n');create_pps(cPOPSTREAM,0);}
|
|
||||||
| tPRINT printintro printlist ';' {create_colour(0);create_pps(cPOPSTREAM,0);}
|
|
||||||
| tPRINT printintro printlist ',' {create_colour(0);create_print('t');create_pps(cPOPSTREAM,0);}
|
|
||||||
| tINPUT {tileol=FALSE;} inputbody
|
|
||||||
| tLINE tINPUT {tileol=TRUE;} inputbody
|
|
||||||
| tREAD readlist
|
|
||||||
| tDATA datalist
|
|
||||||
| tRESTORE {create_restore("");}
|
|
||||||
| tRESTORE symbol_or_lineno {create_restore((function_type!=ftNONE)?dotify($2,TRUE):$2);}
|
|
||||||
| tRESTORE string_expression {add_command(cRESTORE2, NULL);}
|
|
||||||
| tRETURN {if (get_switch_id()) create_clean_switch_mark(0,TRUE);
|
|
||||||
if (function_type!=ftNONE) {
|
|
||||||
add_command(cCLEARREFS,NULL);lastcmd->nextref=firstref;
|
|
||||||
add_command(cPOPSYMLIST,NULL);
|
|
||||||
create_retval(ftNONE,function_type);
|
|
||||||
add_command(cRET_FROM_FUN,NULL);
|
|
||||||
} else {
|
|
||||||
add_command(cRETURN,NULL);
|
|
||||||
}}
|
|
||||||
| tRETURN expression {if (get_switch_id()) create_clean_switch_mark(1,TRUE); if (function_type==ftNONE) {error(ERROR,"can not return value"); YYABORT;} add_command(cCLEARREFS,NULL);lastcmd->nextref=firstref;add_command(cPOPSYMLIST,NULL);create_retval(ftNUMBER,function_type);add_command(cRET_FROM_FUN,NULL);}
|
|
||||||
| tRETURN string_expression {if (get_switch_id()) create_clean_switch_mark(1,TRUE); if (function_type==ftNONE) {error(ERROR,"can not return value"); YYABORT;} add_command(cCLEARREFS,NULL);lastcmd->nextref=firstref;add_command(cPOPSYMLIST,NULL);create_retval(ftSTRING,function_type);add_command(cRET_FROM_FUN,NULL);}
|
|
||||||
| tDIM dimlist
|
|
||||||
/* | tOPEN tWINDOW expression ',' expression {create_openwin(FALSE);} */
|
|
||||||
| tWINDOW tOPEN coordinates to coordinates ',' string_expression ',' string_expression {create_openwin(TRUE);}
|
|
||||||
| tBUTTON coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cBUTTON,NULL);}
|
|
||||||
| tMENU string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cMENU,NULL);}
|
|
||||||
| tCHECKBOX coordinates ',' string_expression ',' string_expression ',' expression ',' string_expression {add_command(cCHECKBOX,NULL);}
|
|
||||||
| tRADIOBUTTON coordinates ',' string_expression ',' string_expression ',' expression ',' string_expression {add_command(cRADIOBUTTON,NULL);}
|
|
||||||
| tTEXTCONTROL coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression ',' string_expression{add_command(cTEXTCONTROL,NULL);}
|
|
||||||
| tLISTBOX coordinates to coordinates ',' string_expression ',' expression ',' string_expression {add_command(cLISTBOX,NULL);}
|
|
||||||
| tLISTBOX tCLEAR string_expression {add_command(cITEMCLEAR, NULL);}
|
|
||||||
| tLISTBOX tADD string_expression ',' string_expression {add_command(cLISTBOXADD1, NULL);}
|
|
||||||
| tLISTBOX tADD string_expression ',' expression ',' string_expression {add_command(cLISTBOXADD2, NULL);}
|
|
||||||
| tDROPBOX coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cDROPBOX,NULL);}
|
|
||||||
| tDROPBOX tADD string_expression ',' string_expression {add_command(cITEMADD,NULL);}
|
|
||||||
| tDROPBOX tCLEAR string_expression {add_command(cDROPBOXCLEAR,NULL);}
|
|
||||||
| tDROPBOX tREMOVE string_expression ',' expression {add_command(cDROPBOXREMOVE,NULL);}
|
|
||||||
| tLISTBOX tREMOVE string_expression ',' string_expression {add_command(cITEMDEL,NULL);}
|
|
||||||
| tLISTBOX tREMOVE string_expression ',' expression {add_command(cLISTBOXDEL2,NULL);}
|
|
||||||
| tLISTBOX tSELECT string_expression ',' expression {add_command(cLISTBOXSELECT,NULL);}
|
|
||||||
| tALERT string_expression ',' string_expression ',' string_expression {add_command(cALERT,NULL);}
|
|
||||||
| tTEXT coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cTEXT,NULL);}
|
|
||||||
| tTEXT coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cTEXT2, NULL);}
|
|
||||||
| tTEXT tSET string_expression ',' string_expression {add_command(cTEXTALIGN,NULL);}
|
|
||||||
| tLOCALIZE {add_command(cLOCALIZE,NULL);}
|
|
||||||
| tLOCALIZE string_expression {add_command(cLOCALIZE2,NULL);}
|
|
||||||
| tLOCALIZE tSTOP {add_command(cLOCALIZESTOP, NULL);}
|
|
||||||
| tDRAW tTEXT coordinates ',' string_expression ',' string_expression {add_command(cDRAWTEXT,NULL);}
|
|
||||||
| tDRAW tRECT coordinates to coordinates ',' string_expression {add_command(cDRAWRECT,NULL);}
|
|
||||||
| tDRAW tFLUSH string_expression {add_command(cDRAWCLEAR,NULL);}
|
|
||||||
| tWINDOW tCLOSE string_expression {add_command(cCLOSEWIN,NULL);}
|
|
||||||
| tLAYOUT string_expression ',' string_expression {add_command(cLAYOUT,NULL);}
|
|
||||||
| tWINDOW tSET string_expression ',' string_expression {add_command(cWINSET4,NULL);}
|
|
||||||
| tWINDOW tSET string_expression ',' string_expression ',' string_expression {add_command(cWINSET1,NULL);}
|
|
||||||
| tWINDOW tSET string_expression ',' string_expression ',' expression ',' expression {add_command(cWINSET3,NULL);}
|
|
||||||
/*
|
|
||||||
| tWINDOW tSET string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cWINSET2,NULL);}
|
|
||||||
this tWINDOW tSET was replaced by tDRAW tSET ... cWINSET2
|
|
||||||
tWINDOW tCLEAR string_expression {add_command(cWINCLEAR,NULL);}*/
|
|
||||||
| tSHORTCUT string_expression ',' string_expression ',' string_expression {add_command(cSHORTCUT,NULL);}
|
|
||||||
| tTEXTEDIT coordinates to coordinates ',' string_expression ',' expression ',' string_expression {add_command(cTEXTEDIT,NULL);}
|
|
||||||
| tTEXTEDIT tADD string_expression ',' string_expression {add_command(cTEXTADD,NULL);}
|
|
||||||
| tTEXTEDIT tSET string_expression ',' string_expression {add_command(cTEXTSET,NULL);}
|
|
||||||
| tTEXTEDIT tSET string_expression ',' string_expression ',' expression {add_command(cTEXTSET2,NULL);}
|
|
||||||
| tTEXTEDIT tSET string_expression ',' string_expression ',' string_expression {add_command(cTEXTSET3,NULL);}
|
|
||||||
| tTEXTEDIT tCOLOUR string_expression ',' string_expression ',' string_expression {add_command(cTEXTCOLOR1,NULL);}
|
|
||||||
| tTEXTEDIT tCOLOUR string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cTEXTCOLOR2,NULL);}
|
|
||||||
| tTEXTEDIT tCLEAR string_expression {add_command(cTEXTCLEAR,NULL);}
|
|
||||||
| tDRAW tSET string_expression ',' string_expression {add_command(cDRAWSET1,NULL);}
|
|
||||||
| tDRAW tSET expression ',' string_expression {add_command(cDRAWSET2,NULL);}
|
|
||||||
| tDRAW tSET string_expression ',' expression ',' expression ',' expression ',' string_expression {add_command(cWINSET2,NULL);}
|
|
||||||
| tDRAW tSET string_expression ',' expression {add_command(cDRAWSET3,NULL);}
|
|
||||||
| tDRAW tSET string_expression ',' string_expression ',' string_expression {add_command(cDRAWSET4,NULL);}
|
|
||||||
| tVIEW coordinates to coordinates ',' string_expression ',' string_expression {add_command(cVIEW,NULL);}
|
|
||||||
| tVIEW tREMOVE string_expression {add_command(cWINCLEAR,NULL);}
|
|
||||||
| tBOXVIEW coordinates to coordinates ',' string_expression ',' string_expression ',' expression ',' string_expression {add_command(cBOXVIEW,NULL);}
|
|
||||||
| tBOXVIEW tSET string_expression ',' string_expression ',' string_expression {add_command(cBOXVIEWSET,NULL);}
|
|
||||||
| tTABVIEW coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cTAB,NULL);}
|
|
||||||
| tTABVIEW tSET string_expression ',' expression {add_command(cTABSET,NULL);}
|
|
||||||
| tTABVIEW tADD string_expression ',' string_expression {add_command(cTABADD, NULL);}
|
|
||||||
| tTABVIEW tREMOVE string_expression ',' expression {add_command(cTABDEL, NULL);}
|
|
||||||
| tDRAW tDOT coordinates ',' string_expression {add_command(cDOT,NULL);}
|
|
||||||
| tDRAW tLINE coordinates to coordinates ',' string_expression {add_command(cLINE,NULL);}
|
|
||||||
| tDRAW tCIRCLE coordinates ',' expression ',' string_expression {add_command(cCIRCLE,NULL);}
|
|
||||||
| tDRAW tELLIPSE coordinates ',' expression ',' expression ',' string_expression {add_command(cELLIPSE,NULL);}
|
|
||||||
| tDRAW tCURVE coordinates ',' coordinates ',' coordinates ',' coordinates ',' string_expression {add_command(cCURVE,NULL);}
|
|
||||||
| tSLIDER coordinates to coordinates ',' string_expression ',' string_expression ',' expression ',' expression ',' string_expression {add_command(cSLIDER1,NULL);}
|
|
||||||
| tSLIDER coordinates to coordinates ',' string_expression ',' string_expression ',' expression ',' expression ',' string_expression ',' string_expression {add_command(cSLIDER2,NULL);}
|
|
||||||
| tSLIDER tLABEL string_expression ',' string_expression ',' string_expression {add_command(cSLIDER3,NULL);}
|
|
||||||
| tSLIDER tSET string_expression ',' string_expression ',' expression {add_command(cSLIDER4,NULL);}
|
|
||||||
| tSLIDER tCOLOUR string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cSLIDER5,NULL);}
|
|
||||||
| tSLIDER tSET string_expression ',' expression {add_command(cSLIDER6,NULL);}
|
|
||||||
| tLAUNCH string_expression {add_command(cLAUNCH,NULL);}
|
|
||||||
| tOPTION tSET string_expression ',' string_expression ',' string_expression {add_command(cOPTION1,NULL);}
|
|
||||||
| tOPTION tCOLOUR string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cOPTION2,NULL);}
|
|
||||||
/*
|
|
||||||
| tOPTION tRESIZE string_expression ',' coordinates to coordinates {add_command(cOPTION3,NULL);}
|
|
||||||
*/
|
|
||||||
| tOPTION tSET string_expression ',' string_expression {add_command(cOPTION4,NULL);}
|
|
||||||
| tOPTION tSET string_expression ',' string_expression ',' expression {add_command(cOPTION5,NULL);}
|
|
||||||
| tOPTION tSET string_expression ',' string_expression ',' expression ',' expression {add_command(cOPTION3,NULL);}
|
|
||||||
| tBITMAP coordinates ',' string_expression {add_command(cBITMAP,NULL);}
|
|
||||||
| tBITMAP tGETNUM coordinates to coordinates ',' string_expression ',' string_expression {add_command(cBITMAPGET, NULL);}
|
|
||||||
| tBITMAP tGETNUM expression ',' string_expression ',' string_expression {add_command(cBITMAPGET2, NULL);}
|
|
||||||
| tBITMAP tGETNUM string_expression ',' string_expression ',' string_expression {add_command(cBITMAPGETICON, NULL);}
|
|
||||||
| tDRAW tBITMAP coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cBITMAPDRAW,NULL);}
|
|
||||||
| tDRAW tBITMAP coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression {add_command(cBITMAPDRAW2,NULL);}
|
|
||||||
/*
|
|
||||||
| tCANVAS tDRAG string_expression {add_command(cBITMAPDRAG,NULL);}
|
|
||||||
*/
|
|
||||||
| tBITMAP tREMOVE string_expression {add_command(cBITMAPREMOVE,NULL);}
|
|
||||||
| tSCREENSHOT coordinates to coordinates ',' string_expression {add_command(cSCREENSHOT,NULL);}
|
|
||||||
| tCANVAS coordinates to coordinates ',' string_expression ',' string_expression {add_command(cCANVAS,NULL);}
|
|
||||||
| tVIEW tDROPZONE string_expression {add_command(cDROPZONE,NULL);}
|
|
||||||
| tCOLORCONTROL coordinates ',' string_expression ',' string_expression {add_command(cCOLORCONTROL1,NULL);}
|
|
||||||
| tCOLORCONTROL tSET string_expression ',' expression ',' expression ',' expression {add_command(cCOLORCONTROL2,NULL);}
|
|
||||||
| tTEXTCONTROL tSET string_expression ',' string_expression {add_command(cTEXTCONTROL2,NULL);}
|
|
||||||
| tTEXTCONTROL tSET string_expression ',' expression {add_command(cTEXTCONTROL3,NULL);}
|
|
||||||
| tTEXTCONTROL tSET string_expression ',' string_expression ',' string_expression {add_command(cTEXTCONTROL4,NULL);}
|
|
||||||
| tTEXTCONTROL tCLEAR string_expression {add_command(cTEXTCONTROL5,NULL);}
|
|
||||||
| tTREEBOX coordinates to coordinates ',' string_expression ',' expression ',' string_expression {add_command(cTREEBOX1,NULL);}
|
|
||||||
| tTREEBOX tADD string_expression ',' string_expression {add_command(cTREEBOX2,NULL);}
|
|
||||||
| tTREEBOX tADD string_expression ',' string_expression ',' string_expression ',' expression {add_command(cTREEBOX3,NULL);}
|
|
||||||
| tTREEBOX tADD string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cTREEBOX13,NULL);}
|
|
||||||
| tTREEBOX tADD string_expression ',' string_expression ',' expression {add_command(cTREEBOX12,NULL);}
|
|
||||||
| tTREEBOX tCLEAR string_expression {add_command(cTREEBOX4,NULL);}
|
|
||||||
| tTREEBOX tREMOVE string_expression ',' string_expression {add_command(cTREEBOX5,NULL);}
|
|
||||||
| tTREEBOX tSELECT string_expression ',' expression {add_command(cTREEBOX7,NULL);}
|
|
||||||
| tTREEBOX tREMOVE string_expression ',' expression {add_command(cTREEBOX8,NULL);}
|
|
||||||
| tTREEBOX tREMOVE string_expression ',' string_expression ',' string_expression {add_command(cTREEBOX9,NULL);}
|
|
||||||
| tTREEBOX tEXPAND string_expression ',' string_expression {add_command(cTREEBOX10,NULL);}
|
|
||||||
| tTREEBOX tCOLLAPSE string_expression ',' string_expression {add_command(cTREEBOX11,NULL);}
|
|
||||||
| tBUTTON tIMAGE coordinates ',' string_expression ',' string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cBUTTONIMAGE,NULL);}
|
|
||||||
| tCHECKBOX tIMAGE coordinates ',' string_expression ',' string_expression ',' string_expression ',' string_expression ',' string_expression ',' expression ',' string_expression {add_command(cCHECKBOXIMAGE,NULL);}
|
|
||||||
| tCHECKBOX tSET string_expression ',' expression {add_command(cCHECKBOXSET,NULL);}
|
|
||||||
| tRADIOBUTTON tSET string_expression ',' expression {add_command(cRADIOSET,NULL);}
|
|
||||||
| tTOOLTIP string_expression ',' string_expression {add_command(cTOOLTIP,NULL);}
|
|
||||||
| tTOOLTIPNEW string_expression ',' string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cTOOLTIPNEW,NULL);}
|
|
||||||
| tTOOLTIP tCOLOUR string_expression ',' expression ',' expression ',' expression {add_command(cTOOLTIPCOLOR,NULL);}
|
|
||||||
| tLISTBOX tSORT string_expression {add_command(cLISTSORT,NULL);}
|
|
||||||
| tTREEBOX tSORT string_expression {add_command(cTREESORT,NULL);}
|
|
||||||
| tCOLUMNBOX coordinates to coordinates ',' string_expression ',' expression ',' string_expression ',' string_expression {add_command(cFILEBOX,NULL);}
|
|
||||||
| tCOLUMNBOX tADD string_expression ',' expression ',' expression ',' expression ',' string_expression {add_command(cCOLUMNBOXADD,NULL);}
|
|
||||||
| tCOLUMNBOX tCOLUMN string_expression ',' string_expression ',' expression ',' expression ',' expression ',' expression ',' string_expression {add_command(cFILEBOXADD2,NULL);}
|
|
||||||
| tCOLUMNBOX tCLEAR string_expression {add_command(cFILEBOXCLEAR,NULL);}
|
|
||||||
| tCOLUMNBOX tREMOVE string_expression ',' expression {add_command(cCOLUMNBOXREMOVE,NULL);}
|
|
||||||
| tCOLUMNBOX tSELECT string_expression ',' expression {add_command(cCOLUMNBOXSELECT,NULL);}
|
|
||||||
| tCOLUMNBOX tCOLOUR string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cCOLUMNBOXCOLOR,NULL);}
|
|
||||||
| tCALENDAR coordinates ',' string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cCALENDAR,NULL);}
|
|
||||||
| tCALENDAR tSET string_expression ',' string_expression {add_command(cCALENDARSET,NULL);}
|
|
||||||
| tSCROLLBAR string_expression ',' expression ',' string_expression {add_command(cSCROLLBAR,NULL);}
|
|
||||||
| tSCROLLBAR tSET string_expression ',' string_expression ',' expression {add_command(cSCROLLBARSET1,NULL);}
|
|
||||||
| tSCROLLBAR tSET string_expression ',' string_expression ',' expression ',' expression {add_command(cSCROLLBARSET2,NULL);}
|
|
||||||
| tSCROLLBAR tSET string_expression ',' string_expression {add_command(cSCROLLBARSET3,NULL);}
|
|
||||||
| tDROPBOX tSELECT string_expression ',' expression {add_command(cDROPBOXSELECT,NULL);}
|
|
||||||
| tMENU tSET string_expression ',' expression ',' string_expression {add_command(cMENU2,NULL);}
|
|
||||||
| tMENU tSET string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cMENU3,NULL);}
|
|
||||||
| tSUBMENU string_expression ',' string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cSUBMENU1,NULL);}
|
|
||||||
| tSUBMENU tSET string_expression ',' string_expression ',' expression ',' string_expression {add_command(cSUBMENU2,NULL);}
|
|
||||||
| tSUBMENU tSET string_expression ',' string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cSUBMENU3,NULL);}
|
|
||||||
| tSTATUSBAR coordinates to coordinates ',' string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cSTATUSBAR,NULL);}
|
|
||||||
| tSTATUSBAR tSET string_expression ',' string_expression ',' string_expression ',' expression {add_command(cSTATUSBARSET,NULL);}
|
|
||||||
| tSTATUSBAR tSET string_expression ',' expression ',' expression ',' expression {add_command(cSTATUSBARSET3,NULL);}
|
|
||||||
| tSPINCONTROL coordinates ',' string_expression ',' string_expression ',' expression ',' expression ',' expression ',' string_expression {add_command(cSPINCONTROL1,NULL);}
|
|
||||||
| tSPINCONTROL tSET string_expression ',' expression {add_command(cSPINCONTROL2,NULL);}
|
|
||||||
| tCLIPBOARD tCOPY string_expression {add_command(cCLIPBOARDCOPY,NULL);}
|
|
||||||
| tPRINTER tSETUP string_expression {add_command(cPRINTERCONFIG,NULL);}
|
|
||||||
| tMOUSE tSET string_expression {add_command(cMOUSESET,NULL);}
|
|
||||||
| tSOUND tSTOP expression {add_command(cSOUNDSTOP,NULL);}
|
|
||||||
| tSOUND tSTOP '(' expression ')' {add_command(cSOUNDSTOP,NULL);}
|
|
||||||
| tSOUND tWAIT expression {add_command(cSOUNDWAIT,NULL);}
|
|
||||||
| tSOUND tWAIT '(' expression ')' {add_command(cSOUNDWAIT,NULL);}
|
|
||||||
| tMEDIASOUND tSTOP expression {add_command(cMEDIASOUNDSTOP,NULL);}
|
|
||||||
| tMEDIASOUND tSTOP '(' expression ')' {add_command(cMEDIASOUNDSTOP,NULL);}
|
|
||||||
| tSPLITVIEW coordinates to coordinates ',' string_expression ',' expression ',' expression ',' string_expression {add_command(cSPLITVIEW1,NULL);}
|
|
||||||
| tSPLITVIEW tSET string_expression ',' string_expression ',' expression {add_command(cSPLITVIEW2,NULL);}
|
|
||||||
| tSPLITVIEW tSET string_expression ',' string_expression ',' expression ',' expression {add_command(cSPLITVIEW3,NULL);}
|
|
||||||
| tSTACKVIEW coordinates to coordinates ',' string_expression ',' expression ',' string_expression {add_command(cSTACKVIEW1,NULL);}
|
|
||||||
| tSTACKVIEW tSET string_expression ',' expression {add_command(cSTACKVIEW2,NULL);}
|
|
||||||
| tTEXTURL coordinates ',' string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cTEXTURL1, NULL);}
|
|
||||||
| tTEXTURL tCOLOUR string_expression ',' string_expression ',' expression ',' expression ',' expression {add_command(cTEXTURL2, NULL);}
|
|
||||||
| tATTRIBUTE tSET string_expression ',' string_expression ',' string_expression ',' string_expression {add_command(cATTRIBUTE1, NULL);}
|
|
||||||
| tATTRIBUTE tCLEAR string_expression ',' string_expression {add_command(cATTRIBUTECLEAR, NULL);}
|
|
||||||
| tPUTCHAR string_expression to expression ',' expression {add_command(cPUTCHAR,NULL);}
|
|
||||||
| tCLEAR tSCREEN {add_command(cCLEARSCR,NULL);}
|
|
||||||
| tWAIT expression {add_command(cWAIT,NULL);}
|
|
||||||
| tBELL {add_command(cBELL,NULL);}
|
|
||||||
| tINKEY {create_pushdbl(-1);create_function(fINKEY);add_command(cPOP,NULL);}
|
|
||||||
| tINKEY '(' ')' {create_pushdbl(-1);create_function(fINKEY);add_command(cPOP,NULL);}
|
|
||||||
| tINKEY '(' expression ')' {create_function(fINKEY);add_command(cPOP,NULL);}
|
|
||||||
| tSYSTEM2 '(' string_expression ')' {create_function(fSYSTEM2);
|
|
||||||
add_command(cPOP,NULL);}
|
|
||||||
| tPOKE string_expression ',' string_expression {create_poke('s');}
|
|
||||||
| tPOKE string_expression ',' expression {create_poke('d');}
|
|
||||||
| tPOKE hashed_number ',' string_expression {create_poke('S');}
|
|
||||||
| tPOKE hashed_number ',' expression {create_poke('D');}
|
|
||||||
| tEND {add_command(cEND,NULL);}
|
|
||||||
| tEXIT {create_pushdbl(0);add_command(cEXIT,NULL);}
|
|
||||||
| tEXIT expression {add_command(cEXIT,NULL);}
|
|
||||||
| tDOCU {create_docu($1);}
|
|
||||||
| tBIND string_expression {add_command(cBIND,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
/*
|
|
||||||
clear_fill_clause: * empty * {drawmode=0;}
|
|
||||||
| tCLEAR {drawmode=dmCLEAR;}
|
|
||||||
| tFILL {drawmode=dmFILL;}
|
|
||||||
| tCLEAR tFILL {drawmode=dmFILL+dmCLEAR;}
|
|
||||||
| tFILL tCLEAR {drawmode=dmFILL+dmCLEAR;}
|
|
||||||
;*/
|
|
||||||
|
|
||||||
|
|
||||||
string_assignment: tSTRSYM tEQU string_expression {add_command(cPOPSTRSYM,dotify($1,FALSE));}
|
|
||||||
| tMID '(' string_scalar_or_array ',' expression ',' expression ')' tEQU string_expression {create_changestring(fMID);}
|
|
||||||
| tMID '(' string_scalar_or_array ',' expression ')' tEQU string_expression {create_changestring(fMID2);}
|
|
||||||
| tLEFT '(' string_scalar_or_array ',' expression ')' tEQU string_expression {create_changestring(fLEFT);}
|
|
||||||
| tRIGHT '(' string_scalar_or_array ',' expression ')' tEQU string_expression {create_changestring(fRIGHT);}
|
|
||||||
| stringfunction_or_array tEQU string_expression {create_doarray(dotify($1,FALSE),ASSIGNSTRINGARRAY);}
|
|
||||||
;
|
|
||||||
|
|
||||||
to: ','
|
|
||||||
| tTO
|
|
||||||
;
|
|
||||||
|
|
||||||
open_clause: tOPEN hashed_number ',' string_expression ',' string_expression {create_myopen(OPEN_HAS_STREAM+OPEN_HAS_MODE);}
|
|
||||||
| tOPEN hashed_number ',' string_expression {create_myopen(OPEN_HAS_STREAM);}
|
|
||||||
/* | tOPEN hashed_number ',' tPRINTER {create_myopen(OPEN_HAS_STREAM+OPEN_PRINTER);} */
|
|
||||||
| tOPEN string_expression tFOR tREADING tAS hashed_number {add_command(cSWAP,NULL);create_pushstr("r");create_myopen(OPEN_HAS_STREAM+OPEN_HAS_MODE);}
|
|
||||||
| tOPEN string_expression tFOR tWRITING tAS hashed_number {add_command(cSWAP,NULL);create_pushstr("w");create_myopen(OPEN_HAS_STREAM+OPEN_HAS_MODE);}
|
|
||||||
;
|
|
||||||
|
|
||||||
seek_clause: tSEEK hashed_number ',' expression {add_command(cSEEK,NULL);}
|
|
||||||
| tSEEK hashed_number ',' expression ',' string_expression {add_command(cSEEK2,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
string_scalar_or_array: tSTRSYM {add_command(cPUSHSTRPTR,dotify($1,FALSE));}
|
|
||||||
| tSTRSYM '(' call_list ')' {create_doarray(dotify($1,FALSE),GETSTRINGPOINTER);}
|
|
||||||
;
|
|
||||||
|
|
||||||
string_expression: tSTRSYM {add_command(cPUSHSTRSYM,dotify($1,FALSE));}
|
|
||||||
| string_function
|
|
||||||
| stringfunction_or_array {add_command(cSTRINGFUNCTION_OR_ARRAY,$1);}
|
|
||||||
| tSTRING {if ($1==NULL) {error(ERROR,"String not terminated");create_pushstr("");} else {create_pushstr($1);}}
|
|
||||||
| string_expression '+' string_expression {add_command(cCONCAT,NULL);}
|
|
||||||
| '(' string_expression ')'
|
|
||||||
;
|
|
||||||
|
|
||||||
string_function: tLEFT '(' string_expression ',' expression ')' {create_function(fLEFT);}
|
|
||||||
| tRIGHT '(' string_expression ',' expression ')' {create_function(fRIGHT);}
|
|
||||||
| tMID '(' string_expression ',' expression ',' expression ')' {create_function(fMID);}
|
|
||||||
| tMID '(' string_expression ',' expression ')' {create_function(fMID2);}
|
|
||||||
| tSTR '(' expression ')' {create_function(fSTR);}
|
|
||||||
| tSTR '(' expression ',' string_expression ')' {create_function(fSTR2);}
|
|
||||||
| tSTR '(' expression ',' string_expression ',' string_expression ')' {create_function(fSTR3);}
|
|
||||||
| tINKEY {create_pushdbl(-1);create_function(fINKEY);}
|
|
||||||
| tINKEY '(' ')' {create_pushdbl(-1);create_function(fINKEY);}
|
|
||||||
| tINKEY '(' expression ')' {create_function(fINKEY);}
|
|
||||||
| tCHR '(' expression ')' {create_function(fCHR);}
|
|
||||||
| tUPPER '(' string_expression ')' {create_function(fUPPER);}
|
|
||||||
| tLOWER '(' string_expression ')' {create_function(fLOWER);}
|
|
||||||
| tLTRIM '(' string_expression ')' {create_function(fLTRIM);}
|
|
||||||
| tRTRIM '(' string_expression ')' {create_function(fRTRIM);}
|
|
||||||
| tTRIM '(' string_expression ')' {create_function(fTRIM);}
|
|
||||||
| tSYSTEM '(' string_expression ')' {create_function(fSYSTEM);}
|
|
||||||
| tDATE {create_function(fDATE);}
|
|
||||||
| tDATE '(' ')' {create_function(fDATE);}
|
|
||||||
| tTIME {create_function(fTIME);}
|
|
||||||
| tTIME '(' ')' {create_function(fTIME);}
|
|
||||||
| tPEEK2 '(' string_expression ')' {create_function(fPEEK2);}
|
|
||||||
| tPEEK2 '(' string_expression ',' string_expression ')' {create_function(fPEEK3);}
|
|
||||||
| tTOKENALT '(' string_scalar_or_array ',' string_expression ')' {add_command(cTOKENALT2,NULL);}
|
|
||||||
| tTOKENALT '(' string_scalar_or_array ')' {add_command(cTOKENALT,NULL);}
|
|
||||||
| tSPLITALT '(' string_scalar_or_array ',' string_expression ')' {add_command(cSPLITALT2,NULL);}
|
|
||||||
| tSPLITALT '(' string_scalar_or_array ')' {add_command(cSPLITALT,NULL);}
|
|
||||||
| tGETCHAR '(' expression ',' expression to expression ',' expression ')' {create_function(fGETCHAR);}
|
|
||||||
| tHEX '(' expression ')' {create_function(fHEX);}
|
|
||||||
| tBIN '(' expression ')' {create_function(fBIN);}
|
|
||||||
| tEXECUTE2 '(' call_list ')' {create_execute(1);add_command(cSWAP,NULL);add_command(cPOP,NULL);}
|
|
||||||
| tMESSAGE {create_function(fMESSAGE);}
|
|
||||||
| tMESSAGE '(' ')' {create_function(fMESSAGE);}
|
|
||||||
| tMOUSE tMESSAGE {create_function(fMOUSEMOVE);}
|
|
||||||
| tMOUSE tMESSAGE '(' ')' {create_function(fMOUSEMOVE);}
|
|
||||||
| tTRANSLATE '(' string_expression ')' {create_function(fTRANSLATE);}
|
|
||||||
| tMENU tTRANSLATE '(' string_expression ')' {create_function(fMENUTRANSLATE);}
|
|
||||||
| tTEXTEDIT tGET string_expression {create_function(fTEXTGET);}
|
|
||||||
| tTEXTEDIT tGET string_expression ',' expression {create_function(fTEXTGET3);}
|
|
||||||
| tTEXTEDIT tGET string_expression ',' string_expression {create_function(fTEXTGET6);}
|
|
||||||
| tTEXTCONTROL tGET string_expression {create_function(fTEXTCONTROLGET);}
|
|
||||||
| tFILEPANEL string_expression ',' string_expression ',' string_expression {create_function(fLOAD);}
|
|
||||||
| tFILEPANEL string_expression ',' string_expression ',' string_expression ',' string_expression {create_function(fSAVE);}
|
|
||||||
| tMOUSE tMESSAGE string_expression {create_function(fMOUSE);}
|
|
||||||
//| tMOUSE tMESSAGE '(' string_expression ')' {create_function(fMOUSE);}
|
|
||||||
| tKEYBOARD tMESSAGE string_expression {create_function(fKEYBOARD);}
|
|
||||||
//| tKEYBOARD tMESSAGE '(' string_expression ')' {create_function(fKEYBOARD);}
|
|
||||||
| tCLIPBOARD tPASTE {create_function(fCLIPBOARDPASTE);}
|
|
||||||
| tCOLUMNBOX tGET string_expression ',' expression ',' expression {create_function(fCOLUMNBOXGET);}
|
|
||||||
| tCALENDAR tGET string_expression {create_function(fCALENDAR);}
|
|
||||||
| tLISTBOX tGET string_expression ',' expression {create_function(fLISTBOXGET);}
|
|
||||||
| tTREEBOX tGET string_expression ',' expression {create_function(fTREEBOXGET);}
|
|
||||||
| tPOPUPMENU coordinates ',' string_expression ',' string_expression {create_function(fPOPUPMENU);}
|
|
||||||
| tDROPBOX tGET string_expression ',' expression {create_function(fDROPBOXGET);}
|
|
||||||
| tDRAW tGET string_expression {create_function(fDRAWGET3);}
|
|
||||||
| tATTRIBUTE tGET string_expression ',' string_expression {create_function(fATTRIBUTEGET1);}
|
|
||||||
;
|
|
||||||
|
|
||||||
assignment: tSYMBOL tEQU expression {add_command(cPOPDBLSYM,dotify($1,FALSE));}
|
|
||||||
| function_or_array tEQU expression {create_doarray($1,ASSIGNARRAY);}
|
|
||||||
;
|
|
||||||
|
|
||||||
expression: expression tOR {add_command(cORSHORT,NULL);pushlabel();} expression {poplabel();create_boole('|');}
|
|
||||||
| expression tAND {add_command(cANDSHORT,NULL);pushlabel();} expression {poplabel();create_boole('&');}
|
|
||||||
| tNOT expression {create_boole('!');}
|
|
||||||
| expression tEQU expression {create_dblrelop('=');}
|
|
||||||
| expression tNEQ expression {create_dblrelop('!');}
|
|
||||||
| expression tLTN expression {create_dblrelop('<');}
|
|
||||||
| expression tLEQ expression {create_dblrelop('{');}
|
|
||||||
| expression tGTN expression {create_dblrelop('>');}
|
|
||||||
| expression tGEQ expression {create_dblrelop('}');}
|
|
||||||
| tMYEOF '(' hashed_number ')' {add_command(cTESTEOF,NULL);}
|
|
||||||
| tGLOB '(' string_expression ',' string_expression ')' {add_command(cGLOB,NULL);}
|
|
||||||
| number {create_pushdbl($1);}
|
|
||||||
| tARDIM '(' arrayref ')' {add_command(cARDIM,"");}
|
|
||||||
| tARDIM '(' string_arrayref ')' {add_command(cARDIM,"");}
|
|
||||||
| tARSIZE '(' arrayref ',' expression ')' {add_command(cARSIZE,"");}
|
|
||||||
| tARSIZE '(' string_arrayref ',' expression ')' {add_command(cARSIZE,"");}
|
|
||||||
| function_or_array {add_command(cFUNCTION_OR_ARRAY,$1);}
|
|
||||||
| tSYMBOL {add_command(cPUSHDBLSYM,dotify($1,FALSE));}
|
|
||||||
| expression '+' expression {create_dblbin('+');}
|
|
||||||
| expression '-' expression {create_dblbin('-');}
|
|
||||||
| expression '*' expression {create_dblbin('*');}
|
|
||||||
| expression '/' expression {create_dblbin('/');}
|
|
||||||
| expression tPOW expression {create_dblbin('^');}
|
|
||||||
| '-' expression %prec UMINUS {add_command(cNEGATE,NULL);}
|
|
||||||
| string_expression tEQU string_expression {create_strrelop('=');}
|
|
||||||
| string_expression tNEQ string_expression {create_strrelop('!');}
|
|
||||||
| string_expression tLTN string_expression {create_strrelop('<');}
|
|
||||||
| string_expression tLEQ string_expression {create_strrelop('{');}
|
|
||||||
| string_expression tGTN string_expression {create_strrelop('>');}
|
|
||||||
| string_expression tGEQ string_expression {create_strrelop('}');}
|
|
||||||
| function
|
|
||||||
| '(' expression ')'
|
|
||||||
;
|
|
||||||
|
|
||||||
arrayref: tSYMBOL '(' ')' {create_pusharrayref(dotify($1,FALSE),stNUMBERARRAYREF);}
|
|
||||||
;
|
|
||||||
|
|
||||||
string_arrayref: tSTRSYM '(' ')' {create_pusharrayref(dotify($1,FALSE),stSTRINGARRAYREF);}
|
|
||||||
;
|
|
||||||
|
|
||||||
coordinates: expression ',' expression
|
|
||||||
;
|
|
||||||
|
|
||||||
function: tSIN '(' expression ')' {create_function(fSIN);}
|
|
||||||
| tASIN '(' expression ')' {create_function(fASIN);}
|
|
||||||
| tCOS '(' expression ')' {create_function(fCOS);}
|
|
||||||
| tACOS '(' expression ')' {create_function(fACOS);}
|
|
||||||
| tTAN '(' expression ')' {create_function(fTAN);}
|
|
||||||
| tATAN '(' expression ')' {create_function(fATAN);}
|
|
||||||
| tATAN '(' expression ',' expression ')' {create_function(fATAN2);}
|
|
||||||
| tEXP '(' expression ')' {create_function(fEXP);}
|
|
||||||
| tLOG '(' expression ')' {create_function(fLOG);}
|
|
||||||
| tLOG '(' expression ',' expression ')' {create_function(fLOG2);}
|
|
||||||
| tSQRT '(' expression ')' {create_function(fSQRT);}
|
|
||||||
| tSQR '(' expression ')' {create_function(fSQR);}
|
|
||||||
| tINT '(' expression ')' {create_function(fINT);}
|
|
||||||
| tFRAC '(' expression ')' {create_function(fFRAC);}
|
|
||||||
| tABS '(' expression ')' {create_function(fABS);}
|
|
||||||
| tSIG '(' expression ')' {create_function(fSIG);}
|
|
||||||
| tMOD '(' expression ',' expression ')' {create_function(fMOD);}
|
|
||||||
| tRAN '(' expression ')' {create_function(fRAN);}
|
|
||||||
| tRAN '(' ')' {create_function(fRAN2);}
|
|
||||||
| tMIN '(' expression ',' expression ')' {create_function(fMIN);}
|
|
||||||
| tMAX '(' expression ',' expression ')' {create_function(fMAX);}
|
|
||||||
| tLEN '(' string_expression ')' {create_function(fLEN);}
|
|
||||||
| tVAL '(' string_expression ')' {create_function(fVAL);}
|
|
||||||
| tASC '(' string_expression ')' {create_function(fASC);}
|
|
||||||
| tDEC '(' string_expression ')' {create_function(fDEC);}
|
|
||||||
| tDEC '(' string_expression ',' expression ')' {create_function(fDEC2);}
|
|
||||||
| tINSTR '(' string_expression ',' string_expression ')' {if (check_compat) error(WARNING,"instr() has changed in version 2.712"); create_function(fINSTR);}
|
|
||||||
| tINSTR '(' string_expression ',' string_expression ',' expression ')' {create_function(fINSTR2);}
|
|
||||||
| tRINSTR '(' string_expression ',' string_expression ')' {create_function(fRINSTR);}
|
|
||||||
| tRINSTR '(' string_expression ',' string_expression ',' expression ')' {create_function(fRINSTR2);}
|
|
||||||
| tSYSTEM2 '(' string_expression ')' {create_function(fSYSTEM2);}
|
|
||||||
| tPEEK '(' hashed_number ')' {create_function(fPEEK4);}
|
|
||||||
| tPEEK '(' string_expression ')' {create_function(fPEEK);}
|
|
||||||
/*
|
|
||||||
| tMOUSEX '(' string_expression ')' {create_function(fMOUSEX);}
|
|
||||||
| tMOUSEX {create_pushstr("");create_function(fMOUSEX);}
|
|
||||||
| tMOUSEX '(' ')' {create_pushstr("");create_function(fMOUSEX);}
|
|
||||||
| tMOUSEY '(' string_expression ')' {create_function(fMOUSEY);}
|
|
||||||
| tMOUSEY {create_pushstr("");create_function(fMOUSEY);}
|
|
||||||
| tMOUSEY '(' ')' {create_pushstr("");create_function(fMOUSEY);}
|
|
||||||
| tMOUSEB '(' string_expression ')' {create_function(fMOUSEB);}
|
|
||||||
| tMOUSEB {create_pushstr("");create_function(fMOUSEB);}
|
|
||||||
| tMOUSEB '(' ')' {create_pushstr("");create_function(fMOUSEB);}
|
|
||||||
| tMOUSEMOD '(' string_expression ')' {create_function(fMOUSEMOD);}
|
|
||||||
| tMOUSEMOD {create_pushstr("");create_function(fMOUSEMOD);}
|
|
||||||
| tMOUSEMOD '(' ')' {create_pushstr("");create_function(fMOUSEMOD);}*/
|
|
||||||
| tAND '(' expression ',' expression ')' {create_function(fAND);}
|
|
||||||
| tOR '(' expression ',' expression ')' {create_function(fOR);}
|
|
||||||
| tEOR '(' expression ',' expression ')' {create_function(fEOR);}
|
|
||||||
| tTELL '(' hashed_number ')' {create_function(fTELL);}
|
|
||||||
| tTOKEN '(' string_expression ',' string_arrayref ',' string_expression ')' {add_command(cTOKEN2,NULL);}
|
|
||||||
| tTOKEN '(' string_expression ',' string_arrayref ')' {add_command(cTOKEN,NULL);}
|
|
||||||
| tSPLIT '(' string_expression ',' string_arrayref ',' string_expression ')' {add_command(cSPLIT2,NULL);}
|
|
||||||
| tSPLIT '(' string_expression ',' string_arrayref ')' {add_command(cSPLIT,NULL);}
|
|
||||||
| tEXECUTE '(' call_list ')' {create_execute(0);add_command(cSWAP,NULL);add_command(cPOP,NULL);}
|
|
||||||
| tOPEN '(' string_expression ')' {create_myopen(0);}
|
|
||||||
| tOPEN '(' string_expression ',' string_expression ')' {create_myopen(OPEN_HAS_MODE);}
|
|
||||||
| tOPEN '(' hashed_number ',' string_expression ')' {create_myopen(OPEN_HAS_STREAM);}
|
|
||||||
| tOPEN '(' hashed_number ',' string_expression ',' string_expression ')' {create_myopen(OPEN_HAS_STREAM+OPEN_HAS_MODE);}
|
|
||||||
| tDRAW tIMAGE expression ',' expression ',' string_expression ',' string_expression {create_function(fDRAWIMAGE);}
|
|
||||||
| tDRAW tIMAGE coordinates to coordinates ',' string_expression ',' string_expression {create_function(fDRAWIMAGE2);}
|
|
||||||
| tSVG coordinates to coordinates ',' string_expression ',' string_expression {create_function(fDRAWSVG);}
|
|
||||||
| tWINDOW tCOUNT {create_function(fNUMWINDOWS);}
|
|
||||||
// | tISMOUSEIN '(' string_expression ')' {create_function(fISMOUSEIN);}
|
|
||||||
| tISMOUSEIN string_expression {create_function(fISMOUSEIN);}
|
|
||||||
| tCOLUMNBOX tCOUNT string_expression {create_function(fCOLUMNBOXCOUNT);}
|
|
||||||
| tWINDOW tGETNUM string_expression ',' string_expression {create_function(fWINDOWGET);}
|
|
||||||
| tVIEW tGETNUM string_expression ',' string_expression {create_function(fVIEWGET);}
|
|
||||||
| tALERT string_expression ',' string_expression ',' string_expression ',' string_expression ',' string_expression {create_function(fALERT);}
|
|
||||||
| tLISTBOX tCOUNT string_expression {create_function(fLISTBOXCOUNT);}
|
|
||||||
| tTREEBOX tCOUNT string_expression {create_function(fTREEBOXCOUNT);}
|
|
||||||
| tSCROLLBAR tGETNUM string_expression ',' string_expression {create_function(fSCROLLBARGET);}
|
|
||||||
| tSPLITVIEW tGETNUM string_expression ',' string_expression {create_function(fSPLITVIEWGET);}
|
|
||||||
| tSTACKVIEW tGETNUM string_expression {create_function(fSTACKVIEWGET);}
|
|
||||||
| tTABVIEW tGETNUM string_expression {create_function(fTABVIEWGET);}
|
|
||||||
| tSPINCONTROL tGETNUM string_expression {create_function(fSPINCONTROLGET);}
|
|
||||||
| tDROPBOX tCOUNT string_expression {create_function(fDROPBOXCOUNT);}
|
|
||||||
| tSLIDER tGETNUM string_expression {create_function(fSLIDERGET);}
|
|
||||||
| tCOLORCONTROL tGETNUM string_expression ',' string_expression {create_function(fCOLORCONTROLGET);}
|
|
||||||
| tTEXTEDIT tGETNUM string_expression ',' string_expression {create_function(fTEXTGET2);}
|
|
||||||
| tTEXTEDIT tGETNUM string_expression ',' string_expression ',' expression {create_function(fTEXTGET4);}
|
|
||||||
| tTEXTEDIT tGETNUM string_expression ',' string_expression ',' string_expression {create_function(fTEXTGET5);}
|
|
||||||
| tDRAW tGETNUM string_expression ',' string_expression ',' string_expression {create_function(fDRAWGET1);}
|
|
||||||
| tDRAW tGETNUM string_expression ',' string_expression {create_function(fDRAWGET2);}
|
|
||||||
| tDRAW tGETNUM coordinates ',' string_expression ',' string_expression {create_function(fDRAWGET4);}
|
|
||||||
| tNUMMESSAGE tMSEND string_expression ',' string_expression {create_function(fMESSAGESEND);}
|
|
||||||
| tTHREAD tREMOVE string_expression ',' expression {create_function(fTHREADKILL);}
|
|
||||||
| tTHREAD tGETNUM string_expression ',' string_expression {create_function(fTHREADGET);}
|
|
||||||
| tPRINTER string_expression ',' string_expression ',' string_expression {create_function(fPRINTER);}
|
|
||||||
| tSOUND tPLAY string_expression {create_function(fSOUND);}
|
|
||||||
| tMEDIASOUND tPLAY string_expression {create_function(fMEDIASOUND);}
|
|
||||||
| tISCOMPUTERON {create_function(fISCOMPUTERON);}
|
|
||||||
| tLISTBOX tGETNUM string_expression {create_function(fLISTBOXGETNUM);}
|
|
||||||
| tDROPBOX tGETNUM string_expression {create_function(fDROPBOXGETNUM);}
|
|
||||||
| tTREEBOX tGETNUM string_expression {create_function(fTREEBOXGETNUM);}
|
|
||||||
| tCOLUMNBOX tGETNUM string_expression {create_function(fCOLUMNBOXGETNUM);}
|
|
||||||
| tTREEBOX tGETNUM string_expression ',' string_expression ',' expression {create_function(fTREEBOXGETOPT);}
|
|
||||||
| tBITMAP tSAVE string_expression ',' string_expression ',' string_expression {create_function(fBITMAPSAVE);}
|
|
||||||
| tBITMAP tIMAGE string_expression ',' string_expression {create_function(fBITMAPLOAD);}
|
|
||||||
| tBITMAP tGETNUM string_expression ',' string_expression {create_function(fBITMAPGET);}
|
|
||||||
| tBITMAP tCOLOUR expression ',' expression ',' string_expression ',' string_expression {create_function(fBITMAPCOLOR);}
|
|
||||||
| tATTRIBUTE tGETNUM string_expression ',' string_expression {create_function(fATTRIBUTEGET2);}
|
|
||||||
;
|
|
||||||
|
|
||||||
const: number {$$=$1;}
|
|
||||||
| '+' number {$$=$2;}
|
|
||||||
| '-' number {$$=-$2;}
|
|
||||||
;
|
|
||||||
|
|
||||||
number: tFNUM {$$=$1;}
|
|
||||||
| tDIGITS {$$=strtod($1,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
symbol_or_lineno: tDIGITS {$$=my_strdup(dotify($1,FALSE));}
|
|
||||||
| tSYMBOL {$$=my_strdup(dotify($1,FALSE));}
|
|
||||||
;
|
|
||||||
|
|
||||||
dimlist: tSYMBOL '(' call_list ')' {create_dim(dotify($1,FALSE),'D');}
|
|
||||||
| dimlist ',' tSYMBOL '(' call_list ')' {create_dim(dotify($3,FALSE),'D');}
|
|
||||||
| tSTRSYM '(' call_list ')' {create_dim(dotify($1,FALSE),'S');}
|
|
||||||
| dimlist ',' tSTRSYM '(' call_list ')' {create_dim(dotify($3,FALSE),'S');}
|
|
||||||
;
|
|
||||||
|
|
||||||
function_or_array: tSYMBOL '(' call_list ')' {$$=my_strdup(dotify($1,FALSE));}
|
|
||||||
;
|
|
||||||
|
|
||||||
stringfunction_or_array: tSTRSYM '(' call_list ')' {$$=my_strdup(dotify($1,FALSE));}
|
|
||||||
;
|
|
||||||
|
|
||||||
call_list: {add_command(cPUSHFREE,NULL);} calls
|
|
||||||
;
|
|
||||||
|
|
||||||
calls: /* empty */
|
|
||||||
| call_item
|
|
||||||
| calls ',' call_item
|
|
||||||
;
|
|
||||||
|
|
||||||
call_item: string_expression
|
|
||||||
| expression
|
|
||||||
;
|
|
||||||
|
|
||||||
function_definition: export tSUB {missing_endsub++;missing_endsub_line=mylineno;pushlabel();report_missing(WARNING,"do not define a function in a loop or an if-statement");if (function_type!=ftNONE) {error(ERROR,"nested functions not allowed");YYABORT;}}
|
|
||||||
function_name {if (exported) create_sublink($4); create_label($4,cUSER_FUNCTION);
|
|
||||||
add_command(cPUSHSYMLIST,NULL);add_command(cCLEARREFS,NULL);firstref=lastref=lastcmd;
|
|
||||||
create_numparam();}
|
|
||||||
'(' paramlist ')' {create_require(stFREE);add_command(cPOP,NULL);}
|
|
||||||
statement_list
|
|
||||||
endsub {add_command(cCLEARREFS,NULL);lastcmd->nextref=firstref;add_command(cPOPSYMLIST,NULL);create_retval(ftNONE,function_type);function_type=ftNONE;add_command(cRET_FROM_FUN,NULL);lastref=NULL;create_endfunction();poplabel();}
|
|
||||||
;
|
|
||||||
|
|
||||||
endsub: tEOPROG {if (missing_endsub) {sprintf(string,"%d end-sub(s) are missing (last at line %d)",missing_endsub,missing_endsub_line);error(ERROR,string);} YYABORT;}
|
|
||||||
| tENDSUB {missing_endsub--;}
|
|
||||||
;
|
|
||||||
|
|
||||||
function_name: tSYMBOL {function_type=ftNUMBER;current_function=my_strdup(dotify($1,FALSE));$$=my_strdup(dotify($1,FALSE));}
|
|
||||||
| tSTRSYM {function_type=ftSTRING;current_function=my_strdup(dotify($1,FALSE));$$=my_strdup(dotify($1,FALSE));}
|
|
||||||
;
|
|
||||||
|
|
||||||
export: /* empty */ {exported=FALSE;}
|
|
||||||
| tEXPORT {exported=TRUE;}
|
|
||||||
| tRUNTIME_CREATED_SUB {exported=FALSE;}
|
|
||||||
| tRUNTIME_CREATED_SUB tEXPORT {exported=TRUE;}
|
|
||||||
;
|
|
||||||
|
|
||||||
local_list: local_item
|
|
||||||
| local_list ',' local_item
|
|
||||||
;
|
|
||||||
|
|
||||||
local_item: tSYMBOL {create_makelocal(dotify($1,FALSE),syNUMBER);}
|
|
||||||
| tSTRSYM {create_makelocal(dotify($1,FALSE),sySTRING);}
|
|
||||||
| tSYMBOL '(' call_list ')' {create_makelocal(dotify($1,FALSE),syARRAY);create_dim(dotify($1,FALSE),'d');}
|
|
||||||
| tSTRSYM '(' call_list ')' {create_makelocal(dotify($1,FALSE),syARRAY);create_dim(dotify($1,FALSE),'s');}
|
|
||||||
;
|
|
||||||
|
|
||||||
static_list: static_item
|
|
||||||
| static_list ',' static_item
|
|
||||||
;
|
|
||||||
|
|
||||||
static_item: tSYMBOL {create_makestatic(dotify($1,TRUE),syNUMBER);}
|
|
||||||
| tSTRSYM {create_makestatic(dotify($1,TRUE),sySTRING);}
|
|
||||||
| tSYMBOL '(' call_list ')' {create_makestatic(dotify($1,TRUE),syARRAY);create_dim(dotify($1,TRUE),'D');}
|
|
||||||
| tSTRSYM '(' call_list ')' {create_makestatic(dotify($1,TRUE),syARRAY);create_dim(dotify($1,TRUE),'S');}
|
|
||||||
;
|
|
||||||
|
|
||||||
paramlist: /* empty */
|
|
||||||
| paramitem
|
|
||||||
| paramlist ',' paramitem
|
|
||||||
;
|
|
||||||
|
|
||||||
paramitem: tSYMBOL {create_require(stNUMBER);create_makelocal(dotify($1,FALSE),syNUMBER);add_command(cPOPDBLSYM,dotify($1,FALSE));}
|
|
||||||
| tSTRSYM {create_require(stSTRING);create_makelocal(dotify($1,FALSE),sySTRING);add_command(cPOPSTRSYM,dotify($1,FALSE));}
|
|
||||||
| tSYMBOL '(' ')' {create_require(stNUMBERARRAYREF);create_arraylink(dotify($1,FALSE),stNUMBERARRAYREF);}
|
|
||||||
| tSTRSYM '(' ')' {create_require(stSTRINGARRAYREF);create_arraylink(dotify($1,FALSE),stSTRINGARRAYREF);}
|
|
||||||
;
|
|
||||||
|
|
||||||
for_loop: tFOR {missing_next++;missing_next_line=mylineno;} tSYMBOL tEQU
|
|
||||||
{pushname(dotify($3,FALSE)); /* will be used by next_symbol to check equality */
|
|
||||||
add_command(cRESETSKIPONCE,NULL);
|
|
||||||
pushgoto();add_command(cCONTINUE_HERE,NULL);create_break_mark(0,1);}
|
|
||||||
expression tTO expression
|
|
||||||
step_part { /* pushes another expression */
|
|
||||||
add_command(cSKIPONCE,NULL);
|
|
||||||
pushlabel();
|
|
||||||
add_command(cSTARTFOR,NULL);
|
|
||||||
add_command(cPOPDBLSYM,dotify($3,FALSE));
|
|
||||||
poplabel();
|
|
||||||
add_command(cPUSHDBLSYM,dotify($3,FALSE));
|
|
||||||
add_command(cFORINCREMENT,NULL);
|
|
||||||
add_command(cPOPDBLSYM,dotify($3,FALSE));
|
|
||||||
add_command(cPUSHDBLSYM,dotify($3,FALSE));
|
|
||||||
add_command(cFORCHECK,NULL);
|
|
||||||
add_command(cDECIDE,NULL);
|
|
||||||
pushlabel();}
|
|
||||||
statement_list {
|
|
||||||
swap();popgoto();poplabel();}
|
|
||||||
next next_symbol {create_break_mark(0,-1);add_command(cBREAK_HERE,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
next: tEOPROG {if (missing_next) {sprintf(string,"%d next(s) are missing (last at line %d)",missing_next,missing_next_line);error(ERROR,string);} YYABORT;}
|
|
||||||
| tNEXT {missing_next--;}
|
|
||||||
;
|
|
||||||
|
|
||||||
step_part: {create_pushdbl(1);} /* can be omitted */
|
|
||||||
| tSTEP expression
|
|
||||||
;
|
|
||||||
|
|
||||||
next_symbol: {pop(stSTRING);}/* can be omitted */
|
|
||||||
| tSYMBOL {if (strcmp(pop(stSTRING)->pointer,dotify($1,FALSE)))
|
|
||||||
{error(ERROR,"'for' and 'next' do not match"); YYABORT;}
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
switch_number_or_string: tSWITCH {push_switch_id();add_command(cPUSH_SWITCH_MARK,NULL);create_break_mark(0,1);
|
|
||||||
add_command(cCONTINUE_CORRECTION,NULL);}
|
|
||||||
number_or_string sep_list case_list default tSEND {create_break_mark(-1,0);add_command(cBREAK_HERE,NULL);create_break_mark(0,-1);add_command(cBREAK_HERE,NULL);create_clean_switch_mark(0,FALSE);pop_switch_id();}
|
|
||||||
;
|
|
||||||
|
|
||||||
sep_list: tSEP {if ($1>=0) mylineno+=$1;}
|
|
||||||
| sep_list tSEP {if ($2>=0) mylineno+=$2;}
|
|
||||||
;
|
|
||||||
|
|
||||||
number_or_string: expression
|
|
||||||
| string_expression
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
case_list: /* empty */
|
|
||||||
| case_list tCASE {create_break_mark(-1,0);add_command(cBREAK_HERE,NULL);} number_or_string
|
|
||||||
{add_command(cSWITCH_COMPARE,NULL);add_command(cDECIDE,NULL);add_command(cMINOR_BREAK,NULL);create_break_mark(1,0);} statement_list {add_command(cNEXT_CASE,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
default: /* empty */
|
|
||||||
| tDEFAULT tSEP {if ($2>=0) mylineno+=$2; create_break_mark(-1,0);add_command(cBREAK_HERE,NULL);} statement_list
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
do_loop: tDO {add_command(cCONTINUE_HERE,NULL);create_break_mark(0,1);missing_loop++;missing_loop_line=mylineno;pushgoto();}
|
|
||||||
statement_list
|
|
||||||
loop
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
loop: tEOPROG {if (missing_loop) {sprintf(string,"%d loop(s) are missing (last at line %d)",missing_loop,missing_loop_line);error(ERROR,string);} YYABORT;}
|
|
||||||
| tLOOP {missing_loop--;popgoto();create_break_mark(0,-1);add_command(cBREAK_HERE,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
while_loop: tWHILE {add_command(cCONTINUE_HERE,NULL);create_break_mark(0,1);missing_wend++;missing_wend_line=mylineno;pushgoto();} '(' expression ')'
|
|
||||||
{add_command(cDECIDE,NULL);
|
|
||||||
pushlabel();}
|
|
||||||
statement_list
|
|
||||||
wend
|
|
||||||
;
|
|
||||||
|
|
||||||
wend: tEOPROG {if (missing_wend) {sprintf(string,"%d wend(s) are missing (last at line %d)",missing_wend,missing_wend_line);error(ERROR,string);} YYABORT;}
|
|
||||||
| tWEND {missing_wend--;swap();popgoto();poplabel();create_break_mark(0,-1);add_command(cBREAK_HERE,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
repeat_loop: tREPEAT {add_command(cCONTINUE_HERE,NULL);create_break_mark(0,1);missing_until++;missing_until_line=mylineno;pushgoto();}
|
|
||||||
statement_list
|
|
||||||
until
|
|
||||||
;
|
|
||||||
|
|
||||||
until: tEOPROG {if (missing_until) {sprintf(string,"%d until(s) are missing (last at line %d)",missing_until,missing_until_line);error(ERROR,string);} YYABORT;}
|
|
||||||
| tUNTIL '(' expression ')'
|
|
||||||
{missing_until--;add_command(cDECIDE,NULL);popgoto();create_break_mark(0,-1);add_command(cBREAK_HERE,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
if_clause: tIF expression {add_command(cDECIDE,NULL);storelabel();pushlabel();}
|
|
||||||
tTHEN {missing_endif++;missing_endif_line=mylineno;} statement_list {swap();matchgoto();swap();poplabel();}
|
|
||||||
elsif_part
|
|
||||||
else_part {poplabel();}
|
|
||||||
endif
|
|
||||||
;
|
|
||||||
|
|
||||||
endif: tEOPROG {if (missing_endif) {sprintf(string,"%d endif(s) are missing (last at line %d)",missing_endif,missing_endif_line);error(ERROR,string);} YYABORT;}
|
|
||||||
| tENDIF {missing_endif--;}
|
|
||||||
;
|
|
||||||
|
|
||||||
short_if: tIF expression {fi_pending++;add_command(cDECIDE,NULL);pushlabel();}
|
|
||||||
statement_list tENDIF {poplabel();}
|
|
||||||
;
|
|
||||||
|
|
||||||
else_part: /* can be omitted */
|
|
||||||
| tELSE statement_list
|
|
||||||
;
|
|
||||||
|
|
||||||
elsif_part: /* can be omitted */
|
|
||||||
| tELSIF expression maybe_then
|
|
||||||
{add_command(cDECIDE,NULL);pushlabel();}
|
|
||||||
statement_list
|
|
||||||
{swap();matchgoto();swap();poplabel();}
|
|
||||||
elsif_part
|
|
||||||
;
|
|
||||||
|
|
||||||
maybe_then: /* can be omitted */
|
|
||||||
| tTHEN
|
|
||||||
;
|
|
||||||
|
|
||||||
inputlist: input
|
|
||||||
| input ',' {add_command(cCHKPROMPT,NULL);} inputlist
|
|
||||||
;
|
|
||||||
|
|
||||||
input: tSYMBOL {create_myread('d',tileol);add_command(cPOPDBLSYM,dotify($1,FALSE));}
|
|
||||||
| tSYMBOL '(' call_list ')'
|
|
||||||
{create_myread('d',tileol);create_doarray(dotify($1,FALSE),ASSIGNARRAY);}
|
|
||||||
| tSTRSYM {create_myread('s',tileol);add_command(cPOPSTRSYM,dotify($1,FALSE));}
|
|
||||||
| tSTRSYM '(' call_list ')'
|
|
||||||
{create_myread('s',tileol);create_doarray(dotify($1,FALSE),ASSIGNSTRINGARRAY);}
|
|
||||||
;
|
|
||||||
|
|
||||||
readlist: readitem
|
|
||||||
| readlist ',' readitem
|
|
||||||
;
|
|
||||||
|
|
||||||
readitem: tSYMBOL {create_readdata('d');add_command(cPOPDBLSYM,dotify($1,FALSE));}
|
|
||||||
| tSYMBOL '(' call_list ')'
|
|
||||||
{create_readdata('d');create_doarray(dotify($1,FALSE),ASSIGNARRAY);}
|
|
||||||
| tSTRSYM {create_readdata('s');add_command(cPOPSTRSYM,dotify($1,FALSE));}
|
|
||||||
| tSTRSYM '(' call_list ')'
|
|
||||||
{create_readdata('s');create_doarray(dotify($1,FALSE),ASSIGNSTRINGARRAY);}
|
|
||||||
;
|
|
||||||
|
|
||||||
datalist: tSTRING {create_strdata($1);}
|
|
||||||
| const {create_dbldata($1);}
|
|
||||||
| datalist ',' tSTRING {create_strdata($3);}
|
|
||||||
| datalist ',' const {create_dbldata($3);}
|
|
||||||
;
|
|
||||||
|
|
||||||
printlist: /* possible empty */
|
|
||||||
| expression using
|
|
||||||
| printlist ',' expression using
|
|
||||||
| string_expression {create_print('s');}
|
|
||||||
| printlist ',' string_expression {create_print('s');}
|
|
||||||
;
|
|
||||||
|
|
||||||
using: {create_print('d');} /* possible empty */
|
|
||||||
| tUSING string_expression {create_print('u');}
|
|
||||||
| tUSING '(' string_expression ',' string_expression ')' {create_print('U');}
|
|
||||||
;
|
|
||||||
|
|
||||||
inputbody: '#' tSYMBOL {add_command(cPUSHDBLSYM,dotify($2,FALSE));create_pps(cPUSHSTREAM,1);} inputlist {create_pps(cPOPSTREAM,0);}
|
|
||||||
| '#' tDIGITS {create_pushdbl(atoi($2));create_pps(cPUSHSTREAM,1);} inputlist {create_pps(cPOPSTREAM,0);}
|
|
||||||
| '#' '(' expression ')' {create_pps(cPUSHSTREAM,1);} inputlist {create_pps(cPOPSTREAM,0);}
|
|
||||||
| tAT '(' expression ',' expression ')' {add_command(cMOVE,NULL);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,1);} prompt inputlist {create_pps(cPOPSTREAM,0);}
|
|
||||||
| {create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,1);} prompt inputlist {create_pps(cPOPSTREAM,0);}
|
|
||||||
;
|
|
||||||
|
|
||||||
prompt: /* empty */ {create_pushstr("?");create_print('s');}
|
|
||||||
| tSTRING {create_pushstr($1);create_print('s');}
|
|
||||||
;
|
|
||||||
|
|
||||||
printintro: /* may be empty */ {create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| '#' tSYMBOL {add_command(cPUSHDBLSYM,dotify($2,FALSE));create_pps(cPUSHSTREAM,0);}
|
|
||||||
| '#' tDIGITS {create_pushdbl(atoi($2));create_pps(cPUSHSTREAM,0);}
|
|
||||||
| '#' '(' expression ')' {create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tREVERSE {create_colour(1);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tCOLOUR '(' string_expression ')' {create_colour(2);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tCOLOUR '(' string_expression ',' string_expression ')' {create_colour(3);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tAT '(' expression ',' expression ')' {add_command(cMOVE,NULL);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tREVERSE tAT '(' expression ',' expression ')' {add_command(cMOVE,NULL);create_colour(1);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tCOLOUR '(' string_expression ')' tAT '(' expression ',' expression ')' {add_command(cMOVE,NULL);create_colour(2);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tCOLOUR '(' string_expression ',' string_expression ')' tAT '(' expression ',' expression ')' {add_command(cMOVE,NULL);create_colour(3);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);}
|
|
||||||
| tAT '(' expression ',' expression ')' tREVERSE {create_colour(1);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);add_command(cMOVE,NULL);}
|
|
||||||
| tAT '(' expression ',' expression ')' tCOLOUR '(' string_expression ')' {create_colour(2);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);add_command(cMOVE,NULL);}
|
|
||||||
| tAT '(' expression ',' expression ')' tCOLOUR '(' string_expression ',' string_expression ')' {create_colour(3);create_pushdbl(STDIO_STREAM);create_pps(cPUSHSTREAM,0);add_command(cMOVE,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
hashed_number: '#' expression
|
|
||||||
| expression;
|
|
||||||
|
|
||||||
goto_list: symbol_or_lineno {create_goto((function_type!=ftNONE)?dotify($1,TRUE):$1);add_command(cFINDNOP,NULL);}
|
|
||||||
| goto_list ',' symbol_or_lineno {create_goto((function_type!=ftNONE)?dotify($3,TRUE):$3);add_command(cFINDNOP,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
gosub_list: symbol_or_lineno {create_gosub((function_type!=ftNONE)?dotify($1,TRUE):$1);add_command(cFINDNOP,NULL);}
|
|
||||||
| gosub_list ',' symbol_or_lineno {create_gosub((function_type!=ftNONE)?dotify($3,TRUE):$3);add_command(cFINDNOP,NULL);}
|
|
||||||
;
|
|
||||||
|
|
||||||
@@ -1,562 +0,0 @@
|
|||||||
%{
|
|
||||||
/*
|
|
||||||
|
|
||||||
YABASIC --- a simple Basic Interpreter
|
|
||||||
written by Marc-Oliver Ihm 1995-2004
|
|
||||||
homepage: www.yabasic.de
|
|
||||||
|
|
||||||
FLEX part
|
|
||||||
|
|
||||||
This file is part of yabasic and may be copied only
|
|
||||||
under the terms of either the Artistic License or
|
|
||||||
the GNU General Public License (GPL), both of which
|
|
||||||
can be found at www.yabasic.de
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#undef WINDOWS
|
|
||||||
|
|
||||||
#include "bison.h" /* get tokens from BISON */
|
|
||||||
#ifndef YABASIC_INCLUDED
|
|
||||||
#include "yabasic.h" /* definitions of yabasic */
|
|
||||||
#endif
|
|
||||||
extern int main_lineno; /* defined in yabasic.bison: line number of main file */
|
|
||||||
extern int mylineno; /* defined in yabasic.bison: line number of main file */
|
|
||||||
int import_lib(char *); /* import library */
|
|
||||||
|
|
||||||
#define MAX_INCLUDE_DEPTH 5
|
|
||||||
#define MAX_INCLUDE_NUMBER 100
|
|
||||||
static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; /* stack for included libraries */
|
|
||||||
int include_stack_ptr; /* current position in libfile_stack */
|
|
||||||
struct libfile_name *libfile_stack[MAX_INCLUDE_DEPTH]; /* stack for library file names */
|
|
||||||
int libfile_chain_length=0; /* length of libfile_chain */
|
|
||||||
struct libfile_name *libfile_chain[MAX_INCLUDE_NUMBER]; /* list of all library file names */
|
|
||||||
struct libfile_name *currlib; /* current libfile as relevant to bison */
|
|
||||||
int inlib; /* true, while in library */
|
|
||||||
int fi_pending=0; /* true, if within a short if */
|
|
||||||
int flex_line=0; /* line number counted in flex */
|
|
||||||
%}
|
|
||||||
|
|
||||||
WS [ \t\f\r\v]
|
|
||||||
NAME ([A-Za-z_][A-za-z0-9_]*\.[A-Za-z_][A-za-z0-9_]*)|([A-Za-z_][A-za-z0-9_]*)
|
|
||||||
|
|
||||||
%option noyywrap
|
|
||||||
%x PRELNO
|
|
||||||
%x PASTLNO
|
|
||||||
%x IMPORT
|
|
||||||
%x IMPORT_DONE
|
|
||||||
|
|
||||||
%%
|
|
||||||
<<EOF>> {
|
|
||||||
if (--include_stack_ptr<0) {
|
|
||||||
return tEOPROG;
|
|
||||||
} else {
|
|
||||||
if (!is_bound) {
|
|
||||||
yy_delete_buffer(YY_CURRENT_BUFFER);
|
|
||||||
yy_switch_to_buffer(include_stack[include_stack_ptr]);
|
|
||||||
}
|
|
||||||
flex_line+=yylval.sep=-1;
|
|
||||||
return tSEP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{WS}+ {BEGIN(INITIAL);} /* ignore whitespace */
|
|
||||||
|
|
||||||
^{WS}*/[0-9]+ {BEGIN(PRELNO);return tLABEL;}
|
|
||||||
<PRELNO>[0-9]+ {
|
|
||||||
BEGIN(PASTLNO);
|
|
||||||
yylval.symbol=(char *)my_strdup(yytext);
|
|
||||||
return tSYMBOL;
|
|
||||||
}
|
|
||||||
<PASTLNO>.* {BEGIN(INITIAL);flex_line+=yylval.sep=0;yyless(0);return tSEP;}
|
|
||||||
<PASTLNO>\n {if (fi_pending) {fi_pending--;yyless(0);return tENDIF;}BEGIN(INITIAL);flex_line+=yylval.sep=1;return tSEP;}
|
|
||||||
|
|
||||||
\n\n {if (fi_pending) {fi_pending--;yyless(0);return tENDIF;}if (interactive && !inlib) {return tEOPROG;} else {flex_line+=yylval.sep=2;return tSEP;}}
|
|
||||||
\n {if (fi_pending) {fi_pending--;yyless(0);return tENDIF;}flex_line+=yylval.sep=1;return tSEP;}
|
|
||||||
: {if (fi_pending && check_compat) error_with_line(WARNING,"short-if has changed in version 2.71",flex_line);flex_line+=yylval.sep=0;return tSEP;}
|
|
||||||
|
|
||||||
REM{WS}+.* {flex_line+=yylval.sep=0;return tSEP;} /* comments span 'til end of line */
|
|
||||||
\/\/.* {flex_line+=yylval.sep=0;return tSEP;} /* comments span 'til end of line */
|
|
||||||
REM\n {if (fi_pending) {fi_pending--;yyless(0);return tENDIF;}flex_line+=yylval.sep=1;return tSEP;}
|
|
||||||
REM {yymore();}
|
|
||||||
|
|
||||||
IMPORT {BEGIN(IMPORT);}
|
|
||||||
<IMPORT>{WS}+{NAME} {if (!import_lib(yytext)) return 0;BEGIN(IMPORT_DONE);return tIMPORT;}
|
|
||||||
<IMPORT_DONE>(.|\n) {if (yytext[0]=='\n' && fi_pending) {fi_pending--;yyless(0);return tENDIF;}BEGIN(INITIAL);yyless(0);flex_line+=yylval.sep=0;return tSEP;}
|
|
||||||
|
|
||||||
((DOCU|DOC|DOCUMENTATION)({WS}+.*)?) {
|
|
||||||
char *where=strpbrk(yytext," \t\r\f\v");
|
|
||||||
yylval.docu=(char *)my_strdup(where ? where+1 : NULL);
|
|
||||||
return tDOCU;
|
|
||||||
}
|
|
||||||
|
|
||||||
^#.*\n {flex_line+=yylval.sep=1;return tSEP;} /* '#' as first character may introduce comments too */
|
|
||||||
^'.*\n {flex_line+=yylval.sep=1;return tSEP;} /* ' as first character may introduce comments too */
|
|
||||||
|
|
||||||
EXECUTE return tEXECUTE;
|
|
||||||
"EXECUTE$" return tEXECUTE2;
|
|
||||||
COMPILE return tCOMPILE;
|
|
||||||
RUNTIME_CREATED_SUB return tRUNTIME_CREATED_SUB;
|
|
||||||
END{WS}+SUB return tENDSUB;
|
|
||||||
END{WS}+IF return tENDIF;
|
|
||||||
END-IF return tENDIF;
|
|
||||||
END{WS}+WHILE return tWEND;
|
|
||||||
END-WHILE return tWEND;
|
|
||||||
END{WS}+SWITCH return tSEND;
|
|
||||||
END-SWITCH return tSEND;
|
|
||||||
END{WS}+"SWITCH$" return tSEND;
|
|
||||||
END-"SWITCH$" return tSEND;
|
|
||||||
EXPORT return tEXPORT;
|
|
||||||
ERROR return tERROR;
|
|
||||||
FOR return tFOR;
|
|
||||||
BREAK return tBREAK;
|
|
||||||
SWITCH return tSWITCH;
|
|
||||||
CASE return tCASE;
|
|
||||||
DEFAULT return tDEFAULT;
|
|
||||||
LOOP return tLOOP;
|
|
||||||
DO return tDO;
|
|
||||||
TO return tTO;
|
|
||||||
AS return tAS;
|
|
||||||
READING return tREADING;
|
|
||||||
WRITING return tWRITING;
|
|
||||||
STEP return tSTEP;
|
|
||||||
NEXT return tNEXT;
|
|
||||||
WHILE return tWHILE;
|
|
||||||
WEND return tWEND;
|
|
||||||
REPEAT return tREPEAT;
|
|
||||||
UNTIL return tUNTIL;
|
|
||||||
GOTO return tGOTO;
|
|
||||||
GOSUB return tGOSUB;
|
|
||||||
SUB return tSUB;
|
|
||||||
SUBROUTINE return tSUB;
|
|
||||||
LOCAL return tLOCAL;
|
|
||||||
STATIC return tSTATIC;
|
|
||||||
ON return tON;
|
|
||||||
INTERRUPT return tINTERRUPT;
|
|
||||||
CONTINUE return tCONTINUE;
|
|
||||||
LABEL return tLABEL;
|
|
||||||
IF return tIF;
|
|
||||||
THEN return tTHEN;
|
|
||||||
ELSE return tELSE;
|
|
||||||
ELSIF return tELSIF;
|
|
||||||
ELSEIF return tELSIF;
|
|
||||||
ENDIF return tENDIF;
|
|
||||||
FI return tENDIF;
|
|
||||||
OPEN return tOPEN;
|
|
||||||
CLOSE return tCLOSE;
|
|
||||||
SEEK return tSEEK;
|
|
||||||
TELL return tTELL;
|
|
||||||
PRINT return tPRINT;
|
|
||||||
USING return tUSING;
|
|
||||||
REVERSE return tREVERSE;
|
|
||||||
COLOR return tCOLOUR;
|
|
||||||
COLOUR return tCOLOUR;
|
|
||||||
\? return tPRINT;
|
|
||||||
INPUT return tINPUT;
|
|
||||||
RETURN return tRETURN;
|
|
||||||
DIM return tDIM;
|
|
||||||
REDIM return tDIM;
|
|
||||||
END return tEND;
|
|
||||||
EXIT return tEXIT;
|
|
||||||
READ return tREAD;
|
|
||||||
DATA return tDATA;
|
|
||||||
RESTORE return tRESTORE;
|
|
||||||
AND return tAND;
|
|
||||||
OR return tOR;
|
|
||||||
NOT return tNOT;
|
|
||||||
EOR return tEOR;
|
|
||||||
XOR return tEOR;
|
|
||||||
WINDOW return tWINDOW;
|
|
||||||
PRINTER return tPRINTER;
|
|
||||||
SETUP return tSETUP;
|
|
||||||
PUTSCREEN return tPUTCHAR;
|
|
||||||
"GETSCREEN$" return tGETCHAR;
|
|
||||||
NEW return tNEW;
|
|
||||||
WAIT return tWAIT;
|
|
||||||
PAUSE return tWAIT;
|
|
||||||
SLEEP return tWAIT;
|
|
||||||
BELL return tBELL;
|
|
||||||
BEEP return tBELL;
|
|
||||||
LET return tLET;
|
|
||||||
ARRAYDIM return tARDIM;
|
|
||||||
ARRAYDIMENSION return tARDIM;
|
|
||||||
ARRAYSIZE return tARSIZE;
|
|
||||||
NUMPARAM(S)?({WS}*\({WS}*\))? {yylval.symbol=(char *)my_strdup("numparams"); return tSYMBOL;}
|
|
||||||
BIND return tBIND;
|
|
||||||
SET return tSET;
|
|
||||||
|
|
||||||
LOCALIZE return tLOCALIZE;
|
|
||||||
BUTTON return tBUTTON;
|
|
||||||
ALERT return tALERT;
|
|
||||||
MENU return tMENU;
|
|
||||||
CHECKBOX return tCHECKBOX;
|
|
||||||
RADIOBUTTON return tRADIOBUTTON;
|
|
||||||
TEXTCONTROL return tTEXTCONTROL;
|
|
||||||
LISTBOX return tLISTBOX;
|
|
||||||
DROPBOX return tDROPBOX;
|
|
||||||
ADD return tADD;
|
|
||||||
REMOVE return tREMOVE;
|
|
||||||
TEXT return tTEXT;
|
|
||||||
RECT return tRECT;
|
|
||||||
DRAW return tDRAW;
|
|
||||||
FLUSH return tFLUSH;
|
|
||||||
FILEPANEL return tFILEPANEL;
|
|
||||||
LAYOUT return tLAYOUT;
|
|
||||||
TEXTEDIT return tTEXTEDIT;
|
|
||||||
COUNT return tCOUNT;
|
|
||||||
VIEW return tVIEW;
|
|
||||||
BOXVIEW return tBOXVIEW;
|
|
||||||
TABVIEW return tTABVIEW;
|
|
||||||
ELLIPSE return tELLIPSE;
|
|
||||||
DOT return tDOT;
|
|
||||||
LINE return tLINE;
|
|
||||||
CURVE return tCURVE;
|
|
||||||
CIRCLE return tCIRCLE;
|
|
||||||
CLEAR return tCLEAR;
|
|
||||||
TEXT return tTEXT;
|
|
||||||
RECT return tRECT;
|
|
||||||
SLIDER return tSLIDER;
|
|
||||||
OPTION return tOPTION;
|
|
||||||
DROPZONE return tDROPZONE;
|
|
||||||
COLORCONTROL return tCOLORCONTROL;
|
|
||||||
TREEBOX return tTREEBOX;
|
|
||||||
SORT return tSORT;
|
|
||||||
TOOLTIP return tTOOLTIP;
|
|
||||||
TOOLTIPNEW return tTOOLTIPNEW;
|
|
||||||
COLUMNBOX return tCOLUMNBOX;
|
|
||||||
COLUMN return tCOLUMN;
|
|
||||||
CLIPBOARD return tCLIPBOARD;
|
|
||||||
COPY return tCOPY;
|
|
||||||
SUBMENU return tSUBMENU;
|
|
||||||
KEYBOARD return tKEYBOARD;
|
|
||||||
SELECT return tSELECT;
|
|
||||||
CALENDAR return tCALENDAR;
|
|
||||||
SCROLLBAR return tSCROLLBAR;
|
|
||||||
COLLAPSE return tCOLLAPSE;
|
|
||||||
EXPAND return tEXPAND;
|
|
||||||
SOUND return tSOUND;
|
|
||||||
MEDIASOUND return tMEDIASOUND;
|
|
||||||
PLAY return tPLAY;
|
|
||||||
STOP return tSTOP;
|
|
||||||
SPLITVIEW return tSPLITVIEW;
|
|
||||||
STACKVIEW return tSTACKVIEW;
|
|
||||||
TEXTURL return tTEXTURL;
|
|
||||||
SPINCONTROL return tSPINCONTROL;
|
|
||||||
POPUPMENU return tPOPUPMENU;
|
|
||||||
SEND return tMSEND;
|
|
||||||
MESSAGE return tNUMMESSAGE;
|
|
||||||
THREAD return tTHREAD;
|
|
||||||
BITMAP return tBITMAP;
|
|
||||||
CANVAS return tCANVAS;
|
|
||||||
SHORTCUT return tSHORTCUT;
|
|
||||||
SAVE return tSAVE;
|
|
||||||
ISCOMPUTERON return tISCOMPUTERON;
|
|
||||||
SCREENSHOT return tSCREENSHOT;
|
|
||||||
STATUSBAR return tSTATUSBAR;
|
|
||||||
LAUNCH return tLAUNCH;
|
|
||||||
ATTRIBUTE return tATTRIBUTE;
|
|
||||||
|
|
||||||
"PASTE$" return tPASTE;
|
|
||||||
IMAGE return tIMAGE;
|
|
||||||
SVG return tSVG;
|
|
||||||
"MESSAGE$" return tMESSAGE;
|
|
||||||
"TRANSLATE$" return tTRANSLATE;
|
|
||||||
"GET$" return tGET;
|
|
||||||
MOUSE return tMOUSE;
|
|
||||||
ISMOUSEIN return tISMOUSEIN;
|
|
||||||
GET return tGETNUM;
|
|
||||||
|
|
||||||
SIN return tSIN;
|
|
||||||
ASIN return tASIN;
|
|
||||||
COS return tCOS;
|
|
||||||
ACOS return tACOS;
|
|
||||||
TAN return tTAN;
|
|
||||||
ATAN return tATAN;
|
|
||||||
EXP return tEXP;
|
|
||||||
LOG return tLOG;
|
|
||||||
SQRT return tSQRT;
|
|
||||||
SQR return tSQR;
|
|
||||||
INT return tINT;
|
|
||||||
FRAC return tFRAC;
|
|
||||||
ABS return tABS;
|
|
||||||
SIG return tSIG;
|
|
||||||
MOD return tMOD;
|
|
||||||
RAN return tRAN;
|
|
||||||
MIN return tMIN;
|
|
||||||
MAX return tMAX;
|
|
||||||
"LEFT$" return tLEFT;
|
|
||||||
"RIGHT$" return tRIGHT;
|
|
||||||
"MID$" return tMID;
|
|
||||||
"LOWER$" return tLOWER;
|
|
||||||
"UPPER$" return tUPPER;
|
|
||||||
"LTRIM$" return tLTRIM;
|
|
||||||
"RTRIM$" return tRTRIM;
|
|
||||||
"TRIM$" return tTRIM;
|
|
||||||
INSTR return tINSTR;
|
|
||||||
RINSTR return tRINSTR;
|
|
||||||
LEN return tLEN;
|
|
||||||
VAL return tVAL;
|
|
||||||
EOF return tMYEOF;
|
|
||||||
"STR$" return tSTR;
|
|
||||||
"INKEY$" return tINKEY;
|
|
||||||
"CHR$" return tCHR;
|
|
||||||
ASC return tASC;
|
|
||||||
"HEX$" return tHEX;
|
|
||||||
"BIN$" return tBIN;
|
|
||||||
DEC return tDEC;
|
|
||||||
AT return tAT;
|
|
||||||
@ return tAT;
|
|
||||||
SCREEN return tSCREEN;
|
|
||||||
"SYSTEM$" return tSYSTEM;
|
|
||||||
SYSTEM return tSYSTEM2;
|
|
||||||
"DATE$" return tDATE;
|
|
||||||
"TIME$" return tTIME;
|
|
||||||
PEEK return tPEEK;
|
|
||||||
"PEEK$" return tPEEK2;
|
|
||||||
POKE return tPOKE;
|
|
||||||
TOKEN return tTOKEN;
|
|
||||||
"TOKEN$" return tTOKENALT;
|
|
||||||
SPLIT return tSPLIT;
|
|
||||||
"SPLIT$" return tSPLITALT;
|
|
||||||
GLOB return tGLOB;
|
|
||||||
"^" return tPOW;
|
|
||||||
"**" return tPOW;
|
|
||||||
|
|
||||||
"<>" return tNEQ;
|
|
||||||
"<=" return tLEQ;
|
|
||||||
">=" return tGEQ;
|
|
||||||
"=" return tEQU;
|
|
||||||
"<" return tLTN;
|
|
||||||
">" return tGTN;
|
|
||||||
"!" return tNOT;
|
|
||||||
|
|
||||||
[-+*/:(),.;] {return yytext[0];}
|
|
||||||
|
|
||||||
[0-9]+ {
|
|
||||||
yylval.digits=(char *)my_strdup(yytext);
|
|
||||||
return tDIGITS;
|
|
||||||
}
|
|
||||||
|
|
||||||
(([0-9]+|([0-9]*\.[0-9]*))([eE][-+]?[0-9]+)?) {
|
|
||||||
{ double d;
|
|
||||||
sscanf(yytext,"%lg",&d);
|
|
||||||
yylval.fnum=d;
|
|
||||||
return tFNUM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pi {yylval.fnum=3.1415926535897932;return tFNUM;}
|
|
||||||
euler {yylval.fnum=2.7182818284590452;return tFNUM;}
|
|
||||||
TRUE {yylval.fnum=1; return tFNUM;}
|
|
||||||
FALSE {yylval.fnum=0; return tFNUM;}
|
|
||||||
|
|
||||||
{NAME} {
|
|
||||||
yylval.symbol=(char *)my_strdup(yytext);
|
|
||||||
return tSYMBOL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Symbols with a trailing $-sign are treated special */
|
|
||||||
{NAME}\$ {
|
|
||||||
yylval.symbol=(char *)my_strdup(yytext);
|
|
||||||
return tSTRSYM;
|
|
||||||
}
|
|
||||||
|
|
||||||
\"[^"]*(\"|\n) {
|
|
||||||
int cnt;
|
|
||||||
if (yytext[yyleng-1]=='\n' && fi_pending) {fi_pending--;yyless(0);return tENDIF;}
|
|
||||||
if (yytext[yyleng-1]=='\n') {
|
|
||||||
yylval.string=NULL;
|
|
||||||
return tSTRING;
|
|
||||||
}
|
|
||||||
for(cnt=0;yytext[yyleng-cnt-2]=='\\';cnt++) ;
|
|
||||||
if (cnt%2) {
|
|
||||||
yyless(yyleng-1);
|
|
||||||
yymore();
|
|
||||||
} else {
|
|
||||||
yylval.string=(char *)my_strdup(yytext+1);
|
|
||||||
*(yylval.string+yyleng-2)='\0';
|
|
||||||
replace(yylval.string);
|
|
||||||
return tSTRING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
. {if (isprint(yytext[0])) return yytext[0]; else return ' ';}
|
|
||||||
|
|
||||||
%%
|
|
||||||
void yyerror(char *msg)
|
|
||||||
{
|
|
||||||
int i,j;
|
|
||||||
|
|
||||||
sprintf(string,"%s at %n",msg,&j);
|
|
||||||
if (*yytext=='\n' || *yytext=='\0') {
|
|
||||||
sprintf(string+j,"end of line");
|
|
||||||
} else {
|
|
||||||
i=0;
|
|
||||||
string[j++]='\"';
|
|
||||||
while(yytext[i]) {
|
|
||||||
if (isprint(yytext[i])) string[j++]=yytext[i++];
|
|
||||||
else {
|
|
||||||
sprintf(string+j,"0x%02x",yytext[i]);
|
|
||||||
j+=4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
string[j++]='\"';
|
|
||||||
string[j]='\0';
|
|
||||||
}
|
|
||||||
error(ERROR,string);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void open_main(FILE *file,char *explicit,char *main_file_name) /* open main file */
|
|
||||||
{
|
|
||||||
include_stack_ptr=0;
|
|
||||||
|
|
||||||
if (explicit)
|
|
||||||
include_stack[include_stack_ptr]=yy_scan_string(explicit);
|
|
||||||
else
|
|
||||||
include_stack[include_stack_ptr]=yy_create_buffer(file,YY_BUF_SIZE);
|
|
||||||
libfile_stack[include_stack_ptr]=new_file(main_file_name,"main");
|
|
||||||
libfile_chain[libfile_chain_length++]=libfile_stack[include_stack_ptr];
|
|
||||||
if (!explicit) yy_switch_to_buffer(include_stack[include_stack_ptr]);
|
|
||||||
currlib=libfile_stack[0];
|
|
||||||
inlib=FALSE;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void open_string(char *cmd) /* open string with commands */
|
|
||||||
{
|
|
||||||
yy_switch_to_buffer(yy_scan_string(cmd));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int import_lib(char *name) /* import library */
|
|
||||||
{
|
|
||||||
char *full;
|
|
||||||
static int end_of_import=FALSE;
|
|
||||||
|
|
||||||
if (!*name) name=pop(stSTRING)->pointer;
|
|
||||||
while(isspace(*name)) name++;
|
|
||||||
|
|
||||||
if (!strcmp(name,"__END_OF_IMPORT")) end_of_import=TRUE;
|
|
||||||
if (end_of_import) return TRUE;
|
|
||||||
|
|
||||||
/* start line numbers anew */
|
|
||||||
libfile_stack[include_stack_ptr]->lineno=mylineno;
|
|
||||||
|
|
||||||
include_stack_ptr++;
|
|
||||||
if (include_stack_ptr>=MAX_INCLUDE_DEPTH) {
|
|
||||||
sprintf(string,"Could not import '%s': nested too deep",name);
|
|
||||||
error(ERROR,string);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_bound) {
|
|
||||||
full=name;
|
|
||||||
} else {
|
|
||||||
yyin=open_library(name,&full,FALSE);
|
|
||||||
if (!yyin) return FALSE;
|
|
||||||
yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
|
|
||||||
include_stack[include_stack_ptr]=YY_CURRENT_BUFFER;
|
|
||||||
}
|
|
||||||
libfile_stack[include_stack_ptr]=new_file(full,NULL);
|
|
||||||
libfile_chain[libfile_chain_length++]=libfile_stack[include_stack_ptr];
|
|
||||||
if (libfile_chain_length>=MAX_INCLUDE_NUMBER) {
|
|
||||||
sprintf(string,"Cannot import more than %d libraries",MAX_INCLUDE_NUMBER);
|
|
||||||
error(ERROR,string);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (!libfile_stack[include_stack_ptr]) {
|
|
||||||
sprintf(string,"library '%s' has already been imported",full);
|
|
||||||
error(ERROR,string);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (infolevel>=NOTE && !is_bound) {
|
|
||||||
sprintf(string,"importing from file '%s'",full);
|
|
||||||
error(NOTE,string);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FILE *open_library(char *name,char **fullreturn,int without) /* search and open a library */
|
|
||||||
{
|
|
||||||
static char full[200];
|
|
||||||
char unquoted[200];
|
|
||||||
char *p;
|
|
||||||
FILE *lib;
|
|
||||||
int i;
|
|
||||||
char *trail;
|
|
||||||
|
|
||||||
if (fullreturn) *fullreturn=full;
|
|
||||||
|
|
||||||
for(p=name;strchr(" \"'`",*p);p++) if (!*p) break;
|
|
||||||
strncpy(unquoted,p,200);
|
|
||||||
for(;!strchr(" \"'`",*p);p++) if (!*p) break;
|
|
||||||
if (*p) unquoted[p-name-2]='\0';
|
|
||||||
name=unquoted;
|
|
||||||
if (strchr(name,'.')) {
|
|
||||||
sprintf(string,"library name '%s' contains '.'",name);
|
|
||||||
error(ERROR,string);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!strcmp(name,"main")) {
|
|
||||||
if (is_bound) return NULL;
|
|
||||||
error(ERROR,"invalid library name 'main'");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* search local */
|
|
||||||
trail=".yab";
|
|
||||||
for(i=0;i<2;i++) {
|
|
||||||
strcpy(full,name);
|
|
||||||
if (!strchr(full,'.')) strcat(full,trail);
|
|
||||||
lib=fopen(full,"r");
|
|
||||||
if (lib) return lib;
|
|
||||||
trail="";
|
|
||||||
if (!without) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* search in global location */
|
|
||||||
trail=".yab";
|
|
||||||
for(i=0;i<2;i++) {
|
|
||||||
strcpy(full,library_path);
|
|
||||||
if (full[0] && !strchr("\\/",full[strlen(full)-1])) {
|
|
||||||
#ifdef UNIX
|
|
||||||
strcat(full,"/");
|
|
||||||
#else
|
|
||||||
strcat(full,"\\");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
strcat(full,name);
|
|
||||||
if (!strchr(full,'.')) strcat(full,trail);
|
|
||||||
lib=fopen(full,"r");
|
|
||||||
if (lib) return lib;
|
|
||||||
trail="";
|
|
||||||
if (!without) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf(string,"couldn't open library '%s'",full);
|
|
||||||
error(ERROR,string);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void switchlib(void) /* switch library, called by bison */
|
|
||||||
{
|
|
||||||
if (include_stack_ptr<0) return;
|
|
||||||
if (infolevel>=DEBUG) {
|
|
||||||
sprintf(string,"switching from '%s' to '%s'",currlib->s,libfile_stack[include_stack_ptr]->s);
|
|
||||||
error(DEBUG,string);
|
|
||||||
}
|
|
||||||
currlib=libfile_stack[include_stack_ptr];
|
|
||||||
mylineno=currlib->lineno;
|
|
||||||
inlib=(include_stack_ptr>0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-888
@@ -1,888 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
YABASIC --- a simple Basic Interpreter
|
|
||||||
written by Marc-Oliver Ihm 1995-2004
|
|
||||||
homepage: www.yabasic.de
|
|
||||||
|
|
||||||
yabasic.h --- function prototypes and global variables
|
|
||||||
|
|
||||||
This file is part of yabasic and may be copied only
|
|
||||||
under the terms of either the Artistic License or
|
|
||||||
the GNU General Public License (GPL), both of which
|
|
||||||
can be found at www.yabasic.de
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define YABLICENSE \
|
|
||||||
"\n"\
|
|
||||||
" Yab may only be copied under the terms of the Artistic \n"\
|
|
||||||
" License which can be found at yab-interpreter.sourceforge.net. \n"\
|
|
||||||
"\n"\
|
|
||||||
" The Artistic License gives you the right to use and distribute \n"\
|
|
||||||
" yab in a more-or-less customary fashion, plus the right to make \n"\
|
|
||||||
" reasonable modifications and distribute (or even sell) such a \n"\
|
|
||||||
" modified version under a different name. \n"\
|
|
||||||
" However, the original author and copyright holder still reserves \n"\
|
|
||||||
" himself some sort of artistic control over the development \n"\
|
|
||||||
" of yab itself. \n"\
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define YABASIC_INCLUDED
|
|
||||||
|
|
||||||
/* ------------- defines ---------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
Define one and only one of the following symbols, depending on your
|
|
||||||
System:
|
|
||||||
- UNIX: uses some UNIX-features and X11
|
|
||||||
- WINDOWS: uses WIN32-features
|
|
||||||
Define UNIX and BEOS for a BeOS build
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(UNIX) && defined(WINDOWS)
|
|
||||||
UNIX and WINDOWS are defined at once; check your compiler settings
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------- includes ---------------- */
|
|
||||||
|
|
||||||
#include "global.h"
|
|
||||||
#include <config.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <float.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#ifdef WINDOWS
|
|
||||||
#include <string.h>
|
|
||||||
#include <windows.h>
|
|
||||||
#include <io.h>
|
|
||||||
#define ARCHITECTURE "windows"
|
|
||||||
#ifdef __LCC__ /* fix for lccwin32 */
|
|
||||||
#include <winspool.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "YabInterface.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef UNIX
|
|
||||||
#define ARCHITECTURE UNIX_ARCHITECTURE
|
|
||||||
#ifdef HAS_STRING_HEADER
|
|
||||||
#include <string.h>
|
|
||||||
#elif HAS_STRINGS_HEADER
|
|
||||||
#include <strings.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#ifndef BEOS
|
|
||||||
#include <sys/ipc.h>
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <X11/Xutil.h>
|
|
||||||
#include <X11/Intrinsic.h>
|
|
||||||
#define XK_LATIN1
|
|
||||||
#define XK_MISCELLANY
|
|
||||||
#include <X11/keysymdef.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#ifdef BUILD_NCURSES
|
|
||||||
#include <ncurses.h>
|
|
||||||
// #else
|
|
||||||
// #ifdef HAVE_CURSES_HEADER
|
|
||||||
// #include <curses.h>
|
|
||||||
// #endif
|
|
||||||
#endif
|
|
||||||
#ifndef KEY_MAX
|
|
||||||
#define KEY_MAX 0777
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef FOPEN_MAX
|
|
||||||
#define FOPEN_MAX 24
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#ifdef UNIX
|
|
||||||
#ifndef LIBRARY_PATH
|
|
||||||
#define LIBRARY_PATH "/boot/home/config/settings/yab"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define OPEN_HAS_STREAM 1
|
|
||||||
#define OPEN_HAS_MODE 2
|
|
||||||
#define OPEN_PRINTER 8
|
|
||||||
#define STDIO_STREAM 1234
|
|
||||||
|
|
||||||
/* -------- variables needed in all files and defined in ... -------- */
|
|
||||||
|
|
||||||
/* main.c */
|
|
||||||
extern struct command *current; /* currently executed command */
|
|
||||||
extern struct command *cmdroot; /* first command */
|
|
||||||
extern struct command *cmdhead; /* next command */
|
|
||||||
extern struct command *lastcmd; /* last command */
|
|
||||||
extern int infolevel; /* controls issuing of error messages */
|
|
||||||
extern int errorlevel; /* highest level of error message seen til now */
|
|
||||||
extern int interactive; /* true, if commands come from stdin */
|
|
||||||
extern char *progname; /* name of yabasic-program */
|
|
||||||
extern char *explanation[]; /* explanations of commands */
|
|
||||||
extern char **yabargv; /* arguments for yabasic */
|
|
||||||
extern int yabargc; /* number of arguments in yabargv */
|
|
||||||
extern time_t compilation_start,compilation_end,execution_end;
|
|
||||||
extern char *string; /* for trash-strings */
|
|
||||||
extern char *errorstring; /* for error-strings */
|
|
||||||
extern int errorcode; /* error-codes */
|
|
||||||
extern char library_path[]; /* full path to search libraries */
|
|
||||||
extern int program_state; /* state of program */
|
|
||||||
extern int check_compat; /* true, if compatibility should be checked */
|
|
||||||
extern int is_bound; /* true, if this executable is bound */
|
|
||||||
extern char* appdirectory; /* appdir */
|
|
||||||
|
|
||||||
|
|
||||||
/* io.c */
|
|
||||||
extern FILE *streams[]; /* file streams */
|
|
||||||
extern int read_controls; /* TRUE, if input should read control characters */
|
|
||||||
extern int stream_modes[]; /* modes for streams */
|
|
||||||
extern int curinized; /* true, if curses has been initialized */
|
|
||||||
extern int badstream(int,int); /* test for valid stream id */
|
|
||||||
void myseek(struct command *); /* reposition file pointer */
|
|
||||||
#ifdef WINDOWS
|
|
||||||
extern HANDLE wantkey; /* mutex to signal key desire */
|
|
||||||
extern HANDLE gotkey; /* mutex to signal key reception */
|
|
||||||
extern HANDLE wthandle; /* handle of win thread */
|
|
||||||
extern HANDLE kthandle; /* handle of inkey thread */
|
|
||||||
extern DWORD ktid; /* id of inkey thread */
|
|
||||||
extern int LINES; /* number of lines on screen */
|
|
||||||
extern int COLS; /* number of columns on screen */
|
|
||||||
extern HANDLE ConsoleInput; /* handle for console input */
|
|
||||||
extern HANDLE ConsoleOutput; /* handle for console output */
|
|
||||||
#else
|
|
||||||
extern int winpid; /* pid of process waiting for window keys */
|
|
||||||
extern int termpid; /* pid of process waiting for terminal keys */
|
|
||||||
#ifndef BUILD_NCURSES
|
|
||||||
extern int LINES; /* number of lines on screen */
|
|
||||||
extern int COLS; /* number of columns on screen */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* graphic.c */
|
|
||||||
/* printing and plotting */
|
|
||||||
extern int print_to_file; /* print to file ? */
|
|
||||||
#ifdef WINDOWS
|
|
||||||
extern HFONT printerfont; /* handle of printer-font */
|
|
||||||
extern HDC printer; /* handle of printer */
|
|
||||||
#endif
|
|
||||||
extern FILE *printerfile; /* file to print on */
|
|
||||||
extern double xoff; /* offset for x-mapping */
|
|
||||||
extern double xinc; /* inclination of x-mapping */
|
|
||||||
extern double yoff; /* offset for y-mapping */
|
|
||||||
extern double yinc; /* inclination for y-mapping */
|
|
||||||
/* window coordinates */
|
|
||||||
extern int winopened; /* flag if window is open already */
|
|
||||||
extern char *winorigin; /* e.g. "lt","rc"; defines origin of grafic window */
|
|
||||||
extern int winwidth,winheight; /* size of window */
|
|
||||||
/* mouse, console and keyboard */
|
|
||||||
/* extern int mousex,mousey,mouseb,mousemod; */ /* last know mouse coordinates */
|
|
||||||
extern char *ykey[]; /* keys returned by inkey */
|
|
||||||
/* text and font */
|
|
||||||
extern char *getreg(char *); /* get defaults from Registry */
|
|
||||||
extern char *text_align; /* specifies alignement of text */
|
|
||||||
extern int fontheight; /* height of font in pixel */
|
|
||||||
#ifdef WINDOWS
|
|
||||||
extern HFONT myfont; /* handle of font for screen */
|
|
||||||
#endif
|
|
||||||
/* general window stuff */
|
|
||||||
extern char *foreground;
|
|
||||||
extern char *background;
|
|
||||||
extern char *geometry;
|
|
||||||
extern char *displayname;
|
|
||||||
extern char *font;
|
|
||||||
extern int drawmode;
|
|
||||||
#ifdef WINDOWS
|
|
||||||
extern HWND window; /* handle of my window */
|
|
||||||
extern HANDLE mainthread; /* handle to main thread */
|
|
||||||
extern HANDLE this_instance;
|
|
||||||
extern WNDCLASS myclass; /* window class for my program */
|
|
||||||
extern char *my_class;
|
|
||||||
extern BOOL Commandline; /* true if launched from command line */
|
|
||||||
#else
|
|
||||||
extern int backpid; /* pid of process waiting for redraw events */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* function.c */
|
|
||||||
extern struct command *datapointer; /* current location for read-command */
|
|
||||||
|
|
||||||
/* symbol.c */
|
|
||||||
extern struct stackentry *stackroot; /* first element of stack */
|
|
||||||
extern struct stackentry *stackhead; /* last element of stack */
|
|
||||||
extern void query_array(struct command *cmd); /* query array */
|
|
||||||
extern struct command *lastref; /* last command in UDS referencing a symbol */
|
|
||||||
extern struct command *firstref; /* first command in UDS referencing a symbol */
|
|
||||||
extern int labelcount; /* count self-generated labels */
|
|
||||||
|
|
||||||
|
|
||||||
/* flex.c */
|
|
||||||
extern int include_stack_ptr; /* Lex buffer for any imported file */
|
|
||||||
extern struct libfile_name *libfile_stack[]; /* stack for library file names */
|
|
||||||
extern struct libfile_name *currlib; /* current libfile as relevant to bison */
|
|
||||||
extern int inlib; /* true, while in library */
|
|
||||||
extern int fi_pending; /* true, if within a short if */
|
|
||||||
extern int libfile_chain_length; /* length of libfile_chain */
|
|
||||||
extern struct libfile_name *libfile_chain[]; /* list of all library file names */
|
|
||||||
|
|
||||||
|
|
||||||
/* bison.c */
|
|
||||||
extern char *current_function; /* name of currently parsed function */
|
|
||||||
extern int yydebug;
|
|
||||||
extern int missing_endif;
|
|
||||||
extern int missing_endif_line;
|
|
||||||
extern int in_loop;
|
|
||||||
|
|
||||||
/*-------------------------- defs and undefs ------------------------*/
|
|
||||||
|
|
||||||
/* undef symbols */
|
|
||||||
#undef FATAL
|
|
||||||
#undef ERROR
|
|
||||||
#undef WARNING
|
|
||||||
#undef NOTE
|
|
||||||
#undef DEBUG
|
|
||||||
#undef DUMP
|
|
||||||
|
|
||||||
#if !defined(TRUE)
|
|
||||||
#define TRUE (1==1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE (1!=1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* I've been told, that some symbols are missing under SunOs ... */
|
|
||||||
#ifndef RAND_MAX
|
|
||||||
#define RAND_MAX 32767
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* length of buffers for system() and input */
|
|
||||||
#define SYSBUFFLEN 100
|
|
||||||
#define INBUFFLEN 10000
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------- enum types ------------------------------- */
|
|
||||||
|
|
||||||
enum error { /* error levels */
|
|
||||||
FATAL,ERROR,INFO,DUMP,WARNING,NOTE,DEBUG
|
|
||||||
};
|
|
||||||
|
|
||||||
enum endreasons { /* ways to end the program */
|
|
||||||
erNONE,erERROR,erREQUEST,erEOF
|
|
||||||
};
|
|
||||||
|
|
||||||
enum streammodes { /* ways to access a stream */
|
|
||||||
smCLOSED=0,smREAD=1,smWRITE=2,smPRINT=4,smREADWRITE=3
|
|
||||||
};
|
|
||||||
|
|
||||||
enum functions { /* functions in yabasic (sorted by number of arguments) */
|
|
||||||
fRAN2,fDATE,fTIME,fMESSAGE,fNUMWINDOWS,fCLIPBOARDPASTE,fISCOMPUTERON,fMOUSEMOVE,
|
|
||||||
fZEROARGS,
|
|
||||||
fINKEY,/* fMOUSEX,fMOUSEY,fMOUSEB,fMOUSEMOD,*/
|
|
||||||
fSIN,fASIN,fCOS,fACOS,fTAN,
|
|
||||||
fATAN,fSYSTEM,fSYSTEM2,fPEEK,fPEEK2,fPEEK4,fTELL,fEXP,fLOG,fLEN,fSTR,
|
|
||||||
fSQRT,fSQR,fFRAC,fABS,fSIG,fRAN,fINT,fVAL,fASC,fHEX,fBIN,fDEC,fUPPER,fLOWER,
|
|
||||||
fLTRIM,fRTRIM,fTRIM,fCHR,fTRANSLATE,fMENUTRANSLATE,fMOUSE, fISMOUSEIN,fTEXTCONTROLGET,
|
|
||||||
fKEYBOARD,fCOLUMNBOXCOUNT, fCALENDAR, fLISTBOXCOUNT, fTREEBOXCOUNT, fSTACKVIEWGET,
|
|
||||||
fSPINCONTROLGET, fDROPBOXCOUNT, fSLIDERGET, fTEXTGET, fDRAWGET3, fTABVIEWGET,
|
|
||||||
fLISTBOXGETNUM, fDROPBOXGETNUM, fCOLUMNBOXGETNUM, fTREEBOXGETNUM, fSOUND, fMEDIASOUND,
|
|
||||||
fONEARGS,
|
|
||||||
fDEC2,fATAN2,fLEFT,fAND,fOR,fEOR,fLOG2,
|
|
||||||
fRIGHT,fINSTR,fRINSTR,fSTR2,fMOD,fMIN,fMAX,fPEEK3,fMID2,fWINDOWGET, fVIEWGET /* vasper */,
|
|
||||||
fLISTBOXGET, fTREEBOXGET, fSCROLLBARGET, fSPLITVIEWGET, fDROPBOXGET, fCOLORCONTROLGET,
|
|
||||||
fTEXTGET2,fTEXTGET6,fDRAWGET2, fTEXTGET3, fMESSAGESEND, fTHREADKILL, fTHREADGET, fBITMAPGET,
|
|
||||||
fBITMAPLOAD, fATTRIBUTEGET1, fATTRIBUTEGET2,
|
|
||||||
fTWOARGS,
|
|
||||||
fMID,fINSTR2,fRINSTR2,fSTR3,fCOLUMNBOXGET,fDRAWGET1,fTEXTGET4,fTEXTGET5,fPRINTER,
|
|
||||||
fLOAD, fTREEBOXGETOPT,fBITMAPSAVE,
|
|
||||||
fTHREEARGS,
|
|
||||||
fGETCHAR,fDRAWIMAGE,fPOPUPMENU,fSAVE,fDRAWGET4,fBITMAPCOLOR,
|
|
||||||
fFOURARGS,
|
|
||||||
fALERT,
|
|
||||||
fFIVEARGS,
|
|
||||||
fDRAWSVG,fDRAWIMAGE2,
|
|
||||||
fSIXARGS
|
|
||||||
};
|
|
||||||
|
|
||||||
enum arraymode { /* type of array access */
|
|
||||||
CALLARRAY,ASSIGNARRAY,CALLSTRINGARRAY,ASSIGNSTRINGARRAY,GETSTRINGPOINTER
|
|
||||||
};
|
|
||||||
|
|
||||||
enum drawing_modes { /* various ways to draw */
|
|
||||||
dmNORMAL=0,dmCLEAR=1,dmFILL=2
|
|
||||||
};
|
|
||||||
|
|
||||||
enum cmd_type { /* type of command */
|
|
||||||
cFIRST_COMMAND, /* no command, just marks start of list */
|
|
||||||
|
|
||||||
cLABEL,cSUBLINK,cGOTO,cQGOTO,cGOSUB,cQGOSUB,cRETURN, /* flow control */
|
|
||||||
cEND,cEXIT,cBIND,cDECIDE,cSKIPPER,cNOP,cFINDNOP,cEXCEPTION,cANDSHORT,
|
|
||||||
cORSHORT,cSKIPONCE,cRESETSKIPONCE,cCOMPILE,cEXECUTE,cEXECUTE2,
|
|
||||||
|
|
||||||
cDIM,cFUNCTION,cDOARRAY,cARRAYLINK,cPUSHARRAYREF,cCLEARREFS, /* everything with "()" */
|
|
||||||
cARDIM,cARSIZE,cTOKEN,cTOKEN2,cTOKENALT,cTOKENALT2,
|
|
||||||
cSPLIT,cSPLIT2,cSPLITALT,cSPLITALT2,
|
|
||||||
cSTARTFOR,cFORCHECK,cFORINCREMENT, /* for for-loops */
|
|
||||||
|
|
||||||
cSWITCH_COMPARE,cNEXT_CASE,cBREAK,cMINOR_BREAK, /* break-continue-switch */
|
|
||||||
cCONTINUE,cBREAK_HERE,cCONTINUE_HERE,cCONTINUE_CORRECTION,
|
|
||||||
cBREAK_MARK,cPUSH_SWITCH_MARK,cCLEAN_SWITCH_MARK,
|
|
||||||
|
|
||||||
cDBLADD,cDBLMIN,cDBLMUL,cDBLDIV,cDBLPOW, /* double operations */
|
|
||||||
cNEGATE,cPUSHDBLSYM,cPOP,cPOPDBLSYM,cPUSHDBL,
|
|
||||||
|
|
||||||
cREQUIRE,cPUSHFREE,cMAKELOCAL,cMAKESTATIC,cNUMPARAM, /* functions and procedures */
|
|
||||||
cCALL,cQCALL,cPUSHSYMLIST,cPOPSYMLIST,cRET_FROM_FUN,
|
|
||||||
cUSER_FUNCTION,cRETVAL,cEND_FUNCTION,
|
|
||||||
cFUNCTION_OR_ARRAY,cSTRINGFUNCTION_OR_ARRAY,
|
|
||||||
|
|
||||||
cPOKE,cPOKEFILE,cSWAP,cDUPLICATE,cDOCU, /* internals */
|
|
||||||
|
|
||||||
cAND,cOR,cNOT,cLT,cGT,cLE,cGE,cEQ,cNE, /* comparisons */
|
|
||||||
cSTREQ,cSTRNE,cSTRLT,cSTRLE,cSTRGT,cSTRGE,
|
|
||||||
|
|
||||||
cPUSHSTRSYM,cPOPSTRSYM,cPUSHSTR,cCONCAT, /* string operations */
|
|
||||||
cPUSHSTRPTR,cCHANGESTRING,cGLOB,
|
|
||||||
|
|
||||||
cPRINT,cREAD,cRESTORE,cQRESTORE,cONESTRING, /* i/o operations */
|
|
||||||
cREADDATA,cDATA,cOPEN,cCHECKOPEN,cCHECKSEEK,cCLOSE,cPUSHSTREAM,cPOPSTREAM,
|
|
||||||
cSEEK,cSEEK2,cTESTEOF,cWAIT,cBELL,cMOVE,
|
|
||||||
cCLEARSCR,cCOLOUR,cCHKPROMPT,cERROR,
|
|
||||||
|
|
||||||
/*
|
|
||||||
cDOT,cLINE,cCIRCLE,cCLEARWIN,
|
|
||||||
cOPENPRN,cCLOSEPRN,cMOVEORIGIN,cRECT,
|
|
||||||
cPUTBIT, */
|
|
||||||
|
|
||||||
cPUTCHAR,
|
|
||||||
|
|
||||||
cOPENWIN, cCLOSEWIN, cLAYOUT, cWINSET1, cWINSET2, cWINSET3, cWINSET4, /* Be Graphics */
|
|
||||||
cBUTTON, cALERT, cMENU, cTEXTCONTROL, cCHECKBOX, cRADIOBUTTON, cWINCLEAR,
|
|
||||||
cLISTBOX, cDROPBOX, cITEMADD, cITEMDEL, cITEMCLEAR, cLOCALIZE, cLOCALIZE2, cLOCALIZESTOP, cTEXT, cTEXT2, cTEXTALIGN,
|
|
||||||
cTEXTEDIT, cTEXTADD, cTEXTSET, cTEXTSET2, cTEXTCOLOR1, cTEXTCOLOR2, cTEXTSET3, cTEXTCLEAR,
|
|
||||||
cVIEW, cBOXVIEW, cBOXVIEWSET, cTAB, cSLIDER1, cSLIDER2, cSLIDER3, cSLIDER4, cSLIDER5, cSLIDER6,
|
|
||||||
cOPTION1, cOPTION2, cOPTION3, cDROPZONE, cTEXTCONTROL2, cTEXTCONTROL3, cTEXTCONTROL4, cTEXTCONTROL5,
|
|
||||||
cCOLORCONTROL1, cCOLORCONTROL2, cTREEBOX1, cTREEBOX2, cTREEBOX3, cTREEBOX4, cTREEBOX5,
|
|
||||||
cBUTTONIMAGE, cCHECKBOXIMAGE, cCHECKBOXSET, cRADIOSET, cTOOLTIP, cTOOLTIPNEW, cTOOLTIPCOLOR, cTREESORT,
|
|
||||||
cLISTSORT, cFILEBOX, cFILEBOXADD2, cFILEBOXCLEAR, cCOLUMNBOXREMOVE,
|
|
||||||
cCOLUMNBOXSELECT, cCOLUMNBOXADD, cDROPBOXSELECT, cMENU2, cSUBMENU1, cSUBMENU2, cCLIPBOARDCOPY,
|
|
||||||
cCOLUMNBOXCOLOR, cPRINTERCONFIG, cCALENDAR, cLISTBOXSELECT, cLISTBOXADD1, cLISTBOXADD2,
|
|
||||||
cLISTBOXDEL2, cSCROLLBAR, cSCROLLBARSET1, cSCROLLBARSET2, cSCROLLBARSET3, cTREEBOX7, cTREEBOX8,
|
|
||||||
cTREEBOX9, cTREEBOX10, cTREEBOX11, cSPLITVIEW1, cSPLITVIEW2, cSPLITVIEW3,
|
|
||||||
cSTACKVIEW1, cSTACKVIEW2, cTEXTURL1, cTEXTURL2, cDRAWSET3, cSPINCONTROL1, cTABSET, cTABDEL, cTABADD,
|
|
||||||
cSPINCONTROL2, cDROPBOXREMOVE, cDROPBOXCLEAR, cSUBMENU3, cMENU3, cCALENDARSET,
|
|
||||||
cDOT, cLINE, cCIRCLE, cDRAWTEXT, cDRAWRECT, cTREEBOX12, cOPTION4, cOPTION5,
|
|
||||||
cDRAWCLEAR, cDRAWSET1, cDRAWSET2, cELLIPSE, cCURVE, /* Drawing */
|
|
||||||
cBITMAP, cBITMAPDRAW, cBITMAPDRAW2, cBITMAPGET, cBITMAPGET2, cBITMAPGETICON, cBITMAPDRAG, cBITMAPREMOVE, cCANVAS, /* Bitmaps */
|
|
||||||
cSOUNDSTOP, cSOUNDWAIT, cMEDIASOUNDSTOP, /* Sound */
|
|
||||||
cTREEBOX13, cDRAWSET4, cSHORTCUT, cMOUSESET,
|
|
||||||
cSCREENSHOT, cSTATUSBAR, cSTATUSBARSET, cSTATUSBARSET2, cSTATUSBARSET3, cLAUNCH, cRESTORE2, cRESTORE3,
|
|
||||||
cATTRIBUTE1, cATTRIBUTE2, cATTRIBUTECLEAR,
|
|
||||||
cLAST_COMMAND /* no command, just marks end of list */
|
|
||||||
};
|
|
||||||
|
|
||||||
enum stackentries { /* different types of stackentries */
|
|
||||||
stGOTO,stSTRING,stSTRINGARRAYREF,stNUMBER,stNUMBERARRAYREF,stLABEL,stRETADD,stRETADDCALL,stFREE,stROOT,
|
|
||||||
stANY,stSTRING_OR_NUMBER,stSTRING_OR_NUMBER_ARRAYREF, /* these will never appear on stack but are used to check with pop */
|
|
||||||
stSWITCH_MARK, /* used to clean up stack after switch-statement */
|
|
||||||
stSWITCH_STRING,stSWITCH_NUMBER /* only used in switch statement, compares true to every string or number */
|
|
||||||
};
|
|
||||||
|
|
||||||
enum symbols { /* different types of symbols */
|
|
||||||
sySTRING,syNUMBER,syFREE,syARRAY
|
|
||||||
};
|
|
||||||
|
|
||||||
enum function_type { /* different types of functions */
|
|
||||||
ftNONE,ftNUMBER,ftSTRING
|
|
||||||
};
|
|
||||||
|
|
||||||
enum addmodes { /* different modes for adding symbols */
|
|
||||||
amSEARCH,amSEARCH_PRE,amADD_LOCAL,amADD_GLOBAL,amSEARCH_VERY_LOCAL
|
|
||||||
};
|
|
||||||
|
|
||||||
enum states { /* current state of program */
|
|
||||||
HATCHED,INITIALIZED,COMPILING,RUNNING,FINISHED
|
|
||||||
};
|
|
||||||
|
|
||||||
enum yabkeys { /* recognized special keys */
|
|
||||||
kERR,kUP,kDOWN,kLEFT,kRIGHT,kDEL,kINS,kCLEAR,kHOME,kEND,
|
|
||||||
kF0,kF1,kF2,kF3,kF4,kF5,kF6,kF7,kF8,kF9,kF10,kF11,kF12,
|
|
||||||
kF13,kF14,kF15,kF16,kF17,kF18,kF19,kF20,kF21,kF22,kF23,kF24,
|
|
||||||
kBACKSPACE,kSCRNDOWN,kSCRNUP,kENTER,kESC,kTAB,kLASTKEY
|
|
||||||
};
|
|
||||||
|
|
||||||
enum searchmodes { /* modes for searching labels */
|
|
||||||
smSUB=1,smLINK=2,smLABEL=4,smGLOBAL=8
|
|
||||||
};
|
|
||||||
|
|
||||||
/* ------------- global types ---------------- */
|
|
||||||
|
|
||||||
struct stackentry { /* one element on stack */
|
|
||||||
int type; /* contents of entry */
|
|
||||||
struct stackentry *next;
|
|
||||||
struct stackentry *prev;
|
|
||||||
void *pointer; /* multiuse ptr */
|
|
||||||
double value; /* double value, only one of pointer or value is used */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
symbols are organized as a stack of lists: for every procedure call
|
|
||||||
a new list is pushed onto the stack; all local variables of this
|
|
||||||
function are chained into this list. After return from this procedure,
|
|
||||||
the whole list is discarded and one element is popped from
|
|
||||||
the stack.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct symstack { /* stack of symbol lists */
|
|
||||||
struct symbol *next_in_list;
|
|
||||||
struct symstack *next_in_stack;
|
|
||||||
struct symstack *prev_in_stack;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct symbol { /* general symbol; either variable, string */
|
|
||||||
int type;
|
|
||||||
struct symbol *link; /* points to linked symbol, if any */
|
|
||||||
struct symbol *next_in_list; /* next symbol in symbollist */
|
|
||||||
char *name; /* name of symbol */
|
|
||||||
void *pointer; /* pointer to string contents (if any) */
|
|
||||||
char *args; /* used to store number of arguments for functions/array */
|
|
||||||
double value;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct command { /* one interpreter command */
|
|
||||||
int type; /* type of command */
|
|
||||||
int cnt; /* count of this command */
|
|
||||||
struct command *prev; /* link to previous command */
|
|
||||||
struct command *next; /* link to next command */
|
|
||||||
void *pointer; /* pointer to data */
|
|
||||||
void *symbol; /* pointer to symbol (or data within symbol) associated with command */
|
|
||||||
struct command *jump; /* pointer to jump destination */
|
|
||||||
char *name; /* name of symbol associated with command */
|
|
||||||
struct command *nextref; /* next cmd within function referencing a symbol */
|
|
||||||
struct command *nextassoc; /* next cmd within within chain of associated commands */
|
|
||||||
int args; /* number of arguments for function/array call */
|
|
||||||
/* or stream number for open/close */
|
|
||||||
int tag; /* char/int to pass some information */
|
|
||||||
int line; /* line this command has been created for */
|
|
||||||
struct libfile_name *lib; /* associated library */
|
|
||||||
int switch_id; /* TRUE, if in switch, FALSE else; used to check gotos */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct array { /* data structure for arrays */
|
|
||||||
int bounds[10]; /* index boundaries */
|
|
||||||
int dimension; /* dimension of array */
|
|
||||||
void *pointer; /* contents of array */
|
|
||||||
char type; /* decide between string- ('s') and double-Arrays ('d') */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct buff_chain { /* buffer chain for system-input */
|
|
||||||
char buff[SYSBUFFLEN+1]; /* content of buffer */
|
|
||||||
int len; /* used length of buff */
|
|
||||||
struct buff_chain *next; /* next buffer in chain */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct libfile_name { /* used to store library names */
|
|
||||||
char *l; /* long version, including path */
|
|
||||||
int llen; /* length of l */
|
|
||||||
char *s; /* short version */
|
|
||||||
int slen; /* length of s */
|
|
||||||
int lineno; /* linenumber within file */
|
|
||||||
struct command *datapointer; /* data pointer of this library */
|
|
||||||
struct command *firstdata; /* first data-command in library */
|
|
||||||
struct libfile_name *next; /* next in chain */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* ------------- function prototypes defined in ... ---------------- */
|
|
||||||
|
|
||||||
/* main.c */
|
|
||||||
void error(int,char *); /* reports an error and possibly exits */
|
|
||||||
void error_with_line(int,char *,int); /* reports an error and possibly exits */
|
|
||||||
void *my_malloc(unsigned); /* my own version of malloc */
|
|
||||||
void my_free(void *); /* free memory */
|
|
||||||
char *my_strerror(int); /* return description of error messages */
|
|
||||||
struct command *add_command(int,char *); /* get room for new command */
|
|
||||||
void signal_handler(int); /* handle various signals */
|
|
||||||
char *my_strdup(char *); /* my own version of strdup */
|
|
||||||
char *my_strndup(char *,int); /* own version of strndup */
|
|
||||||
struct libfile_name *new_file(char *,char *); /* create a new structure for library names */
|
|
||||||
char *dotify(char *,int); /* add library name, if not already present */
|
|
||||||
char *strip(char *); /* strip off to minimal name */
|
|
||||||
void do_error(struct command *); /* issue user defined error */
|
|
||||||
void create_docu(char *); /* create command 'docu' */
|
|
||||||
extern void add_variables(char *); /* add pi and e to symbol table */
|
|
||||||
void compile(void); /* create a subroutine at runtime */
|
|
||||||
void create_execute(int); /* create command 'cEXECUTE' */
|
|
||||||
void execute(struct command *); /* execute a subroutine */
|
|
||||||
int isbound(void); /* check if this interpreter is bound to a program */
|
|
||||||
|
|
||||||
|
|
||||||
/* io.c */
|
|
||||||
void checkopen(void); /* check, if open has been sucessfull */
|
|
||||||
void create_colour(int); /* create command 'reverse' */
|
|
||||||
void colour(struct command *cmd); /* switch reverse-printing */
|
|
||||||
void create_print(char); /* create command 'print' */
|
|
||||||
void print(struct command *); /* print on screen */
|
|
||||||
void create_myread(char,int); /* create command 'read' */
|
|
||||||
void myread(struct command *); /* read from file or stdin */
|
|
||||||
void create_onestring(char *); /* write string to file */
|
|
||||||
void onestring(char *); /* write string to file */
|
|
||||||
void chkprompt(void); /* print an intermediate prompt if necessary */
|
|
||||||
void create_myopen(int); /* create command 'myopen' */
|
|
||||||
void myopen(struct command *); /* open specified file for given name */
|
|
||||||
void testeof(struct command *); /* close the specified stream */
|
|
||||||
void myclose(); /* close the specified stream */
|
|
||||||
void create_pps(int,int); /* create command pushswitch or popswitch */
|
|
||||||
void push_switch(struct command *); /* push current stream on stack and switch to new one */
|
|
||||||
void pop_switch(void); /* pop current stream from stack and switch to it */
|
|
||||||
void mymove(); /* move to specific position on screen */
|
|
||||||
void clearscreen(); /* clear entire screen */
|
|
||||||
char *inkey(double); /* gets char from keyboard, blocks and doesn´t print */
|
|
||||||
char *replace(char *); /* replace \n,\a, etc. */
|
|
||||||
|
|
||||||
/* graphic.c */
|
|
||||||
void create_openwin(int); /* create Command 'openwin' */
|
|
||||||
void openwin(struct command *, YabInterface* yab); /* open a Window */
|
|
||||||
void closewin(struct command *, YabInterface* yab); /* close the window */
|
|
||||||
int numwindows(); /* number of windows opened */
|
|
||||||
void createbutton(struct command *, YabInterface* yab); /* create a Button */
|
|
||||||
int createimage(double x, double y, const char* imagefile, const char* window, YabInterface* yab, int line, const char* libname); /* insert an image*/
|
|
||||||
int createimage2(double x1, double y1, double x2, double y2, const char* imagefile, const char* window, YabInterface* yab, int line, const char* libname); /* insert an image*/
|
|
||||||
int createsvg(double x1, double y1, double x2, double y2, const char* imagefile, const char* window, YabInterface* yab, int line, const char* libname); /* insert a svg image*/
|
|
||||||
int ismousein(const char* view, YabInterface *yab, int line, const char* libname); /* check if mouse is in view */
|
|
||||||
char* getmousein(YabInterface *yab, int line, const char* libname); /* check which view the mouse is in */ //vasper
|
|
||||||
void drawtext(struct command *, YabInterface* yab); /* draw text */
|
|
||||||
void drawrect(struct command *, YabInterface* yab); /* draw rectangle */
|
|
||||||
void drawclear(struct command *, YabInterface* yab); /* clears canvas */
|
|
||||||
void createmenu(struct command *, YabInterface* yab); /* add a menu */
|
|
||||||
void createalert(struct command *, YabInterface* yab); /* alert */
|
|
||||||
void createtext(struct command *, YabInterface* yab); /* text */
|
|
||||||
void text2(struct command *, YabInterface* yab); /* text */
|
|
||||||
void textalign(struct command *, YabInterface* yab); /* align text */
|
|
||||||
void createtextcontrol(struct command *, YabInterface* yab); /* textcontrol */
|
|
||||||
void createcheckbox(struct command *, YabInterface* yab); /* checkbox*/
|
|
||||||
void createradiobutton(struct command *, YabInterface* yab); /* radio button */
|
|
||||||
void createlistbox(struct command *, YabInterface* yab); /* list box */
|
|
||||||
void createdropbox(struct command *, YabInterface* yab); /* drop box */
|
|
||||||
void createitem(struct command *, YabInterface* yab); /* item add*/
|
|
||||||
void removeitem(struct command *, YabInterface* yab); /* item del*/
|
|
||||||
void clearitems(struct command *, YabInterface* yab); /* clears itemlist */
|
|
||||||
void localize();
|
|
||||||
void localizestop();
|
|
||||||
void localize2(struct command *, YabInterface* yab);
|
|
||||||
void setlayout(struct command *, YabInterface* yab); /* set layout */
|
|
||||||
void winset1(struct command *, YabInterface* yab);
|
|
||||||
void winset2(struct command *, YabInterface* yab);
|
|
||||||
void winset3(struct command *, YabInterface* yab);
|
|
||||||
void winset4(struct command *, YabInterface* yab);
|
|
||||||
void winclear(struct command *, YabInterface* yab);
|
|
||||||
void textedit(struct command *, YabInterface* yab);
|
|
||||||
void textadd(struct command *, YabInterface* yab);
|
|
||||||
void textset(struct command *, YabInterface* yab);
|
|
||||||
void textset2(struct command *, YabInterface* yab);
|
|
||||||
void textset3(struct command *, YabInterface* yab);
|
|
||||||
void textcolor1(struct command *, YabInterface* yab);
|
|
||||||
void textcolor2(struct command *, YabInterface* yab);
|
|
||||||
void textclear(struct command *, YabInterface* yab);
|
|
||||||
char* textget(const char*, YabInterface* yab, int line, const char* libname);
|
|
||||||
int textget2(const char*, const char*, YabInterface* yab, int line, const char* libname);
|
|
||||||
char* textget3(const char*, int, YabInterface* yab, int line, const char* libname);
|
|
||||||
double textget4(const char*, const char*, int, YabInterface* yab, int line, const char* libname);
|
|
||||||
int textget5(const char*, const char*, const char*, YabInterface* yab, int line, const char* libname);
|
|
||||||
char* textget6(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
char* textcontrolget(const char*, YabInterface* yab, int line, const char* libname);
|
|
||||||
void drawset1(struct command *, YabInterface* yab);
|
|
||||||
void drawset2(struct command *, YabInterface* yab);
|
|
||||||
char* getmessages(YabInterface* yab, int line, const char* libname); /* get message string */
|
|
||||||
char* getmousemessages(const char* view, YabInterface* yab, int line, const char* libname); /* get mouse message string */
|
|
||||||
char* gettranslation(const char*,YabInterface* yab, int line, const char* libname); /* get translation string */
|
|
||||||
char* getmenutranslation(const char*,YabInterface* yab, int line, const char* libname); /* get translation string */
|
|
||||||
char* getloadfilepanel(const char*, const char*, const char*, YabInterface *yab, int line, const char* libname); /* open a load filepanel */
|
|
||||||
char* getsavefilepanel(const char*, const char*, const char*, const char*, YabInterface *yab, int line, const char* libname); /* open a save filepanel */
|
|
||||||
void view(struct command *, YabInterface *yab); /* add a view */
|
|
||||||
void boxview(struct command *, YabInterface *yab); /* add a boxview */
|
|
||||||
void boxviewset(struct command *, YabInterface *yab);/*boxview options*/
|
|
||||||
void tab(struct command *, YabInterface *yab); /* add a tab */
|
|
||||||
void tabset(struct command *, YabInterface *yab); /* set a tab */
|
|
||||||
void tabadd(struct command *, YabInterface *yab);
|
|
||||||
void tabdel(struct command *, YabInterface *yab);
|
|
||||||
int tabviewget(const char* tab, YabInterface *yab, int line, const char* libname); /* get a tab */
|
|
||||||
void drawdot(struct command *, YabInterface *yab); /* draw a dot */
|
|
||||||
void drawline(struct command *, YabInterface *yab); /* draw a line */
|
|
||||||
void drawcircle(struct command *, YabInterface *yab); /* draw a circle */
|
|
||||||
void drawellipse(struct command *, YabInterface *yab); /* draw a ellipse */
|
|
||||||
void drawcurve(struct command *, YabInterface *yab); /* draw a curve */
|
|
||||||
void slider1(struct command *, YabInterface *yab);
|
|
||||||
void slider2(struct command *, YabInterface *yab);
|
|
||||||
void slider3(struct command *, YabInterface *yab);
|
|
||||||
void slider4(struct command *, YabInterface *yab);
|
|
||||||
void slider5(struct command *, YabInterface *yab);
|
|
||||||
void slider6(struct command *, YabInterface *yab);
|
|
||||||
void option1(struct command *, YabInterface *yab);
|
|
||||||
void option2(struct command *, YabInterface *yab);
|
|
||||||
void option3(struct command *, YabInterface *yab);
|
|
||||||
void dropzone(struct command *, YabInterface *yab);
|
|
||||||
void colorcontrol1(struct command *, YabInterface *yab);
|
|
||||||
void colorcontrol2(struct command *, YabInterface *yab);
|
|
||||||
void textcontrol2(struct command *, YabInterface *yab);
|
|
||||||
void textcontrol3(struct command *, YabInterface *yab);
|
|
||||||
void textcontrol4(struct command *, YabInterface *yab);
|
|
||||||
void textcontrol5(struct command *, YabInterface *yab);
|
|
||||||
void treebox1(struct command *, YabInterface *yab);
|
|
||||||
void treebox2(struct command *, YabInterface *yab);
|
|
||||||
void treebox3(struct command *, YabInterface *yab);
|
|
||||||
void treebox4(struct command *, YabInterface *yab);
|
|
||||||
void treebox5(struct command *, YabInterface *yab);
|
|
||||||
void treebox7(struct command *, YabInterface *yab);
|
|
||||||
void treebox8(struct command *, YabInterface *yab);
|
|
||||||
void treebox9(struct command *, YabInterface *yab);
|
|
||||||
void treebox10(struct command *, YabInterface *yab);
|
|
||||||
void treebox11(struct command *, YabInterface *yab);
|
|
||||||
void buttonimage(struct command *, YabInterface *yab);
|
|
||||||
void checkboximage(struct command *, YabInterface *yab);
|
|
||||||
void checkboxset(struct command *, YabInterface *yab);
|
|
||||||
void radioset(struct command *, YabInterface *yab);
|
|
||||||
void tooltip(struct command *, YabInterface *yab);
|
|
||||||
void tooltipnew(struct command *, YabInterface *yab);
|
|
||||||
void tooltipcolor(struct command *, YabInterface *yab);
|
|
||||||
void listsort(struct command *, YabInterface *yab);
|
|
||||||
void treesort(struct command *, YabInterface *yab);
|
|
||||||
void filebox(struct command *, YabInterface *yab);
|
|
||||||
void fileboxadd2(struct command *, YabInterface *yab);
|
|
||||||
void fileboxclear(struct command *, YabInterface *yab);
|
|
||||||
void columnboxadd(struct command *, YabInterface *yab);
|
|
||||||
void columnboxremove(struct command *, YabInterface *yab);
|
|
||||||
void columnboxselect(struct command *, YabInterface *yab);
|
|
||||||
void columnboxcolor(struct command *, YabInterface *yab);
|
|
||||||
void dropboxselect(struct command *, YabInterface *yab);
|
|
||||||
void menu2(struct command *, YabInterface *yab);
|
|
||||||
void submenu1(struct command *, YabInterface *yab);
|
|
||||||
void submenu2(struct command *, YabInterface *yab);
|
|
||||||
void clipboardcopy(struct command *, YabInterface *yab);
|
|
||||||
void launch(struct command *, YabInterface *yab);
|
|
||||||
int printer(const char* docname, const char *view, const char* config, YabInterface *yab, int line, const char* libname);
|
|
||||||
void printerconfig(struct command *, YabInterface *yab);
|
|
||||||
char* keyboardmessages(const char* view, YabInterface* yab, int line, const char* libname);
|
|
||||||
char* clipboardpaste(YabInterface* yab, int line, const char* libname);
|
|
||||||
char* columnboxget(const char* columnbox, int column, int position, YabInterface* yab, int line, const char* libname);
|
|
||||||
int columnboxcount(const char* columnbox, YabInterface* yab, int line, const char* libname);
|
|
||||||
int windowgetnum(const char* view, const char *option, YabInterface* yab, int line, const char* libname);
|
|
||||||
int viewgetnum(const char* view, const char *option, YabInterface* yab, int line, const char* libname); //vasper
|
|
||||||
int newalert(const char* text, const char* button1, const char* button2, const char* button3, const char* option, YabInterface* yab, int line, const char* libname);
|
|
||||||
void calendar1(struct command *, YabInterface *yab);
|
|
||||||
char* calendar2(const char* calendar, YabInterface *yab, int line, const char* libname);
|
|
||||||
void calendar3(struct command *, YabInterface *yab);
|
|
||||||
void listboxadd1(struct command *, YabInterface *yab);
|
|
||||||
void listboxadd2(struct command *, YabInterface *yab);
|
|
||||||
void listboxselect(struct command *, YabInterface *yab);
|
|
||||||
void listboxremove(struct command *, YabInterface *yab);
|
|
||||||
int listboxcount(const char* listbox, YabInterface *yab, int line, const char* libname);
|
|
||||||
char* treeboxget(const char* treebox, int position, YabInterface *yab, int line, const char* libname);
|
|
||||||
int treeboxcount(const char* treebox, YabInterface *yab, int line, const char* libname);
|
|
||||||
char* listboxget(const char* listbox, int position, YabInterface *yab, int line, const char* libname);
|
|
||||||
void scrollbar(struct command *, YabInterface *yab);
|
|
||||||
void scrollbarset1(struct command *, YabInterface *yab);
|
|
||||||
void scrollbarset2(struct command *, YabInterface *yab);
|
|
||||||
void scrollbarset3(struct command *, YabInterface *yab);
|
|
||||||
double scrollbarget(const char* scrollbar, const char* option, YabInterface *yab, int line, const char* libname);
|
|
||||||
void splitview1(struct command *, YabInterface *yab);
|
|
||||||
void splitview2(struct command *, YabInterface *yab);
|
|
||||||
void splitview3(struct command *, YabInterface *yab);
|
|
||||||
double splitviewget(const char* splitview, const char* option, YabInterface *yab, int line, const char* libname);
|
|
||||||
void stackview1(struct command *, YabInterface *yab);
|
|
||||||
void stackview2(struct command *, YabInterface *yab);
|
|
||||||
int stackviewget(const char* stackview, YabInterface *yab, int line, const char* libname);
|
|
||||||
void texturl1(struct command *, YabInterface *yab);
|
|
||||||
void texturl2(struct command *, YabInterface *yab);
|
|
||||||
void drawset3(struct command *, YabInterface *yab);
|
|
||||||
void spincontrol1(struct command *, YabInterface *yab);
|
|
||||||
void spincontrol2(struct command *, YabInterface *yab);
|
|
||||||
int spincontrol(const char* spincontrol, YabInterface *yab, int line, const char* libname);
|
|
||||||
char* popupmenu(double x, double y, const char* messages, const char* id, YabInterface *yab, int line, const char* libname);
|
|
||||||
void dropboxremove(struct command *, YabInterface *yab);
|
|
||||||
void dropboxclear(struct command *, YabInterface *yab);
|
|
||||||
int dropboxcount(const char* id, YabInterface *yab, int line, const char* libname);
|
|
||||||
char* dropboxget(const char* id, int position, YabInterface *yab, int line, const char* libname);
|
|
||||||
int sliderget(const char *slider, YabInterface *yab, int line, const char* libname);
|
|
||||||
int colorcontrolget(const char* colorcontrol, const char* option, YabInterface *yab, int line, const char* libname);
|
|
||||||
void submenu3(struct command *, YabInterface *yab);
|
|
||||||
void menu3(struct command *, YabInterface *yab);
|
|
||||||
double drawget1(const char*, const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
double drawget2(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
char* drawget3(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int drawget4(double, double, const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
void option4(struct command *, YabInterface *yab);
|
|
||||||
void option5(struct command *, YabInterface *yab);
|
|
||||||
void treebox12(struct command *, YabInterface *yab);
|
|
||||||
int messagesend(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int threadkill(const char*, int, YabInterface *yab, int line, const char* libname);
|
|
||||||
int threadget(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
void bitmap(struct command *, YabInterface *yab);
|
|
||||||
void bitmapdraw(struct command *, YabInterface *yab);
|
|
||||||
void bitmapdraw2(struct command *, YabInterface *yab);
|
|
||||||
void bitmapget(struct command *, YabInterface *yab);
|
|
||||||
void bitmapget2(struct command *, YabInterface *yab);
|
|
||||||
void bitmapgeticon(struct command *, YabInterface *yab);
|
|
||||||
void bitmapdrag(struct command *, YabInterface *yab);
|
|
||||||
void bitmapremove(struct command *, YabInterface *yab);
|
|
||||||
void screenshot(struct command *, YabInterface *yab);
|
|
||||||
void statusbar(struct command *, YabInterface *yab);
|
|
||||||
void statusbarset(struct command *, YabInterface *yab);
|
|
||||||
void statusbarset2(struct command *, YabInterface *yab);
|
|
||||||
void statusbarset3(struct command *, YabInterface *yab);
|
|
||||||
void canvas(struct command *, YabInterface *yab);
|
|
||||||
int bitmapsave(const char*, const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int bitmapload(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int bitmapgetnum(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int bitmapcolor(double x, double y, const char* id, const char* option, YabInterface *yab, int line, const char* libname);
|
|
||||||
int listboxgetnum(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int dropboxgetnum(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int columnboxgetnum(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int treeboxgetnum(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
int treeboxgetopt(const char*, const char*, int, YabInterface *yab, int line, const char* libname);
|
|
||||||
void treebox13(struct command *, YabInterface *yab);
|
|
||||||
void drawset4(struct command *, YabInterface *yab);
|
|
||||||
int sound(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
void soundstop(struct command *, YabInterface *yab);
|
|
||||||
void soundwait(struct command *, YabInterface *yab);
|
|
||||||
int mediasound(const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
void mediasoundstop(struct command *, YabInterface *yab);
|
|
||||||
void shortcut(struct command *, YabInterface *yab);
|
|
||||||
int iscomputeron(YabInterface *yab, int line, const char* libname);
|
|
||||||
void mouseset(struct command *, YabInterface *yab);
|
|
||||||
void gettermkey(char *); /* read a key from terminal */
|
|
||||||
void attribute1(struct command *, YabInterface *yab);
|
|
||||||
void attributeclear(struct command *, YabInterface *yab);
|
|
||||||
char* attributeget1(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
double attributeget2(const char*, const char*, YabInterface *yab, int line, const char* libname);
|
|
||||||
|
|
||||||
/* function.c */
|
|
||||||
void create_exception(int); /* create command 'exception' */
|
|
||||||
void exception(struct command *); /* change handling of exceptions */
|
|
||||||
void create_poke(char); /* create Command 'POKE' */
|
|
||||||
void poke(); /* poke in internals */
|
|
||||||
void pokefile(struct command *); /* poke into file */
|
|
||||||
void create_dblrelop(char); /* create command dblrelop */
|
|
||||||
void dblrelop(struct command *); /* compare topmost double-values */
|
|
||||||
void concat(void); /* concetenates two strings from stack */
|
|
||||||
void create_strrelop(char); /* create command strrelop */
|
|
||||||
void strrelop(struct command *); /* compare topmost string-values */
|
|
||||||
void create_changestring(int); /* create command 'changestring' */
|
|
||||||
void changestring(struct command *); /* changes a string */
|
|
||||||
void glob(void); /* check, if pattern globs string */
|
|
||||||
void create_boole(char); /* create command boole */
|
|
||||||
void boole(struct command *); /* perform and/or/not */
|
|
||||||
void create_function(int); /* create command 'function' */
|
|
||||||
void function(struct command *, YabInterface* yab); /* performs a function */
|
|
||||||
int myformat(char *,double,char *,char *); /* format number */
|
|
||||||
void create_restore(char *); /* create command 'restore' */
|
|
||||||
void restore(struct command *); /* reset data pointer to given label */
|
|
||||||
void create_dbldata(double); /* create command dbldata */
|
|
||||||
void create_strdata(char *); /* create command strdata */
|
|
||||||
void create_readdata(char); /* create command readdata */
|
|
||||||
void readdata(struct command *); /* read data items */
|
|
||||||
void mywait(); /* wait given number of seconds */
|
|
||||||
void mybell(); /* ring ascii bell */
|
|
||||||
void getmousexybm(char *,int *,int *,int *,int *); /* get mouse coordinates */
|
|
||||||
void token(struct command *); /* extract token from variable */
|
|
||||||
void tokenalt(struct command *); /* extract token from variable with alternate semantics */
|
|
||||||
|
|
||||||
|
|
||||||
/* symbol.c */
|
|
||||||
struct array *create_array(int,int); /* create an array */
|
|
||||||
void clearrefs(struct command *); /* clear references for commands within function */
|
|
||||||
void duplicate(void); /* duplicate topmost element of stack */
|
|
||||||
void negate(void); /* negates top of stack */
|
|
||||||
void create_require(int); /* create command 'cREQUIRE' */
|
|
||||||
void require(struct command *); /* check item on stack has right type */
|
|
||||||
void create_makelocal(char *,int); /* create command 'cMAKELOCAL' */
|
|
||||||
void create_makestatic(char *,int); /* create command 'cMAKESTATIC' */
|
|
||||||
void create_arraylink(char *,int); /* create command 'cARRAYLINK' */
|
|
||||||
void create_pusharrayref(char *,int); /* create command 'cPUSHARRAYREF' */
|
|
||||||
void pusharrayref(struct command *); /* push an array reference onto stack */
|
|
||||||
void arraylink(struct command *); /* link a local symbol to a global array */
|
|
||||||
void makestatic(struct command *); /* makes symbol static */
|
|
||||||
void makelocal(struct command *); /* makes symbol local */
|
|
||||||
void create_numparam(void); /* create command 'cNUMPARAM' */
|
|
||||||
void numparam(struct command *); /* count number of function parameters */
|
|
||||||
void pushdblsym(struct command *); /* push double symbol onto stack */
|
|
||||||
void popdblsym(struct command *); /* pop double from stack */
|
|
||||||
void create_pushdbl(double); /* create command 'pushdbl' */
|
|
||||||
void pushdbl(struct command *); /* push double onto stack */
|
|
||||||
void create_dblbin(char); /* create binary expression calculation */
|
|
||||||
void dblbin(struct command *); /* compute with two numbers from stack */
|
|
||||||
void pushstrsym(struct command *); /* push string symbol onto stack */
|
|
||||||
void popstrsym(struct command *); /* pop string from stack */
|
|
||||||
void create_pushstr(char *); /* creates command pushstr */
|
|
||||||
void pushstr(struct command *); /* push string onto stack */
|
|
||||||
void pushname(char *); /* push a name on stack */
|
|
||||||
void pushstrptr(struct command *); /* push string-pointer onto stack */
|
|
||||||
void forcheck(void); /* check, if for-loop is done */
|
|
||||||
void forincrement(void); /* increment value on stack */
|
|
||||||
void startfor(void); /* compute initial value of for-variable */
|
|
||||||
void create_goto(char *); /* creates command goto */
|
|
||||||
void create_gosub(char *); /* creates command gosub */
|
|
||||||
void create_call(char *); /* creates command function call */
|
|
||||||
void create_label(char *,int); /* creates command label */
|
|
||||||
void create_sublink(char *); /* create link to subroutine */
|
|
||||||
void pushgoto(void); /* generate label and push goto on stack */
|
|
||||||
void popgoto(void); /* pops a goto and generates the matching command */
|
|
||||||
void jump(struct command *); /* jump to specific Label */
|
|
||||||
void myreturn(struct command *); /* return from gosub */
|
|
||||||
void findnop(); /* used for on_gosub, find trailing nop command */
|
|
||||||
void skipper(void); /* used for on_goto/gosub, skip commands */
|
|
||||||
void skiponce(struct command *); /* skip next command once */
|
|
||||||
void resetskiponce(struct command *); /* find and reset next skip */
|
|
||||||
void decide(void); /* skips next command, if not 0 on stack */
|
|
||||||
void logical_shortcut(struct command *type); /* shortcut and/or if possible */
|
|
||||||
void create_doarray(char *,int); /* creates array-commands */
|
|
||||||
void doarray(struct command *); /* call an array */
|
|
||||||
void create_dim(char *,char); /* create command 'dim' */
|
|
||||||
void dim(struct command *); /* get room for array */
|
|
||||||
void pushlabel(void); /* generate goto and push label on stack */
|
|
||||||
void poplabel(void); /* pops a label and generates the matching command */
|
|
||||||
void storelabel(); /* push label on stack */
|
|
||||||
void matchgoto(); /* generate goto matching label on stack */
|
|
||||||
void swap(void); /*swap topmost elements on stack */
|
|
||||||
struct stackentry *push(void); /* push element on stack and enlarge it*/
|
|
||||||
struct stackentry *pop(int); /* pops element to memory */
|
|
||||||
struct symbol *get_sym(char *,int,int); /* find and/or add a symbol */
|
|
||||||
void link_symbols(struct symbol *,struct symbol *); /* link one symbol to the other */
|
|
||||||
void pushsymlist(void); /* push a new list on symbol stack */
|
|
||||||
void popsymlist(void); /* pop list of symbols and free symbol contents */
|
|
||||||
void dump_sym(); /* dump the stack of lists of symbols */
|
|
||||||
void dump_sub(int); /* dump the stack of subroutine calls */
|
|
||||||
void create_retval(int,int); /* create command 'cRETVAL' */
|
|
||||||
void retval(struct command *); /* check return value of function */
|
|
||||||
void create_endfunction(void); /* create command cEND_FUNCTION */
|
|
||||||
void function_or_array(struct command *); /* decide whether to do perform function or array */
|
|
||||||
struct command *search_label(char *,int); /* search label */
|
|
||||||
void reshufflestack(struct stackentry *); /* reorganize stack for function call */
|
|
||||||
void push_switch_mark(void); /* push a switch mark */
|
|
||||||
void create_clean_switch_mark(int,int); /* add command clean_switch_mark */
|
|
||||||
void clean_switch_mark(struct command *); /* pop everything up to (and including) first switch_mark from stack */
|
|
||||||
void push_switch_id(void); /* generate a new switch id */
|
|
||||||
void pop_switch_id(void); /* get previous switch id */
|
|
||||||
int get_switch_depth(void); /* get current depth of switch id stack */
|
|
||||||
|
|
||||||
|
|
||||||
/* flex.c */
|
|
||||||
void yyerror(char *); /* yyerror message */
|
|
||||||
void open_main(FILE *,char *,char *); /* switch to file */
|
|
||||||
void open_string(char *); /* open string with commands */
|
|
||||||
FILE *open_library(char *,char **,int); /* search and open a library */
|
|
||||||
void switchlib(void); /* switch library, called by bison */
|
|
||||||
Reference in New Issue
Block a user