fixes focus issue

This commit is contained in:
kazu
2018-07-26 08:44:53 +02:00
parent 0b7c8756a9
commit 9a07790ec6
5 changed files with 39 additions and 42 deletions

View File

@@ -126,8 +126,8 @@ MainController::MainController() {
//mapModel->load("/apps/paper/diss/data/maps/walkmodel_stairs3.xml");
//mapModel->load("/apps/paper/maps/museum/map43_svg.xml");
//mapModel->load("/apps/paper/maps/shl/SHL45_nm.xml");
mapModel->load("/apps/paper/maps/test/doors1.xml");
mapModel->load("/apps/paper/maps/shl/SHL46_nm.xml");
//mapModel->load("/apps/paper/maps/test/doors1.xml");
//mapModel->load("/mnt/sdcard/SHL41_nm.xml");

View File

@@ -252,8 +252,8 @@ void MV2DElementFloorObstacleWall::onNodeMove(MapView2D* v, const int userIdx, c
Point2 p;
float u = 0;
bool isects = intersects(l2, l1, true, p, &u);
if (u < 0.1) {u = 0.1;}
if (u > 0.9) {u = 0.9;}
if (u < 0.01) {u = 0.01;}
if (u > 0.99) {u = 0.99;}
if (userIdx >= 1000 && userIdx < 2000) {

View File

@@ -134,14 +134,14 @@ void Painter::drawPolygon(const std::vector<Point2>& points) {
for (const Point2 p : points) {
vec.push_back(QPointF(s.xms(p.x), s.yms(p.y)));
}
p->drawConvexPolygon(vec.data(), vec.size());
p->drawPolygon(vec.data(), vec.size());
}
void Painter::drawPolygon(const std::vector<Point3>& points) {
std::vector<QPointF> vec;
for (const Point3 p : points) {
vec.push_back(QPointF(s.xms(p.x), s.yms(p.y)));
}
p->drawConvexPolygon(vec.data(), vec.size());
p->drawPolygon(vec.data(), vec.size());
}
void Painter::drawPixmap(const Point2 pt, const QPixmap& img) {

View File

@@ -72,22 +72,24 @@ private:
}
void processPress(QMouseEvent* e, MapView2D* m, const Point2 p, MapModelElement* elem) {
bool processPress(QMouseEvent* e, MapView2D* m, const Point2 p, MapModelElement* elem) {
MV2DElement* me = elem->getMV2D();
if (!me) {return;}
if (!me) {return false;}
// left mouse button?
if (e->button() == Qt::MouseButton::LeftButton) {
// element has selectedable nodes? try to select one
if (dynamic_cast<HasMoveableNodes*>(me)) {
if (selectNode(m, p, dynamic_cast<HasMoveableNodes*>(me))) {return;}
if (selectNode(m, p, dynamic_cast<HasMoveableNodes*>(me))) {return true;}
}
}
// let the element itself process all events
me->mousePressed(m, p);
return false;
}
void processMove(QMouseEvent* e, MapView2D* m, const Point2 p, MapModelElement* elem) {
@@ -248,10 +250,14 @@ private:
const float g = m->getScaler().sm(15); // increase each BBox by 15 px (needed mainly for hor/ver lines)
#pragma message "which elements to select? among all currently visible? or only among the selected layer?"
if (focused && processPress(e, m, p2, focused)) {
;
} else {
// get all elements with bounding-box matchings
std::vector<MapModelElement*> possible;
// for (MapModelElement* el : m->getModel()->getSelectedLayerElements()) {
// for (MapModelElement* el : m->getModel()->getSelectedLayerElements()) {
for (MapModelElement* el : m->getModel()->getVisibleElements()) {
if (!el->getMV2D()) {continue;}
BBox2 bbox = el->getMV2D()->getBoundingBox(); // elements 2D bbox
@@ -264,18 +270,9 @@ private:
auto it = std::min_element(possible.begin(), possible.end(), lambda);
MapModelElement* el = (it == possible.end()) ? (nullptr) : (*it);
// focus changed? -> unfocus the old one (if any)
// focus the new element, unfocus the old one
if (setFocused(m, el)) {
;
} else {
// focus kept. provide the currently focused element with events
if (focused) {
processPress(e, m, p2, focused);
}
}

View File

@@ -73,19 +73,19 @@ public:
case 0: return Param("thickness (m)", ParamType::FLOAT);
case 1: return Param("height (m)", ParamType::FLOAT);
case 2: return Param("length", ParamType::FLOAT, true);
}
} break;
case 1: switch(idx) {
case 0: return Param("width (m)", ParamType::FLOAT);
case 1: return Param("height (m)", ParamType::FLOAT);
case 2: return Param("left/right", ParamType::BOOL);
case 3: return Param("in/out", ParamType::BOOL);
}
} break;
case 2: switch(idx) {
case 0: return Param("above ground (m)", ParamType::FLOAT);
case 1: return Param("width (m)", ParamType::FLOAT);
case 2: return Param("height (m)", ParamType::FLOAT);
case 3: return Param("in/out", ParamType::BOOL);
}
} break;
}
throw 1;
}
@@ -96,19 +96,19 @@ public:
case 0: return wall->thickness_m;
case 1: return wall->height_m;
case 2: return wall->from.getDistance(wall->to);
}
} break;
case 1: switch(idx) {
case 0: return getCurDoor()->width;
case 1: return getCurDoor()->height;
case 2: return getCurDoor()->leftRight;
case 3: return getCurDoor()->inOut;
}
} break;
case 2 : switch(idx) {
case 0: return getCurWindow()->startsAtHeight;
case 1: return getCurWindow()->width;
case 2: return getCurWindow()->height;
case 3: return getCurWindow()->inOut;
}
} break;
}
throw 1;
}
@@ -119,19 +119,19 @@ public:
case 0: wall->thickness_m = val.toFloat(); return;
case 1: wall->height_m = val.toFloat(); return;
case 2: return;
}
} break;
case 1: switch(idx) {
case 0: getCurDoor()->width = val.toFloat(); return;
case 1: getCurDoor()->height = val.toFloat(); return;
case 2: getCurDoor()->leftRight = val.toBool(); return;
case 3: getCurDoor()->inOut = val.toBool(); return;
}
} break;
case 2: switch(idx) {
case 0: getCurWindow()->startsAtHeight = val.toFloat(); return;
case 1: getCurWindow()->width = val.toFloat(); return;
case 2: getCurWindow()->height = val.toFloat(); return;
case 3: getCurWindow()->inOut = val.toBool(); return;
}
} break;
}
}
};