Source Code (Use browser search to find items of interest.)
Class Index
kformula'BracketElement (./koffice/kformula/BracketElement.h:20)
class BracketElement : public BasicElement
{
public:
/*
* Normal constructor, Get font from prev element
*/
BracketElement(KFormulaContainer *Formula,
BasicElement *Prev=0,
int Relation=-1,
BasicElement *Next=0,
QString Content="");
/*
* Default destructor
*/
virtual ~BracketElement();
/*
* each derived class must implement its own Draw()
* "prev" is responsable for x,y
*
*/
virtual void draw(QPoint drawPoint,int resolution);
/*
* each derived class must implement its own CheckSize()
* void because autostore size in Data
*/
virtual void checkSize();
/*
* Change font size
*/
virtual void setNumericFont(int newValue);
/*
* Scale font of my child
*/
// virtual void scaleChildrenFont(int level) { child[0]->scaleNumericFont(level); }
/*
* usually call by keyPressEvent()
* if input is delete,backspace,arrows,home,end....
* return cursor position (-1 if no cursor is need)
*/
virtual void save(ostream& out);
virtual void load(istream& in);
// virtual int takeActionFromKeyb(int action);
/*
* do nothing
*/
// virtual int takeAsciiFromKeyb(int action);
/*
* Again, in the future....
*/
/* virtual void save(int file);
virtual void load(int file);
*/
protected:
/*
* If usePixmap is True we need a...
*/
QPixmap *rootPixmap;
bool usePixmap;
};
kformula'BracketElement::BracketElement() (./koffice/kformula/BracketElement.cc:16)
BracketElement::BracketElement(KFormulaContainer *Formula,
BasicElement *Prev,
int Relation,
BasicElement *Next,
QString Content) : BasicElement(Formula,Prev,Relation,Next,Content)
{
/*
Stuff to load pixmap (if need)
*/
usePixmap=FALSE;
childrenNumber=1;
minChildren=1;
child.resize(childrenNumber);
child[0]=0L;
}
kformula'BracketElement::~BracketElement() (./koffice/kformula/BracketElement.cc:34)
BracketElement::~BracketElement()
{
}
kformula'BracketElement::draw() (./koffice/kformula/BracketElement.cc:38)
void BracketElement::draw(QPoint drawPoint,int resolution)
{
QPainter *pen=formula->painter();
int x=drawPoint.x();
int y=drawPoint.y();
if( beActive )
pen->setPen(Qt::red);
int unit=familySize.height()/4;
/*
Draw Bracket!!
*/
int ofs=(numericFont/24);
if (ofs>0) ofs-=1;
char ch=0;
x+=1;
for(int i=0;i<2;i++) {
ch=QChar(content[i]);
if(i) x+=familySize.width()-unit-ofs-3;
switch (ch)
{
case '|':
/*
I could also use DrawRect
*/{
QPointArray points(5);
points.setPoint(1,x+familySize.x()+unit/2,y+familySize.y());
points.setPoint(2,x+familySize.x()+unit/2+ofs,y+familySize.y());
points.setPoint(3,x+familySize.x()+unit/2+ofs,y+familySize.bottom());
points.setPoint(4,x+familySize.x()+unit/2,y+familySize.bottom());
pen->setBrush(pen->pen().color());
pen->drawPolygon(points,FALSE,1,4);
}
break;
case '\\':{
QPointArray points(5);
points.setPoint(1,x+familySize.x(),y+familySize.y());
points.setPoint(2,x+familySize.x()+ofs,y+familySize.y());
points.setPoint(3,x+familySize.x()+unit+ofs,y+familySize.bottom());
points.setPoint(4,x+familySize.x()+unit,y+familySize.bottom());
pen->setBrush(pen->pen().color());
pen->drawPolygon(points,FALSE,1,4);
}
break;
case '/':
{
QPointArray points(5);
points.setPoint(1,x+familySize.x()+unit,y+familySize.y());
points.setPoint(2,x+familySize.x()+unit+ofs,y+familySize.y());
points.setPoint(3,x+familySize.x()+ofs,y+familySize.bottom());
points.setPoint(4,x+familySize.x(),y+familySize.bottom());
pen->setBrush(pen->pen().color());
pen->drawPolygon(points,FALSE,1,4);
}
break;
case '[':
{
QPointArray points(10);
points.setPoint(1,x+familySize.x(),y+familySize.y());
points.setPoint(2,x+familySize.x()-1+unit+ofs,y+familySize.y());
points.setPoint(3,x+familySize.x()-1+unit+ofs,y+familySize.y()+ofs);
points.setPoint(4,x+familySize.x()+ofs,y+familySize.y()+ofs);
points.setPoint(5,x+familySize.x()+ofs,y+familySize.bottom()-ofs);
points.setPoint(6,x+familySize.x()-1+unit+ofs,y+familySize.bottom()-ofs);
points.setPoint(7,x+familySize.x()-1+unit+ofs,y+familySize.bottom());
points.setPoint(8,x+familySize.x(),y+familySize.bottom());
pen->setBrush(pen->pen().color());
pen->drawPolygon(points,FALSE,1,8);
}
break;
case ']':
{
QPointArray points(10);
points.setPoint(1,x+familySize.x(),y+familySize.y());
points.setPoint(2,x+familySize.x()-1+unit+ofs,y+familySize.y());
points.setPoint(3,x+familySize.x()-1+unit+ofs,y+familySize.bottom());
points.setPoint(4,x+familySize.x(),y+familySize.bottom());
points.setPoint(5,x+familySize.x(),y+familySize.bottom()-ofs);
points.setPoint(6,x+familySize.x()-1+unit,y+familySize.bottom()-ofs);
points.setPoint(7,x+familySize.x()-1+unit,y+familySize.y()+ofs);
points.setPoint(8,x+familySize.x(),y+familySize.y()+ofs);
pen->setBrush(pen->pen().color());
pen->drawPolygon(points,FALSE,1,8);
}
break;
case '(':
{
QColor elementColor(pen->pen().color());
pen->setBrush(elementColor);
pen->setPen(QPen(elementColor,ofs));
pen->drawArc(x+familySize.x(),y+familySize.y(),
unit+ofs,familySize.height(),
90*16,180*16);
/* pen->drawChord(x+familySize.x(),y+familySize.y(),
unit+ofs,familySize.height(),
90*16,180*16);
pen->setBrush(pen->backgroundColor());
pen->setPen(pen->backgroundColor());
pen->drawChord(x+familySize.x()+ofs+1,y+familySize.y(),
unit,familySize.height(),
90*16,180*16);
*/
pen->setPen(elementColor);
}
break;
case ')':
{
QColor elementColor(pen->pen().color());
pen->setBrush(elementColor);
pen->setPen(QPen(elementColor,ofs));
pen->drawArc(x+familySize.x(),y+familySize.y(),
unit+ofs,familySize.height(),
270*16,180*16);
/* pen->setBrush(pen->backgroundColor());
pen->setPen(pen->backgroundColor());
pen->drawChord(x+familySize.x()-1,y+familySize.y(),
unit,familySize.height(),
270*16,180*16);
*/ pen->setPen(elementColor);
}
break;
}
}
/*
Draw child[0], it must exist
*/
x=drawPoint.x(); //modified in delimiters draw
if( beActive )
pen->setPen(Qt::blue);
child[0]->draw(QPoint(x+familySize.x()+unit+ofs+3,y),resolution);
myArea=globalSize;;
myArea.moveBy(x,y);
// globalArea=
// globalArea.moveBy(x,y);
#ifdef RECT
pen->setBrush(Qt::green);
pen->setBrush(Qt::NoBrush);
pen->drawRect(myArea);
QRect area(localSize);
area.moveBy(x,y);
pen->drawRect(area);
pen->setBrush(Qt::SolidPattern);
#endif
drawIndexes(pen,resolution);
if( beActive )
pen->setPen(Qt::black);
if(next!=0L) next->draw(drawPoint+QPoint(localSize.width()+1,0),resolution);
}
kformula'BracketElement::checkSize() (./koffice/kformula/BracketElement.cc:200)
void BracketElement::checkSize()
{
//warning("R %p",this);
QRect nextDimension;
if (next!=0L)
{
next->checkSize();
nextDimension=next->getSize();
}
child[0]->checkSize();
familySize=child[0]->getSize();
if (familySize.height()<18)
{
int fmY=familySize.height();
familySize.setTop(familySize.top()-(16-fmY)/2-1);
familySize.setBottom(familySize.bottom()+(16-fmY)/2+1);
}
familySize.setLeft(familySize.left()-(numericFont/24)-(familySize.height()/4)-2);
familySize.setRight(familySize.right()+(numericFont/24)+(familySize.height()/4)+2);
localSize=familySize;
checkIndexesSize(); //This will change localSize adding Indexes Size
familySize.moveBy(-localSize.left(),0);
localSize.moveBy(-localSize.left(),0);
globalSize=localSize;
nextDimension.moveBy(localSize.width(),0);
globalSize=globalSize.unite(nextDimension);
//warning("end");
}
kformula'BracketElement::save() (./koffice/kformula/BracketElement.cc:234)
void BracketElement::save(ostream& out)
{
out << "TYPE=" << 2 << " "
<< "NUMERICFONT=" << numericFont << " "
<< " >" << endl;
for(int i=0;i<4;i++)
if(index[i]!=0L)
{
out << " <ELEM INDEX=" << i << " ";
index[i]->save(out);
}
for(int i=0;i<childrenNumber;i++)
if(child[i]!=0L)
{
out << " <ELEM CHILD=" << i << " ";
child[i]->save(out);
}
if(next!=0)
{
out << " <ELEM NEXT ";
next->save(out);
}
out << "</ELEM>" << endl;
}
kformula'BracketElement::load() (./koffice/kformula/BracketElement.cc:261)
void BracketElement::load(istream& )
{
}
/*int BracketElement::takeAsciiFromKeyb(int)
{
return 2;
}*/
/*int BracketElement::takeActionFromKeyb(int)
{
return -1;
}*/
kformula'BracketElement::setNumericFont() (./koffice/kformula/BracketElement.cc:274)
void BracketElement::setNumericFont(int value)
{
numericFont=value;
/*
We can use differnt pixmap:
numericFont < 20 tinyRoot.xpm
20 < numericFont < 50 normalRoot.xpm
numericFont < 20 bigRoot.xpm
*/
}