Source Code (Use browser search to find items of interest.)

Class Index

kaiman'KaimanStyleElement (./kdemultimedia/kaiman/KaimanStyle.h:14)

class KaimanStyleElement : public QWidget
{
    Q_OBJECT
public:
    KaimanStyleElement(QWidget *parent);
    ~KaimanStyleElement();
    void loadPixmaps(QString &val_s_filename);

    QString	element;
    QString	filename;
    QPoint	upperLeft;
    QPoint	lowerRight;

    QPixmap	*i_pm_normal, *i_pm_pressed, *i_pm_prelight;
    QVector<QPixmap> I_pixmaps;

    static const bool optionVertical    = 1;
    static const bool optionReversed    = 2;
    bool	options[3];
    int		length;

    bool isText;
    bool optionPrelight;
    bool optionStatuslight;
    // This flag remembers, whether the pixmaps are stored horizontal or vertical (
    bool pixmapsStoredVertical;

    // how many pixmaps are used
    int pixmapCount;

    /// mouse events
    void mousePressEvent(QMouseEvent *qme);
    void mouseReleaseEvent(QMouseEvent *qme);
    void mouseMoveEvent(QMouseEvent *qme);
    void paintEvent(class QPaintEvent *qpe);

    static bool		i_b_move;
    static QPoint	i_point_startMove;
    static QPoint	i_point_topLeft;

signals:
    void pressed();
};



kaiman'KaimanStyleElement::KaimanStyleElement() (./kdemultimedia/kaiman/KaimanStyle.cpp:30)

KaimanStyleElement::KaimanStyleElement(QWidget *parent) : QWidget(parent)
{
    // Initialize everything to default values
    filename = "";
    element  = "";
    upperLeft.setX(0);
    upperLeft.setY(0);
    lowerRight.setX(0);
    lowerRight.setY(0);

    optionPrelight = optionStatuslight = pixmapsStoredVertical = false;
    i_pm_normal = i_pm_pressed = i_pm_prelight = 0;
}



kaiman'KaimanStyleElement::~KaimanStyleElement() (./kdemultimedia/kaiman/KaimanStyle.cpp:45)

KaimanStyleElement::~KaimanStyleElement()
{
    /*
    if(i_pm_normal   != 0) delete i_pm_normal;
    if(i_pm_pressed  != 0) delete i_pm_pressed;
    if(i_pm_prelight != 0) delete i_pm_prelight;
    */
}



kaiman'KaimanStyleElement::loadPixmaps() (./kdemultimedia/kaiman/KaimanStyle.cpp:55)

void KaimanStyleElement::loadPixmaps(QString &val_s_filename)
{
    i_pm_normal = 0;
    QPixmap pixmap;
    bool i_b_ret = pixmap.load(val_s_filename);

    if ( !i_b_ret )  {
	QMessageBox::critical( 0, "Kaiman",
			       QString("Cannot load pixmap %1.").arg(val_s_filename));
    }
    else {
	I_pixmaps.resize(length);
	I_pixmaps.setAutoDelete(true);

	if(length) {
	    int width, height, sourcex = 0, sourcey = 0;

	    if(pixmapsStoredVertical) {
		width = pixmap.width();
		height = pixmap.height()/length;
	    }
	    else {
		width = pixmap.width()/length;
		height = pixmap.height();
	    }

	    for(int i=0;i<length;i++)
	    {
		if(pixmapsStoredVertical)
		    sourcey = height*i;
		else
		    sourcex = width*i;

		QPixmap *part = new QPixmap(width,height,pixmap.depth());
		part->fill(Qt::black);
		bitBlt(part,0,0,&pixmap,sourcex,sourcey,width,height);
		I_pixmaps.insert(i,part);

		if(pixmap.mask())
		{
		    QBitmap maskpart(width,height);
		    bitBlt(&maskpart,0,0,pixmap.mask(),sourcex,sourcey,width,height);
		    part->setMask(maskpart);
		}
	    }
	    i_pm_normal = I_pixmaps[0];
	}
    }

    if(!i_pm_normal) {
	I_pixmaps.resize(1);
	I_pixmaps.setAutoDelete(true);
	I_pixmaps.insert(0,new QPixmap);
	i_pm_normal = I_pixmaps[0];
    }
    
    lowerRight.setX(upperLeft.x() + i_pm_normal->width() - 1);
    lowerRight.setY(upperLeft.y() + i_pm_normal->height() - 1);
    setGeometry( QRect( upperLeft, lowerRight));

    // More elegant solution would be to derive !
    if ( element != "Mask" && !isText) {
        if(i_pm_normal->mask())
	    setMask(*i_pm_normal->mask());
	show();
    }
    else {
	hide();
    }
}



kaiman'KaimanStyleElement::mousePressEvent() (./kdemultimedia/kaiman/KaimanStyle.cpp:127)

void KaimanStyleElement::mousePressEvent(QMouseEvent *qme)
{
    if ( element != "Background") {
	qDebug(QString("Press ") + element);
    }
    else {
	// On the background we move the shaped toplevel around
	if (!i_b_move) {
	    i_point_startMove.setX(qme->globalX());
	    i_point_startMove.setY(qme->globalY());
	    i_point_topLeft.setX(parentWidget()->x());
	    i_point_topLeft.setY(parentWidget()->y());
	}
    }
}



kaiman'KaimanStyleElement::mouseReleaseEvent() (./kdemultimedia/kaiman/KaimanStyle.cpp:144)

void KaimanStyleElement::mouseReleaseEvent(QMouseEvent *)
{
    i_b_move = false;
    qDebug(QString("Release ") + element);
    emit pressed();
}



kaiman'KaimanStyleElement::mouseMoveEvent() (./kdemultimedia/kaiman/KaimanStyle.cpp:152)

void KaimanStyleElement::mouseMoveEvent(QMouseEvent *qme)
{
/*#warning ce: Test*/
    if ( element != "Background" ) {
	qDebug(QString("Move ") + element);
    }
    else {
	int l_i_diff_y = ( qme->globalY() - i_point_startMove.y());
	int l_i_diff_x = ( qme->globalX() - i_point_startMove.x());

	if ( abs(l_i_diff_x) > 10 || abs(l_i_diff_y) > 10) {
	    // Moving starts only, when passing a drag border
	    i_b_move = true;
	}
	if ( i_b_move ) {
	    if ( element == "Background" )
		this->parentWidget()->move( i_point_topLeft.x() + l_i_diff_x, i_point_topLeft.y() + l_i_diff_y);
	    else {
		move( i_point_topLeft.x() + l_i_diff_x, i_point_topLeft.y() + l_i_diff_y);
		qDebug( element + QString("@ (%1,%2).").arg(x()).arg(y()));
	    }
	}
    }
}


kaiman'KaimanStyleElement::paintEvent() (./kdemultimedia/kaiman/KaimanStyle.cpp:177)

void KaimanStyleElement::paintEvent ( QPaintEvent *qpe )
{
    if ( 0 ) {
	// Use this for "special" elements
	QWidget::paintEvent(qpe);
    }
    else {
	bitBlt(this, 0, 0, i_pm_normal );
    }
}