A NameLineLayer is a layer to plot lines with symbols and names. More...
#include <NameLineLayer.h>
Public Member Functions | |
AbstractNameLine * | addLine () |
AbstractNameLine * | addLine (const Pen &pen, const Symbol &sym) |
virtual void | addProperties (PropertyProxy *pp) |
QString | fontString () const |
virtual bool | hasProperties () |
bool | isShowNames () const |
virtual Legend | legend () const |
AbstractNameLine * | line (int i) |
const AbstractNameLine * | line (int i) const |
NameLineLayer (AxisWindow *parent=0) | |
virtual void | properties (PropertyWidget *w) const |
virtual void | removeProperties (PropertyProxy *pp) |
void | setFontString (QString fs) |
virtual void | setLegend (Legend legend) |
void | setNames (int i, QVector< QString > *names) |
virtual void | setProperty (uint wid, int pid, QVariant val) |
void | setShowNames (bool b) |
virtual const QString & | xml_tagName () const |
~NameLineLayer () | |
Static Public Attributes | |
static const QString | xmlNameLineLayerTag = "NameLineLayer" |
Protected Member Functions | |
virtual void | paintData (const LayerPainterRequest &lp, QPainter &p, double dotpercm) const |
virtual void | paintText (const LayerPainterRequest &lp, double dotpercm) |
Protected Attributes | |
bool | _showNames |
QFont | _textFont |
Static Protected Attributes | |
static uint | _tab = PropertyProxy::uniqueId() |
Properties | |
QString | font |
bool | showNames |
A NameLineLayer is a layer to plot lines with symbols and names.
SciFigs::NameLineLayer::NameLineLayer | ( | AxisWindow * | parent = 0 | ) |
References _showNames, and TRACE.
: LineLayer(parent) { TRACE; _showNames=true; }
References SciFigs::LineLayer::clear(), and TRACE.
AbstractNameLine * SciFigs::NameLineLayer::addLine | ( | ) | [inline] |
Adds one new line with default pen and symbol.
Reimplemented from SciFigs::LineLayer.
Referenced by GeopsyGui::ArrayMap::addLine(), addLine(), GeopsyGui::ArrayMap::ArrayMap(), createCurveName(), createCurveNamePlot(), and MonoStation::AbstractSummary::setBubbleValues().
{ return static_cast<AbstractNameLine *>(LineLayer::addLine()); }
AbstractNameLine * SciFigs::NameLineLayer::addLine | ( | const Pen & | pen, |
const Symbol & | sym | ||
) | [inline] |
Adds one new line with pen pen and symbol sym.
Reimplemented from SciFigs::LineLayer.
References addLine().
{ return static_cast<AbstractNameLine *>(LineLayer::addLine(pen, sym) ); }
void SciFigs::NameLineLayer::addProperties | ( | PropertyProxy * | pp | ) | [virtual] |
Setup property editor
Reimplemented from SciFigs::LineLayer.
References _tab, SciFigs::NameLineLayerProperties::addLayer(), QGpGuiTools::PropertyProxy::addReference(), QGpGuiTools::PropertyProxy::addTab(), QGpGuiTools::PropertyProxy::currentTabWidget(), QGpGuiTools::PropertyProxy::setCurrentTab(), QGpCoreTools::tr(), TRACE, and w.
{ TRACE; LineLayer::addProperties(pp); if(pp->setCurrentTab(_tab)) { pp->addReference(this); NameLineLayerProperties * w=static_cast<NameLineLayerProperties *>(pp->currentTabWidget()); w->addLayer(this); } else { NameLineLayerProperties * w=new NameLineLayerProperties; pp->addTab(_tab, tr("Name Plot"), w, this); w->addLayer(this); } }
QString SciFigs::NameLineLayer::fontString | ( | ) | const [inline] |
Referenced by properties().
{return _textFont.toString();}
virtual bool SciFigs::NameLineLayer::hasProperties | ( | ) | [inline, virtual] |
Reimplemented from SciFigs::LineLayer.
{return true;}
bool SciFigs::NameLineLayer::isShowNames | ( | ) | const [inline] |
Referenced by properties().
{return _showNames;}
Legend SciFigs::NameLineLayer::legend | ( | ) | const [virtual] |
Reimplemented from SciFigs::LineLayer.
References SciFigs::LineLayer::count(), line(), SciFigs::AbstractLine::pen(), SciFigs::Legend::setPen(), SciFigs::Legend::setSymbol(), SciFigs::Legend::setText(), SciFigs::Legend::setTextColor(), SciFigs::AbstractLine::symbol(), SciFigs::AbstractNameLine::textColor(), and TRACE.
AbstractNameLine * SciFigs::NameLineLayer::line | ( | int | i | ) | [inline] |
Reimplemented from SciFigs::LineLayer.
Referenced by createCurveName(), SciFigs::NameLineItem::data(), MapWindow::getSelection(), legend(), line(), paintData(), paintText(), MonoStation::AbstractSummary::setBubbleValues(), SciFigs::NameLineItem::setData(), and setLegend().
{ return static_cast<AbstractNameLine *>(LineLayer::line(i) ); }
const AbstractNameLine * SciFigs::NameLineLayer::line | ( | int | i | ) | const [inline] |
Reimplemented from SciFigs::LineLayer.
References line().
{ return static_cast<const AbstractNameLine *>(LineLayer::line(i) ); }
void SciFigs::NameLineLayer::paintData | ( | const LayerPainterRequest & | lp, |
QPainter & | p, | ||
double | dotpercm | ||
) | const [protected, virtual] |
Reimplemented from SciFigs::LineLayer.
References _showNames, SciFigs::LineLayer::begin(), SciFigs::AbstractLine::count(), SciFigs::LineLayer::end(), SciFigs::AbstractLine::isSelected(), SciFigs::AbstractLine::isVisible(), line(), SciFigs::LayerPainterRequest::options(), SciFigs::AbstractLine::point(), SciFigs::LineLayer::pointOptions(), SciFigs::Symbol::setBrush(), QGpCoreTools::Angle::setDegrees(), SciFigs::Symbol::size(), SciFigs::AbstractLine::symbol(), SciFigs::LayerPainterRequest::terminated(), SciFigs::AbstractNameLine::textColor(), SciFigs::AbstractNameLine::textDx(), SciFigs::AbstractNameLine::textDy(), SciFigs::AbstractNameLine::textOrientation(), TRACE, SciFigs::GraphContentOptions::xr2s(), and SciFigs::GraphContentOptions::yr2s().
{ TRACE; // Draw points LineLayer::paintData(lp, p, dotpercm); if( !_showNames) return ; const GraphContentOptions& gc=lp.options(); QRectF r; QList<AbstractLine *>::const_iterator it; QMutexLocker ml(&_textPathsMutex); QList<QPainterPath>::const_iterator itText=_textPaths.begin(); p.setRenderHints(QPainter::Antialiasing, true); p.setPen(Qt::NoPen); for(it=begin() ;it!=end();++it) { AbstractNameLine * line=static_cast<AbstractNameLine *>( *it); if(lp.terminated()) return; int countPoints=line->count(); if(countPoints && line->isVisible()) { Symbol sym=line->symbol(); int symSize=(int) floor(0.05*sym.size()*dotpercm+0.5); if(line->isSelected()) { // set selection mark symSize *= 2; p.setBrush(Qt::red); } else { p.setBrush(line->textColor()); } double ddx=line->textDx() * dotpercm; double ddy=-line->textDy() * dotpercm; int dx=(int) round(ddx); int dy=(int) round(ddy); Angle angle; angle.setDegrees(-line->textOrientation()); // According to position of label the offset refers to a different side of the label rectangle if(ddx > 0 && ddy > -ddx && ddy < ddx) { // Label on right side for(int j=0;j < countPoints;j++ ) { ASSERT(itText!=_textPaths.end()); Point p1=line->point(j, pointOptions()); int orx=gc.xr2s(p1.x()); if(dx<symSize) orx+=symSize; else orx+=dx; int ory=gc.yr2s(p1.y()) + dy; r=itText->boundingRect(); int baseLine=(int) round(-r.top()); r.moveLeft(orx); r.moveTop(ory - r.height()/2); drawLabel(p, *itText, angle, r, baseLine); itText++; } } else if(ddx < 0 && ddy > ddx && ddy < -ddx) { // Label on left side for(int j=0;j < countPoints;j++ ) { ASSERT(itText!=_textPaths.end()); Point p1=line->point(j, pointOptions()); int orx=gc.xr2s(p1.x()); if(-dx<symSize) orx-=symSize; else orx+=dx; int ory=gc.yr2s(p1.y()) + dy; r=itText->boundingRect(); int baseLine=(int) round(-r.top()); r.moveRight(orx); r.moveTop(ory - r.height()/2); drawLabel(p, *itText, angle, r, baseLine); itText++; } } else if(ddy < 0) { // Label on top side for(int j=0;j < countPoints;j++ ) { ASSERT(itText!=_textPaths.end()); Point p1=line->point(j, pointOptions()); int orx=gc.xr2s(p1.x()) + dx; int ory=gc.yr2s(p1.y()); if(-dy<symSize) ory-=symSize; else ory+=dy; r=itText->boundingRect(); int baseLine=(int) round(-r.top()); r.moveLeft(orx - r.width()/2); r.moveBottom(ory); drawLabel(p, *itText, angle, r, baseLine); itText++; } } else if(ddy > 0) { // Label on bottom side for(int j=0;j < countPoints;j++ ) { ASSERT(itText!=_textPaths.end()); Point p1=line->point(j, pointOptions()); int orx=gc.xr2s(p1.x()) + dx; int ory=gc.yr2s(p1.y()); if(dy<symSize) ory+=symSize; else ory+=dy; r=itText->boundingRect(); int baseLine=(int) round(-r.top()); r.moveLeft(orx - r.width()/2); r.moveTop(ory); drawLabel(p, *itText, angle, r, baseLine); itText++; } } else { // dx and dy==0 for(int j=0;j < countPoints;j++ ) { ASSERT(itText!=_textPaths.end()); Point p1=line->point(j, pointOptions()); int orx=gc.xr2s(p1.x()); int ory=gc.yr2s(p1.y()); r=itText->boundingRect(); int baseLine=(int) round(-r.top()); r.moveCenter(QPoint( orx, ory) ); drawLabel(p, *itText, angle, r, baseLine); itText++; } } } } p.setRenderHints(QPainter::Antialiasing, false); }
void SciFigs::NameLineLayer::paintText | ( | const LayerPainterRequest & | lp, |
double | dotpercm | ||
) | [protected, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References _showNames, _textFont, SciFigs::LineLayer::begin(), SciFigs::AbstractLine::count(), SciFigs::LineLayer::end(), SciFigs::AbstractLine::isSelected(), SciFigs::AbstractLine::isVisible(), line(), SciFigs::AbstractNameLine::name(), SciFigs::LayerPainterRequest::options(), SciFigs::GraphContentOptions::printBitmap(), SciFigs::GraphicObject::scaleFont(), and SciFigs::SciFigsGlobal::screenResolution().
{ QMutexLocker ml(&_textPathsMutex); _textPaths.clear(); if( !_showNames) return ; const GraphContentOptions& gc=lp.options(); double coef=dotpercm/SciFigsGlobal::screenResolution(); QFont scaledFont=_textFont; if(coef!=1.0 && gc.printBitmap()) GraphicObject::scaleFont(scaledFont, coef); QList<AbstractLine *>::const_iterator it; for(it=begin() ;it!=end();++it) { AbstractNameLine * line=static_cast<AbstractNameLine *>( *it); int countPoints=line->count(); if(countPoints && line->isVisible()) { if(line->isSelected()) { // set selection mark scaledFont.setBold(true); } for(int j=0;j < countPoints;j++ ) { QString name=line->name(j); QPainterPath p; p.addText(0, 0, scaledFont, name); _textPaths.append(p); } if(line->isSelected()) { // set selection mark scaledFont.setBold(false); } } } }
void SciFigs::NameLineLayer::properties | ( | PropertyWidget * | w | ) | const [virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References _tab, SciFigs::NameLineLayerProperties::Font, fontString(), QGpGuiTools::PropertyWidget::id(), isShowNames(), QGpGuiTools::PropertyWidget::setValue(), SciFigs::NameLineLayerProperties::ShowNames, and TRACE.
{ TRACE; if(w->id()==_tab) { w->setValue(NameLineLayerProperties::ShowNames, isShowNames()); w->setValue(NameLineLayerProperties::Font, fontString()); } else { LineLayer::properties(w); } }
void SciFigs::NameLineLayer::removeProperties | ( | PropertyProxy * | pp | ) | [virtual] |
Clean property editor
Reimplemented from SciFigs::LineLayer.
References _tab, QGpGuiTools::PropertyProxy::currentTabWidget(), SciFigs::NameLineLayerProperties::removeLayer(), QGpGuiTools::PropertyProxy::removeTab(), QGpGuiTools::PropertyProxy::setCurrentTab(), TRACE, and w.
{ TRACE; LineLayer::removeProperties(pp); if(pp->setCurrentTab(_tab)) { NameLineLayerProperties * w=static_cast<NameLineLayerProperties *>(pp->currentTabWidget()); w->removeLayer(this); pp->removeTab(_tab, this); } }
void SciFigs::NameLineLayer::setFontString | ( | QString | fs | ) | [inline] |
Referenced by setProperty().
{_textFont.fromString(fs);}
void SciFigs::NameLineLayer::setLegend | ( | Legend | legend | ) | [virtual] |
Reimplemented from SciFigs::LineLayer.
References SciFigs::LineLayer::count(), SciFigs::GraphContentLayer::deepUpdate(), line(), SciFigs::Legend::pen(), SciFigs::AbstractLine::setPen(), SciFigs::AbstractLine::setSymbol(), SciFigs::AbstractNameLine::setTextColor(), SciFigs::Legend::symbol(), SciFigs::Legend::textColor(), and TRACE.
void SciFigs::NameLineLayer::setNames | ( | int | i, |
QVector< QString > * | names | ||
) |
void SciFigs::NameLineLayer::setProperty | ( | uint | wid, |
int | pid, | ||
QVariant | val | ||
) | [virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References _tab, SciFigs::GraphContent::deepUpdate(), SciFigs::NameLineLayerProperties::Font, SciFigs::GraphContentLayer::graphContent(), setFontString(), setShowNames(), SciFigs::NameLineLayerProperties::ShowNames, and TRACE.
{ TRACE; if(wid==_tab) { switch(pid) { case NameLineLayerProperties::ShowNames: setShowNames(val.toBool()); break; case NameLineLayerProperties::Font: setFontString(val.toString()); break; default: break; } } else { LineLayer::setProperty(wid, pid, val); } graphContent()->deepUpdate(); }
void SciFigs::NameLineLayer::setShowNames | ( | bool | b | ) | [inline] |
Referenced by setProperty().
{_showNames=b;}
virtual const QString& SciFigs::NameLineLayer::xml_tagName | ( | ) | const [inline, virtual] |
Reimplemented from SciFigs::LineLayer.
{return xmlNameLineLayerTag;}
bool SciFigs::NameLineLayer::_showNames [protected] |
Referenced by NameLineLayer(), paintData(), and paintText().
uint SciFigs::NameLineLayer::_tab = PropertyProxy::uniqueId() [static, protected] |
Referenced by addProperties(), properties(), removeProperties(), and setProperty().
QFont SciFigs::NameLineLayer::_textFont [protected] |
Referenced by paintText().
const QString SciFigs::NameLineLayer::xmlNameLineLayerTag = "NameLineLayer" [static] |
QString SciFigs::NameLineLayer::font [read, write] |
bool SciFigs::NameLineLayer::showNames [read, write] |