Added line object implementation.
This commit is contained in:
@@ -37,6 +37,7 @@ set (glabels_sources
|
|||||||
LabelModelObject.cpp
|
LabelModelObject.cpp
|
||||||
LabelModelBoxObject.cpp
|
LabelModelBoxObject.cpp
|
||||||
LabelModelEllipseObject.cpp
|
LabelModelEllipseObject.cpp
|
||||||
|
LabelModelLineObject.cpp
|
||||||
LabelModelShapeObject.cpp
|
LabelModelShapeObject.cpp
|
||||||
LabelRegion.cpp
|
LabelRegion.cpp
|
||||||
MainWindow.cpp
|
MainWindow.cpp
|
||||||
@@ -80,6 +81,7 @@ set (glabels_qobject_headers
|
|||||||
LabelModelObject.h
|
LabelModelObject.h
|
||||||
LabelModelBoxObject.h
|
LabelModelBoxObject.h
|
||||||
LabelModelEllipseObject.h
|
LabelModelEllipseObject.h
|
||||||
|
LabelModelLineObject.h
|
||||||
LabelModelShapeObject.h
|
LabelModelShapeObject.h
|
||||||
MainWindow.h
|
MainWindow.h
|
||||||
MergeView.h
|
MergeView.h
|
||||||
|
|||||||
+15
-1
@@ -29,6 +29,7 @@
|
|||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
#include "LabelModelBoxObject.h"
|
#include "LabelModelBoxObject.h"
|
||||||
#include "LabelModelEllipseObject.h"
|
#include "LabelModelEllipseObject.h"
|
||||||
|
#include "LabelModelLineObject.h"
|
||||||
#include "UndoRedoModel.h"
|
#include "UndoRedoModel.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include "Cursors.h"
|
#include "Cursors.h"
|
||||||
@@ -339,6 +340,19 @@ LabelEditor::createEllipseMode()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Create line mode
|
||||||
|
///
|
||||||
|
void
|
||||||
|
LabelEditor::createLineMode()
|
||||||
|
{
|
||||||
|
setCursor( Cursors::Line() );
|
||||||
|
|
||||||
|
mCreateObjectType = Line;
|
||||||
|
mState = CreateIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Resize Event Handler
|
/// Resize Event Handler
|
||||||
///
|
///
|
||||||
@@ -475,7 +489,7 @@ LabelEditor::mousePressEvent( QMouseEvent* event )
|
|||||||
mCreateObject = new LabelModelEllipseObject();
|
mCreateObject = new LabelModelEllipseObject();
|
||||||
break;
|
break;
|
||||||
case Line:
|
case Line:
|
||||||
// mCreateObject = new LabelModelLineObject();
|
mCreateObject = new LabelModelLineObject();
|
||||||
break;
|
break;
|
||||||
case Image:
|
case Image:
|
||||||
// mCreateObject = new LabelModelImageObject();
|
// mCreateObject = new LabelModelImageObject();
|
||||||
|
|||||||
@@ -0,0 +1,199 @@
|
|||||||
|
/* LabelModelLineObject.cpp
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2016 Jim Evins <evins@snaught.com>
|
||||||
|
*
|
||||||
|
* This file is part of gLabels-qt.
|
||||||
|
*
|
||||||
|
* gLabels-qt 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* gLabels-qt is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "LabelModelLineObject.h"
|
||||||
|
|
||||||
|
#include <QBrush>
|
||||||
|
#include <QPen>
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
const double slopPixels = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Constructor
|
||||||
|
///
|
||||||
|
LabelModelLineObject::LabelModelLineObject()
|
||||||
|
{
|
||||||
|
mOutline = 0;
|
||||||
|
|
||||||
|
mHandles << new HandleP1( this );
|
||||||
|
mHandles << new HandleP2( this );
|
||||||
|
|
||||||
|
mLineWidth = 1.0;
|
||||||
|
mLineColorNode = ColorNode( QColor( 0, 0, 0 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Copy constructor
|
||||||
|
///
|
||||||
|
LabelModelLineObject::LabelModelLineObject( const LabelModelLineObject* object ) : LabelModelObject(object)
|
||||||
|
{
|
||||||
|
mLineWidth = object->mLineWidth;
|
||||||
|
mLineColorNode = object->mLineColorNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Destructor
|
||||||
|
///
|
||||||
|
LabelModelLineObject::~LabelModelLineObject()
|
||||||
|
{
|
||||||
|
foreach( Handle* handle, mHandles )
|
||||||
|
{
|
||||||
|
delete handle;
|
||||||
|
}
|
||||||
|
mHandles.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Clone
|
||||||
|
///
|
||||||
|
LabelModelLineObject* LabelModelLineObject::clone() const
|
||||||
|
{
|
||||||
|
return new LabelModelLineObject( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Line Width Property Getter
|
||||||
|
///
|
||||||
|
glabels::Distance LabelModelLineObject::lineWidth( void ) const
|
||||||
|
{
|
||||||
|
return mLineWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Line Width Property Setter
|
||||||
|
///
|
||||||
|
void LabelModelLineObject::setLineWidth( const glabels::Distance& value )
|
||||||
|
{
|
||||||
|
if ( mLineWidth != value )
|
||||||
|
{
|
||||||
|
mLineWidth = value;
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Line Color Node Property Getter
|
||||||
|
///
|
||||||
|
ColorNode LabelModelLineObject::lineColorNode( void ) const
|
||||||
|
{
|
||||||
|
return mLineColorNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Line Color Node Property Setter
|
||||||
|
///
|
||||||
|
void LabelModelLineObject::setLineColorNode( const ColorNode& value )
|
||||||
|
{
|
||||||
|
if ( mLineColorNode != value )
|
||||||
|
{
|
||||||
|
mLineColorNode = value;
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Can Line Color Capability Implementation
|
||||||
|
///
|
||||||
|
bool LabelModelLineObject::canLineColor()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Can Line Width Capability Implementation
|
||||||
|
///
|
||||||
|
bool LabelModelLineObject::canLineWidth()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Draw shadow of object
|
||||||
|
///
|
||||||
|
void LabelModelLineObject::drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const
|
||||||
|
{
|
||||||
|
QColor lineColor = mLineColorNode.color( record );
|
||||||
|
QColor shadowColor = mShadowColorNode.color( record );
|
||||||
|
|
||||||
|
shadowColor.setAlphaF( mShadowOpacity );
|
||||||
|
|
||||||
|
if ( lineColor.alpha() )
|
||||||
|
{
|
||||||
|
painter->setPen( QPen( shadowColor, mLineWidth.pt() ) );
|
||||||
|
painter->drawLine( 0, 0, mW.pt(), mH.pt() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Draw object itself
|
||||||
|
///
|
||||||
|
void LabelModelLineObject::drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const
|
||||||
|
{
|
||||||
|
QColor lineColor = mLineColorNode.color( record );
|
||||||
|
|
||||||
|
painter->setPen( QPen( lineColor, mLineWidth.pt() ) );
|
||||||
|
painter->drawLine( 0, 0, mW.pt(), mH.pt() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Path to test for hover condition
|
||||||
|
///
|
||||||
|
QPainterPath LabelModelLineObject::hoverPath( double scale ) const
|
||||||
|
{
|
||||||
|
QPainterPath path;
|
||||||
|
|
||||||
|
if ( mLineColorNode.color().alpha() )
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Build a thin rectangle representing line
|
||||||
|
//
|
||||||
|
double rPts = mLineWidth.pt()/2 + slopPixels / scale;
|
||||||
|
|
||||||
|
double lengthPts = sqrt( mW.pt()*mW.pt() + mH.pt()*mH.pt() );
|
||||||
|
double dx = mH.pt() / lengthPts; // horizontal pitch of perpendicular line
|
||||||
|
double dy = mW.pt() / lengthPts; // vertical pitch of perpendicular line
|
||||||
|
|
||||||
|
path.moveTo( rPts*dx, - rPts*dy );
|
||||||
|
path.lineTo( mW.pt() + rPts*dx, mH.pt() - rPts*dy );
|
||||||
|
path.lineTo( mW.pt() - rPts*dx, mH.pt() + rPts*dy );
|
||||||
|
path.lineTo( - rPts*dx, rPts*dy );
|
||||||
|
|
||||||
|
path.closeSubpath();
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
/* LabelModelLineObject.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2016 Jim Evins <evins@snaught.com>
|
||||||
|
*
|
||||||
|
* This file is part of gLabels-qt.
|
||||||
|
*
|
||||||
|
* gLabels-qt 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* gLabels-qt is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LabelModelLineObject_h
|
||||||
|
#define LabelModelLineObject_h
|
||||||
|
|
||||||
|
#include "LabelModelObject.h"
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Label Model Line Object
|
||||||
|
///
|
||||||
|
class LabelModelLineObject : public LabelModelObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// Lifecycle Methods
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
public:
|
||||||
|
LabelModelLineObject();
|
||||||
|
LabelModelLineObject( const LabelModelLineObject* object );
|
||||||
|
virtual ~LabelModelLineObject();
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// Object duplication
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
virtual LabelModelLineObject* clone() const;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// Property Implementations
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
// Line Property: lineWidth
|
||||||
|
//
|
||||||
|
virtual glabels::Distance lineWidth( void ) const;
|
||||||
|
virtual void setLineWidth( const glabels::Distance& value );
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Line Property: lineColorNode
|
||||||
|
//
|
||||||
|
virtual ColorNode lineColorNode( void ) const;
|
||||||
|
virtual void setLineColorNode( const ColorNode& value );
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// Capability Implementations
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
public:
|
||||||
|
virtual bool canLineColor();
|
||||||
|
virtual bool canLineWidth();
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// Drawing operations
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
protected:
|
||||||
|
virtual void drawShadow( QPainter* painter, bool inEditor, merge::Record* record ) const;
|
||||||
|
virtual void drawObject( QPainter* painter, bool inEditor, merge::Record* record ) const;
|
||||||
|
virtual QPainterPath hoverPath( double scale ) const;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// Private Members
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
protected:
|
||||||
|
glabels::Distance mLineWidth;
|
||||||
|
ColorNode mLineColorNode;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // LabelModelLineObject_h
|
||||||
@@ -86,7 +86,15 @@ LabelModelObject::LabelModelObject( const LabelModelObject* object )
|
|||||||
{
|
{
|
||||||
mHandles.append( handle->clone( this ) );
|
mHandles.append( handle->clone( this ) );
|
||||||
}
|
}
|
||||||
mOutline = object->mOutline->clone( this );
|
|
||||||
|
if ( object->mOutline )
|
||||||
|
{
|
||||||
|
mOutline = object->mOutline->clone( this );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mOutline = 0;
|
||||||
|
}
|
||||||
|
|
||||||
mMatrix = object->mMatrix;
|
mMatrix = object->mMatrix;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1235,7 +1235,8 @@ void MainWindow::objectsCreateBox()
|
|||||||
///
|
///
|
||||||
void MainWindow::objectsCreateLine()
|
void MainWindow::objectsCreateLine()
|
||||||
{
|
{
|
||||||
qDebug() << "ACTION: objects->Create->Line";
|
mUndoRedoModel->checkpoint( tr("Create Line") );
|
||||||
|
mLabelEditor->createLineMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
#include "LabelModelBoxObject.h"
|
#include "LabelModelBoxObject.h"
|
||||||
#include "LabelModelEllipseObject.h"
|
#include "LabelModelEllipseObject.h"
|
||||||
|
#include "LabelModelLineObject.h"
|
||||||
#include "UndoRedoModel.h"
|
#include "UndoRedoModel.h"
|
||||||
|
|
||||||
#include "Merge/Merge.h"
|
#include "Merge/Merge.h"
|
||||||
@@ -140,6 +141,26 @@ void ObjectEditor::loadRectSizePage()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ObjectEditor::loadLineSizePage()
|
||||||
|
{
|
||||||
|
if ( mObject )
|
||||||
|
{
|
||||||
|
mBlocked = true;
|
||||||
|
|
||||||
|
sizeLineLengthSpin->setDecimals( mSpinDigits );
|
||||||
|
sizeLineLengthSpin->setSingleStep( mSpinStep );
|
||||||
|
sizeLineLengthSpin->setSuffix( " " + mUnits.toIdString() );
|
||||||
|
|
||||||
|
double w = mObject->w().inUnits(mUnits);
|
||||||
|
double h = mObject->h().inUnits(mUnits);
|
||||||
|
sizeLineLengthSpin->setValue( sqrt( w*w + h*h ) );
|
||||||
|
sizeLineAngleSpin->setValue( (180/M_PI)*atan2( h, w ) );
|
||||||
|
|
||||||
|
mBlocked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ObjectEditor::loadShadowPage()
|
void ObjectEditor::loadShadowPage()
|
||||||
{
|
{
|
||||||
if ( mObject )
|
if ( mObject )
|
||||||
@@ -213,12 +234,13 @@ void ObjectEditor::onSelectionChanged()
|
|||||||
if ( dynamic_cast<LabelModelBoxObject*>(mObject) )
|
if ( dynamic_cast<LabelModelBoxObject*>(mObject) )
|
||||||
{
|
{
|
||||||
titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-box.png") );
|
titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-box.png") );
|
||||||
titleLabel->setText( "Box object properties" );
|
titleLabel->setText( tr("Box object properties") );
|
||||||
|
|
||||||
notebook->addTab( lineFillPage, "line/fill" );
|
notebook->addTab( lineFillPage, "line/fill" );
|
||||||
notebook->addTab( posSizePage, "position/size" );
|
notebook->addTab( posSizePage, "position/size" );
|
||||||
notebook->addTab( shadowPage, "shadow" );
|
notebook->addTab( shadowPage, "shadow" );
|
||||||
|
|
||||||
|
fillFrame->setVisible( true );
|
||||||
sizeRectFrame->setVisible( true );
|
sizeRectFrame->setVisible( true );
|
||||||
sizeResetImageButton->setVisible( false );
|
sizeResetImageButton->setVisible( false );
|
||||||
sizeLineFrame->setVisible( false );
|
sizeLineFrame->setVisible( false );
|
||||||
@@ -233,12 +255,13 @@ void ObjectEditor::onSelectionChanged()
|
|||||||
else if ( dynamic_cast<LabelModelEllipseObject*>(mObject) )
|
else if ( dynamic_cast<LabelModelEllipseObject*>(mObject) )
|
||||||
{
|
{
|
||||||
titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-ellipse.png") );
|
titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-ellipse.png") );
|
||||||
titleLabel->setText( "Ellipse object properties" );
|
titleLabel->setText( tr("Ellipse object properties") );
|
||||||
|
|
||||||
notebook->addTab( lineFillPage, "line/fill" );
|
notebook->addTab( lineFillPage, "line/fill" );
|
||||||
notebook->addTab( posSizePage, "position/size" );
|
notebook->addTab( posSizePage, "position/size" );
|
||||||
notebook->addTab( shadowPage, "shadow" );
|
notebook->addTab( shadowPage, "shadow" );
|
||||||
|
|
||||||
|
fillFrame->setVisible( true );
|
||||||
sizeRectFrame->setVisible( true );
|
sizeRectFrame->setVisible( true );
|
||||||
sizeResetImageButton->setVisible( false );
|
sizeResetImageButton->setVisible( false );
|
||||||
sizeLineFrame->setVisible( false );
|
sizeLineFrame->setVisible( false );
|
||||||
@@ -250,6 +273,27 @@ void ObjectEditor::onSelectionChanged()
|
|||||||
|
|
||||||
setEnabled( true );
|
setEnabled( true );
|
||||||
}
|
}
|
||||||
|
else if ( dynamic_cast<LabelModelLineObject*>(mObject) )
|
||||||
|
{
|
||||||
|
titleImageLabel->setPixmap( QPixmap(":icons/24x24/actions/glabels-line.png") );
|
||||||
|
titleLabel->setText( tr("Line object properties") );
|
||||||
|
|
||||||
|
notebook->addTab( lineFillPage, "line/fill" );
|
||||||
|
notebook->addTab( posSizePage, "position/size" );
|
||||||
|
notebook->addTab( shadowPage, "shadow" );
|
||||||
|
|
||||||
|
fillFrame->setVisible( false );
|
||||||
|
sizeRectFrame->setVisible( false );
|
||||||
|
sizeResetImageButton->setVisible( false );
|
||||||
|
sizeLineFrame->setVisible( true );
|
||||||
|
|
||||||
|
loadLineFillPage();
|
||||||
|
loadPositionPage();
|
||||||
|
loadLineSizePage();
|
||||||
|
loadShadowPage();
|
||||||
|
|
||||||
|
setEnabled( true );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Q_ASSERT_X( false, "ObjectEditor::onSelectionChanged", "Invalid object" );
|
Q_ASSERT_X( false, "ObjectEditor::onSelectionChanged", "Invalid object" );
|
||||||
@@ -288,6 +332,7 @@ void ObjectEditor::onObjectChanged()
|
|||||||
{
|
{
|
||||||
loadLineFillPage();
|
loadLineFillPage();
|
||||||
loadRectSizePage();
|
loadRectSizePage();
|
||||||
|
loadLineSizePage();
|
||||||
loadShadowPage();
|
loadShadowPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -392,6 +437,24 @@ void ObjectEditor::onRectSizeControlsChanged()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ObjectEditor::onLineSizeControlsChanged()
|
||||||
|
{
|
||||||
|
if ( !mBlocked )
|
||||||
|
{
|
||||||
|
mBlocked = true;
|
||||||
|
|
||||||
|
mUndoRedoModel->checkpoint( tr("Size") );
|
||||||
|
|
||||||
|
glabels::Distance spinLength = glabels::Distance(sizeLineLengthSpin->value(), mUnits);
|
||||||
|
double spinAngleRads = (M_PI/180)*sizeLineAngleSpin->value();
|
||||||
|
|
||||||
|
mObject->setSize( spinLength*cos(spinAngleRads), spinLength*sin(spinAngleRads) );
|
||||||
|
|
||||||
|
mBlocked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ObjectEditor::onShadowControlsChanged()
|
void ObjectEditor::onShadowControlsChanged()
|
||||||
{
|
{
|
||||||
if ( !mBlocked )
|
if ( !mBlocked )
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ private:
|
|||||||
void loadLineFillPage();
|
void loadLineFillPage();
|
||||||
void loadPositionPage();
|
void loadPositionPage();
|
||||||
void loadRectSizePage();
|
void loadRectSizePage();
|
||||||
|
void loadLineSizePage();
|
||||||
void loadShadowPage();
|
void loadShadowPage();
|
||||||
|
|
||||||
|
|
||||||
@@ -77,6 +78,7 @@ private slots:
|
|||||||
void onFillControlsChanged();
|
void onFillControlsChanged();
|
||||||
void onPositionControlsChanged();
|
void onPositionControlsChanged();
|
||||||
void onRectSizeControlsChanged();
|
void onRectSizeControlsChanged();
|
||||||
|
void onLineSizeControlsChanged();
|
||||||
void onShadowControlsChanged();
|
void onShadowControlsChanged();
|
||||||
void onChanged();
|
void onChanged();
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
#include "LabelModelBoxObject.h"
|
#include "LabelModelBoxObject.h"
|
||||||
#include "LabelModelEllipseObject.h"
|
#include "LabelModelEllipseObject.h"
|
||||||
//#include "LabelObjectLine.h"
|
#include "LabelModelLineObject.h"
|
||||||
//#include "LabelObjectImage.h"
|
//#include "LabelObjectImage.h"
|
||||||
//#include "LabelObjectBarcode.h"
|
//#include "LabelObjectBarcode.h"
|
||||||
#include "Merge/None.h"
|
#include "Merge/None.h"
|
||||||
@@ -133,6 +133,10 @@ XmlLabelCreator::addObjectsToNode( QDomElement &parent, const QList<LabelModelOb
|
|||||||
{
|
{
|
||||||
createObjectEllipseNode( parent, ellipseObject );
|
createObjectEllipseNode( parent, ellipseObject );
|
||||||
}
|
}
|
||||||
|
else if ( LabelModelLineObject* lineObject = dynamic_cast<LabelModelLineObject*>(object) )
|
||||||
|
{
|
||||||
|
createObjectLineNode( parent, lineObject );
|
||||||
|
}
|
||||||
// TODO: other object types
|
// TODO: other object types
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -233,7 +237,34 @@ XmlLabelCreator::createObjectEllipseNode( QDomElement &parent, const LabelModelE
|
|||||||
void
|
void
|
||||||
XmlLabelCreator::createObjectLineNode( QDomElement &parent, const LabelModelLineObject* object )
|
XmlLabelCreator::createObjectLineNode( QDomElement &parent, const LabelModelLineObject* object )
|
||||||
{
|
{
|
||||||
// TODO
|
QDomDocument doc = parent.ownerDocument();
|
||||||
|
QDomElement node = doc.createElement( "Object-line" );
|
||||||
|
parent.appendChild( node );
|
||||||
|
|
||||||
|
/* position attrs */
|
||||||
|
glabels::XmlUtil::setLengthAttr( node, "x", object->x0() );
|
||||||
|
glabels::XmlUtil::setLengthAttr( node, "y", object->y0() );
|
||||||
|
|
||||||
|
/* size attrs */
|
||||||
|
glabels::XmlUtil::setLengthAttr( node, "dx", object->w() );
|
||||||
|
glabels::XmlUtil::setLengthAttr( node, "dy", object->h() );
|
||||||
|
|
||||||
|
/* line attrs */
|
||||||
|
glabels::XmlUtil::setLengthAttr( node, "line_width", object->lineWidth() );
|
||||||
|
if ( object->lineColorNode().fieldFlag() )
|
||||||
|
{
|
||||||
|
glabels::XmlUtil::setStringAttr( node, "line_color_field", object->lineColorNode().key() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glabels::XmlUtil::setUIntAttr( node, "line_color", object->lineColorNode().rgba() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* affine attrs */
|
||||||
|
createAffineAttrs( node, object );
|
||||||
|
|
||||||
|
/* shadow attrs */
|
||||||
|
createShadowAttrs( node, object );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
#include "LabelModelObject.h"
|
#include "LabelModelObject.h"
|
||||||
#include "LabelModelBoxObject.h"
|
#include "LabelModelBoxObject.h"
|
||||||
#include "LabelModelEllipseObject.h"
|
#include "LabelModelEllipseObject.h"
|
||||||
//#include "LabelObjectLine.h"
|
#include "LabelModelLineObject.h"
|
||||||
//#include "LabelObjectImage.h"
|
//#include "LabelObjectImage.h"
|
||||||
//#include "LabelObjectBarcode.h"
|
//#include "LabelObjectBarcode.h"
|
||||||
#include "Merge/Factory.h"
|
#include "Merge/Factory.h"
|
||||||
@@ -266,11 +266,11 @@ XmlLabelParser::parseObjects( const QDomElement &node )
|
|||||||
{
|
{
|
||||||
list.append( parseObjectEllipseNode( child.toElement() ) );
|
list.append( parseObjectEllipseNode( child.toElement() ) );
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
else if ( tagName == "Object-line" )
|
else if ( tagName == "Object-line" )
|
||||||
{
|
{
|
||||||
list.append( parseObjectLineNode( child.toElement() ) );
|
list.append( parseObjectLineNode( child.toElement() ) );
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
else if ( tagName == "Object-image" )
|
else if ( tagName == "Object-image" )
|
||||||
{
|
{
|
||||||
list.append( parseObjectImageNode( child.toElement() ) );
|
list.append( parseObjectImageNode( child.toElement() ) );
|
||||||
@@ -399,7 +399,36 @@ XmlLabelParser::parseObjectEllipseNode( const QDomElement &node )
|
|||||||
LabelModelLineObject*
|
LabelModelLineObject*
|
||||||
XmlLabelParser::parseObjectLineNode( const QDomElement &node )
|
XmlLabelParser::parseObjectLineNode( const QDomElement &node )
|
||||||
{
|
{
|
||||||
return 0;
|
using namespace glabels;
|
||||||
|
|
||||||
|
LabelModelLineObject* object = new LabelModelLineObject();
|
||||||
|
|
||||||
|
|
||||||
|
/* position attrs */
|
||||||
|
object->setX0( XmlUtil::getLengthAttr( node, "x", 0.0 ) );
|
||||||
|
object->setY0( XmlUtil::getLengthAttr( node, "y", 0.0 ) );
|
||||||
|
|
||||||
|
/* size attrs */
|
||||||
|
object->setW( XmlUtil::getLengthAttr( node, "dx", 0 ) );
|
||||||
|
object->setH( XmlUtil::getLengthAttr( node, "dy", 0 ) );
|
||||||
|
|
||||||
|
/* line attrs */
|
||||||
|
object->setLineWidth( XmlUtil::getLengthAttr( node, "line_width", 1.0 ) );
|
||||||
|
{
|
||||||
|
QString key = XmlUtil::getStringAttr( node, "line_color_field", "" );
|
||||||
|
bool field_flag = !key.isEmpty();
|
||||||
|
uint32_t color = XmlUtil::getUIntAttr( node, "line_color", 0 );
|
||||||
|
|
||||||
|
object->setLineColorNode( ColorNode( field_flag, color, key ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* affine attrs */
|
||||||
|
parseAffineAttrs( node, object );
|
||||||
|
|
||||||
|
/* shadow attrs */
|
||||||
|
parseShadowAttrs( node, object );
|
||||||
|
|
||||||
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+48
-35
@@ -944,7 +944,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_5">
|
<widget class="QGroupBox" name="fillFrame">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Fill</string>
|
<string>Fill</string>
|
||||||
</property>
|
</property>
|
||||||
@@ -1253,6 +1253,18 @@
|
|||||||
<property name="suffix">
|
<property name="suffix">
|
||||||
<string notr="true"> °</string>
|
<string notr="true"> °</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="decimals">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<double>-180.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>180.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
@@ -1948,8 +1960,8 @@
|
|||||||
<slot>onPositionControlsChanged()</slot>
|
<slot>onPositionControlsChanged()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>90</x>
|
<x>153</x>
|
||||||
<y>112</y>
|
<y>132</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>399</x>
|
<x>399</x>
|
||||||
@@ -2021,38 +2033,6 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
|
||||||
<sender>sizeLineLengthSpin</sender>
|
|
||||||
<signal>valueChanged(double)</signal>
|
|
||||||
<receiver>ObjectEditor</receiver>
|
|
||||||
<slot>onChanged()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>129</x>
|
|
||||||
<y>391</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>395</x>
|
|
||||||
<y>568</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>sizeLineAngleSpin</sender>
|
|
||||||
<signal>valueChanged(double)</signal>
|
|
||||||
<receiver>ObjectEditor</receiver>
|
|
||||||
<slot>onChanged()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>113</x>
|
|
||||||
<y>437</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>404</x>
|
|
||||||
<y>628</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
<connection>
|
||||||
<sender>shadowEnableCheck</sender>
|
<sender>shadowEnableCheck</sender>
|
||||||
<signal>toggled(bool)</signal>
|
<signal>toggled(bool)</signal>
|
||||||
@@ -2133,6 +2113,38 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>sizeLineLengthSpin</sender>
|
||||||
|
<signal>valueChanged(double)</signal>
|
||||||
|
<receiver>ObjectEditor</receiver>
|
||||||
|
<slot>onLineSizeControlsChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>144</x>
|
||||||
|
<y>386</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>5</x>
|
||||||
|
<y>471</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>sizeLineAngleSpin</sender>
|
||||||
|
<signal>valueChanged(double)</signal>
|
||||||
|
<receiver>ObjectEditor</receiver>
|
||||||
|
<slot>onLineSizeControlsChanged()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>120</x>
|
||||||
|
<y>437</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>1</x>
|
||||||
|
<y>510</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<slots>
|
<slots>
|
||||||
<slot>onChanged()</slot>
|
<slot>onChanged()</slot>
|
||||||
@@ -2142,5 +2154,6 @@
|
|||||||
<slot>onPositionControlsChanged()</slot>
|
<slot>onPositionControlsChanged()</slot>
|
||||||
<slot>onRectSizeControlsChanged()</slot>
|
<slot>onRectSizeControlsChanged()</slot>
|
||||||
<slot>onShadowControlsChanged()</slot>
|
<slot>onShadowControlsChanged()</slot>
|
||||||
|
<slot>onLineSizeControlsChanged()</slot>
|
||||||
</slots>
|
</slots>
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
Reference in New Issue
Block a user