void EditDialog::importData() { // Get list of supported image file formats to include them in the file dialog filter QString image_formats; QList<QByteArray> image_formats_list = QImageReader::supportedImageFormats(); for(int i=0;i<image_formats_list.size();++i) image_formats.append(QString("*.%1 ").arg(QString::fromUtf8(image_formats_list.at(i)))); QString fileName = QFileDialog::getOpenFileName( this, tr("Choose a file"), PreferencesDialog::getSettingsValue("db", "defaultlocation").toString(), tr("Text files(*.txt);;Image files(%1);;All files(*)").arg(image_formats)); if(QFile::exists(fileName)) { QFile file(fileName); if(file.open(QIODevice::ReadOnly)) { QByteArray d = file.readAll(); hexEdit->setData(d); ui->editorText->setPlainText(d); checkDataType(); file.close(); } } }
void EditDialog::importData() { // Get list of supported image file formats to include them in the file dialog filter QString image_formats; QList<QByteArray> image_formats_list = QImageReader::supportedImageFormats(); for(int i=0;i<image_formats_list.size();++i) image_formats.append(QString("*.%1 ").arg(QString::fromUtf8(image_formats_list.at(i)))); QString fileName = FileDialog::getOpenFileName( this, tr("Choose a file") #ifndef Q_OS_MAC // Filters on OS X are buggy , tr("Text files(*.txt);;Image files(%1);;All files(*)").arg(image_formats) #endif ); if(QFile::exists(fileName)) { QFile file(fileName); if(file.open(QIODevice::ReadOnly)) { QByteArray d = file.readAll(); hexEdit->setData(d); ui->editorText->setPlainText(d); checkDataType(); file.close(); } } }
void EditDialog::clearData() { ui->editorText->clear(); ui->editorImage->clear(); hexEdit->setData(QByteArray()); checkDataType(); }
void EditDialog::editTextChanged() { if(ui->editorText->hasFocus()) { hexEdit->setData(ui->editorText->toPlainText().toUtf8()); checkDataType(); } }
void EditDialog::reset() { curRow = -1; curCol = -1; ui->editorText->clear(); ui->editorText->setFocus(); ui->editorImage->clear(); hexEdit->setData(QByteArray()); oldData = ""; checkDataType(); }
void EditDialog::loadText(const QByteArray& data, int row, int col) { curRow = row; curCol = col; oldData = data; // Load data QString textData = QString::fromUtf8(data.constData(), data.size()); ui->editorText->setPlainText(textData); hexEdit->setData(data); // Ensure the newly loaded data is all selected in the Edit Cell dock/win ui->editorText->selectAll(); // Update the cell data information checkDataType(); }
void EditDialog::loadText(const QByteArray& data, int row, int col) { curRow = row; curCol = col; oldData = data; QString textData = QString::fromUtf8(data.constData(), data.size()); ui->editorText->setPlainText(textData); ui->editorText->setFocus(); ui->editorText->selectAll(); hexEdit->setData(data); // Assume it's binary data and only call checkDatyType afterwards. This means the correct input widget is selected here in all cases // but once the user changed it to text input it will stay there. ui->editorStack->setCurrentIndex(1); checkDataType(); }
// Called when the user manually changes the "Mode" drop down combobox void EditDialog::editModeChanged(int newMode) { ui->buttonIndent->setEnabled(newMode == JsonEditor || newMode == XmlEditor); setStackCurrentIndex(newMode); // * If the dataSource is the text buffer, the data is always text * switch (dataSource) { case TextBuffer: switch (newMode) { case TextEditor: // Switching to the text editor // Nothing to do, as the text is already in the text buffer break; case JsonEditor: // Switching to one of the Scintilla editor modes case XmlEditor: setDataInBuffer(ui->editorText->toPlainText().toUtf8(), SciBuffer); break; case HexEditor: // Switching to the hex editor // Convert the text widget buffer for the hex widget // The hex widget buffer is now the main data source setDataInBuffer(removedBom + ui->editorText->toPlainText().toUtf8(), HexBuffer); break; case ImageViewer: // Clear any image from the image viewing widget ui->editorImage->setPixmap(QPixmap(0,0)); break; } break; case HexBuffer: // * If the dataSource is the hex buffer, the contents could be anything // so we just pass it to our loadData() function to handle * // Note that we have already set the editor, as loadData() relies on it // being current // Load the data into the appropriate widget, as done by loadData() loadData(hexEdit->data()); break; case SciBuffer: switch (newMode) { case TextEditor: // Switching to the text editor // Convert the text widget buffer for the JSON widget setDataInBuffer(sciEdit->text().toUtf8(), TextBuffer); break; case HexEditor: // Switching to the hex editor // Convert the text widget buffer for the hex widget setDataInBuffer(sciEdit->text().toUtf8(), HexBuffer); break; case ImageViewer: { // When SVG format, load the image, else clear it. QByteArray data = sciEdit->text().toUtf8(); dataType = checkDataType(data); if (dataType == SVG) { QImage img; if (img.loadFromData(data)) ui->editorImage->setPixmap(QPixmap::fromImage(img)); else // Clear any image from the image viewing widget ui->editorImage->setPixmap(QPixmap(0,0)); } } break; case JsonEditor: // Switching to the JSON editor case XmlEditor: // Switching to the XML editor // The text is already in the Sci buffer but we need to perform the necessary formatting. setDataInBuffer(sciEdit->text().toUtf8(), SciBuffer); break; } } }
// Loads data from a cell into the Edit Cell window void EditDialog::loadData(const QByteArray& data) { QImage img; QString textData; // Clear previously removed BOM removedBom.clear(); // Determine the data type, saving that info in the class variable dataType = checkDataType(data); // Get the current editor mode (eg text, hex, image, json or xml mode) int editMode = ui->comboMode->currentIndex(); // Data type specific handling switch (dataType) { case Null: // Set enabled any of the text widgets ui->editorText->setEnabled(true); sciEdit->setEnabled(true); switch (editMode) { case TextEditor: // The text widget buffer is now the main data source dataSource = TextBuffer; // Empty the text editor contents, then enable text editing ui->editorText->clear(); break; case JsonEditor: case XmlEditor: // The JSON widget buffer is now the main data source dataSource = SciBuffer; // Empty the text editor contents, then enable text editing sciEdit->clear(); break; case HexEditor: // The hex widget buffer is now the main data source dataSource = HexBuffer; // Load the Null into the hex editor hexEdit->setData(data); break; case ImageViewer: // The hex widget buffer is now the main data source dataSource = HexBuffer; // Clear any image from the image viewing widget ui->editorImage->setPixmap(QPixmap(0,0)); // Load the Null into the hex editor hexEdit->setData(data); break; } break; case Text: case JSON: // Can be stored in any widget, except the ImageViewer switch (editMode) { case TextEditor: setDataInBuffer(data, TextBuffer); break; case JsonEditor: case XmlEditor: setDataInBuffer(data, SciBuffer); break; case HexEditor: setDataInBuffer(data, HexBuffer); break; case ImageViewer: // The image viewer cannot hold data nor display text. // Clear any image from the image viewing widget ui->editorImage->setPixmap(QPixmap(0,0)); // Load the text into the text editor setDataInBuffer(data, TextBuffer); break; } break; case Image: // Image data is kept in the hex widget, mainly for safety. If we // stored it in the editorImage widget instead, it would be a pixmap // and there's no good way to restore that back to the original // (pristine) image data. eg image metadata would be lost setDataInBuffer(data, HexBuffer); // Update the display if in text edit or image viewer mode switch (editMode) { case TextEditor: // Disable text editing, and use a warning message as the contents ui->editorText->setText(QString("<i>" % tr("Image data can't be viewed in this mode.") % "<br/>" % tr("Try switching to Image or Binary mode.") % "</i>")); ui->editorText->setEnabled(false); break; case XmlEditor: case JsonEditor: // Disable text editing, and use a warning message as the contents sciEdit->setText(tr("Image data can't be viewed in this mode.") % '\n' % tr("Try switching to Image or Binary mode.")); sciEdit->setEnabled(false); break; case ImageViewer: // Load the image into the image viewing widget if (img.loadFromData(data)) { ui->editorImage->setPixmap(QPixmap::fromImage(img)); } break; } break; case SVG: // Set the XML data in any buffer or update image in image viewer mode switch (editMode) { case TextEditor: setDataInBuffer(data, TextBuffer); break; case JsonEditor: case XmlEditor: setDataInBuffer(data, SciBuffer); break; case HexEditor: setDataInBuffer(data, HexBuffer); break; case ImageViewer: // Set data in the XML (Sci) Buffer and load the SVG Image setDataInBuffer(data, SciBuffer); sciEdit->setLanguage(DockTextEdit::XML); // Load the image into the image viewing widget if (img.loadFromData(data)) { ui->editorImage->setPixmap(QPixmap::fromImage(img)); } break; } break; default: // The data seems to be general binary data, which is always loaded // into the hex widget (the only safe place for it) // Load the data into the hex buffer setDataInBuffer(data, HexBuffer); switch (editMode) { case TextEditor: // Disable text editing, and use a warning message as the contents ui->editorText->setText(QString("<i>" % tr("Binary data can't be viewed in this mode.") % "<br/>" % tr("Try switching to Binary mode.") % "</i>")); ui->editorText->setEnabled(false); break; case JsonEditor: case XmlEditor: // Disable text editing, and use a warning message as the contents sciEdit->setText(QString(tr("Binary data can't be viewed in this mode.") % '\n' % tr("Try switching to Binary mode."))); sciEdit->setEnabled(false); break; case ImageViewer: // Clear any image from the image viewing widget ui->editorImage->setPixmap(QPixmap(0,0)); break; } } }