Rapatriement dans la branche 0.3 des revisions 855 a 870.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@871 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier 2010-02-28 16:13:45 +00:00
parent f6f320a0a6
commit 815a2ea3e8
50 changed files with 3500 additions and 2942 deletions

View File

@ -1,6 +1,6 @@
<definition width="30" version="0.2" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" > <definition width="30" version="0.2" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" >
<names> <names>
<name lang="ru" >Эл. плита</name> <name lang="ru" >Духовой шкаф</name>
<name lang="en" >Electric oven</name> <name lang="en" >Electric oven</name>
<name lang="fr" >Four électrique</name> <name lang="fr" >Four électrique</name>
<name lang="es" >Horno eléctrico</name> <name lang="es" >Horno eléctrico</name>

View File

@ -1,5 +1,6 @@
<definition width="30" version="0.1" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" > <definition width="30" version="0.1" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" >
<names> <names>
<name lang="ru" >Эл. плита</name>
<name lang="en" >Solid plate</name> <name lang="en" >Solid plate</name>
<name lang="fr" >Plaque de cuisson</name> <name lang="fr" >Plaque de cuisson</name>
<name lang="es" >Placa de cocina</name> <name lang="es" >Placa de cocina</name>

BIN
ico/16x16/go-down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

BIN
ico/16x16/go-up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

BIN
ico/22x22/go-down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

BIN
ico/22x22/go-up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 929 B

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
<context> <context>
<name>QETElementEditor</name> <name>QETElementEditor</name>
<message numerus="yes"> <message numerus="yes">
<location filename="sources/editor/qetelementeditor.cpp" line="505"/> <location filename="../sources/editor/qetelementeditor.cpp" line="635"/>
<source>%n partie(s) sélectionnée(s).</source> <source>%n partie(s) sélectionnée(s).</source>
<translation> <translation>
<numerusform>%n partie sélectionnée.</numerusform> <numerusform>%n partie sélectionnée.</numerusform>
@ -12,7 +12,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="sources/editor/qetelementeditor.cpp" line="570"/> <location filename="../sources/editor/qetelementeditor.cpp" line="700"/>
<source>La vérification de cet élément a généré %n avertissement(s) :</source> <source>La vérification de cet élément a généré %n avertissement(s) :</source>
<comment>message box content</comment> <comment>message box content</comment>
<translation> <translation>
@ -24,7 +24,7 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message numerus="yes"> <message numerus="yes">
<location filename="sources/qet.cpp" line="157"/> <location filename="../sources/qet.cpp" line="157"/>
<source>%n élément(s)</source> <source>%n élément(s)</source>
<comment>part of a sentence listing the content of a diagram</comment> <comment>part of a sentence listing the content of a diagram</comment>
<translation> <translation>
@ -33,7 +33,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="sources/qet.cpp" line="178"/> <location filename="../sources/qet.cpp" line="178"/>
<source>%n conducteur(s)</source> <source>%n conducteur(s)</source>
<comment>part of a sentence listing the content of a diagram</comment> <comment>part of a sentence listing the content of a diagram</comment>
<translation> <translation>
@ -42,7 +42,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="sources/qet.cpp" line="193"/> <location filename="../sources/qet.cpp" line="193"/>
<source>%n champ(s) de texte</source> <source>%n champ(s) de texte</source>
<comment>part of a sentence listing the content of a diagram</comment> <comment>part of a sentence listing the content of a diagram</comment>
<translation> <translation>

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -44,7 +44,9 @@
<file>ico/16x16/endline-triangle.png</file> <file>ico/16x16/endline-triangle.png</file>
<file>ico/16x16/folder-new.png</file> <file>ico/16x16/folder-new.png</file>
<file>ico/16x16/folder.png</file> <file>ico/16x16/folder.png</file>
<file>ico/16x16/go-down.png</file>
<file>ico/16x16/go-home.png</file> <file>ico/16x16/go-home.png</file>
<file>ico/16x16/go-up.png</file>
<file>ico/16x16/ground.png</file> <file>ico/16x16/ground.png</file>
<file>ico/16x16/item_cancel.png</file> <file>ico/16x16/item_cancel.png</file>
<file>ico/16x16/item_copy.png</file> <file>ico/16x16/item_copy.png</file>
@ -118,7 +120,9 @@
<file>ico/22x22/folder-delete.png</file> <file>ico/22x22/folder-delete.png</file>
<file>ico/22x22/folder-edit.png</file> <file>ico/22x22/folder-edit.png</file>
<file>ico/22x22/folder-new.png</file> <file>ico/22x22/folder-new.png</file>
<file>ico/22x22/go-down.png</file>
<file>ico/22x22/go-home.png</file> <file>ico/22x22/go-home.png</file>
<file>ico/22x22/go-up.png</file>
<file>ico/22x22/hotspot.png</file> <file>ico/22x22/hotspot.png</file>
<file>ico/22x22/landscape.png</file> <file>ico/22x22/landscape.png</file>
<file>ico/22x22/line.png</file> <file>ico/22x22/line.png</file>

View File

