00001
00002
00003
00004
00005
00006
00007 #include "CallbackScaleBar.h"
00008 #include "CmdMediator.h"
00009 #include "Document.h"
00010 #include "Logger.h"
00011 #include <QVector>
00012 #include "ScaleBarAxisPointsUnite.h"
00013
00014 ScaleBarAxisPointsUnite::ScaleBarAxisPointsUnite()
00015 {
00016 LOG4CPP_INFO_S ((*mainCat)) << "ScaleBarAxisPointsUnite::ScaleBarAxisPointsUnite";
00017 }
00018
00019 ScaleBarAxisPointsUnite::~ScaleBarAxisPointsUnite()
00020 {
00021 }
00022
00023 QStringList ScaleBarAxisPointsUnite::axisPointIdentifiers (CmdMediator *cmdMediator) const
00024 {
00025 CallbackScaleBar ftor;
00026
00027 Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
00028 &CallbackScaleBar::callback);
00029 cmdMediator->iterateThroughCurvePointsAxes (ftorWithCallback);
00030
00031 return ftor.axisCurvePointIdentifiers ();
00032 }
00033
00034 QStringList ScaleBarAxisPointsUnite::unite (CmdMediator *cmdMediator,
00035 const QStringList &pointIdentifiersIn) const
00036 {
00037 const int AXIS_POINT_COUNT_IF_UNITING = 2;
00038
00039 QStringList pointIdentifiersOut (pointIdentifiersIn);
00040
00041
00042 QStringList axisIdentifiers = axisPointIdentifiers (cmdMediator);
00043
00044
00045 if ((cmdMediator->document().documentAxesPointsRequired() == DOCUMENT_AXES_POINTS_REQUIRED_2) &&
00046 (axisIdentifiers.count () == AXIS_POINT_COUNT_IF_UNITING)) {
00047
00048
00049 QVector<int> counts (AXIS_POINT_COUNT_IF_UNITING);
00050 for (int i = 0; i < AXIS_POINT_COUNT_IF_UNITING; i++) {
00051 counts [i] = 0;
00052
00053 QStringList::const_iterator itr;
00054 for (itr = pointIdentifiersIn.begin (); itr != pointIdentifiersIn.end (); itr++) {
00055 QString pointIdentifier = *itr;
00056
00057 if (axisIdentifiers [i] == pointIdentifier) {
00058 ++counts [i];
00059 }
00060 }
00061 }
00062
00063
00064 if (counts [0] == 0 && counts [1] == 1) {
00065
00066 pointIdentifiersOut << axisIdentifiers [0];
00067 } else if (counts [0] == 1 && counts [1] == 0) {
00068
00069 pointIdentifiersOut << axisIdentifiers [1];
00070 }
00071 }
00072
00073 return pointIdentifiersOut;
00074 }