You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.1 KiB
193 lines
5.1 KiB
/***************************************************************************
|
|
* Copyright (C) 2005 by David Saxton *
|
|
* david@bluehaze.org *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
***************************************************************************/
|
|
|
|
#include "solidshape.h"
|
|
#include "libraryitem.h"
|
|
#include "resizeoverlay.h"
|
|
|
|
#include <cmath>
|
|
#include <kiconloader.h>
|
|
#include <tdelocale.h>
|
|
#include <tqpainter.h>
|
|
|
|
|
|
//BEGIN class DPRectangle
|
|
Item * DPRectangle::construct( ItemDocument *itemDocument, bool newItem, const char *id )
|
|
{
|
|
return new DPRectangle( itemDocument, newItem, id );
|
|
}
|
|
|
|
LibraryItem* DPRectangle::libraryItem()
|
|
{
|
|
return new LibraryItem(
|
|
TQString("dp/rectangle"),
|
|
i18n("Rectangle"),
|
|
i18n("Other"),
|
|
TDEGlobal::iconLoader()->loadIcon( "text", TDEIcon::Small ),
|
|
LibraryItem::lit_drawpart,
|
|
DPRectangle::construct );
|
|
}
|
|
|
|
DPRectangle::DPRectangle( ItemDocument *itemDocument, bool newItem, const char *id )
|
|
: DrawPart( itemDocument, newItem, id ? id : "rectangle" )
|
|
{
|
|
m_pRectangularOverlay = new RectangularOverlay(this);
|
|
m_name = i18n("Rectangle");
|
|
|
|
createProperty( "background", Variant::Type::Bool );
|
|
property("background")->setValue(false);
|
|
property("background")->setCaption( i18n("Display Background") );
|
|
property("background")->setAdvanced(true);
|
|
|
|
createProperty( "background-color", Variant::Type::Color );
|
|
property("background-color")->setValue(TQt::white);
|
|
property("background-color")->setCaption( i18n("Background Color") );
|
|
property("background-color")->setAdvanced(true);
|
|
|
|
createProperty( "line-color", Variant::Type::Color );
|
|
property("line-color")->setValue(TQt::black);
|
|
property("line-color")->setCaption( i18n("Line Color") );
|
|
property("line-color")->setAdvanced(true);
|
|
|
|
createProperty( "line-width", Variant::Type::Int );
|
|
property("line-width")->setCaption( i18n("Line Width") );
|
|
property("line-width")->setMinValue(1);
|
|
property("line-width")->setMaxValue(1000);
|
|
property("line-width")->setValue(1);
|
|
property("line-width")->setAdvanced(true);
|
|
|
|
createProperty( "line-style", Variant::Type::PenStyle );
|
|
property("line-style")->setAdvanced(true);
|
|
setDataPenStyle( "line-style", Qt::SolidLine );
|
|
}
|
|
|
|
DPRectangle::~DPRectangle()
|
|
{
|
|
}
|
|
|
|
void DPRectangle::setSelected( bool yes )
|
|
{
|
|
if ( yes == isSelected() )
|
|
return;
|
|
|
|
DrawPart::setSelected(yes);
|
|
m_pRectangularOverlay->showResizeHandles(yes);
|
|
}
|
|
|
|
|
|
void DPRectangle::dataChanged()
|
|
{
|
|
bool displayBackground = dataBool("background");
|
|
TQColor line_color = dataColor("line-color");
|
|
unsigned width = unsigned( dataInt("line-width") );
|
|
Qt::PenStyle style = getDataPenStyle("line-style");
|
|
|
|
setPen( TQPen( line_color, width, style ) );
|
|
|
|
if (displayBackground)
|
|
setBrush( dataColor("background-color") );
|
|
else
|
|
setBrush( Qt::NoBrush );
|
|
|
|
postResize();
|
|
update();
|
|
}
|
|
|
|
|
|
TQSize DPRectangle::minimumSize() const
|
|
{
|
|
int side = TQMAX(16, pen().width()+2);
|
|
return TQSize( side, side );
|
|
}
|
|
|
|
|
|
void DPRectangle::postResize()
|
|
{
|
|
setItemPoints( m_sizeRect, false );
|
|
}
|
|
|
|
|
|
TQRect DPRectangle::drawRect() const
|
|
{
|
|
int lw = pen().width();
|
|
|
|
if ( lw > m_sizeRect.width() )
|
|
lw = m_sizeRect.width();
|
|
|
|
if ( lw > m_sizeRect.height() )
|
|
lw = m_sizeRect.height();
|
|
|
|
return TQRect( int(x() + m_sizeRect.x()+lw/2), int(y() + m_sizeRect.y()+lw/2),
|
|
m_sizeRect.width()-lw, m_sizeRect.height()-lw );
|
|
}
|
|
|
|
|
|
void DPRectangle::drawShape( TQPainter & p )
|
|
{
|
|
p.drawRect(drawRect());
|
|
}
|
|
//END class DPRectangle
|
|
|
|
|
|
//BEGIN class DPEllipse
|
|
Item * DPEllipse::construct( ItemDocument *itemDocument, bool newItem, const char *id )
|
|
{
|
|
return new DPEllipse( itemDocument, newItem, id );
|
|
}
|
|
|
|
LibraryItem* DPEllipse::libraryItem()
|
|
{
|
|
return new LibraryItem(
|
|
TQString("dp/ellipse"),
|
|
i18n("Ellipse"),
|
|
i18n("Other"),
|
|
TDEGlobal::iconLoader()->loadIcon( "text", TDEIcon::Small ),
|
|
LibraryItem::lit_drawpart,
|
|
DPEllipse::construct );
|
|
}
|
|
|
|
DPEllipse::DPEllipse( ItemDocument *itemDocument, bool newItem, const char *id )
|
|
: DPRectangle( itemDocument, newItem, id ? id : "ellipse" )
|
|
{
|
|
m_name = i18n("Ellipse");
|
|
}
|
|
|
|
DPEllipse::~DPEllipse()
|
|
{
|
|
}
|
|
|
|
|
|
void DPEllipse::postResize()
|
|
{
|
|
TQRect br = m_sizeRect;
|
|
|
|
// Make octagon that roughly covers ellipse
|
|
TQPointArray pa(8);
|
|
pa[0] = TQPoint( br.x() + br.width()/4, br.y() );
|
|
pa[1] = TQPoint( br.x() + 3*br.width()/4, br.y() );
|
|
pa[2] = TQPoint( br.x() + br.width(), br.y() + br.height()/4 );
|
|
pa[3] = TQPoint( br.x() + br.width(), br.y() + 3*br.height()/4 );
|
|
pa[4] = TQPoint( br.x() + 3*br.width()/4, br.y() + br.height() );
|
|
pa[5] = TQPoint( br.x() + br.width()/4, br.y() + br.height() );
|
|
pa[6] = TQPoint( br.x(), br.y() + 3*br.height()/4 );
|
|
pa[7] = TQPoint( br.x(), br.y() + br.height()/4 );
|
|
|
|
setItemPoints( pa, false );
|
|
}
|
|
|
|
|
|
void DPEllipse::drawShape( TQPainter & p )
|
|
{
|
|
p.drawEllipse(drawRect());
|
|
}
|
|
//END class SolidShape
|
|
|
|
|