[1058] | 1 | #include "xmltoolsinterfacecommandpreview.h"
|
---|
| 2 | #include "ui_xmltoolsinterfacecommandpreview.h"
|
---|
| 3 |
|
---|
| 4 | XmlToolsInterfaceCommandPreview::XmlToolsInterfaceCommandPreview(const QString ¤tFileLocation, const QString &previewFileLocation, QWidget *parent) :
|
---|
| 5 | QMainWindow(parent),
|
---|
| 6 | ui(new Ui::XmlToolsInterfaceCommandPreview)
|
---|
| 7 | {
|
---|
| 8 | ui->setupUi(this);
|
---|
| 9 | this->setAttribute(Qt::WA_DeleteOnClose, true); //destroy itself once finished.
|
---|
| 10 |
|
---|
| 11 | QFile currentFile(currentFileLocation);
|
---|
| 12 | currentFile.open(QIODevice::ReadOnly);
|
---|
| 13 |
|
---|
| 14 | this->currentText = currentFile.readAll();
|
---|
| 15 |
|
---|
| 16 | ui->teCurrentFileText->setText(this->currentText);
|
---|
| 17 |
|
---|
| 18 | QFile previewFile(previewFileLocation);
|
---|
| 19 | previewFile.open(QIODevice::ReadOnly);
|
---|
| 20 |
|
---|
| 21 | this->previewText = previewFile.readAll();
|
---|
| 22 |
|
---|
| 23 | ui->tePreviewFileText->setText(this->previewText);
|
---|
| 24 |
|
---|
[1093] | 25 | highlighterCurrentFile.setDocument(ui->teCurrentFileText->document());
|
---|
| 26 | highlighterPreviewFile.setDocument(ui->tePreviewFileText->document());
|
---|
[1058] | 27 |
|
---|
| 28 | previewFile.close();
|
---|
| 29 | currentFile.close();
|
---|
| 30 |
|
---|
| 31 | // Split and trim text of current and preview file
|
---|
| 32 | this->currentTextRows = this->currentText.split("\n");
|
---|
| 33 | this->previewTextRows = this->previewText.split("\n");
|
---|
| 34 |
|
---|
| 35 | for(QString ¤tTextRow : this->currentTextRows){
|
---|
| 36 | currentTextRow = currentTextRow.trimmed();
|
---|
| 37 | }
|
---|
| 38 | for(QString &previewTextRow : this->previewTextRows){
|
---|
| 39 | previewTextRow = previewTextRow.trimmed();
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 |
|
---|
| 43 | QString currentTextRowNumbers;
|
---|
| 44 | QString previewTextRowNumbers;
|
---|
| 45 |
|
---|
| 46 | for(int i=0; i<this->currentTextRows.size(); i++){
|
---|
| 47 | currentTextRowNumbers += QString::number(i);
|
---|
| 48 | if(i < this->currentTextRows.size()-1){
|
---|
| 49 | currentTextRowNumbers += "\n";
|
---|
| 50 | }
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 | for(int i=0; i<this->previewTextRows.size(); i++){
|
---|
| 54 | previewTextRowNumbers += QString::number(i);
|
---|
| 55 | if(i < this->previewTextRows.size()-1){
|
---|
| 56 | previewTextRowNumbers += "\n";
|
---|
| 57 | }
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | // Create line numbers QTextEdits
|
---|
| 61 | this->lineNumberDisplayCurrentFile = new LineNumberDisplay(ui->teCurrentFileText,this);
|
---|
| 62 | this->lineNumberDisplayPreviewFile = new LineNumberDisplay(ui->tePreviewFileText,this);
|
---|
| 63 |
|
---|
| 64 | // Make line numbers background transparent (http://www.qtcentre.org/threads/12148-how-QTextEdit-transparent-to-his-parent-window)
|
---|
| 65 | this->lineNumberDisplayCurrentFile->viewport()->setAutoFillBackground(false);
|
---|
| 66 | this->lineNumberDisplayPreviewFile->viewport()->setAutoFillBackground(false);
|
---|
| 67 |
|
---|
| 68 | // Add line numbers (at beginning of the horizontal layout)
|
---|
| 69 | this->ui->hlCurrentFileText->insertWidget(0,lineNumberDisplayCurrentFile);
|
---|
| 70 | this->ui->hlPreviewFileText->insertWidget(0,lineNumberDisplayPreviewFile);
|
---|
| 71 |
|
---|
| 72 | // Save the default background color (OS dependent)
|
---|
| 73 | this->textEditDefaultBackgroundColor = QTextCursor(this->lineNumberDisplayCurrentFile->document()).charFormat().background();
|
---|
| 74 |
|
---|
| 75 | highlightDifferences();
|
---|
| 76 |
|
---|
| 77 | // Vertical scrollbars
|
---|
| 78 | connect(ui->teCurrentFileText->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarMoved(int)));
|
---|
| 79 | connect(ui->tePreviewFileText->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarMoved(int)));
|
---|
| 80 |
|
---|
| 81 | // Horizontal scrollbars
|
---|
| 82 | connect(ui->teCurrentFileText->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(horizontalScrollbarMoved(int)));
|
---|
| 83 | connect(ui->tePreviewFileText->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(horizontalScrollbarMoved(int)));
|
---|
| 84 | }
|
---|
| 85 |
|
---|
| 86 | void XmlToolsInterfaceCommandPreview::verticalScrollbarMoved(int value)
|
---|
| 87 | {
|
---|
| 88 | if(ui->cbVerticalScrollbarsSynchronized->isChecked()){
|
---|
| 89 | if(ui->teCurrentFileText->verticalScrollBar()->sliderPosition() != value){
|
---|
| 90 | ui->teCurrentFileText->verticalScrollBar()->setSliderPosition(value);
|
---|
| 91 | }
|
---|
| 92 | else{
|
---|
| 93 | ui->tePreviewFileText->verticalScrollBar()->setSliderPosition(value);
|
---|
| 94 | }
|
---|
| 95 | }
|
---|
| 96 | }
|
---|
| 97 |
|
---|
| 98 | void XmlToolsInterfaceCommandPreview::horizontalScrollbarMoved(int value)
|
---|
| 99 | {
|
---|
| 100 | if(ui->cbHorizontalScrollbarsSynchronized->isChecked()){
|
---|
| 101 | if(ui->teCurrentFileText->horizontalScrollBar()->sliderPosition() != value){
|
---|
| 102 | ui->teCurrentFileText->horizontalScrollBar()->setSliderPosition(value);
|
---|
| 103 | }
|
---|
| 104 | else{
|
---|
| 105 | ui->tePreviewFileText->horizontalScrollBar()->setSliderPosition(value);
|
---|
| 106 | }
|
---|
| 107 | }
|
---|
| 108 | }
|
---|
| 109 |
|
---|
| 110 | void XmlToolsInterfaceCommandPreview::on_cbWrapText_toggled(bool checked)
|
---|
| 111 | {
|
---|
| 112 | QTextEdit::LineWrapMode wrappingMode;
|
---|
| 113 |
|
---|
| 114 | if(checked){
|
---|
| 115 | wrappingMode = QTextEdit::WidgetWidth;
|
---|
| 116 | this->lineNumberDisplayCurrentFile->hide();
|
---|
| 117 | this->lineNumberDisplayPreviewFile->hide();
|
---|
| 118 | }
|
---|
| 119 | else{
|
---|
| 120 | wrappingMode = QTextEdit::NoWrap;
|
---|
| 121 | this->lineNumberDisplayCurrentFile->show();
|
---|
| 122 | this->lineNumberDisplayPreviewFile->show();
|
---|
| 123 | }
|
---|
| 124 |
|
---|
| 125 | ui->teCurrentFileText->setLineWrapMode(wrappingMode);
|
---|
| 126 | ui->tePreviewFileText->setLineWrapMode(wrappingMode);
|
---|
| 127 | }
|
---|
| 128 |
|
---|
| 129 | void XmlToolsInterfaceCommandPreview::highlightDifferences(){
|
---|
| 130 |
|
---|
| 131 | QTextCharFormat fmt;
|
---|
| 132 | QTextCursor cursor;
|
---|
| 133 |
|
---|
| 134 | for(int i=0; i<currentTextRows.size(); i++){
|
---|
| 135 | if(i < this->previewTextRows.size()){
|
---|
| 136 | if(this->currentTextRows.at(i) != this->previewTextRows.at(i)){
|
---|
| 137 | fmt.setBackground(QColor(0xFFC864)); // orange color
|
---|
| 138 |
|
---|
| 139 | cursor = QTextCursor(ui->teCurrentFileText->document());
|
---|
| 140 | cursor.setPosition(ui->teCurrentFileText->document()->findBlockByLineNumber(i).position());
|
---|
| 141 | cursor.select(QTextCursor::LineUnderCursor);
|
---|
| 142 | cursor.setCharFormat(fmt);
|
---|
| 143 |
|
---|
| 144 | fmt.setBackground(Qt::yellow);
|
---|
| 145 |
|
---|
| 146 | cursor = QTextCursor(ui->tePreviewFileText->document());
|
---|
| 147 | cursor.setPosition(ui->tePreviewFileText->document()->findBlockByLineNumber(i).position());
|
---|
| 148 | cursor.select(QTextCursor::LineUnderCursor);
|
---|
| 149 | cursor.setCharFormat(fmt);
|
---|
| 150 | }
|
---|
| 151 | }
|
---|
| 152 | else{ // if we have more rows in the current file than in the preview file we highlight the the extra rows in the current file
|
---|
| 153 | fmt.setBackground(QColor(0xFFC864)); // orange color
|
---|
| 154 |
|
---|
| 155 | QTextCursor cursor(ui->teCurrentFileText->document());
|
---|
| 156 | cursor.setPosition(ui->teCurrentFileText->document()->findBlockByLineNumber(i).position());
|
---|
| 157 | cursor.select(QTextCursor::LineUnderCursor);
|
---|
| 158 | cursor.setCharFormat(fmt);
|
---|
| 159 | }
|
---|
| 160 | }
|
---|
| 161 |
|
---|
| 162 | // if we have less rows in the current file than in the preview file we highlight the the extra rows in the preview file
|
---|
| 163 | if(this->currentTextRows.size() < this->previewTextRows.size()){
|
---|
| 164 | for(int i=this->currentTextRows.size(); i<this->previewTextRows.size(); i++){
|
---|
| 165 | fmt.setBackground(Qt::yellow);
|
---|
| 166 |
|
---|
| 167 | cursor = QTextCursor(ui->tePreviewFileText->document());
|
---|
| 168 | cursor.setPosition(ui->tePreviewFileText->document()->findBlockByLineNumber(i).position());
|
---|
| 169 | cursor.select(QTextCursor::LineUnderCursor);
|
---|
| 170 | cursor.setCharFormat(fmt);
|
---|
| 171 | }
|
---|
| 172 | }
|
---|
| 173 |
|
---|
[1093] | 174 | highlighterPreviewFile.rehighlight();
|
---|
| 175 | highlighterCurrentFile.rehighlight();
|
---|
[1058] | 176 | }
|
---|
| 177 |
|
---|
| 178 | XmlToolsInterfaceCommandPreview::~XmlToolsInterfaceCommandPreview()
|
---|
| 179 | {
|
---|
| 180 | delete this->lineNumberDisplayCurrentFile;
|
---|
| 181 | delete this->lineNumberDisplayPreviewFile;
|
---|
| 182 | delete this->ui;
|
---|
| 183 | }
|
---|
| 184 |
|
---|
| 185 |
|
---|
| 186 |
|
---|
| 187 | void XmlToolsInterfaceCommandPreview::on_checkBox_toggled(bool checked)
|
---|
| 188 | {
|
---|
| 189 | if(checked){
|
---|
| 190 | highlightDifferences();
|
---|
| 191 | }
|
---|
| 192 | else{
|
---|
| 193 | QTextCursor cursor(ui->teCurrentFileText->document());
|
---|
| 194 | QTextCharFormat fmt;
|
---|
| 195 | fmt.setBackground(this->textEditDefaultBackgroundColor);
|
---|
| 196 |
|
---|
| 197 | cursor.select(QTextCursor::Document);
|
---|
| 198 | cursor.setCharFormat(fmt);
|
---|
| 199 |
|
---|
| 200 | cursor = QTextCursor(ui->tePreviewFileText->document());
|
---|
| 201 | cursor.select(QTextCursor::Document);
|
---|
| 202 | cursor.setCharFormat(fmt);
|
---|
| 203 | }
|
---|
| 204 | }
|
---|