@ -40,7 +40,7 @@ BorderPropertiesWidget::~BorderPropertiesWidget() {
} }
/** /**
@return the border properties edited and modified by @return Les proprietes editees par ce widget
*/ */
const BorderProperties &BorderPropertiesWidget::borderProperties() { const BorderProperties &BorderPropertiesWidget::borderProperties() {
border_.columns_count = columns_count -> value(); border_.columns_count = columns_count -> value();
@ -52,6 +52,25 @@ const BorderProperties &BorderPropertiesWidget::borderProperties() {
return(border_); return(border_);
} }
/**
@return true si ce widget est en lecture seule, false sinon
*/
bool BorderPropertiesWidget::isReadOnly() const {
return(columns_count -> isReadOnly());
}
/**
@param ro true pour passer ce widget en lecture seule, false sinon
*/
void BorderPropertiesWidget::setReadOnly(bool ro) {
columns_count -> setReadOnly(ro);
columns_width -> setReadOnly(ro);
display_columns -> setDisabled(ro);
rows_count -> setReadOnly(ro);
rows_height -> setReadOnly(ro);
display_rows -> setDisabled(ro);
}
/** /**
Definit les proprietes a editer Definit les proprietes a editer
@param bp Nouvelles proprietes @param bp Nouvelles proprietes

View File

@ -39,6 +39,8 @@ class BorderPropertiesWidget : public QWidget {
// methodes // methodes
public: public:
const BorderProperties &borderProperties(); const BorderProperties &borderProperties();
bool isReadOnly() const;
void setReadOnly(bool);
private: private:
void setEditedBorder(const BorderProperties &); void setEditedBorder(const BorderProperties &);

View File

@ -268,3 +268,26 @@ void ConductorPropertiesWidget::setConductorProperties(const ConductorProperties
ConductorProperties ConductorPropertiesWidget::conductorProperties() const { ConductorProperties ConductorPropertiesWidget::conductorProperties() const {
return(properties_); return(properties_);
} }
/**
@return true si ce widget est en lecture seule, false sinon
*/
bool ConductorPropertiesWidget::isReadOnly() const {
return(text_field -> isReadOnly());
}
/**
@param ro true pour passer ce widget en lecture seule, false sinon
*/
void ConductorPropertiesWidget::setReadOnly(bool ro) {
simple -> setDisabled(ro);
multiline -> setDisabled(ro);
singleline -> setDisabled(ro);
text_field -> setReadOnly(ro);
phase_checkbox -> setDisabled(ro);
phase_spinbox -> setReadOnly(ro);
ground_checkbox -> setDisabled(ro);
neutral_checkbox -> setDisabled(ro);
color_button -> setDisabled(ro);
dashed_checkbox -> setDisabled(ro);
}

View File

@ -40,6 +40,8 @@ class ConductorPropertiesWidget : public QWidget {
public: public:
void setConductorProperties(const ConductorProperties &); void setConductorProperties(const ConductorProperties &);
ConductorProperties conductorProperties() const; ConductorProperties conductorProperties() const;
bool isReadOnly() const;
void setReadOnly(bool);
private: private:
void setConductorType(ConductorProperties::ConductorType); void setConductorType(ConductorProperties::ConductorType);

View File

@ -403,7 +403,7 @@ QString DiagramView::title() const {
Edite les informations du schema. Edite les informations du schema.
*/ */
void DiagramView::editDiagramProperties() { void DiagramView::editDiagramProperties() {
if (scene -> isReadOnly()) return; bool diagram_is_read_only = scene -> isReadOnly();
// recupere le cartouche et les dimensions du schema // recupere le cartouche et les dimensions du schema
InsetProperties inset = scene -> border_and_inset.exportInset(); InsetProperties inset = scene -> border_and_inset.exportInset();
@ -419,10 +419,12 @@ void DiagramView::editDiagramProperties() {
popup.setWindowTitle(tr("Propri\351t\351s du sch\351ma", "window title")); popup.setWindowTitle(tr("Propri\351t\351s du sch\351ma", "window title"));
BorderPropertiesWidget *border_infos = new BorderPropertiesWidget(border, &popup); BorderPropertiesWidget *border_infos = new BorderPropertiesWidget(border, &popup);
border_infos -> setReadOnly(diagram_is_read_only);
InsetPropertiesWidget *inset_infos = new InsetPropertiesWidget(inset, false, &popup); InsetPropertiesWidget *inset_infos = new InsetPropertiesWidget(inset, false, &popup);
inset_infos -> setReadOnly(diagram_is_read_only);
// boutons // boutons
QDialogButtonBox boutons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox boutons(diagram_is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(&boutons, SIGNAL(accepted()), &popup, SLOT(accept())); connect(&boutons, SIGNAL(accepted()), &popup, SLOT(accept()));
connect(&boutons, SIGNAL(rejected()), &popup, SLOT(reject())); connect(&boutons, SIGNAL(rejected()), &popup, SLOT(reject()));
@ -433,7 +435,7 @@ void DiagramView::editDiagramProperties() {
layout_v.addStretch(); layout_v.addStretch();
layout_v.addWidget(&boutons); layout_v.addWidget(&boutons);
// si le dialogue est accepte // si le dialogue est accepte
if (popup.exec() == QDialog::Accepted) { if (popup.exec() == QDialog::Accepted && !diagram_is_read_only) {
InsetProperties new_inset = inset_infos -> insetProperties(); InsetProperties new_inset = inset_infos -> insetProperties();
BorderProperties new_border = border_infos -> borderProperties(); BorderProperties new_border = border_infos -> borderProperties();
// s'il y a des modifications au cartouche // s'il y a des modifications au cartouche
@ -816,9 +818,11 @@ void DiagramView::resetConductors() {
futurs nouveaux conducteurs futurs nouveaux conducteurs
*/ */
void DiagramView::editDefaultConductorProperties() { void DiagramView::editDefaultConductorProperties() {
if (scene -> isReadOnly()) return; bool diagram_is_read_only = scene -> isReadOnly();
// initialise l'editeur de proprietes pour le conducteur // initialise l'editeur de proprietes pour le conducteur
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(scene -> defaultConductorProperties); ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(scene -> defaultConductorProperties);
cpw -> setReadOnly(diagram_is_read_only);
// l'insere dans un dialogue // l'insere dans un dialogue
QDialog conductor_dialog(diagramEditor()); QDialog conductor_dialog(diagramEditor());
@ -829,13 +833,13 @@ void DiagramView::editDefaultConductorProperties() {
conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s par d\351faut des conducteurs", "window title")); conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s par d\351faut des conducteurs", "window title"));
QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog); QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog);
dialog_layout -> addWidget(cpw); dialog_layout -> addWidget(cpw);
QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *dbb = new QDialogButtonBox(diagram_is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog_layout -> addWidget(dbb); dialog_layout -> addWidget(dbb);
connect(dbb, SIGNAL(accepted()), &conductor_dialog, SLOT(accept())); connect(dbb, SIGNAL(accepted()), &conductor_dialog, SLOT(accept()));
connect(dbb, SIGNAL(rejected()), &conductor_dialog, SLOT(reject())); connect(dbb, SIGNAL(rejected()), &conductor_dialog, SLOT(reject()));
// execute le dialogue et met a jour le conducteur // execute le dialogue et met a jour le conducteur
if (conductor_dialog.exec() == QDialog::Accepted) { if (conductor_dialog.exec() == QDialog::Accepted && !diagram_is_read_only) {
scene -> defaultConductorProperties = cpw -> conductorProperties(); scene -> defaultConductorProperties = cpw -> conductorProperties();
} }
} }

View File

@ -48,7 +48,7 @@ ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) :
QGridLayout *grid = new QGridLayout(); QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0); grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0); grid -> addWidget(new QLabel("x"), 1, 0, Qt::AlignRight);
grid -> addWidget(x, 1, 1); grid -> addWidget(x, 1, 1);
grid -> addWidget(new QLabel("y"), 1, 2); grid -> addWidget(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3); grid -> addWidget(y, 1, 3);

View File

@ -43,7 +43,7 @@ CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget
QGridLayout *grid = new QGridLayout(); QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0); grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0); grid -> addWidget(new QLabel("x"), 1, 0, Qt::AlignRight);
grid -> addWidget(x, 1, 1); grid -> addWidget(x, 1, 1);
grid -> addWidget(new QLabel("y"), 1, 2); grid -> addWidget(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3); grid -> addWidget(y, 1, 3);

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();
@ -758,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());
@ -774,7 +776,7 @@ void ElementScene::slot_selectAll() {
Deselectionne tout Deselectionne tout
*/ */
void ElementScene::slot_deselectAll() { void ElementScene::slot_deselectAll() {
clearSelection(); slot_select(ElementContent());
} }
/** /**
@ -805,6 +807,8 @@ void ElementScene::slot_delete() {
(hotspot) de l'element. (hotspot) de l'element.
*/ */
void ElementScene::slot_editSizeHotSpot() { void ElementScene::slot_editSizeHotSpot() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue // cree un dialogue
QDialog dialog_sh(element_editor); QDialog dialog_sh(element_editor);
dialog_sh.setModal(true); dialog_sh.setModal(true);
@ -822,16 +826,17 @@ void ElementScene::slot_editSizeHotSpot() {
hotspot_editor -> setOldHotspot(hotspot()); hotspot_editor -> setOldHotspot(hotspot());
hotspot_editor -> setPartsRect(itemsBoundingRect()); hotspot_editor -> setPartsRect(itemsBoundingRect());
hotspot_editor -> setPartsRectEnabled(true); hotspot_editor -> setPartsRectEnabled(true);
hotspot_editor -> setReadOnly(is_read_only);
dialog_layout -> addWidget(hotspot_editor); dialog_layout -> addWidget(hotspot_editor);
// ajoute deux boutons au dialogue // ajoute deux boutons au dialogue
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *dialog_buttons = new QDialogButtonBox(is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog_layout -> addWidget(dialog_buttons); dialog_layout -> addWidget(dialog_buttons);
connect(dialog_buttons, SIGNAL(accepted()), &dialog_sh, SLOT(accept())); connect(dialog_buttons, SIGNAL(accepted()), &dialog_sh, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog_sh, SLOT(reject())); connect(dialog_buttons, SIGNAL(rejected()), &dialog_sh, SLOT(reject()));
// lance le dialogue // lance le dialogue
if (dialog_sh.exec() != QDialog::Accepted) return; if (dialog_sh.exec() == QDialog::Accepted && is_read_only) {
QSize new_size(hotspot_editor -> elementSize()); QSize new_size(hotspot_editor -> elementSize());
QSize old_size(width(), height()); QSize old_size(width(), height());
QPoint new_hotspot(hotspot_editor -> hotspot()); QPoint new_hotspot(hotspot_editor -> hotspot());
@ -840,12 +845,14 @@ void ElementScene::slot_editSizeHotSpot() {
if (new_size != old_size || new_hotspot != old_hotspot) { if (new_size != old_size || new_hotspot != old_hotspot) {
undo_stack.push(new ChangeHotspotCommand(this, old_size, new_size, old_hotspot, new_hotspot, hotspot_editor -> offsetParts())); undo_stack.push(new ChangeHotspotCommand(this, old_size, new_size, old_hotspot, new_hotspot, hotspot_editor -> offsetParts()));
} }
}
} }
/** /**
Lance un dialogue pour editer les noms de cete element Lance un dialogue pour editer les noms de cete element
*/ */
void ElementScene::slot_editOrientations() { void ElementScene::slot_editOrientations() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue // cree un dialogue
QDialog dialog_ori(element_editor); QDialog dialog_ori(element_editor);
@ -866,21 +873,23 @@ void ElementScene::slot_editOrientations() {
// ajoute un OrientationSetWidget au dialogue // ajoute un OrientationSetWidget au dialogue
OrientationSetWidget *ori_widget = new OrientationSetWidget(); OrientationSetWidget *ori_widget = new OrientationSetWidget();
ori_widget -> setOrientationSet(ori); ori_widget -> setOrientationSet(ori);
ori_widget -> setReadOnly(is_read_only);
dialog_layout -> addWidget(ori_widget); dialog_layout -> addWidget(ori_widget);
// ajoute une case a cocher pour les connexions internes // ajoute une case a cocher pour les connexions internes
QCheckBox *ic_checkbox = new QCheckBox(tr("Autoriser les connexions internes")); QCheckBox *ic_checkbox = new QCheckBox(tr("Autoriser les connexions internes"));
ic_checkbox -> setChecked(internal_connections); ic_checkbox -> setChecked(internal_connections);
ic_checkbox -> setDisabled(is_read_only);
dialog_layout -> addWidget(ic_checkbox); dialog_layout -> addWidget(ic_checkbox);
dialog_layout -> addStretch(); dialog_layout -> addStretch();
// ajoute deux boutons au dialogue // ajoute deux boutons au dialogue
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *dialog_buttons = new QDialogButtonBox(is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog_layout -> addWidget(dialog_buttons); dialog_layout -> addWidget(dialog_buttons);
connect(dialog_buttons, SIGNAL(accepted()), &dialog_ori, SLOT(accept())); connect(dialog_buttons, SIGNAL(accepted()), &dialog_ori, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog_ori, SLOT(reject())); connect(dialog_buttons, SIGNAL(rejected()), &dialog_ori, SLOT(reject()));
// lance le dialogue // lance le dialogue
if (dialog_ori.exec() == QDialog::Accepted) { if (dialog_ori.exec() == QDialog::Accepted && !is_read_only) {
OrientationSet new_ori = ori_widget -> orientationSet(); OrientationSet new_ori = ori_widget -> orientationSet();
if (new_ori != ori) { if (new_ori != ori) {
undoStack().push(new ChangeOrientationsCommand(this, ori, new_ori)); undoStack().push(new ChangeOrientationsCommand(this, ori, new_ori));
@ -897,6 +906,7 @@ void ElementScene::slot_editOrientations() {
sur l'auteur de l'element, sa licence, etc. sur l'auteur de l'element, sa licence, etc.
*/ */
void ElementScene::slot_editAuthorInformations() { void ElementScene::slot_editAuthorInformations() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue // cree un dialogue
QDialog dialog_author(element_editor); QDialog dialog_author(element_editor);
@ -918,16 +928,17 @@ void ElementScene::slot_editAuthorInformations() {
QTextEdit *text_field = new QTextEdit(); QTextEdit *text_field = new QTextEdit();
text_field -> setAcceptRichText(false); text_field -> setAcceptRichText(false);
text_field -> setPlainText(informations()); text_field -> setPlainText(informations());
text_field -> setReadOnly(is_read_only);
dialog_layout -> addWidget(text_field); dialog_layout -> addWidget(text_field);
// ajoute deux boutons au dialogue // ajoute deux boutons au dialogue
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *dialog_buttons = new QDialogButtonBox(is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog_layout -> addWidget(dialog_buttons); dialog_layout -> addWidget(dialog_buttons);
connect(dialog_buttons, SIGNAL(accepted()), &dialog_author, SLOT(accept())); connect(dialog_buttons, SIGNAL(accepted()), &dialog_author, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog_author, SLOT(reject())); connect(dialog_buttons, SIGNAL(rejected()), &dialog_author, SLOT(reject()));
// lance le dialogue // lance le dialogue
if (dialog_author.exec() == QDialog::Accepted) { if (dialog_author.exec() == QDialog::Accepted && !is_read_only) {
QString new_infos = text_field -> toPlainText(); QString new_infos = text_field -> toPlainText();
if (new_infos != informations()) { if (new_infos != informations()) {
undoStack().push(new ChangeInformationsCommand(this, informations(), new_infos)); undoStack().push(new ChangeInformationsCommand(this, informations(), new_infos));
@ -939,6 +950,7 @@ void ElementScene::slot_editAuthorInformations() {
Lance un dialogue pour editer les noms de cet element Lance un dialogue pour editer les noms de cet element
*/ */
void ElementScene::slot_editNames() { void ElementScene::slot_editNames() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue // cree un dialogue
QDialog dialog(element_editor); QDialog dialog(element_editor);
@ -959,17 +971,18 @@ void ElementScene::slot_editNames() {
// ajoute un NamesListWidget au dialogue // ajoute un NamesListWidget au dialogue
NamesListWidget *names_widget = new NamesListWidget(); NamesListWidget *names_widget = new NamesListWidget();
names_widget -> setNames(_names); names_widget -> setNames(_names);
names_widget -> setReadOnly(is_read_only);
dialog_layout -> addWidget(names_widget); dialog_layout -> addWidget(names_widget);
// ajoute deux boutons au dialogue // ajoute deux boutons au dialogue
QDialogButtonBox *dialog_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *dialog_buttons = new QDialogButtonBox(is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog_layout -> addWidget(dialog_buttons); dialog_layout -> addWidget(dialog_buttons);
connect(dialog_buttons, SIGNAL(accepted()), names_widget, SLOT(check())); connect(dialog_buttons, SIGNAL(accepted()), names_widget, SLOT(check()));
connect(names_widget, SIGNAL(inputChecked()), &dialog, SLOT(accept())); connect(names_widget, SIGNAL(inputChecked()), &dialog, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog, SLOT(reject())); connect(dialog_buttons, SIGNAL(rejected()), &dialog, SLOT(reject()));
// lance le dialogue // lance le dialogue
if (dialog.exec() == QDialog::Accepted) { if (dialog.exec() == QDialog::Accepted && !is_read_only) {
NamesList new_names(names_widget -> names()); NamesList new_names(names_widget -> names());
if (new_names != _names) undoStack().push(new ChangeNamesCommand(this, _names, new_names)); if (new_names != _names) undoStack().push(new ChangeNamesCommand(this, _names, new_names));
} }

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

@ -45,7 +45,7 @@ EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWi
QGridLayout *grid = new QGridLayout(); QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0); grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0); grid -> addWidget(new QLabel("x"), 1, 0, Qt::AlignRight);
grid -> addWidget(x, 1, 1); grid -> addWidget(x, 1, 1);
grid -> addWidget(new QLabel("y"), 1, 2); grid -> addWidget(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3); grid -> addWidget(y, 1, 3);

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
@ -439,10 +446,6 @@ void QETElementEditor::slot_updateMenus() {
inv_select -> setEnabled(!read_only); inv_select -> setEnabled(!read_only);
paste_from_file -> setEnabled(!read_only); paste_from_file -> setEnabled(!read_only);
paste_from_elmt -> setEnabled(!read_only); paste_from_elmt -> setEnabled(!read_only);
edit_size_hs -> setEnabled(!read_only);
edit_names -> setEnabled(!read_only);
edit_ori -> setEnabled(!read_only);
edit_author -> setEnabled(!read_only);
parts_list -> setEnabled(!read_only); parts_list -> setEnabled(!read_only);
// actions dependant de la presence de parties selectionnees // actions dependant de la presence de parties selectionnees
@ -511,6 +514,8 @@ void QETElementEditor::setupInterface() {
// ScrollArea pour accueillir un widget d'edition (change a la volee) // ScrollArea pour accueillir un widget d'edition (change a la volee)
tools_dock_scroll_area_ = new QScrollArea(); tools_dock_scroll_area_ = new QScrollArea();
tools_dock_scroll_area_ -> setFrameStyle(QFrame::NoFrame);
tools_dock_scroll_area_ -> setAlignment(Qt::AlignHCenter|Qt::AlignTop);
// Pile de widgets pour accueillir les deux widgets precedents // Pile de widgets pour accueillir les deux widgets precedents
tools_dock_stack_ = new QStackedWidget(); tools_dock_stack_ = new QStackedWidget();
@ -1117,6 +1122,11 @@ 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);
// on ne construit plus la liste a partir de 200 primitives
// c'est ingerable : la maj de la liste prend trop de temps et le resultat
// est inexploitable
if (qgis.count() <= QET_MAX_PARTS_IN_ELEMENT_EDITOR_LIST) {
for (int j = qgis.count() - 1 ; j >= 0 ; -- j) { for (int j = qgis.count() - 1 ; j >= 0 ; -- j) {
QGraphicsItem *qgi = qgis[j]; QGraphicsItem *qgi = qgis[j];
if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) { if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) {
@ -1129,6 +1139,9 @@ void QETElementEditor::slot_createPartsList() {
qlwi -> setSelected(qgi -> isSelected()); 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);
} }
@ -1136,9 +1149,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);

View File

@ -43,12 +43,12 @@ RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect,
QVBoxLayout *v_layout = new QVBoxLayout(this); QVBoxLayout *v_layout = new QVBoxLayout(this);
QGridLayout *grid = new QGridLayout(); QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Coin sup\351rieur gauche\240: ")), 0, 0); grid -> addWidget(new QLabel(tr("Coin sup\351rieur gauche\240: ")), 0, 0, 1, 4);
grid -> addWidget(new QLabel("x"), 1, 0); grid -> addWidget(new QLabel("x"), 1, 0, Qt::AlignRight);
grid -> addWidget(x, 1, 1); grid -> addWidget(x, 1, 1);
grid -> addWidget(new QLabel("y"), 1, 2); grid -> addWidget(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3); grid -> addWidget(y, 1, 3);
grid -> addWidget(new QLabel(tr("Dimensions\240: ")), 2, 0); grid -> addWidget(new QLabel(tr("Dimensions\240: ")), 2, 0, 1, 4);
grid -> addWidget(new QLabel(tr("Largeur\240:")), 3, 0); grid -> addWidget(new QLabel(tr("Largeur\240:")), 3, 0);
grid -> addWidget(w, 3, 1); grid -> addWidget(w, 3, 1);
grid -> addWidget(new QLabel(tr("Hauteur\240:")), 4, 0); grid -> addWidget(new QLabel(tr("Hauteur\240:")), 4, 0);

View File

@ -35,6 +35,18 @@
*/ */
#define ENABLE_PANEL_DND_CHECKS #define ENABLE_PANEL_DND_CHECKS
/*
Largeur maximale, en pixels, de la pixmap accrochee au pointeur de la
souris
*/
#define QET_MAX_DND_PIXMAP_WIDTH 500
/*
Hauteur maximale, en pixels, de la pixmap accrochee au pointeur de la
souris
*/
#define QET_MAX_DND_PIXMAP_HEIGHT 375
/** /**
Constructeur Constructeur
@param parent Le QWidget parent du panel d'appareils @param parent Le QWidget parent du panel d'appareils
@ -439,8 +451,21 @@ void ElementsPanel::startDrag(Qt::DropActions supportedActions) {
} }
// accrochage d'une pixmap representant l'appareil au pointeur // accrochage d'une pixmap representant l'appareil au pointeur
drag -> setPixmap(temp_elmt -> pixmap()); QPixmap elmt_pixmap(temp_elmt -> pixmap());
drag -> setHotSpot(temp_elmt -> hotspot()); QPoint elmt_hotspot(temp_elmt -> hotspot());
// ajuste la pixmap si celle-ci est trop grande
QPoint elmt_pixmap_size(elmt_pixmap.width(), elmt_pixmap.height());
if (elmt_pixmap.width() > QET_MAX_DND_PIXMAP_WIDTH || elmt_pixmap.height() > QET_MAX_DND_PIXMAP_HEIGHT) {
elmt_pixmap = elmt_pixmap.scaled(QET_MAX_DND_PIXMAP_WIDTH, QET_MAX_DND_PIXMAP_HEIGHT, Qt::KeepAspectRatio);
elmt_hotspot = QPoint(
elmt_hotspot.x() * elmt_pixmap.width() / elmt_pixmap_size.x(),
elmt_hotspot.y() * elmt_pixmap.height() / elmt_pixmap_size.y()
);
}
drag -> setPixmap(elmt_pixmap);
drag -> setHotSpot(elmt_hotspot);
// suppression de l'appareil temporaire // suppression de l'appareil temporaire
delete temp_elmt; delete temp_elmt;
@ -888,8 +913,12 @@ void ElementsPanel::diagramOrderChanged(QETProject *project, int from, int to) {
if (!moved_qtwi_diagram) return; if (!moved_qtwi_diagram) return;
// enleve le QTWI et le reinsere au bon endroit // enleve le QTWI et le reinsere au bon endroit
bool was_selected = moved_qtwi_diagram -> isSelected();
qtwi_project -> removeChild(moved_qtwi_diagram); qtwi_project -> removeChild(moved_qtwi_diagram);
qtwi_project -> insertChild(to, moved_qtwi_diagram); qtwi_project -> insertChild(to, moved_qtwi_diagram);
if (was_selected) {
setCurrentItem(moved_qtwi_diagram);
}
} }
/** /**

View File

@ -62,6 +62,8 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
prj_prop_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this); prj_prop_diagram = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du sch\351ma"), this);
prj_add_diagram = new QAction(QET::Icons::DiagramAdd, tr("Ajouter un sch\351ma"), this); prj_add_diagram = new QAction(QET::Icons::DiagramAdd, tr("Ajouter un sch\351ma"), this);
prj_del_diagram = new QAction(QET::Icons::DiagramDelete, tr("Supprimer ce sch\351ma"), this); prj_del_diagram = new QAction(QET::Icons::DiagramDelete, tr("Supprimer ce sch\351ma"), this);
prj_move_diagram_up = new QAction(QET::Icons::GoUp, tr("Remonter ce sch\351ma"), this);
prj_move_diagram_down = new QAction(QET::Icons::GoDown, tr("Abaisser ce sch\351ma"), this);
move_elements_ = new QAction(QET::Icons::MoveFile, tr("D\351placer dans cette cat\351gorie"), this); move_elements_ = new QAction(QET::Icons::MoveFile, tr("D\351placer dans cette cat\351gorie"), this);
copy_elements_ = new QAction(QET::Icons::CopyFile, tr("Copier dans cette cat\351gorie"), this); copy_elements_ = new QAction(QET::Icons::CopyFile, tr("Copier dans cette cat\351gorie"), this);
cancel_elements_ = new QAction(QET::Icons::Cancel, tr("Annuler"), this); cancel_elements_ = new QAction(QET::Icons::Cancel, tr("Annuler"), this);
@ -98,6 +100,8 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
connect(prj_prop_diagram, SIGNAL(triggered()), this, SLOT(editDiagramProperties())); connect(prj_prop_diagram, SIGNAL(triggered()), this, SLOT(editDiagramProperties()));
connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(newDiagram())); connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(newDiagram()));
connect(prj_del_diagram, SIGNAL(triggered()), this, SLOT(deleteDiagram())); connect(prj_del_diagram, SIGNAL(triggered()), this, SLOT(deleteDiagram()));
connect(prj_move_diagram_up, SIGNAL(triggered()), this, SLOT(moveDiagramUp()));
connect(prj_move_diagram_down, SIGNAL(triggered()), this, SLOT(moveDiagramDown()));
connect(move_elements_, SIGNAL(triggered()), this, SLOT(moveElements())); connect(move_elements_, SIGNAL(triggered()), this, SLOT(moveElements()));
connect(copy_elements_, SIGNAL(triggered()), this, SLOT(copyElements())); connect(copy_elements_, SIGNAL(triggered()), this, SLOT(copyElements()));
@ -212,6 +216,24 @@ void ElementsPanelWidget::deleteDiagram() {
} }
} }
/**
Emet le signal requestForDiagramMoveUp avec le schema selectionne
*/
void ElementsPanelWidget::moveDiagramUp() {
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
emit(requestForDiagramMoveUp(selected_diagram));
}
}
/**
Emet le signal requestForDiagramMoveDown avec le schema selectionne
*/
void ElementsPanelWidget::moveDiagramDown() {
if (Diagram *selected_diagram = elements_panel -> selectedDiagram()) {
emit(requestForDiagramMoveDown(selected_diagram));
}
}
/** /**
Appelle l'assistant de creation de nouvel element Appelle l'assistant de creation de nouvel element
*/ */
@ -281,10 +303,17 @@ void ElementsPanelWidget::updateButtons() {
bool is_writable = !(elements_panel -> selectedProject() -> isReadOnly()); bool is_writable = !(elements_panel -> selectedProject() -> isReadOnly());
prj_add_diagram -> setEnabled(is_writable); prj_add_diagram -> setEnabled(is_writable);
} else if (elements_panel -> selectedItemIsADiagram()) { } else if (elements_panel -> selectedItemIsADiagram()) {
bool is_writable = !(elements_panel -> selectedDiagram() -> project() -> isReadOnly()); Diagram *selected_diagram = elements_panel -> selectedDiagram();
prj_del_diagram -> setEnabled(is_writable); QETProject *selected_diagram_project = selected_diagram -> project();
}
bool is_writable = !(selected_diagram_project -> isReadOnly());
int project_diagrams_count = selected_diagram_project -> diagrams().count();
int diagram_position = selected_diagram_project -> diagrams().indexOf(selected_diagram);
prj_del_diagram -> setEnabled(is_writable);
prj_move_diagram_up -> setEnabled(is_writable && diagram_position > 0);
prj_move_diagram_down -> setEnabled(is_writable && diagram_position < project_diagrams_count - 1);
}
} }
/** /**
@ -321,6 +350,7 @@ void ElementsPanelWidget::handleContextMenu(const QPoint &pos) {
QTreeWidgetItem *item = elements_panel -> itemAt(pos); QTreeWidgetItem *item = elements_panel -> itemAt(pos);
if (!item) return; if (!item) return;
updateButtons();
context_menu -> clear(); context_menu -> clear();
if (elements_panel -> itemHasLocation(item)) { if (elements_panel -> itemHasLocation(item)) {
@ -351,6 +381,8 @@ void ElementsPanelWidget::handleContextMenu(const QPoint &pos) {
} else if (elements_panel -> itemIsADiagram(item)) { } else if (elements_panel -> itemIsADiagram(item)) {
context_menu -> addAction(prj_prop_diagram); context_menu -> addAction(prj_prop_diagram);
context_menu -> addAction(prj_del_diagram); context_menu -> addAction(prj_del_diagram);
context_menu -> addAction(prj_move_diagram_up);
context_menu -> addAction(prj_move_diagram_down);
} }
} }

View File

@ -42,7 +42,7 @@ class ElementsPanelWidget : public QWidget {
QAction *new_category, *edit_category, *delete_category; QAction *new_category, *edit_category, *delete_category;
QAction *delete_collection; QAction *delete_collection;
QAction *new_element, *import_element, *edit_element, *delete_element; QAction *new_element, *import_element, *edit_element, *delete_element;
QAction *prj_close, *prj_edit_prop, *prj_prop_diagram, *prj_add_diagram, *prj_del_diagram; QAction *prj_close, *prj_edit_prop, *prj_prop_diagram, *prj_add_diagram, *prj_del_diagram, *prj_move_diagram_up, *prj_move_diagram_down;
QAction *copy_elements_, *move_elements_, *cancel_elements_; QAction *copy_elements_, *move_elements_, *cancel_elements_;
QMenu *context_menu; QMenu *context_menu;
QAction *erase_textfield; QAction *erase_textfield;
@ -59,6 +59,8 @@ class ElementsPanelWidget : public QWidget {
void requestForProjectPropertiesEdition(QETProject *); void requestForProjectPropertiesEdition(QETProject *);
void requestForDiagramPropertiesEdition(Diagram *); void requestForDiagramPropertiesEdition(Diagram *);
void requestForDiagramDeletion(Diagram *); void requestForDiagramDeletion(Diagram *);
void requestForDiagramMoveUp(Diagram *);
void requestForDiagramMoveDown(Diagram *);
public slots: public slots:
void clearFilterTextField(); void clearFilterTextField();
@ -68,6 +70,8 @@ class ElementsPanelWidget : public QWidget {
void editDiagramProperties(); void editDiagramProperties();
void newDiagram(); void newDiagram();
void deleteDiagram(); void deleteDiagram();
void moveDiagramUp();
void moveDiagramDown();
void newCategory(); void newCategory();
void newElement(); void newElement();
void importElement(); void importElement();

View File

@ -34,10 +34,12 @@ HotspotEditor::HotspotEditor(QWidget *parent) :
sb_width = new QSpinBox(); sb_width = new QSpinBox();
sb_width -> setMinimum(1); sb_width -> setMinimum(1);
sb_width -> setMaximum(1000);
sb_width -> setValue(3); sb_width -> setValue(3);
sb_width -> setSuffix(tr(" \32710 px")); sb_width -> setSuffix(tr(" \32710 px"));
sb_height = new QSpinBox(); sb_height = new QSpinBox();
sb_height -> setMinimum(1); sb_height -> setMinimum(1);
sb_height -> setMaximum(1000);
sb_height -> setValue(7); sb_height -> setValue(7);
sb_height -> setSuffix(tr(" \32710 px")); sb_height -> setSuffix(tr(" \32710 px"));
@ -223,6 +225,24 @@ QPoint HotspotEditor::offsetParts() const {
else return(old_hotspot - hotspot()); else return(old_hotspot - hotspot());
} }
/**
@return true si ce widget est en lecture seule, false sinon
*/
bool HotspotEditor::isReadOnly() const {
return(sb_width -> isReadOnly());
}
/**
@param ro true pour passer ce widget en lecture seule, false sinon
*/
void HotspotEditor::setReadOnly(bool ro) {
sb_width -> setReadOnly(ro);
sb_height -> setReadOnly(ro);
sb_hotspot_x -> setReadOnly(ro);
sb_hotspot_y -> setReadOnly(ro);
hotspot_sync -> setDisabled(ro);
}
/** /**
Met a jour le schema Met a jour le schema
*/ */

View File

@ -70,6 +70,8 @@ class HotspotEditor : public QWidget {
bool partsRectEnabled(); bool partsRectEnabled();
bool mustTranslateParts() const; bool mustTranslateParts() const;
QPoint offsetParts() const; QPoint offsetParts() const;
bool isReadOnly() const;
void setReadOnly(bool);
public slots: public slots:
void updateScene(); void updateScene();

View File

@ -153,3 +153,24 @@ void InsetPropertiesWidget::setInsetProperties(const InsetProperties &inset) {
bool InsetPropertiesWidget::displayCurrentDate() const { bool InsetPropertiesWidget::displayCurrentDate() const {
return(display_current_date); return(display_current_date);
} }
/**
@return true si ce widget est en lecture seule, false sinon
*/
bool InsetPropertiesWidget::isReadOnly() const {
return(inset_title -> isReadOnly());
}
/**
@param ro true pour passer ce widget en lecture seule, false sinon
*/
void InsetPropertiesWidget::setReadOnly(bool ro) {
inset_title -> setReadOnly(ro);
inset_author -> setReadOnly(ro);
inset_date -> setReadOnly(ro);
inset_filename -> setReadOnly(ro);
inset_folio -> setReadOnly(ro);
inset_no_date -> setDisabled(ro);
inset_current_date -> setDisabled(ro);
inset_fixed_date -> setDisabled(ro);
}

View File

@ -37,6 +37,8 @@ class InsetPropertiesWidget : public QWidget {
InsetProperties insetProperties() const; InsetProperties insetProperties() const;
void setInsetProperties(const InsetProperties &); void setInsetProperties(const InsetProperties &);
bool displayCurrentDate() const; bool displayCurrentDate() const;
bool isReadOnly() const;
void setReadOnly(bool);
// attributs // attributs
private: private:

View File

@ -98,6 +98,27 @@ void OrientationSetWidget::setOrientationSet(const OrientationSet &os) {
updateForm(); updateForm();
} }
/**
@return true si ce widget est en lecture seule, false sinon
*/
bool OrientationSetWidget::isReadOnly() const {
return(!north_orientation -> isEnabled());
}
/**
@param ro true pour passer ce widget en lecture seule, false sinon
*/
void OrientationSetWidget::setReadOnly(bool ro) {
north_orientation -> setDisabled(ro);
east_orientation -> setDisabled(ro);
south_orientation -> setDisabled(ro);
west_orientation -> setDisabled(ro);
north_default -> setDisabled(ro);
east_default -> setDisabled(ro);
south_default -> setDisabled(ro);
west_default -> setDisabled(ro);
}
/** /**
Slot gerant le changement d'orientation par defaut. Slot gerant le changement d'orientation par defaut.
L'orientation concernee affiche alors "Possible" et ce statut devient L'orientation concernee affiche alors "Possible" et ce statut devient

View File

@ -49,6 +49,8 @@ class OrientationSetWidget : public QWidget {
public: public:
OrientationSet orientationSet() const; OrientationSet orientationSet() const;
void setOrientationSet(const OrientationSet &); void setOrientationSet(const OrientationSet &);
bool isReadOnly() const;
void setReadOnly(bool);
private: private:
void updateForm(); void updateForm();

View File

@ -30,6 +30,7 @@
#include "conductorpropertieswidget.h" #include "conductorpropertieswidget.h"
#include "qeticons.h" #include "qeticons.h"
#include "qetmessagebox.h" #include "qetmessagebox.h"
#include "qettabbar.h"
/** /**
Constructeur Constructeur
@ -102,8 +103,8 @@ void ProjectView::setProject(QETProject *project) {
if (!project_) { if (!project_) {
project_ = project; project_ = project;
connect(project_, SIGNAL(projectTitleChanged(QETProject *, const QString &)), this, SLOT(updateWindowTitle())); connect(project_, SIGNAL(projectTitleChanged(QETProject *, const QString &)), this, SLOT(updateWindowTitle()));
connect(project_, SIGNAL(readOnlyChanged (QETProject *, bool)), this, SLOT(updateWindowTitle())); connect(project_, SIGNAL(readOnlyChanged (QETProject *, bool)), this, SLOT(adjustReadOnlyState()));
updateWindowTitle(); adjustReadOnlyState();
loadDiagrams(); loadDiagrams();
} }
} }
@ -398,6 +399,8 @@ void ProjectView::showDiagram(Diagram *diagram) {
void ProjectView::editProjectProperties() { void ProjectView::editProjectProperties() {
if (!project_) return; if (!project_) return;
bool project_is_read_only = project_ -> isReadOnly();
// dialogue d'edition des proprietes du projet // dialogue d'edition des proprietes du projet
QDialog properties_dialog(parentWidget()); QDialog properties_dialog(parentWidget());
#ifdef Q_WS_MAC #ifdef Q_WS_MAC
@ -411,22 +414,26 @@ void ProjectView::editProjectProperties() {
// titre du projet // titre du projet
QLabel *title_label = new QLabel(tr("Titre du projet :")); QLabel *title_label = new QLabel(tr("Titre du projet :"));
QLineEdit *title_field = new QLineEdit(project_ -> title()); QLineEdit *title_field = new QLineEdit(project_ -> title());
title_field -> setReadOnly(project_is_read_only);
// proprietes des nouveaux schemas // proprietes des nouveaux schemas
QLabel *new_diagrams_prop = new QLabel(tr("Propri\351t\351s \340 utiliser lors de l'ajout d'un nouveau sch\351ma au projet :")); QLabel *new_diagrams_prop = new QLabel(tr("Propri\351t\351s \340 utiliser lors de l'ajout d'un nouveau sch\351ma au projet :"));
// dimensions par defaut d'un schema // dimensions par defaut d'un schema
BorderPropertiesWidget *bpw = new BorderPropertiesWidget(project_ -> defaultBorderProperties()); BorderPropertiesWidget *bpw = new BorderPropertiesWidget(project_ -> defaultBorderProperties());
bpw -> setReadOnly(project_is_read_only);
// proprietes par defaut d'un cartouche // proprietes par defaut d'un cartouche
InsetPropertiesWidget *ipw = new InsetPropertiesWidget(project_ -> defaultInsetProperties(), true); InsetPropertiesWidget *ipw = new InsetPropertiesWidget(project_ -> defaultInsetProperties(), true);
ipw -> setReadOnly(project_is_read_only);
// proprietes par defaut des conducteurs // proprietes par defaut des conducteurs
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(project_ -> defaultConductorProperties()); ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(project_ -> defaultConductorProperties());
cpw -> setContentsMargins(0, 0, 0, 0); cpw -> setContentsMargins(0, 0, 0, 0);
cpw -> setReadOnly(project_is_read_only);
// boutons pour valider le dialogue // boutons pour valider le dialogue
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *buttons = new QDialogButtonBox(project_is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttons, SIGNAL(accepted()), &properties_dialog, SLOT(accept())); connect(buttons, SIGNAL(accepted()), &properties_dialog, SLOT(accept()));
connect(buttons, SIGNAL(rejected()), &properties_dialog, SLOT(reject())); connect(buttons, SIGNAL(rejected()), &properties_dialog, SLOT(reject()));
@ -459,7 +466,7 @@ void ProjectView::editProjectProperties() {
vert_layout -> addWidget(buttons); vert_layout -> addWidget(buttons);
// si le dialogue est accepte // si le dialogue est accepte
if (properties_dialog.exec() == QDialog::Accepted && !project_ -> isReadOnly()) { if (properties_dialog.exec() == QDialog::Accepted && !project_is_read_only) {
project_ -> setTitle(title_field -> text()); project_ -> setTitle(title_field -> text());
project_ -> setDefaultBorderProperties(bpw -> borderProperties()); project_ -> setDefaultBorderProperties(bpw -> borderProperties());
project_ -> setDefaultInsetProperties(ipw -> insetProperties()); project_ -> setDefaultInsetProperties(ipw -> insetProperties());
@ -490,6 +497,48 @@ void ProjectView::editDiagramProperties(Diagram *diagram) {
editDiagramProperties(findDiagram(diagram)); editDiagramProperties(findDiagram(diagram));
} }
/**
Deplace le schema diagram_view vers le haut / la gauche
*/
void ProjectView::moveDiagramUp(DiagramView *diagram_view) {
if (!diagram_view) return;
int diagram_view_position = diagram_ids_.key(diagram_view);
if (!diagram_view_position) {
// le schema est le premier du projet
return;
}
tabs_ -> tabBar() -> moveTab(diagram_view_position, diagram_view_position - 1);
}
/**
Deplace le schema diagram vers le haut / la gauche
*/
void ProjectView::moveDiagramUp(Diagram *diagram) {
moveDiagramUp(findDiagram(diagram));
}
/**
Deplace le schema diagram_view vers le bas / la droite
*/
void ProjectView::moveDiagramDown(DiagramView *diagram_view) {
if (!diagram_view) return;
int diagram_view_position = diagram_ids_.key(diagram_view);
if (diagram_view_position + 1 == diagram_ids_.count()) {
// le schema est le dernier du projet
return;
}
tabs_ -> tabBar() -> moveTab(diagram_view_position, diagram_view_position + 1);
}
/**
Deplace le schema diagram vers le bas / la droite
*/
void ProjectView::moveDiagramDown(Diagram *diagram) {
moveDiagramDown(findDiagram(diagram));
}
/** /**
Ce slot demarre un dialogue permettant a l'utilisateur de parametrer et de Ce slot demarre un dialogue permettant a l'utilisateur de parametrer et de
lancer l'impression de toute ou partie du projet. lancer l'impression de toute ou partie du projet.
@ -704,6 +753,18 @@ void ProjectView::updateWindowTitle() {
setWindowTitle(title); setWindowTitle(title);
} }
/**
Effectue les actions necessaires lorsque le projet visualise entre ou sort
du mode lecture seule.
*/
void ProjectView::adjustReadOnlyState() {
// on empeche l'utilisateur de deplacer les onglets
tabs_ -> setMovable(!(project_ -> isReadOnly()));
// on met a jour le titre du widget, qui reflete l'etat de lecture seule
updateWindowTitle();
}
/** /**
Met a jour le titre d'un onglet Met a jour le titre d'un onglet
@param diagram Schema @param diagram Schema

View File

@ -54,6 +54,10 @@ class ProjectView : public QWidget {
void editCurrentDiagramProperties(); void editCurrentDiagramProperties();
void editDiagramProperties(DiagramView *); void editDiagramProperties(DiagramView *);
void editDiagramProperties(Diagram *); void editDiagramProperties(Diagram *);
void moveDiagramUp(DiagramView *);
void moveDiagramUp(Diagram *);
void moveDiagramDown(DiagramView *);
void moveDiagramDown(Diagram *);
void printProject(); void printProject();
void exportProject(); void exportProject();
bool save(); bool save();
@ -89,6 +93,7 @@ class ProjectView : public QWidget {
void firstTabInserted(); void firstTabInserted();
void lastTabRemoved(); void lastTabRemoved();
void setDisplayFallbackWidget(bool); void setDisplayFallbackWidget(bool);
void adjustReadOnlyState();
// attributs // attributs
private: private:

View File

@ -72,6 +72,8 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) :
connect(pa, SIGNAL(requestForDiagramPropertiesEdition(Diagram *)), this, SLOT(editDiagramProperties(Diagram *))); connect(pa, SIGNAL(requestForDiagramPropertiesEdition(Diagram *)), this, SLOT(editDiagramProperties(Diagram *)));
connect(pa, SIGNAL(requestForNewDiagram(QETProject *)), this, SLOT(addDiagramToProject(QETProject *))); connect(pa, SIGNAL(requestForNewDiagram(QETProject *)), this, SLOT(addDiagramToProject(QETProject *)));
connect(pa, SIGNAL(requestForDiagramDeletion(Diagram *)), this, SLOT(removeDiagram(Diagram *))); connect(pa, SIGNAL(requestForDiagramDeletion(Diagram *)), this, SLOT(removeDiagram(Diagram *)));
connect(pa, SIGNAL(requestForDiagramMoveUp(Diagram *)), this, SLOT(moveDiagramUp(Diagram *)));
connect(pa, SIGNAL(requestForDiagramMoveDown(Diagram *)), this, SLOT(moveDiagramDown(Diagram *)));
qdw_undo = new QDockWidget(tr("Annulations", "dock title")); qdw_undo = new QDockWidget(tr("Annulations", "dock title"));
qdw_undo -> setObjectName("diagram_undo"); qdw_undo -> setObjectName("diagram_undo");
@ -575,9 +577,9 @@ void QETDiagramEditor::toolbar() {
view_bar -> addAction(zoom_reset); view_bar -> addAction(zoom_reset);
diagram_bar -> addAction(infos_diagram); diagram_bar -> addAction(infos_diagram);
diagram_bar -> addAction(add_text);
diagram_bar -> addAction(conductor_default); diagram_bar -> addAction(conductor_default);
diagram_bar -> addAction(conductor_reset); diagram_bar -> addAction(conductor_reset);
diagram_bar -> addAction(add_text);
// ajout de la barre d'outils a la fenetre principale // ajout de la barre d'outils a la fenetre principale
addToolBar(Qt::TopToolBarArea, main_bar); addToolBar(Qt::TopToolBarArea, main_bar);
@ -1094,10 +1096,10 @@ void QETDiagramEditor::slot_updateActions() {
// actions ayant juste besoin d'un document ouvert // actions ayant juste besoin d'un document ouvert
close_file -> setEnabled(opened_project); close_file -> setEnabled(opened_project);
save_file -> setEnabled(opened_project && editable_project); save_file -> setEnabled(editable_project);
save_file_sous -> setEnabled(opened_project); save_file_sous -> setEnabled(opened_project);
save_all -> setEnabled(opened_diagram && editable_diagram); save_all -> setEnabled(editable_diagram);
prj_edit_prop -> setEnabled(editable_project); prj_edit_prop -> setEnabled(opened_project);
prj_add_diagram -> setEnabled(editable_project); prj_add_diagram -> setEnabled(editable_project);
prj_del_diagram -> setEnabled(editable_project); prj_del_diagram -> setEnabled(editable_project);
prj_clean -> setEnabled(editable_project); prj_clean -> setEnabled(editable_project);
@ -1111,8 +1113,8 @@ void QETDiagramEditor::slot_updateActions() {
zoom_out -> setEnabled(opened_diagram); zoom_out -> setEnabled(opened_diagram);
zoom_fit -> setEnabled(opened_diagram); zoom_fit -> setEnabled(opened_diagram);
zoom_reset -> setEnabled(opened_diagram); zoom_reset -> setEnabled(opened_diagram);
conductor_default -> setEnabled(editable_diagram); conductor_default -> setEnabled(opened_diagram);
infos_diagram -> setEnabled(editable_diagram); infos_diagram -> setEnabled(opened_diagram);
add_text -> setEnabled(editable_diagram); add_text -> setEnabled(editable_diagram);
add_column -> setEnabled(editable_diagram); add_column -> setEnabled(editable_diagram);
remove_column -> setEnabled(editable_diagram); remove_column -> setEnabled(editable_diagram);
@ -1622,6 +1624,44 @@ void QETDiagramEditor::removeDiagram(Diagram *diagram) {
} }
} }
/**
Change l'ordre des schemas d'un projet, en decalant le schema vers le haut /
la gauche
@param diagram Schema a decaler vers le haut / la gauche
*/
void QETDiagramEditor::moveDiagramUp(Diagram *diagram) {
if (!diagram) return;
// recupere le projet contenant le schema
if (QETProject *diagram_project = diagram -> project()) {
if (diagram_project -> isReadOnly()) return;
// recupere la vue sur ce projet
if (ProjectView *project_view = findProject(diagram_project)) {
project_view -> moveDiagramUp(diagram);
}
}
}
/**
Change l'ordre des schemas d'un projet, en decalant le schema vers le bas /
la droite
@param diagram Schema a decaler vers le bas / la droite
*/
void QETDiagramEditor::moveDiagramDown(Diagram *diagram) {
if (!diagram) return;
// recupere le projet contenant le schema
if (QETProject *diagram_project = diagram -> project()) {
if (diagram_project -> isReadOnly()) return;
// recupere la vue sur ce projet
if (ProjectView *project_view = findProject(diagram_project)) {
project_view -> moveDiagramDown(diagram);
}
}
}
/** /**
Nettoie le projet courant Nettoie le projet courant
*/ */

View File

@ -142,6 +142,8 @@ class QETDiagramEditor : public QMainWindow {
void addDiagramToProject(QETProject *); void addDiagramToProject(QETProject *);
void removeDiagram(Diagram *); void removeDiagram(Diagram *);
void removeDiagramFromProject(); void removeDiagramFromProject();
void moveDiagramUp(Diagram *);
void moveDiagramDown(Diagram *);
void cleanCurrentProject(); void cleanCurrentProject();
void diagramWasAdded(DiagramView *); void diagramWasAdded(DiagramView *);
void diagramIsAboutToBeRemoved(DiagramView *); void diagramIsAboutToBeRemoved(DiagramView *);

View File

@ -80,6 +80,8 @@ namespace QET {
QIcon Forbidden; QIcon Forbidden;
QIcon FullScreenEnter; QIcon FullScreenEnter;
QIcon FullScreenExit; QIcon FullScreenExit;
QIcon GoDown;
QIcon GoUp;
QIcon Ground; QIcon Ground;
QIcon Hide; QIcon Hide;
QIcon Home; QIcon Home;
@ -240,6 +242,10 @@ void QET::Icons::initIcons() {
FullScreenEnter .addFile(":/ico/22x22/view-fullscreen.png"); FullScreenEnter .addFile(":/ico/22x22/view-fullscreen.png");
FullScreenExit .addFile(":/ico/16x16/view-restore.png"); FullScreenExit .addFile(":/ico/16x16/view-restore.png");
FullScreenExit .addFile(":/ico/22x22/view-restore.png"); FullScreenExit .addFile(":/ico/22x22/view-restore.png");
GoDown .addFile(":/ico/16x16/go-down.png");
GoDown .addFile(":/ico/22x22/go-down.png");
GoUp .addFile(":/ico/16x16/go-up.png");
GoUp .addFile(":/ico/22x22/go-up.png");
Ground .addFile(":/ico/16x16/ground.png"); Ground .addFile(":/ico/16x16/ground.png");
Hide .addFile(":/ico/16x16/masquer.png"); Hide .addFile(":/ico/16x16/masquer.png");
Home .addFile(":/ico/16x16/go-home.png"); Home .addFile(":/ico/16x16/go-home.png");

View File

@ -88,6 +88,8 @@ namespace QET {
extern QIcon Forbidden; extern QIcon Forbidden;
extern QIcon FullScreenEnter; extern QIcon FullScreenEnter;
extern QIcon FullScreenExit; extern QIcon FullScreenExit;
extern QIcon GoDown;
extern QIcon GoUp;
extern QIcon Ground; extern QIcon Ground;
extern QIcon Hide; extern QIcon Hide;
extern QIcon Home; extern QIcon Home;

View File

@ -253,6 +253,7 @@ bool QETTabBar::mustMoveTab(int src_tab, int dst_tab, const QPoint &pos) const {
@param dst_tab Index de l'onglet de destination @param dst_tab Index de l'onglet de destination
*/ */
void QETTabBar::moveTab(int src_tab, int dst_tab) { void QETTabBar::moveTab(int src_tab, int dst_tab) {
#if QT_VERSION < 0x040500
// sauvegarde les caracteristiques de l'onglet deplace // sauvegarde les caracteristiques de l'onglet deplace
QIcon old_tab_icon = tabIcon(src_tab); QIcon old_tab_icon = tabIcon(src_tab);
QVariant old_tab_data = tabData(src_tab); QVariant old_tab_data = tabData(src_tab);
@ -283,6 +284,9 @@ void QETTabBar::moveTab(int src_tab, int dst_tab) {
// signale le deplacement de l'onglet // signale le deplacement de l'onglet
emit(tabMoved(src_tab, dst_tab)); emit(tabMoved(src_tab, dst_tab));
#else
QTabBar::moveTab(src_tab, dst_tab);
#endif
} }
/** /**

View File

@ -45,6 +45,7 @@ class QETTabBar : public QTabBar {
bool isMovable() const; bool isMovable() const;
bool isVertical() const; bool isVertical() const;
bool isHorizontal() const; bool isHorizontal() const;
void moveTab(int, int);
protected: protected:
virtual void tabInserted(int); virtual void tabInserted(int);
@ -65,7 +66,6 @@ class QETTabBar : public QTabBar {
private: private:
bool mustMoveTab(int, int, const QPoint &) const; bool mustMoveTab(int, int, const QPoint &) const;
void moveTab(int, int);
int tabForPressedPosition(const QPoint &); int tabForPressedPosition(const QPoint &);
int tabForMovedPosition(const QPoint &); int tabForMovedPosition(const QPoint &);
bool posMatchesTabRect(const QRect &, const QPoint &) const; bool posMatchesTabRect(const QRect &, const QPoint &) const;

View File

@ -66,6 +66,10 @@ bool QETTabWidget::isMovable() const {
#endif #endif
} }
QETTabBar *QETTabWidget::tabBar() const {
return(tab_bar_);
}
/** /**
Gere les evenements rollette sur cette barre d'onglets Gere les evenements rollette sur cette barre d'onglets
@param event Evenement rollette @param event Evenement rollette

View File

@ -40,6 +40,7 @@ class QETTabWidget : public QTabWidget {
public: public:
void setMovable(bool); void setMovable(bool);
bool isMovable() const; bool isMovable() const;
QETTabBar *tabBar() const;
protected: protected:
void wheelEvent(QWheelEvent *); void wheelEvent(QWheelEvent *);