mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 13:30:34 +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_ -> offset_paste_count_ = old_offset_paste_count_;
|
||||||
editor_view_ -> start_top_left_corner_ = old_start_top_left_corner_;
|
editor_view_ -> start_top_left_corner_ = old_start_top_left_corner_;
|
||||||
}
|
}
|
||||||
editor_view_ -> adjustSceneRect();
|
editor_view_ -> zoomFit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// refait le coller
|
/// refait le coller
|
||||||
@@ -176,7 +176,7 @@ void PastePartsCommand::redo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
editor_scene_ -> slot_select(content_);
|
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
|
@return the minimum, margin-less rectangle the element can fit into, in scene
|
||||||
coordinates. It is different from itemsBoundingRect() because it is not supposed
|
coordinates. It is different from itemsBoundingRect() because it is not supposed
|
||||||
@@ -531,15 +513,6 @@ QRectF ElementScene::elementSceneGeometricRect() const{
|
|||||||
return (esgr);
|
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
|
@return true si l'element comporte au moins une borne, false s'il n'en a
|
||||||
aucune.
|
aucune.
|
||||||
|
|||||||
@@ -129,10 +129,7 @@ class ElementScene : public QGraphicsScene {
|
|||||||
virtual QList<QGraphicsItem *> zItems(ItemOptions options = ItemOptions(SortByZValue | IncludeTerminals | SelectedOrNot)) const;
|
virtual QList<QGraphicsItem *> zItems(ItemOptions options = ItemOptions(SortByZValue | IncludeTerminals | SelectedOrNot)) const;
|
||||||
virtual ElementContent selectedContent() const;
|
virtual ElementContent selectedContent() const;
|
||||||
virtual void getPasteArea(const QRectF &);
|
virtual void getPasteArea(const QRectF &);
|
||||||
QRectF borderRect() const;
|
|
||||||
QRectF sceneContent() const;
|
|
||||||
QRectF elementSceneGeometricRect () const;
|
QRectF elementSceneGeometricRect () const;
|
||||||
bool borderContainsEveryParts() const;
|
|
||||||
bool containsTerminals() const;
|
bool containsTerminals() const;
|
||||||
QUndoStack &undoStack();
|
QUndoStack &undoStack();
|
||||||
QGIManager &qgiManager();
|
QGIManager &qgiManager();
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ void ElementView::zoomOut() {
|
|||||||
le zoom est reinitialise
|
le zoom est reinitialise
|
||||||
*/
|
*/
|
||||||
void ElementView::zoomFit() {
|
void ElementView::zoomFit() {
|
||||||
adjustSceneRect();
|
resetSceneRect();
|
||||||
fitInView(sceneRect(), Qt::KeepAspectRatio);
|
fitInView(sceneRect(), Qt::KeepAspectRatio);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,23 +122,30 @@ void ElementView::zoomFit() {
|
|||||||
Reinitialise le zoom
|
Reinitialise le zoom
|
||||||
*/
|
*/
|
||||||
void ElementView::zoomReset() {
|
void ElementView::zoomReset() {
|
||||||
adjustSceneRect();
|
resetSceneRect();
|
||||||
resetMatrix();
|
resetMatrix();
|
||||||
scale(4.0, 4.0);
|
scale(4.0, 4.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Ajuste le sceneRect (zone du schema visualisee par l'ElementView) afin que
|
Ajuste le sceneRect (zone du schéma visualisée par l'ElementView) afin que
|
||||||
celui inclut a la fois les parties dans et en dehors du cadre et le cadre
|
celui-ci inclut à la fois les primitives de l'élément ainsi que le viewport
|
||||||
lui-meme.
|
de la scène avec une marge de 1/4 d'elle-même.
|
||||||
*/
|
*/
|
||||||
void ElementView::adjustSceneRect() {
|
void ElementView::adjustSceneRect() {
|
||||||
QRectF old_scene_rect = scene_ -> sceneRect();
|
QRectF esgr = scene_ -> elementSceneGeometricRect();
|
||||||
QRectF new_scene_rect = scene_ -> sceneContent();
|
QRectF vpbr = mapToScene(this -> viewport() -> rect()).boundingRect();
|
||||||
setSceneRect(new_scene_rect);
|
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());
|
QPointF move = reference_view_ - mapToScene(e -> pos());
|
||||||
this -> centerOn(center_view_ + move);
|
this -> centerOn(center_view_ + move);
|
||||||
center_view_ = mapToScene(this -> viewport() -> rect()).boundingRect().center();
|
center_view_ = mapToScene(this -> viewport() -> rect()).boundingRect().center();
|
||||||
|
adjustSceneRect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QGraphicsView::mouseMoveEvent(e);
|
QGraphicsView::mouseMoveEvent(e);
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class ElementView : public QGraphicsView {
|
|||||||
void zoomFit();
|
void zoomFit();
|
||||||
void zoomReset();
|
void zoomReset();
|
||||||
void adjustSceneRect();
|
void adjustSceneRect();
|
||||||
|
void resetSceneRect ();
|
||||||
void cut();
|
void cut();
|
||||||
void copy();
|
void copy();
|
||||||
void paste();
|
void paste();
|
||||||
|
|||||||
Reference in New Issue
Block a user