void RKVarEditMetaModel::setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to) { RK_TRACE (EDITOR); if ((!offset.isValid ()) || text.isEmpty ()) return; int top = offset.row (); int left = offset.column (); int bottom = top + text.numRows () - 1; int right = left + text.numColumns () - 1; if (confine_to.isValid ()) { if (confine_to.top () > top) return; // can't confine top-left. Should have been set by caller if (confine_to.left () > left) return; bottom = qMin (confine_to.bottom (), bottom); right = qMin (confine_to.right (), right); } // TODO: some models might not support column addition. if (right >= trueCols ()) data_model->doInsertColumns (trueCols (), right - trueCols () + 1); RK_ASSERT (right < data_model->objects.size ()); bottom = qMin (bottom, trueRows () - 1); int tcol = 0; for (int col = left; col <= right; ++col) { int trow = 0; RKVariable* var = data_model->objects[col]; var->lockSyncing (true); for (int row = top; row <= bottom; ++row) { setData (index (row, col), text.getText (trow, tcol), Qt::EditRole); ++trow; } var->lockSyncing (false); ++tcol; } }
void CostMatrixTableView::onCopyAction() { // Selection QItemSelection itemSelection = this->selectionModel()->selection(); if (itemSelection.isEmpty()) return; QItemSelectionRange itemSelectionRange = this->selectionModel()->selection().first(); int selectionTop = itemSelectionRange.top(); int selectionLeft = itemSelectionRange.left(); int selectionBottom = itemSelectionRange.bottom(); int selectionRight = itemSelectionRange.right(); // Copy text QString copyText; for (int i=selectionTop; i<=selectionBottom; ++i) { if (i != selectionTop) copyText += "\r\n"; for (int j=selectionLeft; j<=selectionRight; ++j) { if (j != selectionLeft) copyText += "\t"; copyText += model()->data(model()->index(i, j), Qt::EditRole).toString(); } } // Copy to clipboard qApp->clipboard()->setText(copyText); }
void RKVarEditModel::setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to) { RK_TRACE (EDITOR); // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. Single cells will be set using setData() if ((!offset.isValid ()) || text.isEmpty ()) return; int top = offset.row (); int left = offset.column (); int bottom = top + text.numRows () - 1; int right = left + text.numColumns () - 1; if (confine_to.isValid ()) { if (confine_to.top () > top) return; // can't confine top-left. Should have been set by caller if (confine_to.left () > left) return; bottom = qMin (confine_to.bottom (), bottom); right = qMin (confine_to.right (), right); } // TODO: some models might not support column addition. if (right >= trueCols ()) doInsertColumns (objects.size (), right - trueCols () + 1); RK_ASSERT (right < trueCols ()); int current_rows = objects[0]->getLength (); if (bottom >= current_rows) insertRows (current_rows, bottom - current_rows + 1); int tcol = 0; for (int col = left; col <= right; ++col) { RKVariable* var = objects[col]; int trow = 0; for (int row = top; row <= bottom; ++row) { var->setText (row, text.getText (trow, tcol)); ++trow; } ++tcol; } }
/** Copies the current selection in the active table view into the system * clipboard. */ void MantidMatrix::copySelection() { QItemSelectionModel *selModel = activeView()->selectionModel(); QString s = ""; QString eol = applicationWindow()->endOfLine(); if (!selModel->hasSelection()) { QModelIndex index = selModel->currentIndex(); s = text(index.row(), index.column()); } else { QItemSelection sel = selModel->selection(); QListIterator<QItemSelectionRange> it(sel); if (!it.hasNext()) return; QItemSelectionRange cur = it.next(); int top = cur.top(); int bottom = cur.bottom(); int left = cur.left(); int right = cur.right(); for (int i = top; i <= bottom; i++) { for (int j = left; j < right; j++) s += text(i, j) + "\t"; s += text(i, right) + eol; } } // Copy text into the clipboard QApplication::clipboard()->setText(s.trimmed()); }
// Custom processing the Selection Changed in the Scene Graph model. Returns // TRUE if no further processing needed. bool ParticlesEditorSceneModelHelper::ProcessSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { int32 deselectedSize = deselected.size(); int32 selectedSize = selected.size(); if (selectedSize <= 0) { // De-selection happened - allow processing by caller. ParticlesEditorController::Instance()->CleanupSelectedNode(); return false; } // Determine whether the selected node belongs to Particle Editor. QItemSelectionRange selectedRange = selected.at(0); SceneGraphItem *selectedItem = static_cast<SceneGraphItem*>(selectedRange.topLeft().internalPointer()); if (ParticlesEditorController::Instance()->IsBelongToParticlesEditor(selectedItem)) { // Our one. Select and emit the appropriate event. ParticlesEditorController::Instance()->SetSelectedNode(selectedItem, true); return !ParticlesEditorController::Instance()->ShouldDisplayPropertiesInSceneEditor(selectedItem); } // Not ours. Cleanup the selected node and return control back to the caller. ParticlesEditorController::Instance()->CleanupSelectedNode(); return false; }
void Matrix::clearSelection() { if (d_view_type == ImageView) return; QItemSelectionModel *selModel = d_table_view->selectionModel(); if (!selModel || !selModel->hasSelection()) return; const QItemSelectionRange sel = selModel->selection()[0]; int startRow = sel.top(); int endRow = sel.bottom(); int startCol = sel.left(); int endCol = sel.right(); double *buffer = d_matrix_model->dataCopy(startRow, endRow, startCol, endCol); if (buffer){ d_undo_stack->push(new MatrixUndoCommand(d_matrix_model, Clear, startRow, endRow, startCol, endCol, buffer, tr("Clear Selection"))); emit modifiedWindow(this); modifiedData(this); } else if (ignoreUndo()){ d_matrix_model->clear(startRow, endRow, startCol, endCol); emit modifiedWindow(this); modifiedData(this); } }
RKTextMatrix RKVarEditMetaModel::getTextMatrix (const QItemSelectionRange& range) const { RK_TRACE (EDITOR); if ((!range.isValid ()) || data_model->objects.isEmpty ()) return RKTextMatrix (); // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); RKTextMatrix ret; int tcol = 0; for (int col = left; col <= right; ++col) { int trow = 0; for (int row = top; row <= bottom; ++row) { QVariant celldata = data (index (row, col), Qt::EditRole); if (!celldata.isValid ()) { RK_ASSERT (false); break; } ret.setText (trow, tcol, celldata.toString ()); ++trow; } ++tcol; } return ret; }
void MatrixValuesDialog::setMatrix(Matrix* m) { if (!m) return; matrix = m; commands->setText(m->formula()); commands->setContext(m); endCol->setValue(m->numCols()); endRow->setValue(m->numRows()); if (m->viewType() == Matrix::TableView){ QItemSelectionModel *selModel = m->selectionModel(); if (selModel->hasSelection()){ QItemSelectionRange selection = selModel->selection().first(); if (selection.width() > 1 || selection.height() > 1){ startCol->setValue(selection.left()+1); startRow->setValue(selection.top()+1); endCol->setValue(selection.right()+1); endRow->setValue(selection.bottom()+1); } } } }
QRegion PieView::visualRegionForSelection(const QItemSelection &selection) const { int ranges = selection.count(); if (ranges == 0) return QRect(); QRegion region; for (int i = 0; i < ranges; ++i) { QItemSelectionRange range = selection.at(i); for (int row = range.top(); row <= range.bottom(); ++row) { for (int col = range.left(); col <= range.right(); ++col) { QModelIndex index = model()->index(row, col, rootIndex()); region += visualRect(index); } } } return region; }
bool KCSheetModel::setData(const QItemSelectionRange &range, const QVariant &value, int role) { const KCRegion region(toRange(range), d->sheet); KCCellStorage *const storage = d->sheet->cellStorage(); switch (role) { case CommentRole: storage->setComment(region, value.toString()); break; case ConditionRole: storage->setConditions(region, value.value<KCConditions>()); break; case FusionedRangeRole: // TODO // storage->setFusion(region, value.value<bool>()); break; case LockedRangeRole: // TODO // storage->setMatrix(region, value.value<bool>()); break; case NamedAreaRole: storage->emitInsertNamedArea(region, value.toString()); break; case SourceRangeRole: storage->setBinding(region, value.value<KCBinding>()); break; case StyleRole: // TODO // storage->setStyle(region, value.value<KCStyle>()); break; case TargetRangeRole: storage->setDatabase(region, value.value<Database>()); break; case ValidityRole: storage->setValidity(region, value.value<KCValidity>()); break; default: return false; } emit dataChanged(range.topLeft(), range.bottomRight()); return true; }
void RKMatrixInput::copy () { RK_TRACE (PLUGIN); QItemSelectionRange range = display->getSelectionBoundaries (); if (!range.isValid ()) return; RKTextMatrix ret; for (int col = range.left (); col <= range.right (); ++col) { for (int row = range.top (); row <= range.bottom (); ++row) { ret.setText (row - range.top (), col - range.left (), cellValue (row, col)); } } ret.copyToClipboard (); }
void RKMatrixInput::paste () { RK_TRACE (PLUGIN); int left = 0; int top = 0; QItemSelectionRange range = display->getSelectionBoundaries (); if (range.isValid ()) { left = range.left (); top = range.top (); } RKTextMatrix pasted = RKTextMatrix::matrixFromClipboard (); int height = allow_user_resize_rows ? pasted.numRows () : qMin (pasted.numRows (), row_count->intValue () - top); int width = allow_user_resize_columns ? pasted.numColumns () : qMin (pasted.numColumns (), column_count->intValue () - left); updating_tsv_data = true; for (int c = 0; c < width; ++c) { for (int r = 0; r < height; ++r) { setCellValue (r + top, c + left, pasted.getText (r, c)); } } updating_tsv_data = false; updateAll (); }
void RKMatrixInput::clearSelectedCells () { RK_TRACE (PLUGIN); QItemSelectionRange range = display->getSelectionBoundaries (); if (!range.isValid ()) return; updating_tsv_data = true; for (int col = range.left (); col <= range.right (); ++col) { for (int row = range.top (); row <= range.bottom (); ++row) { setCellValue (row, col, QString ()); } } updating_tsv_data = false; updateAll (); }
void RKVarEditModel::blankRange (const QItemSelectionRange& range) { RK_TRACE (EDITOR); if ((!range.isValid ()) || objects.isEmpty ()) return; // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); for (int col = left; col <= right; ++col) { RKVariable* var = objects[col]; for (int row = top; row <= bottom; ++row) { var->setText (row, QString ()); } } }
RKTextMatrix RKVarEditModel::getTextMatrix (const QItemSelectionRange& range) const { RK_TRACE (EDITOR); if ((!range.isValid ()) || objects.isEmpty ()) return RKTextMatrix (); // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); RKTextMatrix ret; int tcol = 0; for (int col = left; col <= right; ++col) { QString* data = objects[col]->getCharacter (top, bottom); RK_ASSERT (data); ret.setColumn (tcol, data, bottom - top + 1); delete [] data; ++tcol; } return ret; }
bool sortQItemSelectionAsc(const QItemSelectionRange& i, const QItemSelectionRange& j) { return i.bottom() < j.bottom(); }
bool CompareSelectionRanges(const QItemSelectionRange& a, const QItemSelectionRange& b) { return b.bottom() < a.bottom(); }
void Matrix::pasteSelection() { if (d_view_type == ImageView) return; QString text = QApplication::clipboard()->text(); if (text.isEmpty()) return; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QStringList linesList = text.split(applicationWindow()->endOfLine(), QString::SkipEmptyParts); int rows = linesList.size(); if (!rows) return; int cols = linesList[0].split("\t").count(); for (int i = 1; i < rows; i++){ int aux = linesList[i].split("\t").count(); if (aux > cols) cols = aux; } int topRow = 0, leftCol = 0; QItemSelectionModel *selModel = d_table_view->selectionModel(); if (selModel->hasSelection()){ QItemSelectionRange sel = selModel->selection()[0]; topRow = sel.top(); leftCol = sel.left(); } int oldRows = numRows(); int bottomRow = topRow + rows - 1; if (bottomRow > oldRows - 1) bottomRow = oldRows - 1; int oldCols = numCols(); int rightCol = leftCol + cols - 1; if (rightCol > oldCols - 1) rightCol = oldCols - 1; double *clipboardBuffer = (double *)malloc(rows*cols*sizeof(double)); if (!clipboardBuffer){ QMessageBox::critical(this, tr("QtiPlot") + " - " + tr("Memory Allocation Error"), tr("Not enough memory, operation aborted!")); QApplication::restoreOverrideCursor(); return; } QLocale locale = this->locale(); //Better use QLocale::system() ?? int cell = 0; for(int i = 0; i < rows; i++){ QStringList cells = linesList[i].split("\t"); int size = cells.count(); for(int j = 0; j<cols; j++){ if (j >= size){ clipboardBuffer[cell++] = GSL_NAN; continue; } bool numeric = true; double value = locale.toDouble(cells[j], &numeric); if (numeric) clipboardBuffer[cell++] = value; else clipboardBuffer[cell++] = GSL_NAN; } } QApplication::restoreOverrideCursor(); double *backupBuffer = d_matrix_model->dataCopy(topRow, bottomRow, leftCol, rightCol); if (backupBuffer){ d_undo_stack->push(new MatrixPasteCommand(d_matrix_model, topRow, bottomRow, leftCol, rightCol, clipboardBuffer, rows, cols, backupBuffer, oldRows, oldCols, tr("Paste"))); emit modifiedWindow(this); } else if (ignoreUndo()){ d_matrix_model->pasteData(clipboardBuffer, topRow, leftCol, rows, cols); emit modifiedWindow(this); } }