File: VectorEditionWidget.cpp

package info (click to toggle)
tulip 3.7.0dfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 39,428 kB
  • sloc: cpp: 231,403; php: 11,023; python: 1,128; sh: 671; yacc: 522; makefile: 315; xml: 63; lex: 55
file content (124 lines) | stat: -rwxr-xr-x 4,361 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "VectorEditionWidget.h"
#include "ui_VectorEditionWidget.h"
#include <QtGui/QDialog>
#include <QtGui/QDialogButtonBox>
#include "TulipItemDelegate.h"

using namespace tlp;

VectorEditionWidget::VectorEditionWidget(QWidget *parent) :
  QWidget(parent),
  ui(new Ui::VectorEditionWidget) {
  ui->setupUi(this);
  connect(ui->addPushButton,SIGNAL(clicked(bool)),this,SLOT(addRow()));
  connect(ui->delPushButton,SIGNAL(clicked(bool)),this,SLOT(removeRows()));
  connect(ui->setAllPushButton,SIGNAL(clicked(bool)),this,SLOT(setAll()));
}

VectorEditionWidget::~VectorEditionWidget() {
  delete ui;
}

ListPropertyWidgetModel::ListPropertyWidgetModel(TulipPropertyType elementsType,ListPropertyWidgetTypeMangerInterface *typeManager, QWidget* parent): QAbstractListModel( parent),elements(typeManager),elementsType(elementsType) {

}

ListPropertyWidgetModel::~ListPropertyWidgetModel() {
  delete elements;
}

QVariant ListPropertyWidgetModel::data(const QModelIndex& index, int role) const {
  if(index.isValid() && index.row() < elements->getElementNumber()) {
    if(role == Qt::DisplayRole) {
      return elements->getStringValue(index.row());
    }

    if(role == Qt::EditRole) {
      return elements->getValue(index.row());
    }
  }

  return QVariant();
}

int ListPropertyWidgetModel::rowCount(const QModelIndex&) const {
  return elements->getElementNumber();
}

Qt::ItemFlags ListPropertyWidgetModel::flags(const QModelIndex& index) const {
  return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}

bool ListPropertyWidgetModel::setData(const QModelIndex& index, const QVariant& value, int) {
  if(index.isValid() && index.row() < elements->getElementNumber()) {
    if(elements->setValue(index.row(),value)) {
      emit dataChanged(index,index);
      return true;
    }
  }
  else {
    return false;
  }

  return false;
}
bool ListPropertyWidgetModel::insertRows(int, int, const QModelIndex& parent) {
  beginInsertRows(parent,elements->getElementNumber(),elements->getElementNumber());
  elements->insertRow();
  endInsertRows();
  return true;
}

bool ListPropertyWidgetModel::removeRows(int row, int count, const QModelIndex& parent) {
  if(row < elements->getElementNumber() && row + count <= elements->getElementNumber()) {
    beginRemoveRows(parent,row,row+count-1);

    for(int i = 0 ; i < count ; ++i) {
      elements->deleteRow(row+i);
    }

    endRemoveRows();
    return true;
  }

  return false;
}

ListPropertyWidgetTypeMangerInterface* VectorEditionWidget::getInterface() {
  return ((ListPropertyWidgetModel*)ui->listView->model())->getInterface();
}

void VectorEditionWidget::setInterface(TulipPropertyType elementsType,ListPropertyWidgetTypeMangerInterface *interf) {
  ui->listView->setModel(new ListPropertyWidgetModel(elementsType,interf,this));
  ui->listView->setItemDelegate(new TulipItemDelegate());
}

void VectorEditionWidget::addRow() {
  ui->listView->model()->insertRow(ui->listView->model()->rowCount());
  ui->listView->selectionModel()->select(ui->listView->model()->index(ui->listView->model()->rowCount()-1,0),QItemSelectionModel::ClearAndSelect);
}
void VectorEditionWidget::removeRows() {
  QModelIndexList selection = ui->listView->selectionModel()->selectedRows();

  if(!selection.empty()) {
    ui->listView->model()->removeRows(selection.first().row(),selection.count());
  }
}
void VectorEditionWidget::setAll() {
  if(ui->listView->model()->rowCount() > 0) {
    QDialog dialog(this);
    dialog.setLayout(new QVBoxLayout(this));
    QWidget *editorWidget = ui->listView->itemDelegate()->createEditor(this,QStyleOptionViewItem(),ui->listView->model()->index(0,0));
    dialog.layout()->addWidget(editorWidget);
    QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    dialog.layout()->addWidget(buttonBox);
    connect(buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
    connect(buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));

    if(dialog.exec()== QDialog::Accepted) {
      for(int i = 0 ; i < ui->listView->model()->rowCount() ; ++i) {
        ui->listView->itemDelegate()->setModelData(editorWidget,ui->listView->model(),ui->listView->model()->index(i,0));
      }
    }
  }
}