Added grid layer to view.

This commit is contained in:
Jim Evins
2013-12-11 23:40:08 -05:00
parent aa88cd8f65
commit f017af3cac
4 changed files with 132 additions and 20 deletions
+9 -5
View File
@@ -222,12 +222,12 @@ namespace glabels
viewGridAction = new QAction( tr("Grid"), this );
viewGridAction->setCheckable( true );
viewGridAction->setStatusTip( tr("Change visibility of the grid in current window") );
connect( viewGridAction, SIGNAL(triggered()), this, SLOT(viewGrid()) );
connect( viewGridAction, SIGNAL(toggled(bool)), this, SLOT(viewGrid(bool)) );
viewMarkupAction = new QAction( tr("Markup"), this );
viewMarkupAction->setCheckable( true );
viewMarkupAction->setStatusTip( tr("Change visibility of markup lines in current window") );
connect( viewMarkupAction, SIGNAL(triggered()), this, SLOT(viewMarkup()) );
connect( viewMarkupAction, SIGNAL(toggled(bool)), this, SLOT(viewMarkup(bool)) );
viewZoomInAction = new QAction( tr("Zoom &In"), this );
viewZoomInAction->setIcon( QIcon::fromTheme( "zoom-in", Icons::Fallback::ZoomIn() ) );
@@ -637,17 +637,20 @@ namespace glabels
bool showObjectsToolBar = settings.value( "showObjectsToolBar", true ).toBool();
bool showEditToolBar = settings.value( "showEditToolBar", true ).toBool();
bool showViewToolBar = settings.value( "showViewToolBar", true ).toBool();
bool showGrid = settings.value( "showGrid", true ).toBool();
settings.endGroup();
viewFileToolBarAction->setChecked( showFileToolBar );
viewObjectsToolBarAction->setChecked( showObjectsToolBar );
viewEditToolBarAction->setChecked( showEditToolBar );
viewViewToolBarAction->setChecked( showViewToolBar );
viewGridAction->setChecked( showGrid );
fileToolBar->setVisible( showFileToolBar );
objectsToolBar->setVisible( showObjectsToolBar );
editToolBar->setVisible( showEditToolBar );
viewToolBar->setVisible( showViewToolBar );
view->setGridVisible( showGrid );
}
@@ -660,6 +663,7 @@ namespace glabels
settings.setValue( "showObjectsToolBar", viewObjectsToolBarAction->isChecked() );
settings.setValue( "showEditToolBar", viewEditToolBarAction->isChecked() );
settings.setValue( "showViewToolBar", viewViewToolBarAction->isChecked() );
settings.setValue( "showGrid", viewGridAction->isChecked() );
settings.endGroup();
}
@@ -796,13 +800,13 @@ namespace glabels
}
void MainWindow::viewGrid()
void MainWindow::viewGrid( bool state )
{
std::cout << "ACTION: edit->Grid" << std::endl;
view->setGridVisible( state );
}
void MainWindow::viewMarkup()
void MainWindow::viewMarkup( bool state )
{
std::cout << "ACTION: edit->Markup" << std::endl;
}
+2 -2
View File
@@ -72,8 +72,8 @@ namespace glabels
void viewObjectsToolBar( bool );
void viewEditToolBar( bool );
void viewViewToolBar( bool );
void viewGrid();
void viewMarkup();
void viewGrid( bool );
void viewMarkup( bool );
void viewZoomIn();
void viewZoomOut();
void viewZoom1To1();
+100 -9
View File
@@ -21,10 +21,13 @@
#include "View.h"
#include <QMouseEvent>
#include <QGraphicsLineItem>
#include <QGraphicsDropShadowEffect>
#include <cmath>
#include <iostream>
#include "libglabels/FrameRect.h"
namespace
{
@@ -40,6 +43,10 @@ namespace
const QColor labelColor( 255, 255, 255 );
const QColor labelOutlineColor( 0, 0, 0 );
const double labelOutlineWidthPixels = 1;
const QColor gridLineColor( 192, 192, 192 );
const double gridLineWidthPixels = 1;
const double gridSpacing = 9; // TODO: determine from locale.
}
@@ -58,6 +65,11 @@ namespace glabels
mScene = new QGraphicsScene();
setScene( mScene );
mScene->addItem( mLabelLayer = new QGraphicsItemGroup() );
mScene->addItem( mGridLayer = new QGraphicsItemGroup() );
mScene->addItem( mObjectLayer = new QGraphicsItemGroup() );
mScene->addItem( mForegroundLayer = new QGraphicsItemGroup() );
}
@@ -66,12 +78,20 @@ namespace glabels
mModel = model;
createLabelLayer();
createGridLayer();
foreach (LabelModelObject* object, model->objectList() )
{
QGraphicsItem* item = object->createGraphicsItem();
mScene->addItem( item );
addObjectToObjectLayer( object );
}
createForegroundLayer();
}
void View::setGridVisible( bool visibleFlag )
{
mGridLayer->setVisible( visibleFlag );
}
@@ -191,26 +211,97 @@ namespace glabels
}
void View::clearLayer( QGraphicsItemGroup* layer )
{
foreach( QGraphicsItem* item, layer->childItems() )
{
layer->removeFromGroup( item );
}
}
void View::createLabelLayer()
{
clearLayer( mLabelLayer );
QGraphicsPathItem *labelItem = new QGraphicsPathItem( mModel->frame()->path() );
QBrush brush( labelColor );
labelItem->setBrush( brush );
QPen pen( labelOutlineColor );
pen.setJoinStyle( Qt::MiterJoin );
pen.setCosmetic( true );
pen.setWidthF( labelOutlineWidthPixels );
labelItem->setPen( pen );
QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect();
shadowEffect->setColor( shadowColor );
shadowEffect->setOffset( shadowOffsetPixels );
shadowEffect->setBlurRadius( shadowRadiusPixels );
labelItem->setGraphicsEffect( shadowEffect );
mScene->addItem( labelItem );
mLabelLayer->addToGroup( labelItem );
}
void View::createGridLayer()
{
clearLayer( mGridLayer );
QGraphicsPathItem *clipItem = new QGraphicsPathItem( mModel->frame()->path() );
clipItem->setFlag( QGraphicsItem::ItemClipsChildrenToShape );
QPen pen( gridLineColor );
pen.setCosmetic( true );
pen.setWidthF( gridLineWidthPixels );
double w = mModel->w();
double h = mModel->h();
double x0;
double y0;
if ( dynamic_cast<const libglabels::FrameRect*>( mModel->frame() ) )
{
x0 = gridSpacing;
y0 = gridSpacing;
}
else
{
/* round labels, align grid with center of label. */
x0 = fmod( w/2, gridSpacing );
y0 = fmod( h/2, gridSpacing );
}
for ( double x = x0; x < w; x += gridSpacing )
{
QGraphicsLineItem* lineItem = new QGraphicsLineItem( x, 0, x, h, clipItem );
lineItem->setPen( pen );
}
for ( double y = y0; y < h; y += gridSpacing )
{
QGraphicsLineItem* lineItem = new QGraphicsLineItem( 0, y, w, y, clipItem );
lineItem->setPen( pen );
}
mGridLayer->addToGroup( clipItem );
}
void View::addObjectToObjectLayer( LabelModelObject* object )
{
QGraphicsItem* item = object->createGraphicsItem();
mObjectLayer->addToGroup( item );
}
void View::createForegroundLayer()
{
clearLayer( mForegroundLayer );
QGraphicsPathItem *outlineItem = new QGraphicsPathItem( mModel->frame()->path() );
QPen pen( labelOutlineColor );
pen.setJoinStyle( Qt::MiterJoin );
pen.setCosmetic( true );
pen.setWidthF( labelOutlineWidthPixels );
outlineItem->setPen( pen );
mForegroundLayer->addToGroup( outlineItem );
}
}
+21 -4
View File
@@ -23,6 +23,7 @@
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsItemGroup>
#include "LabelModel.h"
@@ -64,6 +65,13 @@ namespace glabels
void setModel( LabelModel* model );
/////////////////////////////////////
// Visibility operations
/////////////////////////////////////
public:
void setGridVisible( bool visibleFlag );
/////////////////////////////////////
// Zoom operations
/////////////////////////////////////
@@ -91,19 +99,28 @@ namespace glabels
// Private methods
/////////////////////////////////////
private:
void clearLayer( QGraphicsItemGroup* layer );
void createLabelLayer();
void createGridLayer();
void addObjectToObjectLayer( LabelModelObject* object );
void createForegroundLayer();
/////////////////////////////////////
// Private data
/////////////////////////////////////
private:
QGraphicsScene* mScene;
QGraphicsScene* mScene;
double mZoom;
bool mZoomToFitFlag;
QGraphicsItemGroup* mLabelLayer;
QGraphicsItemGroup* mGridLayer;
QGraphicsItemGroup* mObjectLayer;
QGraphicsItemGroup* mForegroundLayer;
LabelModel* mModel;
double mZoom;
bool mZoomToFitFlag;
LabelModel* mModel;
};