summaryrefslogtreecommitdiffstats
path: root/gui/pages/OtherLogsPage.cpp
diff options
context:
space:
mode:
authorJan Dalheimer <jan@dalheimer.de>2014-07-12 17:58:23 +0200
committerPetr Mrázek <peterix@gmail.com>2014-07-12 23:31:05 +0200
commit5c4384235989b16d6931cc0cfa26dd192af68b96 (patch)
tree90e9fa1b758c97302726e01882e9c7c914426182 /gui/pages/OtherLogsPage.cpp
parentaba1f89e2abfd596eb01c674d1b2deee3bdc1047 (diff)
downloadMultiMC-5c4384235989b16d6931cc0cfa26dd192af68b96.tar
MultiMC-5c4384235989b16d6931cc0cfa26dd192af68b96.tar.gz
MultiMC-5c4384235989b16d6931cc0cfa26dd192af68b96.tar.lz
MultiMC-5c4384235989b16d6931cc0cfa26dd192af68b96.tar.xz
MultiMC-5c4384235989b16d6931cc0cfa26dd192af68b96.zip
Add a new page that can show all sorts of logs
Diffstat (limited to 'gui/pages/OtherLogsPage.cpp')
-rw-r--r--gui/pages/OtherLogsPage.cpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/gui/pages/OtherLogsPage.cpp b/gui/pages/OtherLogsPage.cpp
new file mode 100644
index 00000000..3ea1f170
--- /dev/null
+++ b/gui/pages/OtherLogsPage.cpp
@@ -0,0 +1,122 @@
+#include "OtherLogsPage.h"
+#include "ui_OtherLogsPage.h"
+
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "gui/GuiUtil.h"
+#include "logic/RecursiveFileSystemWatcher.h"
+#include "logic/BaseInstance.h"
+
+OtherLogsPage::OtherLogsPage(BaseInstance *instance, QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::OtherLogsPage),
+ m_instance(instance),
+ m_watcher(new RecursiveFileSystemWatcher(this))
+{
+ ui->setupUi(this);
+ connect(m_watcher, &RecursiveFileSystemWatcher::filesChanged, [this]()
+ {
+ ui->selectLogBox->clear();
+ ui->selectLogBox->addItems(m_watcher->files());
+ ui->selectLogBox->addItem(tr("&Other"), true);
+ if (m_currentFile.isNull())
+ {
+ ui->selectLogBox->setCurrentIndex(-1);
+ }
+ else
+ {
+ const int index = ui->selectLogBox->findText(m_currentFile);
+ ui->selectLogBox->setCurrentIndex(-1);
+ }
+ });
+}
+
+OtherLogsPage::~OtherLogsPage()
+{
+ delete ui;
+}
+
+void OtherLogsPage::opened()
+{
+ m_watcher->enable();
+}
+void OtherLogsPage::closed()
+{
+ m_watcher->disable();
+}
+
+void OtherLogsPage::on_selectLogBox_currentIndexChanged(const int index)
+{
+ QString file;
+ if (index != -1)
+ {
+ if (ui->selectLogBox->itemData(index).isValid())
+ {
+ file = QFileDialog::getOpenFileName(this, tr("Open log file"), m_instance->minecraftRoot(), tr("*.log;;*.txt;;*"));
+ }
+ else
+ {
+ file = ui->selectLogBox->itemText(index);
+ }
+ }
+
+ if (file.isEmpty() || !QFile::exists(file))
+ {
+ m_currentFile = QString();
+ setControlsEnabled(false);
+ }
+ else
+ {
+ m_currentFile = file;
+ on_btnReload_clicked();
+ setControlsEnabled(true);
+ }
+}
+
+void OtherLogsPage::on_btnReload_clicked()
+{
+ QFile file(m_currentFile);
+ if (!file.open(QFile::ReadOnly))
+ {
+ setControlsEnabled(false);
+ ui->btnReload->setEnabled(true); // allow reload
+ m_currentFile = QString();
+ QMessageBox::critical(this, tr("Error"), tr("Unable to open %1 for reading: %2").arg(m_currentFile, file.errorString()));
+ }
+ else
+ {
+ ui->text->setPlainText(QString::fromUtf8(file.readAll()));
+ }
+}
+
+void OtherLogsPage::on_btnPaste_clicked()
+{
+ GuiUtil::uploadPaste(ui->text->toPlainText(), this);
+}
+void OtherLogsPage::on_btnCopy_clicked()
+{
+ GuiUtil::setClipboardText(ui->text->toPlainText());
+}
+void OtherLogsPage::on_btnDelete_clicked()
+{
+ if (QMessageBox::question(this, tr("Delete"), tr("Do you really want to delete %1?").arg(m_currentFile), QMessageBox::Yes, QMessageBox::No)
+ == QMessageBox::No)
+ {
+ return;
+ }
+ QFile file(m_currentFile);
+ if (!file.remove())
+ {
+ QMessageBox::critical(this, tr("Error"), tr("Unable to delete %1: %2").arg(m_currentFile, file.errorString()));
+ }
+}
+
+void OtherLogsPage::setControlsEnabled(const bool enabled)
+{
+ ui->btnReload->setEnabled(enabled);
+ ui->btnDelete->setEnabled(enabled);
+ ui->btnCopy->setEnabled(enabled);
+ ui->btnPaste->setEnabled(enabled);
+ ui->text->setEnabled(enabled);
+}