aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-qt5/desktop-utils/lumina-textedit/MainUI.cpp42
-rw-r--r--src-qt5/desktop-utils/lumina-textedit/MainUI.h1
2 files changed, 37 insertions, 6 deletions
diff --git a/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp b/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp
index 1dd8cd2f..613fad04 100644
--- a/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp
+++ b/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp
@@ -16,6 +16,7 @@
#include <QDir>
#include <QKeySequence>
#include <QTimer>
+#include <QMessageBox>
MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){
ui->setupUi(this);
@@ -156,14 +157,23 @@ void MainUI::OpenFile(QString file){
files << file;
}
for(int i=0; i<files.length(); i++){
- PlainTextEditor *edit = new PlainTextEditor(settings, this);
+ PlainTextEditor *edit = 0;
+ //Try to see if this file is already opened first
+ for(int j=0; j<ui->tabWidget->count(); j++){
+ PlainTextEditor *tmp = static_cast<PlainTextEditor*>(ui->tabWidget->widget(j));
+ if(tmp->currentFile()==files[i]){ edit = tmp; break; }
+ }
+ if(edit ==0){
+ //New file - need to create a new editor for it
+ edit = new PlainTextEditor(settings, this);
connect(edit, SIGNAL(FileLoaded(QString)), this, SLOT(updateTab(QString)) );
connect(edit, SIGNAL(UnsavedChanges(QString)), this, SLOT(updateTab(QString)) );
connect(edit, SIGNAL(statusTipChanged()), this, SLOT(updateStatusTip()) );
- ui->tabWidget->addTab(edit, files[i].section("/",-1));
- edit->showLineNumbers(ui->actionLine_Numbers->isChecked());
- edit->setLineWrapMode( ui->actionWrap_Lines->isChecked() ? QPlainTextEdit::WidgetWidth : QPlainTextEdit::NoWrap);
- edit->setFocusPolicy(Qt::ClickFocus); //no "tabbing" into this widget
+ ui->tabWidget->addTab(edit, files[i].section("/",-1));
+ edit->showLineNumbers(ui->actionLine_Numbers->isChecked());
+ edit->setLineWrapMode( ui->actionWrap_Lines->isChecked() ? QPlainTextEdit::WidgetWidth : QPlainTextEdit::NoWrap);
+ edit->setFocusPolicy(Qt::ClickFocus); //no "tabbing" into this widget
+ }
ui->tabWidget->setCurrentWidget(edit);
edit->LoadFile(files[i]);
edit->setFocus();
@@ -270,7 +280,7 @@ void MainUI::tabClosed(int tab){
if(edit==0){ return; } //should never happen
if(edit->hasChange()){
//Verify if the user wants to lose any unsaved changes
-
+ if(QMessageBox::Yes != QMessageBox::question(this, tr("Lose Unsaved Changes?"), QString(tr("This file has unsaved changes.\nDo you want to close it anyway?\n\n%1")).arg(edit->currentFile()), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ){ return; }
}
ui->tabWidget->removeTab(tab);
edit->deleteLater();
@@ -352,3 +362,23 @@ PlainTextEditor *cur = currentEditor();
cur->find( ui->line_replace->text(), QTextDocument::FindCaseSensitively | QTextDocument::FindBackward);
}
}
+
+//=============
+// PROTECTED
+//=============
+void MainUI::closeEvent(QCloseEvent *ev){
+ //See if any of the open editors have unsaved changes first
+ QStringList unsaved;
+ for(int i=0; i<ui->tabWidget->count(); i++){
+ PlainTextEditor *tmp = static_cast<PlainTextEditor*>(ui->tabWidget->widget(i));
+ if(tmp->hasChange()){
+ unsaved << tmp->currentFile();
+ }
+ }
+ bool quitnow = unsaved.isEmpty();
+ if(!quitnow){
+ quitnow = (QMessageBox::Yes == QMessageBox::question(this, tr("Lose Unsaved Changes?"), QString(tr("There are unsaved changes.\nDo you want to close the editor anyway?\n\n%1")).arg(unsaved.join("\n")), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) );
+ }
+ if(quitnow){ QMainWindow::closeEvent(ev); }
+ else{ ev->ignore(); }
+}
diff --git a/src-qt5/desktop-utils/lumina-textedit/MainUI.h b/src-qt5/desktop-utils/lumina-textedit/MainUI.h
index 78eb5ad7..d80793b0 100644
--- a/src-qt5/desktop-utils/lumina-textedit/MainUI.h
+++ b/src-qt5/desktop-utils/lumina-textedit/MainUI.h
@@ -77,5 +77,6 @@ protected:
void resizeEvent(QResizeEvent *ev){
settings->setValue("lastSize", ev->size());
}
+ void closeEvent(QCloseEvent *ev);
};
#endif
bgstack15