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 ()); } } }
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; }
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); } else if (ignoreUndo()){ d_matrix_model->clear(startRow, endRow, startCol, endCol); emit modifiedWindow(this); } }
void MatrixValuesDialog::setMatrix(Matrix* m) { if (!m) return; matrix = m; commands->setText(m->formula()); 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); } } } }
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 (); }
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; }
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); } }