Wt examples: FileEditDialog Class Reference

Wt examples 3.3.0

- Main Page
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Hierarchy
- Class Members

Public Member Functions | Private Member Functions | Private Attributes
FileEditDialog Class Reference
Drag and drop in WTreeView example

A dialog for editing a 'file'. More...

Inheritance diagram for FileEditDialog:
[legend]

List of all members.

## Public Member Functions
| FileEditDialog (WAbstractItemModel *model, const WModelIndex &item)
## Private Member Functions
void | handleFinish (DialogCode result)
## Private Attributes
WAbstractItemModel * | model_
WModelIndex | item_
WLineEdit * | nameEdit_
WLineEdit * | sizeEdit_
WComboBox * | typeEdit_
WDatePicker * | createdPicker_
WDatePicker * | modifiedPicker_

## Detailed Description

A dialog for editing a 'file'.

Definition at line 78 of file TreeViewDragDrop.C.

## Constructor & Destructor Documentation

FileEditDialog::FileEditDialog | ( | WAbstractItemModel * | model,
|  | const WModelIndex & | item
| ) |  | `[inline]`

Definition at line 81 of file TreeViewDragDrop.C.

        : WDialog("Edit..."),
          model_(model),
          item_(item)
      {
        int modelRow = item_.row();

        resize(300, WLength::Auto);

        /*
         * Create the form widgets, and load them with data from the model.
         */

        // name
        nameEdit_ = new WLineEdit(asString(model_->data(modelRow, 1)));

        // type
        typeEdit_ = new WComboBox();
        typeEdit_->addItem("Document");
        typeEdit_->addItem("Spreadsheet");
        typeEdit_->addItem("Presentation");
        typeEdit_->setCurrentIndex
          (typeEdit_->findText(asString(model_->data(modelRow, 2))));

        // size
        sizeEdit_ = new WLineEdit(asString(model_->data(modelRow, 3)));
        sizeEdit_->setValidator
          (new WIntValidator(0, std::numeric_limits<int>::max(), this));

        // created
        createdPicker_ = new WDatePicker();
        createdPicker_->lineEdit()->validator()->setMandatory(true);
        createdPicker_->setFormat(FileModel::dateEditFormat);
        createdPicker_->setDate(boost::any_cast<WDate>(model_->data(modelRow, 4)));

        // modified
        modifiedPicker_ = new WDatePicker();
        modifiedPicker_->lineEdit()->validator()->setMandatory(true);
        modifiedPicker_->setFormat(FileModel::dateEditFormat);
        modifiedPicker_->setDate(boost::any_cast<WDate>(model_->data(modelRow, 5)));

        /*
         * Use a grid layout for the labels and fields
         */
        WGridLayout *layout = new WGridLayout();

        WLabel *l;
        int row = 0;

        layout->addWidget(l = new WLabel("Name:"), row, 0);
        layout->addWidget(nameEdit_, row, 1);
        l->setBuddy(nameEdit_);
        ++row;

        layout->addWidget(l = new WLabel("Type:"), row, 0);
        layout->addWidget(typeEdit_, row, 1);
        l->setBuddy(typeEdit_);
        ++row;

        layout->addWidget(l = new WLabel("Size:"), row, 0);
        layout->addWidget(sizeEdit_, row, 1);
        l->setBuddy(sizeEdit_);
        ++row;

        layout->addWidget(l = new WLabel("Created:"), row, 0);
        layout->addWidget(createdPicker_->lineEdit(), row, 1);
        layout->addWidget(createdPicker_, row, 2);
        l->setBuddy(createdPicker_->lineEdit());
        ++row;

        layout->addWidget(l = new WLabel("Modified:"), row, 0);
        layout->addWidget(modifiedPicker_->lineEdit(), row, 1);
        layout->addWidget(modifiedPicker_, row, 2);
        l->setBuddy(modifiedPicker_->lineEdit());
        ++row;

        WPushButton *b;
        WContainerWidget *buttons = new WContainerWidget();
        buttons->addWidget(b = new WPushButton("Save"));
        b->clicked().connect(this, &WDialog::accept);
        contents()->enterPressed().connect(this, &WDialog::accept);
        buttons->addWidget(b = new WPushButton("Cancel"));
        b->clicked().connect(this, &WDialog::reject);

        /*
         * Focus the form widget that corresonds to the selected item.
         */
        switch (item.column()) {
        case 2:
          typeEdit_->setFocus(); break;
        case 3:
          sizeEdit_->setFocus(); break;
        case 4:
          createdPicker_->lineEdit()->setFocus(); break;
        case 5:
          modifiedPicker_->lineEdit()->setFocus(); break;
        default:
          nameEdit_->setFocus(); break;
        }

        layout->addWidget(buttons, row, 0, 0, 3, AlignCenter);
        layout->setColumnStretch(1, 1);

        contents()->setLayout(layout);

        finished().connect(this, &FileEditDialog::handleFinish);

        show();
      }

## Member Function Documentation

void FileEditDialog::handleFinish | ( | DialogCode | result | ) | `[inline, private]`

Definition at line 199 of file TreeViewDragDrop.C.

      {
        if (result == WDialog::Accepted) {
          /*
           * Update the model with data from the edit widgets.
           *
           * You will want to do some validation here...
           *
           * Note that we directly update the source model to avoid
           * problems caused by the dynamic sorting of the proxy model,
           * which reorders row numbers, and would cause us to switch to editing
           * the wrong data.
           */
          WAbstractItemModel *m = model_;
          int modelRow = item_.row();

          WAbstractProxyModel *proxyModel = dynamic_cast<WAbstractProxyModel *>(m);
          if (proxyModel) {
            m = proxyModel->sourceModel();
            modelRow = proxyModel->mapToSource(item_).row();
          }

          m->setData(modelRow, 1, boost::any(nameEdit_->text()));
          m->setData(modelRow, 2, boost::any(typeEdit_->currentText()));
          m->setData(modelRow, 3, boost::any(boost::lexical_cast<int>
                                             (sizeEdit_->text().toUTF8())));
          m->setData(modelRow, 4, boost::any(createdPicker_->date()));
          m->setData(modelRow, 5, boost::any(modifiedPicker_->date()));
        }

        delete this;
      }

## Member Data Documentation

WDatePicker* FileEditDialog::createdPicker_`[private]`

Definition at line 197 of file TreeViewDragDrop.C.

WModelIndex FileEditDialog::item_`[private]`

Definition at line 193 of file TreeViewDragDrop.C.

WAbstractItemModel* FileEditDialog::model_`[private]`

Definition at line 192 of file TreeViewDragDrop.C.

WDatePicker * FileEditDialog::modifiedPicker_`[private]`

Definition at line 197 of file TreeViewDragDrop.C.

WLineEdit* FileEditDialog::nameEdit_`[private]`

Definition at line 195 of file TreeViewDragDrop.C.

WLineEdit * FileEditDialog::sizeEdit_`[private]`

Definition at line 195 of file TreeViewDragDrop.C.

WComboBox* FileEditDialog::typeEdit_`[private]`

Definition at line 196 of file TreeViewDragDrop.C.

The documentation for this class was generated from the following file:

- /home/koen/project/wt/public-git/wt/examples/treeview-dragdrop/TreeViewDragDrop.C