bool ChannelsModel::setData(const WModelIndex &index, const boost::any &value, int role) { if (index.column() == 3) { QSharedPointer<common::User> du; QSharedPointer<Channel> ch; ch = m_availableChannels->at(index.row()); du = common::DbSession::getInstance().getTokensMap().find(std::string(m_token))->second; bool subscribed=false; for (int i = 0; i < m_subscribedChannels->size(); i++) { if (m_subscribedChannels->at(i) == ch) { subscribed = true; break; } } if (subscribed) { //unsubscribe common::DbSession::getInstance().unsubscribe(du,ch); } else { //subscribe common::DbSession::getInstance().subscribe(du,ch); } // index.data(Wt::CheckStateRole)=; dataChanged().emit(index, index); this->channelsUpdated.emit(); return true; } return false; }
boost::any GitModel::data(const WModelIndex& index, int role) const { if (!index.isValid()) return boost::any(); /* Only 3 data roles on column 0 data are supported: * - DisplayRole: the file name * - DecorationRole: an icon (folder or file) * - ContentsRole: the file contents */ if (index.column() == 0) { Git::Object object = getObject(index); if (role == DisplayRole) { if (object.type == Git::Tree) return object.name + '/'; else return object.name; } else if (role == DecorationRole) { if (object.type == Git::Blob) return static_cast<const char*>("resources/icons/git-blob.png"); else if (object.type == Git::Tree) return static_cast<const char*>("resources/icons/git-tree.png"); } else if (role == ContentsRole) { if (object.type == Git::Blob) return git_.catFile(object.id); } else if (role == FilePathRole) { return boost::any(); } } return boost::any(); }
WModelIndex WIdentityProxyModel::mapFromSource(const WModelIndex &sourceIndex) const { if (!sourceIndex.isValid()) return WModelIndex(); return createIndex(sourceIndex.row(), sourceIndex.column(), sourceIndex.internalPointer()); }
int GitModel::rowCount(const WModelIndex& index) const { // we are looking for the git SHA1 id of a tree object (since only folders // may contain children). Git::ObjectId objectId; int treeId; if (index.isValid()) { // only column 0 items may contain children if (index.column() != 0) return 0; Git::Object o = getObject(index); if (o.type == Git::Tree) { objectId = o.id; treeId = getTreeId(index.internalId(), index.row()); } else // not a folder: no children return 0; } else { treeId = 0; // the index corresponds to the root object if (treeData_.empty()) // model not yet loaded ! return 0; else objectId = treeData_[0].treeObject(); } return treeData_[treeId].rowCount(); }
WModelIndexList WAbstractItemModel::match(const WModelIndex& start, int role, const boost::any& value, int hits, WFlags<MatchFlag> flags) const { WModelIndexList result; const int rc = rowCount(start.parent()); for (int i = 0; i < rc; ++i) { int row = start.row() + i; if (row >= rc) { if (!(flags & MatchWrap)) break; else row -= rc; } WModelIndex idx = index(row, start.column(), start.parent()); boost::any v = data(idx, role); if (Impl::matchValue(v, value, flags)) result.push_back(idx); } return result; }
virtual WModelIndex parent(const WModelIndex& index) const { if (!index.isValid() || index.internalId() == 0) { return WModelIndex(); // treeData_[0] is the tree root } else { const Tree& item = treeData_[index.internalId()]; return createIndex(item.index(), 0, item.parentId()); } }
WModelIndex WStandardItemModel::parent(const WModelIndex& index) const { if (!index.isValid()) return index; WStandardItem *parent = static_cast<WStandardItem *>(index.internalPointer()); return indexFromItem(parent); }
WModelIndex ArnModelW::parent(const WModelIndex& index) const { // qDebug() << "### arnModelW parent: Check"; if (!index.isValid()) return index; ArnNode* parentNode = static_cast<ArnNode*>( index.internalPointer()); return indexFromNode( parentNode, 0); }
bool WAbstractItemModel::setData(int row, int column, const boost::any& value, int role, const WModelIndex& parent) { WModelIndex i = index(row, column, parent); if (i.isValid()) return setData(i, value, role); else return false; }
bool WSuggestionPopup::partialResults() const { if (filterLength_ < 0) return true; else if (model_->rowCount() > 0) { WModelIndex index = model_->index(model_->rowCount() - 1, modelColumn_); boost::any styleclass = index.data(StyleClassRole); return Wt::asString(styleclass) == "Wt-more-data"; } else return false; }
void gdContainerBar::doDelete() { WModelIndexSet pSet = m_pView->selectedIndexes(); if ( pSet.empty() ) return; // TODO : Dialog confirm for (WModelIndexSet::iterator it = pSet.begin(); it != pSet.end(); ++it) { WModelIndex pIdx = *it; rowDeleted_.emit(pIdx.row()); m_pView->model()->removeRows(pIdx.row(), 1); } }
WModelIndex WSortFilterProxyModel::mapToSource(const WModelIndex& proxyIndex) const { if (proxyIndex.isValid()) { Item *parentItem = parentItemFromIndex(proxyIndex); return sourceModel()->index(parentItem->proxyRowMap_[proxyIndex.row()], proxyIndex.column(), parentItem->sourceIndex_); } else return WModelIndex(); }
virtual cpp17::any data(const WModelIndex& index, ItemDataRole role = ItemDataRole::Display) const { if (!index.isValid()) return cpp17::any(); Git::Object object = getObject(index); switch (index.column()) { case 0: if (role == ItemDataRole::Display) { if (object.type == Git::Tree) return object.name + '/'; else return object.name; } else if (role == ItemDataRole::Decoration) { if (object.type == Git::Blob) return std::string("icons/git-blob.png"); else if (object.type == Git::Tree) return std::string("icons/git-tree.png"); } else if (role == ContentsRole) { if (object.type == Git::Blob) return git_.catFile(object.id); } break; case 1: if (role == ItemDataRole::Display) { if (object.type == Git::Tree) return std::string("Folder"); else { std::string suffix = getSuffix(object.name); if (suffix == "C" || suffix == "cpp") return std::string("C++ Source"); else if (suffix == "h" || (suffix == "" && !topLevel(index))) return std::string("C++ Header"); else if (suffix == "css") return std::string("CSS Stylesheet"); else if (suffix == "js") return std::string("JavaScript Source"); else if (suffix == "md") return std::string("Markdown"); else if (suffix == "png" || suffix == "gif") return std::string("Image"); else if (suffix == "txt") return std::string("Text"); else return cpp17::any(); } } } return cpp17::any(); }
WFlags<ItemFlag> ArnModelW::flags(const WModelIndex& index) const { if (!index.isValid()) { return WFlags<ItemFlag>(0); } if (index.column() == 1) { return WAbstractItemModel::flags( index) | Wt::ItemIsEditable; } else { return WAbstractItemModel::flags( index); } }
virtual WModelIndex index(int row, int column, const WModelIndex& parent = WModelIndex()) const { int parentId; if (!parent.isValid()) parentId = 0; else { int grandParentId = parent.internalId(); parentId = getTreeId(grandParentId, parent.row()); } return createIndex(row, column, parentId); }
void WSuggestionPopup::modelDataChanged(const WModelIndex& topLeft, const WModelIndex& bottomRight) { if (topLeft.parent().isValid()) return; if (modelColumn_ < topLeft.column() || modelColumn_ > bottomRight.column()) return; for (int i = topLeft.row(); i <= bottomRight.row(); ++i) { WContainerWidget *w = dynamic_cast<WContainerWidget *>(impl_->widget(i)); WAnchor *anchor = dynamic_cast<WAnchor *>(w->widget(0)); WText *value = dynamic_cast<WText *>(anchor->widget(0)); WModelIndex index = model_->index(i, modelColumn_); boost::any d = index.data(); value->setText(asString(d)); TextFormat format = index.flags() & ItemIsXHTMLText ? XHTMLText : PlainText; value->setTextFormat(format); boost::any d2 = model_->data(i, modelColumn_, UserRole); if (d2.empty()) d2 = d; value->setAttributeValue("sug", asString(d2)); } }
WModelIndexSet WModelIndex::decodeFromRawIndexes(const WModelIndexSet& encodedIndexes) { WModelIndexSet result; for (WModelIndexSet::const_iterator i = encodedIndexes.begin(); i != encodedIndexes.end(); ++i) { WModelIndex n = i->decodeFromRawIndex(); if (n.isValid()) result.insert(n); } return result; }
WModelIndex GitModel::parent(const WModelIndex& index) const { // treeData_[0] indicates the top-level parent. if (!index.isValid() || index.internalId() == 0) return WModelIndex(); else { // get the item that corresponds to the parent ... const Tree& item = treeData_[index.internalId()]; // ... and construct that identifies the parent: // row = child index in the grand parent // internalId = id of the grand parent return createIndex(item.index(), 0, item.parentId()); } }
// Updates the model index of the gdSqlComboBoxCustomItem void gdSqlComboBoxDelegate::updateModelIndex(WWidget* widget, const WModelIndex& index) { if ( isFirstRowReserved() ) if ( index.row() == 0 ) { if ( m_bDebug ) wApp->log("notice") << " gdSqlComboBoxDelegate::updateModelIndex firstRow reserved and row = 0 "; WItemDelegate* pItem = dynamic_cast<WItemDelegate*>(widget); return pItem->updateModelIndex(widget, index); } if ( m_bDebug ) wApp->log("notice") << " gdSqlComboBoxDelegate::updateModelIndex row = " << index.row(); gdSqlComboBoxCustomItem* item = dynamic_cast<gdSqlComboBoxCustomItem*>(widget); item->setIndex(index); WItemDelegate::updateModelIndex(widget, index); }
bool ArnModelW::setData(const WModelIndex& index, const boost::any& value, int role) { if (index.isValid() && role == Wt::EditRole) { ArnNode* node = nodeFromIndex( index); if (!node) return false; if (node->isFolder()) { if (node->_valueChild) { if (node->_setMap) { node->_valueChild->setValue( node->_setMap->key( toQString( boost::any_cast<WString>(value)))); } else { node->_valueChild->setValue( toQString( boost::any_cast<WString>(value))); } emitDataChangedI( index); } } else { if (value.type() == typeid(QVariant)) node->setValue( boost::any_cast<QVariant>(value)); else node->setValue( toQString( boost::any_cast<WString>(value))); emitDataChangedI( index); } return true; } return false; }
/*! \brief Change the filter on the file view when the selected folder * changes. */ void folderChanged() { if (folderView_->selectedIndexes().empty()) return; WModelIndex selected = *folderView_->selectedIndexes().begin(); boost::any d = selected.data(UserRole); if (!d.empty()) { std::string folder = boost::any_cast<std::string>(d); // For simplicity, we assume here that the folder-id does not // contain special regexp characters, otherwise these need to be // escaped -- or use the \Q \E qutoing escape regular expression // syntax (and escape \E) fileFilterModel_->setFilterRegExp(folder); } }
void handleFinish(DialogCode result) { 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; }
void WSuggestionPopup::modelRowsInserted(const WModelIndex& parent, int start, int end) { if (filterLength_ != 0 && !filtering_) return; if (modelColumn_ >= model_->columnCount()) return; if (parent.isValid()) return; for (int i = start; i <= end; ++i) { WContainerWidget *line = new WContainerWidget(); content_->insertWidget(i, line); boost::any d = model_->data(i, modelColumn_); WText *value = new WText(asString(d), PlainText); boost::any d2 = model_->data(i, modelColumn_, UserRole); if (d2.empty()) d2 = d; line->addWidget(value); value->setAttributeValue("sug", asString(d2)); } }
WModelIndex WSortFilterProxyModel::mapFromSource(const WModelIndex& sourceIndex) const { if (sourceIndex.isValid()) { WModelIndex sourceParent = sourceIndex.parent(); Item *item = itemFromSourceIndex(sourceParent); int row = item->sourceRowMap_[sourceIndex.row()]; if (row != -1) return createIndex(row, sourceIndex.column(), static_cast<void *>(item)); else return WModelIndex(); } else return WModelIndex(); }
virtual int rowCount(const WModelIndex& parent = WModelIndex()) const { int treeId; if (parent.isValid()) { if (parent.column() != 0) return 0; Git::Object o = getObject(parent); if (o.type == Git::Tree) { // is a folder treeId = getTreeId(parent.internalId(), parent.row()); } else // is a file return 0; } else { treeId = 0; } return treeData_[treeId].rowCount(); }
bool WModelIndex::operator< (const WModelIndex& i2) const { const WModelIndex& i1 = *this; if (!i1.isValid()) return i2.isValid(); else if (!i2.isValid()) return false; else if (i1 == i2) return false; else if (i1.model() != i2.model()) { LOG_ERROR("comparing indexes from different models are you?"); return false; } int i1Depth = i1.depth(); int i2Depth = i2.depth(); unsigned e = std::min(i1Depth, i2Depth); WModelIndex a1 = i1.ancestor(i1Depth - e); WModelIndex a2 = i2.ancestor(i2Depth - e); if (a1 == a2) return i1Depth < i2Depth; for (unsigned i = e; i > 0; --i) { WModelIndex p1 = a1.parent(); WModelIndex p2 = a2.parent(); if (p1 == p2) { if (a1.row() < a2.row()) return true; else if (a1.row() > a2.row()) return false; else if (a1.column() < a2.column()) return true; else return false; } a1 = p1; a2 = p2; } return false; // unreachable code }
WFlags<ItemFlag> ChannelsModel::flags(const WModelIndex &index) const { if (index.column() == 3) { return Wt::ItemIsUserCheckable; } return 0; // return WFlags<ItemFlag>(); }
WModelIndex WSortFilterProxyModel::parent(const WModelIndex& index) const { if (index.isValid()) { Item *parentItem = parentItemFromIndex(index); return mapFromSource(parentItem->sourceIndex_); } else return WModelIndex(); }
boost::any ChannelsModel::data(const WModelIndex & index, int role) const { if (role == Wt::DisplayRole || role == Wt::EditRole || role == ToolTipRole || CheckStateRole) { switch (index.column()) { case 0: return m_availableChannels->at(index.row())->getName(); case 1: return m_availableChannels->at(index.row())->getDescription(); case 2: return m_availableChannels->at(index.row())->getRadius(); case 3: { // WCheckBox *Check; // Check = new WCheckBox(/*dynamic_cast<WContainerWidget*>(WObject::parent())*/); for (int i=0;i<m_subscribedChannels->size();i++) { if (m_subscribedChannels->at(i)==m_availableChannels->at(index.row())) { // Check->setChecked(true); // return boost::any(Check); if (role == Wt::CheckStateRole) return true; return ""; } } // return *Check; if (role == Wt::CheckStateRole) return false; return ""; } default: return "undefined"; } return "indefined"; } else { return boost::any(); } }
WModelIndex GitModel::index(int row, int column, const WModelIndex& parent) const { int parentId; // the top-level parent has id=0. if (!parent.isValid()) parentId = 0; else { // the internal id of the parent identifies the grand parent int grandParentId = parent.internalId(); // lookup the parent id for the parent himself, based on grand parent // and child-index (=row) within the grand parent parentId = getTreeId(grandParentId, parent.row()); } return createIndex(row, column, parentId); }