mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 05:00:33 +01:00
element editor: improve the drag of the scene with wheel click
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2419 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -157,7 +157,7 @@ void PastePartsCommand::undo() {
|
||||
editor_view_ -> offset_paste_count_ = old_offset_paste_count_;
|
||||
editor_view_ -> start_top_left_corner_ = old_start_top_left_corner_;
|
||||
}
|
||||
editor_view_ -> adjustSceneRect();
|
||||
editor_view_ -> zoomFit();
|
||||
}
|
||||
|
||||
/// refait le coller
|
||||
@@ -176,7 +176,7 @@ void PastePartsCommand::redo() {
|
||||
}
|
||||
}
|
||||
editor_scene_ -> slot_select(content_);
|
||||
editor_view_ -> adjustSceneRect();
|
||||
editor_view_ -> zoomFit();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -496,24 +496,6 @@ void ElementScene::fromXml(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@return le rectangle representant les limites de l'element.
|
||||
Ce rectangle a pour dimensions la taille de l'element et pour coin
|
||||
superieur gauche les coordonnees opposees du hotspot.
|
||||
*/
|
||||
QRectF ElementScene::borderRect() const {
|
||||
return(QRectF(-elementSceneGeometricRect().topLeft(), QSizeF(width(), height())));
|
||||
}
|
||||
|
||||
/**
|
||||
@return un rectangle englobant toutes les parties ainsi que le
|
||||
"bounding rect" de l'element
|
||||
*/
|
||||
QRectF ElementScene::sceneContent() const {
|
||||
qreal adjustment = 5.0;
|
||||
return(elementContentBoundingRect(items()).unite(borderRect()).adjusted(-adjustment, -adjustment, adjustment, adjustment));
|
||||
}
|
||||
|
||||
/**
|
||||
@return the minimum, margin-less rectangle the element can fit into, in scene
|
||||
coordinates. It is different from itemsBoundingRect() because it is not supposed
|
||||
@@ -531,15 +513,6 @@ QRectF ElementScene::elementSceneGeometricRect() const{
|
||||
return (esgr);
|
||||
}
|
||||
|
||||
/**
|
||||
@return true si toutes les parties graphiques composant l'element sont
|
||||
integralement contenues dans le rectangle representant les limites de
|
||||
l'element.
|
||||
*/
|
||||
bool ElementScene::borderContainsEveryParts() const {
|
||||
return(borderRect().contains(elementContentBoundingRect(items())));
|
||||
}
|
||||
|
||||
/**
|
||||
@return true si l'element comporte au moins une borne, false s'il n'en a
|
||||
aucune.
|
||||
|
||||
@@ -129,10 +129,7 @@ class ElementScene : public QGraphicsScene {
|
||||
virtual QList<QGraphicsItem *> zItems(ItemOptions options = ItemOptions(SortByZValue | IncludeTerminals | SelectedOrNot)) const;
|
||||
virtual ElementContent selectedContent() const;
|
||||
virtual void getPasteArea(const QRectF &);
|
||||
QRectF borderRect() const;
|
||||
QRectF sceneContent() const;
|
||||
QRectF elementSceneGeometricRect () const;
|
||||
bool borderContainsEveryParts() const;
|
||||
bool containsTerminals() const;
|
||||
QUndoStack &undoStack();
|
||||
QGIManager &qgiManager();
|
||||
|
||||
@@ -114,7 +114,7 @@ void ElementView::zoomOut() {
|
||||
le zoom est reinitialise
|
||||
*/
|
||||
void ElementView::zoomFit() {
|
||||
adjustSceneRect();
|
||||
resetSceneRect();
|
||||
fitInView(sceneRect(), Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
@@ -122,23 +122,30 @@ void ElementView::zoomFit() {
|
||||
Reinitialise le zoom
|
||||
*/
|
||||
void ElementView::zoomReset() {
|
||||
adjustSceneRect();
|
||||
resetSceneRect();
|
||||
resetMatrix();
|
||||
scale(4.0, 4.0);
|
||||
}
|
||||
|
||||
/**
|
||||
Ajuste le sceneRect (zone du schema visualisee par l'ElementView) afin que
|
||||
celui inclut a la fois les parties dans et en dehors du cadre et le cadre
|
||||
lui-meme.
|
||||
Ajuste le sceneRect (zone du schéma visualisée par l'ElementView) afin que
|
||||
celui-ci inclut à la fois les primitives de l'élément ainsi que le viewport
|
||||
de la scène avec une marge de 1/4 d'elle-même.
|
||||
*/
|
||||
void ElementView::adjustSceneRect() {
|
||||
QRectF old_scene_rect = scene_ -> sceneRect();
|
||||
QRectF new_scene_rect = scene_ -> sceneContent();
|
||||
setSceneRect(new_scene_rect);
|
||||
QRectF esgr = scene_ -> elementSceneGeometricRect();
|
||||
QRectF vpbr = mapToScene(this -> viewport() -> rect()).boundingRect();
|
||||
QRectF new_scene_rect = vpbr.adjusted(-vpbr.height()/4, -vpbr.width()/4, vpbr.height()/4, vpbr.width()/4);
|
||||
setSceneRect(new_scene_rect.united(esgr));
|
||||
}
|
||||
|
||||
// met a jour la scene
|
||||
scene_ -> update(old_scene_rect.united(new_scene_rect));
|
||||
/**
|
||||
* @brief ElementView::resetSceneRect
|
||||
* reset le sceneRect (zone du schéma visualisée par l'ElementView) afin que
|
||||
* celui-ci inclut uniquement les primitives de l'élément dessiné.
|
||||
*/
|
||||
void ElementView::resetSceneRect() {
|
||||
setSceneRect(scene_ -> elementSceneGeometricRect());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -353,6 +360,7 @@ void ElementView::mouseMoveEvent(QMouseEvent *e) {
|
||||
QPointF move = reference_view_ - mapToScene(e -> pos());
|
||||
this -> centerOn(center_view_ + move);
|
||||
center_view_ = mapToScene(this -> viewport() -> rect()).boundingRect().center();
|
||||
adjustSceneRect();
|
||||
return;
|
||||
}
|
||||
QGraphicsView::mouseMoveEvent(e);
|
||||
|
||||
@@ -59,6 +59,7 @@ class ElementView : public QGraphicsView {
|
||||
void zoomFit();
|
||||
void zoomReset();
|
||||
void adjustSceneRect();
|
||||
void resetSceneRect ();
|
||||
void cut();
|
||||
void copy();
|
||||
void paste();
|
||||
|
||||
Reference in New Issue
Block a user