mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-21 08:40:53 +01:00
Gestion du "Clean State" dans l'editeur
Correction d'un bug avec les polygones. Amelioration du mode lecture seule. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@107 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -23,6 +23,7 @@ ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) :
|
|||||||
element_editor(editor)
|
element_editor(editor)
|
||||||
{
|
{
|
||||||
current_polygon = NULL;
|
current_polygon = NULL;
|
||||||
|
undo_stack.setClean();
|
||||||
connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionChanged()));
|
connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,7 @@ PolygonEditor::PolygonEditor(QETElementEditor *editor, PartPolygon *p, QWidget *
|
|||||||
layout -> addWidget(&points_list);
|
layout -> addWidget(&points_list);
|
||||||
layout -> addWidget(&close_polygon);
|
layout -> addWidget(&close_polygon);
|
||||||
|
|
||||||
// connexions signaux/slots
|
updateForm();
|
||||||
connect(&close_polygon, SIGNAL(stateChanged(int)), this, SLOT(updatePolygonClosedState()));
|
|
||||||
connect(&points_list, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(validColumn(QTreeWidgetItem *, int)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PolygonEditor::updatePolygon() {
|
void PolygonEditor::updatePolygon() {
|
||||||
@@ -64,6 +62,7 @@ void PolygonEditor::updatePolygonClosedState() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PolygonEditor::updateForm() {
|
void PolygonEditor::updateForm() {
|
||||||
|
activeConnections(false);
|
||||||
while(points_list.takeTopLevelItem(0));
|
while(points_list.takeTopLevelItem(0));
|
||||||
foreach(QPointF point, part -> polygon()) {
|
foreach(QPointF point, part -> polygon()) {
|
||||||
point = part -> mapToScene(point);
|
point = part -> mapToScene(point);
|
||||||
@@ -74,6 +73,7 @@ void PolygonEditor::updateForm() {
|
|||||||
points_list.addTopLevelItem(qtwi);
|
points_list.addTopLevelItem(qtwi);
|
||||||
}
|
}
|
||||||
close_polygon.setChecked(part -> isClosed());
|
close_polygon.setChecked(part -> isClosed());
|
||||||
|
activeConnections(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<QPointF> PolygonEditor::getPointsFromTree() {
|
QVector<QPointF> PolygonEditor::getPointsFromTree() {
|
||||||
@@ -97,3 +97,13 @@ void PolygonEditor::validColumn(QTreeWidgetItem *qtwi, int column) {
|
|||||||
updatePolygonPoints();
|
updatePolygonPoints();
|
||||||
} else points_list.openPersistentEditor(qtwi, column);
|
} else points_list.openPersistentEditor(qtwi, column);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PolygonEditor::activeConnections(bool active) {
|
||||||
|
if (active) {
|
||||||
|
connect(&close_polygon, SIGNAL(stateChanged(int)), this, SLOT(updatePolygonClosedState()));
|
||||||
|
connect(&points_list, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(validColumn(QTreeWidgetItem *, int)));
|
||||||
|
} else {
|
||||||
|
disconnect(&close_polygon, SIGNAL(stateChanged(int)), this, SLOT(updatePolygonClosedState()));
|
||||||
|
disconnect(&points_list, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(validColumn(QTreeWidgetItem *, int)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -31,5 +31,8 @@ class PolygonEditor : public ElementItemEditor {
|
|||||||
void updatePolygonClosedState();
|
void updatePolygonClosedState();
|
||||||
void updateForm();
|
void updateForm();
|
||||||
void validColumn(QTreeWidgetItem *qtwi, int column);
|
void validColumn(QTreeWidgetItem *qtwi, int column);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void activeConnections(bool);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -132,6 +132,8 @@ void QETElementEditor::setupActions() {
|
|||||||
|
|
||||||
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updateInformations()));
|
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updateInformations()));
|
||||||
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updateMenus()));
|
connect(ce_scene, SIGNAL(selectionChanged()), this, SLOT(slot_updateMenus()));
|
||||||
|
connect(&(ce_scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(slot_updateMenus()));
|
||||||
|
connect(&(ce_scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(slot_updateTitle()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void QETElementEditor::setupMenus() {
|
void QETElementEditor::setupMenus() {
|
||||||
@@ -178,6 +180,17 @@ void QETElementEditor::setupMenus() {
|
|||||||
|
|
||||||
void QETElementEditor::slot_updateMenus() {
|
void QETElementEditor::slot_updateMenus() {
|
||||||
edit_delete -> setEnabled(!ce_scene -> selectedItems().isEmpty());
|
edit_delete -> setEnabled(!ce_scene -> selectedItems().isEmpty());
|
||||||
|
save -> setEnabled(!ce_scene -> undoStack().isClean());
|
||||||
|
}
|
||||||
|
|
||||||
|
void QETElementEditor::slot_updateTitle() {
|
||||||
|
QString title = min_title;
|
||||||
|
title += " - " + ce_scene -> names().name() + " ";
|
||||||
|
if (_filename != QString()) {
|
||||||
|
if (!ce_scene -> undoStack().isClean()) title += tr("[Modifi\351]");
|
||||||
|
if (isReadOnly()) title += tr(" [lecture seule]");
|
||||||
|
}
|
||||||
|
setWindowTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QETElementEditor::setupInterface() {
|
void QETElementEditor::setupInterface() {
|
||||||
@@ -319,12 +332,7 @@ void QETElementEditor::fromFile(const QString &filepath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// memorise le fichier
|
// memorise le fichier
|
||||||
_filename = filepath;
|
setFileName(filepath);
|
||||||
|
|
||||||
// modifie le titre de la fenetre
|
|
||||||
QString new_title = min_title + " - " + ce_scene -> names().name();
|
|
||||||
if (isReadOnly()) new_title += tr(" [lecture seule]");
|
|
||||||
setWindowTitle(new_title);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QETElementEditor::toFile(const QString &fn) {
|
bool QETElementEditor::toFile(const QString &fn) {
|
||||||
@@ -353,6 +361,12 @@ void QETElementEditor::setReadOnly(bool ro) {
|
|||||||
ce_view -> setInteractive(!ro);
|
ce_view -> setInteractive(!ro);
|
||||||
|
|
||||||
// active / desactive l'edition de la taille, du hotspot, des noms et des orientations
|
// active / desactive l'edition de la taille, du hotspot, des noms et des orientations
|
||||||
|
selectall -> setEnabled(!ro);
|
||||||
|
deselectall -> setEnabled(!ro);
|
||||||
|
inv_select -> setEnabled(!ro);
|
||||||
|
undo -> setEnabled(!ro);
|
||||||
|
redo -> setEnabled(!ro);
|
||||||
|
edit_delete -> setEnabled(!ro);
|
||||||
edit_size_hs -> setEnabled(!ro);
|
edit_size_hs -> setEnabled(!ro);
|
||||||
edit_names -> setEnabled(!ro);
|
edit_names -> setEnabled(!ro);
|
||||||
edit_ori -> setEnabled(!ro);
|
edit_ori -> setEnabled(!ro);
|
||||||
@@ -388,7 +402,9 @@ bool QETElementEditor::slot_save() {
|
|||||||
// si on ne connait pas le nom du fichier en cours, enregistrer revient a enregistrer sous
|
// si on ne connait pas le nom du fichier en cours, enregistrer revient a enregistrer sous
|
||||||
if (_filename == QString()) return(slot_saveAs());
|
if (_filename == QString()) return(slot_saveAs());
|
||||||
// sinon on enregistre dans le nom de fichier connu
|
// sinon on enregistre dans le nom de fichier connu
|
||||||
return(toFile(_filename));
|
bool result_save = toFile(_filename);
|
||||||
|
if (result_save) ce_scene -> undoStack().setClean();
|
||||||
|
return(result_save);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QETElementEditor::slot_saveAs() {
|
bool QETElementEditor::slot_saveAs() {
|
||||||
@@ -406,7 +422,10 @@ bool QETElementEditor::slot_saveAs() {
|
|||||||
// tente d'enregistrer le fichier
|
// tente d'enregistrer le fichier
|
||||||
bool result_save = toFile(fn);
|
bool result_save = toFile(fn);
|
||||||
// si l'enregistrement reussit, le nom du fichier est conserve
|
// si l'enregistrement reussit, le nom du fichier est conserve
|
||||||
if (result_save) setFileName(fn);
|
if (result_save) {
|
||||||
|
setFileName(fn);
|
||||||
|
ce_scene -> undoStack().setClean();
|
||||||
|
}
|
||||||
// retourne un booleen representatif de la reussite de l'enregistrement
|
// retourne un booleen representatif de la reussite de l'enregistrement
|
||||||
return(result_save);
|
return(result_save);
|
||||||
}
|
}
|
||||||
@@ -419,6 +438,7 @@ void QETElementEditor::slot_quit(QCloseEvent *event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool QETElementEditor::close() {
|
bool QETElementEditor::close() {
|
||||||
|
if (ce_scene -> undoStack().isClean()) return(true);
|
||||||
// demande d'abord a l'utilisateur s'il veut enregistrer l'element en cours
|
// demande d'abord a l'utilisateur s'il veut enregistrer l'element en cours
|
||||||
QMessageBox::StandardButton answer = QMessageBox::question(
|
QMessageBox::StandardButton answer = QMessageBox::question(
|
||||||
this,
|
this,
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ class QETElementEditor : public QMainWindow {
|
|||||||
void slot_setNormalMode();
|
void slot_setNormalMode();
|
||||||
void slot_updateInformations();
|
void slot_updateInformations();
|
||||||
void slot_updateMenus();
|
void slot_updateMenus();
|
||||||
|
void slot_updateTitle();
|
||||||
void xmlPreview();
|
void xmlPreview();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -122,8 +123,8 @@ inline OrientationSet QETElementEditor::orientations() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline void QETElementEditor::setFileName(const QString &fn) {
|
inline void QETElementEditor::setFileName(const QString &fn) {
|
||||||
setWindowTitle(min_title + " - " + fn);
|
|
||||||
_filename = fn;
|
_filename = fn;
|
||||||
|
slot_updateTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline QString QETElementEditor::fileName() const {
|
inline QString QETElementEditor::fileName() const {
|
||||||
|
|||||||
Reference in New Issue
Block a user