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,20 +1,20 @@
<definition width="30" version="0.2" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" >
<names>
<name lang="ru" >Эл. плита</name>
<name lang="en" >Electric oven</name>
<name lang="fr" >Four électrique</name>
<name lang="es" >Horno eléctrico</name>
<name lang="cs" >Elektrická kamna</name>
<definition width="30" version="0.2" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" >
<names>
<name lang="ru" >Духовой шкаф</name>
<name lang="en" >Electric oven</name>
<name lang="fr" >Four électrique</name>
<name lang="es" >Horno eléctrico</name>
<name lang="cs" >Elektrická kamna</name>
<name lang="pt" >Forno eléctrico</name>
</names>
</names>
<informations>Author: The QElectroTech team
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
<description>
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8.5" x1="-7" y2="8.5" x2="7" />
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-12" x1="0" y2="0" x2="0" />
<polygon x4="10" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="6" x1="-10" y2="20" x2="-10" y3="20" x3="10" y4="6" />
<polygon x4="12" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-12" y2="24" x2="-12" y3="24" x3="12" y4="0" />
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:thin;filling:none;color:black" y1="4" x1="-12" y2="4" x2="12" />
<terminal x="0" y="-12" orientation="n" />
</description>
</definition>
<description>
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="8.5" x1="-7" y2="8.5" x2="7" />
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-12" x1="0" y2="0" x2="0" />
<polygon x4="10" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="6" x1="-10" y2="20" x2="-10" y3="20" x3="10" y4="6" />
<polygon x4="12" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-12" y2="24" x2="-12" y3="24" x3="12" y4="0" />
<line length1="1.5" length2="1.5" antialias="false" end1="none" end2="none" style="line-style:normal;line-weight:thin;filling:none;color:black" y1="4" x1="-12" y2="4" x2="12" />
<terminal x="0" y="-12" orientation="n" />
</description>
</definition>

View File

