Optimisations diverses dans l'editeur d'elememt.

Inclut la desactivation de la liste des primitives au-dela de 200 primitives.


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@858 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2010-02-22 19:37:46 +00:00
parent 8b9687db90
commit 6425a8c737
4 changed files with 46 additions and 16 deletions

View File

@@ -47,16 +47,20 @@ DeletePartsCommand::~DeletePartsCommand() {
/// Restaure les parties supprimees /// Restaure les parties supprimees
void DeletePartsCommand::undo() { void DeletePartsCommand::undo() {
editor_scene -> blockSignals(true);
foreach(QGraphicsItem *qgi, deleted_parts) { foreach(QGraphicsItem *qgi, deleted_parts) {
editor_scene -> addItem(qgi); editor_scene -> addItem(qgi);
} }
editor_scene -> blockSignals(false);
} }
/// Supprime les parties /// Supprime les parties
void DeletePartsCommand::redo() { void DeletePartsCommand::redo() {
editor_scene -> blockSignals(true);
foreach(QGraphicsItem *qgi, deleted_parts) { foreach(QGraphicsItem *qgi, deleted_parts) {
editor_scene -> removeItem(qgi); editor_scene -> removeItem(qgi);
} }
editor_scene -> blockSignals(false);
} }
/*** CutPartsCommand ***/ /*** CutPartsCommand ***/
@@ -90,7 +94,11 @@ PastePartsCommand::~PastePartsCommand() {
/// annule le coller /// annule le coller
void PastePartsCommand::undo() { void PastePartsCommand::undo() {
// enleve les parties // enleve les parties
foreach(QGraphicsItem *part, content_) editor_scene_ -> removeItem(part); editor_scene_ -> blockSignals(true);
foreach(QGraphicsItem *part, content_) {
editor_scene_ -> removeItem(part);
}
editor_scene_ -> blockSignals(false);
if (uses_offset) { if (uses_offset) {
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_;
@@ -103,7 +111,11 @@ void PastePartsCommand::redo() {
if (first_redo) first_redo = false; if (first_redo) first_redo = false;
else { else {
// pose les parties // pose les parties
foreach(QGraphicsItem *part, content_) editor_scene_ -> addItem(part); editor_scene_ -> blockSignals(true);
foreach(QGraphicsItem *part, content_) {
editor_scene_ -> addItem(part);
}
editor_scene_ -> blockSignals(false);
if (uses_offset) { if (uses_offset) {
editor_view_ -> offset_paste_count_ = new_offset_paste_count_; editor_view_ -> offset_paste_count_ = new_offset_paste_count_;
editor_view_ -> start_top_left_corner_ = new_start_top_left_corner_; editor_view_ -> start_top_left_corner_ = new_start_top_left_corner_;

View File

@@ -45,6 +45,7 @@ ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) :
qgi_manager(this), qgi_manager(this),
element_editor(editor) element_editor(editor)
{ {
setItemIndexMethod(NoIndex);
current_polygon = NULL; current_polygon = NULL;
setGrid(1, 1); setGrid(1, 1);
initPasteArea(); initPasteArea();
@@ -391,7 +392,6 @@ void ElementScene::keyPressEvent(QKeyEvent *e) {
case Qt::Key_Down: movement = QPointF(0.0, +movement_length); break; case Qt::Key_Down: movement = QPointF(0.0, +movement_length); break;
} }
if (!movement.isNull() && !focusItem()) { if (!movement.isNull() && !focusItem()) {
qDebug() << "keyPressEvent: let's move by " << movement;
if (!moving_parts_) { if (!moving_parts_) {
moving_parts_ = true; moving_parts_ = true;
fsi_pos = movement; fsi_pos = movement;
@@ -759,6 +759,7 @@ void ElementScene::paste() {
*/ */
void ElementScene::slot_select(const ElementContent &content) { void ElementScene::slot_select(const ElementContent &content) {
blockSignals(true); blockSignals(true);
clearSelection();
foreach(QGraphicsItem *qgi, content) qgi -> setSelected(true); foreach(QGraphicsItem *qgi, content) qgi -> setSelected(true);
blockSignals(false); blockSignals(false);
emit(selectionChanged()); emit(selectionChanged());
@@ -775,7 +776,7 @@ void ElementScene::slot_selectAll() {
Deselectionne tout Deselectionne tout
*/ */
void ElementScene::slot_deselectAll() { void ElementScene::slot_deselectAll() {
clearSelection(); slot_select(ElementContent());
} }
/** /**

View File

@@ -28,6 +28,7 @@ ElementView::ElementView(ElementScene *scene, QWidget *parent) :
scene_(scene), scene_(scene),
offset_paste_count_(0) offset_paste_count_(0)
{ {
setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
setInteractive(true); setInteractive(true);
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
setResizeAnchor(QGraphicsView::AnchorUnderMouse); setResizeAnchor(QGraphicsView::AnchorUnderMouse);

View File

@@ -39,6 +39,13 @@
#include "texteditor.h" #include "texteditor.h"
#include "textfieldeditor.h" #include "textfieldeditor.h"
/*
Nombre maximum de primitives affichees par la "liste des parties"
Au-dela, un petit message est affiche, indiquant que ce nombre a ete depasse
et que la liste ne sera donc pas mise a jour.
*/
#define QET_MAX_PARTS_IN_ELEMENT_EDITOR_LIST 200
/** /**
Constructeur Constructeur
@param parent QWidget parent @param parent QWidget parent
@@ -1119,17 +1126,25 @@ void QETElementEditor::slot_createPartsList() {
parts_list -> blockSignals(true); parts_list -> blockSignals(true);
parts_list -> clear(); parts_list -> clear();
QList<QGraphicsItem *> qgis = ce_scene -> zItems(true); QList<QGraphicsItem *> qgis = ce_scene -> zItems(true);
for (int j = qgis.count() - 1 ; j >= 0 ; -- j) {
QGraphicsItem *qgi = qgis[j]; // on ne construit plus la liste a partir de 200 primitives
if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) { // c'est ingerable : la maj de la liste prend trop de temps et le resultat
QString part_desc = cep -> name(); // est inexploitable
QListWidgetItem *qlwi = new QListWidgetItem(part_desc); if (qgis.count() <= QET_MAX_PARTS_IN_ELEMENT_EDITOR_LIST) {
QVariant v; for (int j = qgis.count() - 1 ; j >= 0 ; -- j) {
v.setValue<QGraphicsItem *>(qgi); QGraphicsItem *qgi = qgis[j];
qlwi -> setData(42, v); if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) {
parts_list -> addItem(qlwi); QString part_desc = cep -> name();
qlwi -> setSelected(qgi -> isSelected()); QListWidgetItem *qlwi = new QListWidgetItem(part_desc);
QVariant v;
v.setValue<QGraphicsItem *>(qgi);
qlwi -> setData(42, v);
parts_list -> addItem(qlwi);
qlwi -> setSelected(qgi -> isSelected());
}
} }
} else {
parts_list -> addItem(new QListWidgetItem(tr("Trop de primitives, liste non g\351n\351r\351e.")));
} }
parts_list -> blockSignals(false); parts_list -> blockSignals(false);
} }
@@ -1138,9 +1153,10 @@ void QETElementEditor::slot_createPartsList() {
Met a jour la selection dans la liste des parties Met a jour la selection dans la liste des parties
*/ */
void QETElementEditor::slot_updatePartsList() { void QETElementEditor::slot_updatePartsList() {
if (parts_list -> count() != ce_scene -> items().count()) { int items_count = ce_scene -> items().count();
if (parts_list -> count() != items_count) {
slot_createPartsList(); slot_createPartsList();
} else { } else if (items_count <= QET_MAX_PARTS_IN_ELEMENT_EDITOR_LIST) {
parts_list -> blockSignals(true); parts_list -> blockSignals(true);
int i = 0; int i = 0;
QList<QGraphicsItem *> items = ce_scene -> zItems(true); QList<QGraphicsItem *> items = ce_scene -> zItems(true);