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] |