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.
ktechlab/src/drawparts/solidshape.cpp

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