@ -1,20 +1,21 @@
<definition width="30" version="0.1" hotspot_x="15" hotspot_y="15" height="40" type="element" orientation="dnnn" >
<names>
<name lang="en" >Solid plate</name>
<name lang="fr" >Plaque de cuisson</name>
<name lang="es" >Placa de cocina</name>
<name lang="cs" >Deska na vaření</name>
<names>
<name lang="ru" >Эл. плита</name>
<name lang="en" >Solid plate</name>
<name lang="fr" >Plaque de cuisson</name>
<name lang="es" >Placa de cocina</name>
<name lang="cs" >Deska na vaření</name>
<name lang="pt" >Placa de fogão</name>
</names>
</names>
<informations>Author: The QElectroTech team
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
<description>
<polygon x4="12" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-12" y2="24" x2="-12" y3="24" x3="12" y4="0" />
<description>
<polygon x4="12" antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="0" x1="-12" y2="24" x2="-12" y3="24" x3="12" y4="0" />
<line antialias="false" style="line-style:normal;line-weight:normal;filling:none;color:black" y1="-12" x1="0" y2="0" x2="0" />
<circle x="-8.5" y="13.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="7" />
<circle x="0.5" y="12.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="9" />
<circle x="-9.5" y="2.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="9" />
<circle x="1.5" y="3.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="7" />
<terminal x="0" y="-12" orientation="n" />
</description>
</definition>
<circle x="-8.5" y="13.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="7" />
<circle x="0.5" y="12.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="9" />
<circle x="-9.5" y="2.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="9" />
<circle x="1.5" y="3.5" antialias="true" style="line-style:normal;line-weight:thin;filling:none;color:black" diameter="7" />
<terminal x="0" y="-12" orientation="n" />
</description>
</definition>

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>
<name>QETElementEditor</name>
<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>
<translation>
<numerusform>%n partie sélectionnée.</numerusform>
@ -12,7 +12,7 @@
</translation>
</message>
<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>
<comment>message box content</comment>
<translation>
@ -24,7 +24,7 @@
<context>
<name>QObject</name>
<message numerus="yes">
<location filename="sources/qet.cpp" line="157"/>
<location filename="../sources/qet.cpp" line="157"/>
<source>%n élément(s)</source>
<comment>part of a sentence listing the content of a diagram</comment>
<translation>
@ -33,7 +33,7 @@
</translation>
</message>
<message numerus="yes">
<location filename="sources/qet.cpp" line="178"/>
<location filename="../sources/qet.cpp" line="178"/>
<source>%n conducteur(s)</source>
<comment>part of a sentence listing the content of a diagram</comment>
<translation>
@ -42,7 +42,7 @@
</translation>
</message>
<message numerus="yes">
<location filename="sources/qet.cpp" line="193"/>
<location filename="../sources/qet.cpp" line="193"/>
<source>%n champ(s) de texte</source>
<comment>part of a sentence listing the content of a diagram</comment>
<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/folder-new.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-up.png</file>
<file>ico/16x16/ground.png</file>
<file>ico/16x16/item_cancel.png</file>
<file>ico/16x16/item_copy.png</file>
@ -118,7 +120,9 @@
<file>ico/22x22/folder-delete.png</file>
<file>ico/22x22/folder-edit.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-up.png</file>
<file>ico/22x22/hotspot.png</file>
<file>ico/22x22/landscape.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() {
border_.columns_count = columns_count -> value();
@ -52,6 +52,25 @@ const BorderProperties &BorderPropertiesWidget::borderProperties() {
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
@param bp Nouvelles proprietes

View File

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

View File

@ -268,3 +268,26 @@ void ConductorPropertiesWidget::setConductorProperties(const ConductorProperties
ConductorProperties ConductorPropertiesWidget::conductorProperties() const {
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:
void setConductorProperties(const ConductorProperties &);
ConductorProperties conductorProperties() const;
bool isReadOnly() const;
void setReadOnly(bool);
private:
void setConductorType(ConductorProperties::ConductorType);

View File

@ -403,7 +403,7 @@ QString DiagramView::title() const {
Edite les informations du schema.
*/
void DiagramView::editDiagramProperties() {
if (scene -> isReadOnly()) return;
bool diagram_is_read_only = scene -> isReadOnly();
// recupere le cartouche et les dimensions du schema
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"));
BorderPropertiesWidget *border_infos = new BorderPropertiesWidget(border, &popup);
border_infos -> setReadOnly(diagram_is_read_only);
InsetPropertiesWidget *inset_infos = new InsetPropertiesWidget(inset, false, &popup);
inset_infos -> setReadOnly(diagram_is_read_only);
// 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(rejected()), &popup, SLOT(reject()));
@ -433,7 +435,7 @@ void DiagramView::editDiagramProperties() {
layout_v.addStretch();
layout_v.addWidget(&boutons);
// 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();
BorderProperties new_border = border_infos -> borderProperties();
// s'il y a des modifications au cartouche
@ -816,9 +818,11 @@ void DiagramView::resetConductors() {
futurs nouveaux conducteurs
*/
void DiagramView::editDefaultConductorProperties() {
if (scene -> isReadOnly()) return;
bool diagram_is_read_only = scene -> isReadOnly();
// initialise l'editeur de proprietes pour le conducteur
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(scene -> defaultConductorProperties);
cpw -> setReadOnly(diagram_is_read_only);
// l'insere dans un dialogue
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"));
QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog);
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);
connect(dbb, SIGNAL(accepted()), &conductor_dialog, SLOT(accept()));
connect(dbb, SIGNAL(rejected()), &conductor_dialog, SLOT(reject()));
// 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();
}
}

View File

@ -48,7 +48,7 @@ ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) :
QGridLayout *grid = new QGridLayout();
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(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3);

View File

@ -43,7 +43,7 @@ CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget
QGridLayout *grid = new QGridLayout();
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(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3);

View File

@ -47,16 +47,20 @@ DeletePartsCommand::~DeletePartsCommand() {
/// Restaure les parties supprimees
void DeletePartsCommand::undo() {
editor_scene -> blockSignals(true);
foreach(QGraphicsItem *qgi, deleted_parts) {
editor_scene -> addItem(qgi);
}
editor_scene -> blockSignals(false);
}
/// Supprime les parties
void DeletePartsCommand::redo() {
editor_scene -> blockSignals(true);
foreach(QGraphicsItem *qgi, deleted_parts) {
editor_scene -> removeItem(qgi);
}
editor_scene -> blockSignals(false);
}
/*** CutPartsCommand ***/
@ -90,7 +94,11 @@ PastePartsCommand::~PastePartsCommand() {
/// annule le coller
void PastePartsCommand::undo() {
// 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) {
editor_view_ -> offset_paste_count_ = old_offset_paste_count_;
editor_view_ -> start_top_left_corner_ = old_start_top_left_corner_;
@ -103,7 +111,11 @@ void PastePartsCommand::redo() {
if (first_redo) first_redo = false;
else {
// 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) {
editor_view_ -> offset_paste_count_ = new_offset_paste_count_;
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),
element_editor(editor)
{
setItemIndexMethod(NoIndex);
current_polygon = NULL;
setGrid(1, 1);
initPasteArea();
@ -758,6 +759,7 @@ void ElementScene::paste() {
*/
void ElementScene::slot_select(const ElementContent &content) {
blockSignals(true);
clearSelection();
foreach(QGraphicsItem *qgi, content) qgi -> setSelected(true);
blockSignals(false);
emit(selectionChanged());
@ -774,7 +776,7 @@ void ElementScene::slot_selectAll() {
Deselectionne tout
*/
void ElementScene::slot_deselectAll() {
clearSelection();
slot_select(ElementContent());
}
/**
@ -805,6 +807,8 @@ void ElementScene::slot_delete() {
(hotspot) de l'element.
*/
void ElementScene::slot_editSizeHotSpot() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue
QDialog dialog_sh(element_editor);
dialog_sh.setModal(true);
@ -822,23 +826,25 @@ void ElementScene::slot_editSizeHotSpot() {
hotspot_editor -> setOldHotspot(hotspot());
hotspot_editor -> setPartsRect(itemsBoundingRect());
hotspot_editor -> setPartsRectEnabled(true);
hotspot_editor -> setReadOnly(is_read_only);
dialog_layout -> addWidget(hotspot_editor);
// 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);
connect(dialog_buttons, SIGNAL(accepted()), &dialog_sh, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog_sh, SLOT(reject()));
// lance le dialogue
if (dialog_sh.exec() != QDialog::Accepted) return;
QSize new_size(hotspot_editor -> elementSize());
QSize old_size(width(), height());
QPoint new_hotspot(hotspot_editor -> hotspot());
QPoint old_hotspot(_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()));
if (dialog_sh.exec() == QDialog::Accepted && is_read_only) {
QSize new_size(hotspot_editor -> elementSize());
QSize old_size(width(), height());
QPoint new_hotspot(hotspot_editor -> hotspot());
QPoint old_hotspot(_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()));
}
}
}
@ -846,6 +852,7 @@ void ElementScene::slot_editSizeHotSpot() {
Lance un dialogue pour editer les noms de cete element
*/
void ElementScene::slot_editOrientations() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue
QDialog dialog_ori(element_editor);
@ -866,21 +873,23 @@ void ElementScene::slot_editOrientations() {
// ajoute un OrientationSetWidget au dialogue
OrientationSetWidget *ori_widget = new OrientationSetWidget();
ori_widget -> setOrientationSet(ori);
ori_widget -> setReadOnly(is_read_only);
dialog_layout -> addWidget(ori_widget);
// ajoute une case a cocher pour les connexions internes
QCheckBox *ic_checkbox = new QCheckBox(tr("Autoriser les connexions internes"));
ic_checkbox -> setChecked(internal_connections);
ic_checkbox -> setDisabled(is_read_only);
dialog_layout -> addWidget(ic_checkbox);
dialog_layout -> addStretch();
// 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);
connect(dialog_buttons, SIGNAL(accepted()), &dialog_ori, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog_ori, SLOT(reject()));
// lance le dialogue
if (dialog_ori.exec() == QDialog::Accepted) {
if (dialog_ori.exec() == QDialog::Accepted && !is_read_only) {
OrientationSet new_ori = ori_widget -> orientationSet();
if (new_ori != 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.
*/
void ElementScene::slot_editAuthorInformations() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue
QDialog dialog_author(element_editor);
@ -918,16 +928,17 @@ void ElementScene::slot_editAuthorInformations() {
QTextEdit *text_field = new QTextEdit();
text_field -> setAcceptRichText(false);
text_field -> setPlainText(informations());
text_field -> setReadOnly(is_read_only);
dialog_layout -> addWidget(text_field);
// 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);
connect(dialog_buttons, SIGNAL(accepted()), &dialog_author, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog_author, SLOT(reject()));
// lance le dialogue
if (dialog_author.exec() == QDialog::Accepted) {
if (dialog_author.exec() == QDialog::Accepted && !is_read_only) {
QString new_infos = text_field -> toPlainText();
if (new_infos != informations()) {
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
*/
void ElementScene::slot_editNames() {
bool is_read_only = element_editor && element_editor -> isReadOnly();
// cree un dialogue
QDialog dialog(element_editor);
@ -959,17 +971,18 @@ void ElementScene::slot_editNames() {
// ajoute un NamesListWidget au dialogue
NamesListWidget *names_widget = new NamesListWidget();
names_widget -> setNames(_names);
names_widget -> setReadOnly(is_read_only);
dialog_layout -> addWidget(names_widget);
// 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);
connect(dialog_buttons, SIGNAL(accepted()), names_widget, SLOT(check()));
connect(names_widget, SIGNAL(inputChecked()), &dialog, SLOT(accept()));
connect(dialog_buttons, SIGNAL(rejected()), &dialog, SLOT(reject()));
// lance le dialogue
if (dialog.exec() == QDialog::Accepted) {
if (dialog.exec() == QDialog::Accepted && !is_read_only) {
NamesList new_names(names_widget -> 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),
offset_paste_count_(0)
{
setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
setInteractive(true);
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
setResizeAnchor(QGraphicsView::AnchorUnderMouse);

View File

@ -45,7 +45,7 @@ EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWi
QGridLayout *grid = new QGridLayout();
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(new QLabel("y"), 1, 2);
grid -> addWidget(y, 1, 3);

View File

@ -39,6 +39,13 @@
#include "texteditor.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
@param parent QWidget parent
@ -439,10 +446,6 @@ void QETElementEditor::slot_updateMenus() {
inv_select -> setEnabled(!read_only);
paste_from_file -> 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);
// 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)
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
tools_dock_stack_ = new QStackedWidget();
@ -1117,17 +1122,25 @@ void QETElementEditor::slot_createPartsList() {
parts_list -> blockSignals(true);
parts_list -> clear();
QList<QGraphicsItem *> qgis = ce_scene -> zItems(true);
for (int j = qgis.count() - 1 ; j >= 0 ; -- j) {
QGraphicsItem *qgi = qgis[j];
if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) {
QString part_desc = cep -> name();
QListWidgetItem *qlwi = new QListWidgetItem(part_desc);
QVariant v;
v.setValue<QGraphicsItem *>(qgi);
qlwi -> setData(42, v);
parts_list -> addItem(qlwi);
qlwi -> setSelected(qgi -> isSelected());
// 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) {
QGraphicsItem *qgi = qgis[j];
if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(qgi)) {
QString part_desc = cep -> name();
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);
}
@ -1136,9 +1149,10 @@ void QETElementEditor::slot_createPartsList() {
Met a jour la selection dans la liste des parties
*/
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();
} else {
} else if (items_count <= QET_MAX_PARTS_IN_ELEMENT_EDITOR_LIST) {
parts_list -> blockSignals(true);
int i = 0;
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);
QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Coin sup\351rieur gauche\240: ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0);
grid -> addWidget(new QLabel(tr("Coin sup\351rieur gauche\240: ")), 0, 0, 1, 4);
grid -> addWidget(new QLabel("x"), 1, 0, Qt::AlignRight);
grid -> addWidget(x, 1, 1);
grid -> addWidget(new QLabel("y"), 1, 2);
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(w, 3, 1);
grid -> addWidget(new QLabel(tr("Hauteur\240:")), 4, 0);

View File

@ -35,6 +35,18 @@
*/
#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
@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
drag -> setPixmap(temp_elmt -> pixmap());
drag -> setHotSpot(temp_elmt -> hotspot());
QPixmap elmt_pixmap(temp_elmt -> pixmap());
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
delete temp_elmt;
@ -888,8 +913,12 @@ void ElementsPanel::diagramOrderChanged(QETProject *project, int from, int to) {
if (!moved_qtwi_diagram) return;
// enleve le QTWI et le reinsere au bon endroit
bool was_selected = moved_qtwi_diagram -> isSelected();
qtwi_project -> removeChild(moved_qtwi_diagram);
qtwi_project -> insertChild(to, moved_qtwi_diagram);
if (was_selected) {
setCurrentItem(moved_qtwi_diagram);
}
}
/**

View File

@ -48,24 +48,26 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
elements_panel = new ElementsPanel(this);
// initialise les actions
reload = new QAction(QET::Icons::ViewRefresh, tr("Recharger les collections"), this);
new_category = new QAction(QET::Icons::FolderNew, tr("Nouvelle cat\351gorie"), this);
edit_category = new QAction(QET::Icons::FolderEdit, tr("\311diter la cat\351gorie"), this);
delete_category = new QAction(QET::Icons::FolderDelete, tr("Supprimer la cat\351gorie"), this);
delete_collection = new QAction(QET::Icons::FolderDelete, tr("Vider la collection"), this);
new_element = new QAction(QET::Icons::ElementNew, tr("Nouvel \351l\351ment"), this);
import_element = new QAction(QET::Icons::DocumentImport, tr("Importer un \351l\351ment"), this);
edit_element = new QAction(QET::Icons::ElementEdit, tr("\311diter l'\351l\351ment"), this);
delete_element = new QAction(QET::Icons::ElementDelete, tr("Supprimer l'\351l\351ment"), this);
prj_close = new QAction(QET::Icons::DocumentClose, tr("Fermer ce projet"), this);
prj_edit_prop = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du projet"), 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_del_diagram = new QAction(QET::Icons::DiagramDelete, tr("Supprimer ce sch\351ma"), 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);
cancel_elements_ = new QAction(QET::Icons::Cancel, tr("Annuler"), this);
erase_textfield = new QAction(QET::Icons::EditClearLocationBar, tr("Effacer le filtre"), this);
reload = new QAction(QET::Icons::ViewRefresh, tr("Recharger les collections"), this);
new_category = new QAction(QET::Icons::FolderNew, tr("Nouvelle cat\351gorie"), this);
edit_category = new QAction(QET::Icons::FolderEdit, tr("\311diter la cat\351gorie"), this);
delete_category = new QAction(QET::Icons::FolderDelete, tr("Supprimer la cat\351gorie"), this);
delete_collection = new QAction(QET::Icons::FolderDelete, tr("Vider la collection"), this);
new_element = new QAction(QET::Icons::ElementNew, tr("Nouvel \351l\351ment"), this);
import_element = new QAction(QET::Icons::DocumentImport, tr("Importer un \351l\351ment"), this);
edit_element = new QAction(QET::Icons::ElementEdit, tr("\311diter l'\351l\351ment"), this);
delete_element = new QAction(QET::Icons::ElementDelete, tr("Supprimer l'\351l\351ment"), this);
prj_close = new QAction(QET::Icons::DocumentClose, tr("Fermer ce projet"), this);
prj_edit_prop = new QAction(QET::Icons::DialogInformation, tr("Propri\351t\351s du projet"), 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_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);
copy_elements_ = new QAction(QET::Icons::CopyFile, tr("Copier dans cette cat\351gorie"), this);
cancel_elements_ = new QAction(QET::Icons::Cancel, tr("Annuler"), this);
erase_textfield = new QAction(QET::Icons::EditClearLocationBar, tr("Effacer le filtre"), this);
// initialise le champ de texte pour filtrer avec une disposition horizontale
QLabel *filter_label = new QLabel(tr("Filtrer : "), this);
@ -84,29 +86,31 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
context_menu = new QMenu(this);
connect(reload, SIGNAL(triggered()), this, SLOT(reloadAndFilter()));
connect(new_category, SIGNAL(triggered()), this, SLOT(newCategory()));
connect(edit_category, SIGNAL(triggered()), this, SLOT(editCategory()));
connect(delete_category, SIGNAL(triggered()), this, SLOT(deleteCategory()));
connect(delete_collection, SIGNAL(triggered()), this, SLOT(deleteCategory()));
connect(new_element, SIGNAL(triggered()), this, SLOT(newElement()));
connect(import_element, SIGNAL(triggered()), this, SLOT(importElement()));
connect(edit_element, SIGNAL(triggered()), this, SLOT(editElement()));
connect(delete_element, SIGNAL(triggered()), this, SLOT(deleteElement()));
connect(prj_close, SIGNAL(triggered()), this, SLOT(closeProject()));
connect(prj_edit_prop, SIGNAL(triggered()), this, SLOT(editProjectProperties()));
connect(prj_prop_diagram, SIGNAL(triggered()), this, SLOT(editDiagramProperties()));
connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(newDiagram()));
connect(prj_del_diagram, SIGNAL(triggered()), this, SLOT(deleteDiagram()));
connect(move_elements_, SIGNAL(triggered()), this, SLOT(moveElements()));
connect(copy_elements_, SIGNAL(triggered()), this, SLOT(copyElements()));
connect(reload, SIGNAL(triggered()), this, SLOT(reloadAndFilter()));
connect(new_category, SIGNAL(triggered()), this, SLOT(newCategory()));
connect(edit_category, SIGNAL(triggered()), this, SLOT(editCategory()));
connect(delete_category, SIGNAL(triggered()), this, SLOT(deleteCategory()));
connect(delete_collection, SIGNAL(triggered()), this, SLOT(deleteCategory()));
connect(new_element, SIGNAL(triggered()), this, SLOT(newElement()));
connect(import_element, SIGNAL(triggered()), this, SLOT(importElement()));
connect(edit_element, SIGNAL(triggered()), this, SLOT(editElement()));
connect(delete_element, SIGNAL(triggered()), this, SLOT(deleteElement()));
connect(prj_close, SIGNAL(triggered()), this, SLOT(closeProject()));
connect(prj_edit_prop, SIGNAL(triggered()), this, SLOT(editProjectProperties()));
connect(prj_prop_diagram, SIGNAL(triggered()), this, SLOT(editDiagramProperties()));
connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(newDiagram()));
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(copy_elements_, SIGNAL(triggered()), this, SLOT(copyElements()));
connect(erase_textfield, SIGNAL(triggered()), this, SLOT(clearFilterTextField()));
connect(filter_textfield, SIGNAL(textEdited(const QString &)), elements_panel, SLOT(filter(const QString &)));
connect(erase_textfield, SIGNAL(triggered()), this, SLOT(clearFilterTextField()));
connect(filter_textfield, SIGNAL(textEdited(const QString &)), elements_panel, SLOT(filter(const QString &)));
connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons()));
connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &)));
connect(elements_panel, SIGNAL(requestForCollectionItem(ElementsCollectionItem *)), this, SLOT(handleCollectionRequest(ElementsCollectionItem *)));
connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons()));
connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &)));
connect(elements_panel, SIGNAL(requestForCollectionItem(ElementsCollectionItem *)), this, SLOT(handleCollectionRequest(ElementsCollectionItem *)));
connect(
elements_panel,
SIGNAL(requestForMoveElements(ElementsCollectionItem *, ElementsCollectionItem *, QPoint)),
@ -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
*/
@ -281,10 +303,17 @@ void ElementsPanelWidget::updateButtons() {
bool is_writable = !(elements_panel -> selectedProject() -> isReadOnly());
prj_add_diagram -> setEnabled(is_writable);
} else if (elements_panel -> selectedItemIsADiagram()) {
bool is_writable = !(elements_panel -> selectedDiagram() -> project() -> isReadOnly());
prj_del_diagram -> setEnabled(is_writable);
Diagram *selected_diagram = elements_panel -> selectedDiagram();
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);
if (!item) return;
updateButtons();
context_menu -> clear();
if (elements_panel -> itemHasLocation(item)) {
@ -351,6 +381,8 @@ void ElementsPanelWidget::handleContextMenu(const QPoint &pos) {
} else if (elements_panel -> itemIsADiagram(item)) {
context_menu -> addAction(prj_prop_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 *delete_collection;
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_;
QMenu *context_menu;
QAction *erase_textfield;
@ -59,6 +59,8 @@ class ElementsPanelWidget : public QWidget {
void requestForProjectPropertiesEdition(QETProject *);
void requestForDiagramPropertiesEdition(Diagram *);
void requestForDiagramDeletion(Diagram *);
void requestForDiagramMoveUp(Diagram *);
void requestForDiagramMoveDown(Diagram *);
public slots:
void clearFilterTextField();
@ -68,6 +70,8 @@ class ElementsPanelWidget : public QWidget {
void editDiagramProperties();
void newDiagram();
void deleteDiagram();
void moveDiagramUp();
void moveDiagramDown();
void newCategory();
void newElement();
void importElement();

View File

@ -34,10 +34,12 @@ HotspotEditor::HotspotEditor(QWidget *parent) :
sb_width = new QSpinBox();
sb_width -> setMinimum(1);
sb_width -> setMaximum(1000);
sb_width -> setValue(3);
sb_width -> setSuffix(tr(" \32710 px"));
sb_height = new QSpinBox();
sb_height -> setMinimum(1);
sb_height -> setMaximum(1000);
sb_height -> setValue(7);
sb_height -> setSuffix(tr(" \32710 px"));
@ -223,6 +225,24 @@ QPoint HotspotEditor::offsetParts() const {
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
*/

View File

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

View File

@ -153,3 +153,24 @@ void InsetPropertiesWidget::setInsetProperties(const InsetProperties &inset) {
bool InsetPropertiesWidget::displayCurrentDate() const {
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;
void setInsetProperties(const InsetProperties &);
bool displayCurrentDate() const;
bool isReadOnly() const;
void setReadOnly(bool);
// attributs
private:

View File

@ -98,6 +98,27 @@ void OrientationSetWidget::setOrientationSet(const OrientationSet &os) {
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.
L'orientation concernee affiche alors "Possible" et ce statut devient

View File

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

View File

@ -30,6 +30,7 @@
#include "conductorpropertieswidget.h"
#include "qeticons.h"
#include "qetmessagebox.h"
#include "qettabbar.h"
/**
Constructeur
@ -102,8 +103,8 @@ void ProjectView::setProject(QETProject *project) {
if (!project_) {
project_ = project;
connect(project_, SIGNAL(projectTitleChanged(QETProject *, const QString &)), this, SLOT(updateWindowTitle()));
connect(project_, SIGNAL(readOnlyChanged (QETProject *, bool)), this, SLOT(updateWindowTitle()));
updateWindowTitle();
connect(project_, SIGNAL(readOnlyChanged (QETProject *, bool)), this, SLOT(adjustReadOnlyState()));
adjustReadOnlyState();
loadDiagrams();
}
}
@ -398,6 +399,8 @@ void ProjectView::showDiagram(Diagram *diagram) {
void ProjectView::editProjectProperties() {
if (!project_) return;
bool project_is_read_only = project_ -> isReadOnly();
// dialogue d'edition des proprietes du projet
QDialog properties_dialog(parentWidget());
#ifdef Q_WS_MAC
@ -411,22 +414,26 @@ void ProjectView::editProjectProperties() {
// titre du projet
QLabel *title_label = new QLabel(tr("Titre du projet :"));
QLineEdit *title_field = new QLineEdit(project_ -> title());
title_field -> setReadOnly(project_is_read_only);
// 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 :"));
// dimensions par defaut d'un schema
BorderPropertiesWidget *bpw = new BorderPropertiesWidget(project_ -> defaultBorderProperties());
bpw -> setReadOnly(project_is_read_only);
// proprietes par defaut d'un cartouche
InsetPropertiesWidget *ipw = new InsetPropertiesWidget(project_ -> defaultInsetProperties(), true);
ipw -> setReadOnly(project_is_read_only);
// proprietes par defaut des conducteurs
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(project_ -> defaultConductorProperties());
cpw -> setContentsMargins(0, 0, 0, 0);
cpw -> setReadOnly(project_is_read_only);
// 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(rejected()), &properties_dialog, SLOT(reject()));
@ -459,7 +466,7 @@ void ProjectView::editProjectProperties() {
vert_layout -> addWidget(buttons);
// 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_ -> setDefaultBorderProperties(bpw -> borderProperties());
project_ -> setDefaultInsetProperties(ipw -> insetProperties());
@ -490,6 +497,48 @@ void ProjectView::editDiagramProperties(Diagram *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
lancer l'impression de toute ou partie du projet.
@ -704,6 +753,18 @@ void ProjectView::updateWindowTitle() {
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
@param diagram Schema

View File

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

View File

@ -67,11 +67,13 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) :
connect(&(pa -> elementsPanel()), SIGNAL(requestForDiagram(Diagram *)), this, SLOT(activateDiagram(Diagram *)));
connect(&(pa -> elementsPanel()), SIGNAL(requestForProject(QETProject *)), this, SLOT(activateProject(QETProject *)));
connect(pa, SIGNAL(requestForProjectClosing(QETProject *)), this, SLOT(closeProject(QETProject *)));
connect(pa, SIGNAL(requestForProjectClosing(QETProject *)), this, SLOT(closeProject(QETProject *)));
connect(pa, SIGNAL(requestForProjectPropertiesEdition(QETProject *)), this, SLOT(editProjectProperties(QETProject *)));
connect(pa, SIGNAL(requestForDiagramPropertiesEdition(Diagram *)), this, SLOT(editDiagramProperties(Diagram *)));
connect(pa, SIGNAL(requestForNewDiagram(QETProject *)), this, SLOT(addDiagramToProject(QETProject *)));
connect(pa, SIGNAL(requestForDiagramDeletion(Diagram *)), this, SLOT(removeDiagram(Diagram *)));
connect(pa, SIGNAL(requestForNewDiagram(QETProject *)), this, SLOT(addDiagramToProject(QETProject *)));
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 -> setObjectName("diagram_undo");
@ -575,9 +577,9 @@ void QETDiagramEditor::toolbar() {
view_bar -> addAction(zoom_reset);
diagram_bar -> addAction(infos_diagram);
diagram_bar -> addAction(add_text);
diagram_bar -> addAction(conductor_default);
diagram_bar -> addAction(conductor_reset);
diagram_bar -> addAction(add_text);
// ajout de la barre d'outils a la fenetre principale
addToolBar(Qt::TopToolBarArea, main_bar);
@ -1094,10 +1096,10 @@ void QETDiagramEditor::slot_updateActions() {
// actions ayant juste besoin d'un document ouvert
close_file -> setEnabled(opened_project);
save_file -> setEnabled(opened_project && editable_project);
save_file -> setEnabled(editable_project);
save_file_sous -> setEnabled(opened_project);
save_all -> setEnabled(opened_diagram && editable_diagram);
prj_edit_prop -> setEnabled(editable_project);
save_all -> setEnabled(editable_diagram);
prj_edit_prop -> setEnabled(opened_project);
prj_add_diagram -> setEnabled(editable_project);
prj_del_diagram -> setEnabled(editable_project);
prj_clean -> setEnabled(editable_project);
@ -1111,8 +1113,8 @@ void QETDiagramEditor::slot_updateActions() {
zoom_out -> setEnabled(opened_diagram);
zoom_fit -> setEnabled(opened_diagram);
zoom_reset -> setEnabled(opened_diagram);
conductor_default -> setEnabled(editable_diagram);
infos_diagram -> setEnabled(editable_diagram);
conductor_default -> setEnabled(opened_diagram);
infos_diagram -> setEnabled(opened_diagram);
add_text -> setEnabled(editable_diagram);
add_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
*/

View File

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

View File

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

View File

@ -88,6 +88,8 @@ namespace QET {
extern QIcon Forbidden;
extern QIcon FullScreenEnter;
extern QIcon FullScreenExit;
extern QIcon GoDown;
extern QIcon GoUp;
extern QIcon Ground;
extern QIcon Hide;
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
*/
void QETTabBar::moveTab(int src_tab, int dst_tab) {
#if QT_VERSION < 0x040500
// sauvegarde les caracteristiques de l'onglet deplace
QIcon old_tab_icon = tabIcon(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
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 isVertical() const;
bool isHorizontal() const;
void moveTab(int, int);
protected:
virtual void tabInserted(int);
@ -65,7 +66,6 @@ class QETTabBar : public QTabBar {
private:
bool mustMoveTab(int, int, const QPoint &) const;
void moveTab(int, int);
int tabForPressedPosition(const QPoint &);
int tabForMovedPosition(const QPoint &);
bool posMatchesTabRect(const QRect &, const QPoint &) const;

View File

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

View File

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