link single element widget : minor improvement

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3946 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2015-05-09 11:35:00 +00:00
parent 1dce8792ea
commit f061015a17
4 changed files with 90 additions and 52 deletions

View File

@@ -37,6 +37,7 @@ class PropertiesEditorWidget : public QWidget
virtual void reset() {} virtual void reset() {}
virtual QUndoCommand *associatedUndo () const; virtual QUndoCommand *associatedUndo () const;
virtual QString title() const; virtual QString title() const;
virtual void updateUi() {}
}; };
#endif // PROPERTIESEDITORWIDGET_H #endif // PROPERTIESEDITORWIDGET_H

View File

@@ -81,6 +81,7 @@ void ElementSelectorWidget::clear() {
elements_list.clear(); elements_list.clear();
in_filter.clear(); in_filter.clear();
out_filter.clear(); out_filter.clear();
selected_element = nullptr;
if(showed_element) showed_element->setHighlighted(false); if(showed_element) showed_element->setHighlighted(false);
foreach(QWidget *w, content_list) { foreach(QWidget *w, content_list) {
ui->scroll_layout_->removeWidget(w); ui->scroll_layout_->removeWidget(w);

View File

@@ -57,8 +57,7 @@ LinkSingleElementWidget::LinkSingleElementWidget(Element *elmt, QWidget *parent)
* @brief LinkSingleElementWidget::~LinkSingleElementWidget * @brief LinkSingleElementWidget::~LinkSingleElementWidget
* Default destructor * Default destructor
*/ */
LinkSingleElementWidget::~LinkSingleElementWidget() LinkSingleElementWidget::~LinkSingleElementWidget() {
{
delete ui; delete ui;
} }
@@ -66,7 +65,8 @@ LinkSingleElementWidget::~LinkSingleElementWidget()
* @brief LinkSingleElementWidget::apply * @brief LinkSingleElementWidget::apply
* Apply the new property of the edited element * Apply the new property of the edited element
*/ */
void LinkSingleElementWidget::apply() { void LinkSingleElementWidget::apply()
{
QUndoCommand *undo = associatedUndo(); QUndoCommand *undo = associatedUndo();
if (undo) if (undo)
element_->diagram()->undoStack().push(undo); element_->diagram()->undoStack().push(undo);
@@ -95,15 +95,29 @@ QString LinkSingleElementWidget::title() const
return tr("Référence croisée (esclave)"); return tr("Référence croisée (esclave)");
} }
/**
* @brief LinkSingleElementWidget::updateUi
* Update the content of this widget
*/
void LinkSingleElementWidget::updateUi()
{
setNewList();
buildLinkUnlinkButton();
buildSearchField();
unlink_ = false;
}
/** /**
* @brief LinkSingleElementWidget::buildInterface * @brief LinkSingleElementWidget::buildInterface
* Build the interface of this widget * Build the interface of this widget
*/ */
void LinkSingleElementWidget::buildInterface() { void LinkSingleElementWidget::buildInterface()
{
ui->folio_combo_box->addItem(tr("Tous")); ui->folio_combo_box->addItem(tr("Tous"));
//Fill the combo box for filter the result by folio //Fill the combo box for filter the result by folio
foreach (Diagram *d, diagram_list) { foreach (Diagram *d, diagram_list)
{
QString title = d->title(); QString title = d->title();
if (title.isEmpty()) title = tr("Sans titre"); if (title.isEmpty()) title = tr("Sans titre");
title.prepend(QString::number(d->folioIndex() + 1) + " "); title.prepend(QString::number(d->folioIndex() + 1) + " ");
@@ -111,11 +125,7 @@ void LinkSingleElementWidget::buildInterface() {
} }
buildList(); buildList();
buildLinkUnlinkButton();
element_->isFree() ?
ui->button_linked->setDisabled(true) :
buildUnlinkButton();
buildSearchField(); buildSearchField();
} }
@@ -125,26 +135,42 @@ void LinkSingleElementWidget::buildInterface() {
* the list is fill with the element find in the * the list is fill with the element find in the
* required folio (folio selected with the combo box) * required folio (folio selected with the combo box)
*/ */
void LinkSingleElementWidget::buildList() { void LinkSingleElementWidget::buildList()
{
esw_ = new ElementSelectorWidget(availableElements(), this); esw_ = new ElementSelectorWidget(availableElements(), this);
ui->content_layout->addWidget(esw_); ui->content_layout->addWidget(esw_);
} }
/** /**
* @brief LinkSingleElementWidget::buildUnlinkButton * @brief LinkSingleElementWidget::buildLinkUnlinkButton
* Build a widget with button 'unlink' if the edited * Build the button link or unlink according to the current edited
* element is already linked with a master element * element, if is already linked with a master element or not
*/ */
void LinkSingleElementWidget::buildUnlinkButton() { void LinkSingleElementWidget::buildLinkUnlinkButton()
unlink_widget = new QWidget(this); {
QHBoxLayout *unlink_layout = new QHBoxLayout(unlink_widget); if (element_->isFree())
QLabel *lb = new QLabel(tr("Cet élément est déjà lié."), unlink_widget); {
QPushButton *pb = new QPushButton(tr("Délier"), unlink_widget); ui->button_linked->setEnabled(true);
connect(pb, SIGNAL(clicked()), this, SLOT(unlinkClicked())); if (unlink_widget)
unlink_layout->addWidget(lb); {
unlink_layout->addStretch(); ui->main_layout->removeWidget(unlink_widget);
unlink_layout->addWidget(pb); delete unlink_widget; unlink_widget = nullptr;
ui->main_layout->insertWidget(0, unlink_widget); }
}
else if (!unlink_widget)
{
ui->button_linked->setDisabled(true);
unlink_widget = new QWidget(this);
QHBoxLayout *unlink_layout = new QHBoxLayout(unlink_widget);
QLabel *lb = new QLabel(tr("Cet élément est déjà lié."), unlink_widget);
QPushButton *pb = new QPushButton(tr("Délier"), unlink_widget);
connect(pb, SIGNAL(clicked()), this, SLOT(unlinkClicked()));
unlink_layout->addWidget(lb);
unlink_layout->addStretch();
unlink_layout->addWidget(pb);
ui->main_layout->insertWidget(0, unlink_widget);
}
} }
/** /**
@@ -152,7 +178,8 @@ void LinkSingleElementWidget::buildUnlinkButton() {
* Build a line edit for search element by they information, * Build a line edit for search element by they information,
* like label or information * like label or information
*/ */
void LinkSingleElementWidget::buildSearchField() { void LinkSingleElementWidget::buildSearchField()
{
//If there isn't string to filter, we remove the search field //If there isn't string to filter, we remove the search field
if (esw_->filter().isEmpty()) { if (esw_->filter().isEmpty()) {
if (search_field) { if (search_field) {
@@ -163,13 +190,14 @@ void LinkSingleElementWidget::buildSearchField() {
return; return;
} }
if(!search_field) search_field = new QLineEdit(this); if(!search_field)
#if QT_VERSION >= 0x040700 {
search_field -> setPlaceholderText(tr("Rechercher")); search_field = new QLineEdit(this);
#endif search_field -> setPlaceholderText(tr("Rechercher"));
connect(search_field, SIGNAL(textChanged(QString)), esw_, SLOT(filtered(QString)));
ui->header_layout->addWidget(search_field);
}
setUpCompleter(); setUpCompleter();
connect(search_field, SIGNAL(textChanged(QString)), esw_, SLOT(filtered(QString)));
ui->header_layout->addWidget(search_field);
} }
/** /**
@@ -178,29 +206,32 @@ void LinkSingleElementWidget::buildSearchField() {
* to be linked with the edited element. * to be linked with the edited element.
* This methode take care of the combo box "find in diagram" * This methode take care of the combo box "find in diagram"
*/ */
QList <Element *> LinkSingleElementWidget::availableElements() { QList <Element *> LinkSingleElementWidget::availableElements()
{
QList <Element *> elmt_list; QList <Element *> elmt_list;
//if element isn't free and unlink isn't pressed, return an empty list //if element isn't free and unlink isn't pressed, return an empty list
if (!element_->isFree() && !unlink_) return elmt_list; if (!element_->isFree() && !unlink_) return elmt_list;
int i = ui->folio_combo_box->currentIndex(); int i = ui->folio_combo_box->currentIndex();
//find in all diagram of this project //find in all diagram of this project
if (i == 0) { if (i == 0)
{
ElementProvider ep(element_->diagram()->project()); ElementProvider ep(element_->diagram()->project());
if (filter_ & Element::AllReport) if (filter_ & Element::AllReport)
elmt_list = ep.freeElement(filter_); elmt_list = ep.freeElement(filter_);
else else
elmt_list = ep.find(filter_); elmt_list = ep.find(filter_);
} }
//find in single diagram //find in single diagram
else { else
{
ElementProvider ep (diagram_list.at(i-1)); ElementProvider ep (diagram_list.at(i-1));
if (filter_ & Element::AllReport) if (filter_ & Element::AllReport)
elmt_list = ep.freeElement(filter_); elmt_list = ep.freeElement(filter_);
else else
elmt_list = ep.find(filter_); elmt_list = ep.find(filter_);
} }
//If element is linked, remove is parent from the list //If element is linked, remove is parent from the list
if(!element_->isFree()) elmt_list.removeAll(element_->linkedElements().first()); if(!element_->isFree()) elmt_list.removeAll(element_->linkedElements().first());
return elmt_list; return elmt_list;
@@ -210,8 +241,10 @@ QList <Element *> LinkSingleElementWidget::availableElements() {
* @brief LinkSingleElementWidget::setUpCompleter * @brief LinkSingleElementWidget::setUpCompleter
* Setup the completer of search_field * Setup the completer of search_field
*/ */
void LinkSingleElementWidget::setUpCompleter() { void LinkSingleElementWidget::setUpCompleter()
if (search_field) { {
if (search_field)
{
search_field -> clear(); search_field -> clear();
delete search_field -> completer(); delete search_field -> completer();
@@ -227,7 +260,8 @@ void LinkSingleElementWidget::setUpCompleter() {
* @brief LinkSingleElementWidget::setNewList * @brief LinkSingleElementWidget::setNewList
* Set the list according to the selected diagram in the combo_box * Set the list according to the selected diagram in the combo_box
*/ */
void LinkSingleElementWidget::setNewList() { void LinkSingleElementWidget::setNewList()
{
esw_->setList(availableElements()); esw_->setList(availableElements());
buildSearchField(); buildSearchField();
} }
@@ -236,10 +270,10 @@ void LinkSingleElementWidget::setNewList() {
* @brief LinkSingleElementWidget::unlinkClicked * @brief LinkSingleElementWidget::unlinkClicked
* Action when 'unlink' button is clicked * Action when 'unlink' button is clicked
*/ */
void LinkSingleElementWidget::unlinkClicked() { void LinkSingleElementWidget::unlinkClicked()
{
ui->main_layout->removeWidget(unlink_widget); ui->main_layout->removeWidget(unlink_widget);
delete unlink_widget; delete unlink_widget; unlink_widget = nullptr;
unlink_widget = 0;
unlink_ = true; unlink_ = true;
setNewList(); setNewList();
} }
@@ -256,7 +290,8 @@ void LinkSingleElementWidget::on_button_this_clicked() {
* @brief FolioReportProperties::on_button_linked_clicked * @brief FolioReportProperties::on_button_linked_clicked
* Action when push button "linked report" is clicked * Action when push button "linked report" is clicked
*/ */
void LinkSingleElementWidget::on_button_linked_clicked() { void LinkSingleElementWidget::on_button_linked_clicked()
{
if (element_->isFree()) return; if (element_->isFree()) return;
esw_->showElement(element_->linkedElements().first()); esw_->showElement(element_->linkedElements().first());
} }

View File

@@ -51,14 +51,15 @@ class LinkSingleElementWidget : public PropertiesEditorWidget
void apply(); void apply();
QUndoCommand *associatedUndo() const; QUndoCommand *associatedUndo() const;
QString title() const; QString title() const;
void updateUi();
private: private:
void buildInterface(); void buildInterface();
void buildList(); void buildList();
void buildUnlinkButton(); void buildLinkUnlinkButton();
void buildSearchField(); void buildSearchField();
QList <Element *> availableElements(); QList <Element *> availableElements();
void setUpCompleter(); void setUpCompleter();
private slots: private slots:
void setNewList(); void setNewList();