Add a new page that can show all sorts of logs

This commit is contained in:
Jan Dalheimer
2014-07-12 17:58:23 +02:00
committed by Petr Mrázek
parent aba1f89e2a
commit 5c43842359
29 changed files with 622 additions and 146 deletions

View File

@ -21,25 +21,27 @@
class BasePage
{
public:
virtual ~BasePage(){};
virtual QString id() = 0;
virtual QString displayName() = 0;
virtual QIcon icon() = 0;
virtual ~BasePage(){}
virtual QString id() const = 0;
virtual QString displayName() const = 0;
virtual QIcon icon() const = 0;
virtual bool apply()
{
return true;
}
virtual bool shouldDisplay()
virtual bool shouldDisplay() const
{
return true;
}
virtual QString helpPage()
virtual QString helpPage() const
{
return QString();
}
virtual void opened()
{
}
virtual void closed()
{
}
int stackIndex = -1;
int listIndex = -1;

View File

@ -8,17 +8,17 @@
#include <QMessageBox>
#include "ui_InstanceSettingsPage.h"
QString InstanceSettingsPage::displayName()
QString InstanceSettingsPage::displayName() const
{
return tr("Settings");
}
QIcon InstanceSettingsPage::icon()
QIcon InstanceSettingsPage::icon() const
{
return QIcon::fromTheme("settings");
}
QString InstanceSettingsPage::id()
QString InstanceSettingsPage::id() const
{
return "settings";
}
@ -31,7 +31,7 @@ InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
loadSettings();
}
bool InstanceSettingsPage::shouldDisplay()
bool InstanceSettingsPage::shouldDisplay() const
{
return !m_instance->isRunning();
}

View File

@ -34,12 +34,12 @@ class InstanceSettingsPage : public QWidget, public BasePage
public:
explicit InstanceSettingsPage(BaseInstance *inst, QWidget *parent = 0);
virtual ~InstanceSettingsPage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual bool apply();
virtual QString helpPage() override { return "Instance-settings"; }
virtual bool shouldDisplay();
virtual QString helpPage() const override { return "Instance-settings"; }
virtual bool shouldDisplay() const;
private slots:
void on_javaDetectBtn_clicked();

View File

@ -49,22 +49,22 @@ LegacyJarModPage::~LegacyJarModPage()
delete ui;
}
QString LegacyJarModPage::displayName()
QString LegacyJarModPage::displayName() const
{
return tr("Jar Mods");
}
bool LegacyJarModPage::shouldDisplay()
bool LegacyJarModPage::shouldDisplay() const
{
return !m_inst->isRunning();
}
QIcon LegacyJarModPage::icon()
QIcon LegacyJarModPage::icon() const
{
return QIcon::fromTheme("plugin-red");
}
QString LegacyJarModPage::id()
QString LegacyJarModPage::id() const
{
return "jarmods";
}

View File

@ -34,11 +34,11 @@ public:
explicit LegacyJarModPage(LegacyInstance *inst, QWidget *parent = 0);
virtual ~LegacyJarModPage();
virtual QString displayName();
virtual QIcon icon();
virtual QString id();
virtual QString helpPage() override { return "Legacy-jar-mods"; };
virtual bool shouldDisplay();
virtual QString displayName() const;
virtual QIcon icon() const;
virtual QString id() const;
virtual QString helpPage() const override { return "Legacy-jar-mods"; }
virtual bool shouldDisplay() const;
private
slots:

View File

@ -2,17 +2,17 @@
#include <logic/LegacyInstance.h>
#include "ui_LegacyUpgradePage.h"
QString LegacyUpgradePage::displayName()
QString LegacyUpgradePage::displayName() const
{
return tr("Upgrade");
}
QIcon LegacyUpgradePage::icon()
QIcon LegacyUpgradePage::icon() const
{
return QIcon::fromTheme("checkupdate");
}
QString LegacyUpgradePage::id()
QString LegacyUpgradePage::id() const
{
return "upgrade";
}
@ -33,7 +33,7 @@ void LegacyUpgradePage::on_upgradeButton_clicked()
// now what?
}
bool LegacyUpgradePage::shouldDisplay()
bool LegacyUpgradePage::shouldDisplay() const
{
return !m_inst->isRunning();
}
}

View File

@ -33,11 +33,11 @@ class LegacyUpgradePage : public QWidget, public BasePage
public:
explicit LegacyUpgradePage(LegacyInstance *inst, QWidget *parent = 0);
virtual ~LegacyUpgradePage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString helpPage() override { return "Legacy-upgrade"; };
virtual bool shouldDisplay();
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual QString helpPage() const override { return "Legacy-upgrade"; }
virtual bool shouldDisplay() const;
private
slots:
void on_upgradeButton_clicked();

View File

@ -1,25 +1,23 @@
#include "LogPage.h"
#include <gui/dialogs/CustomMessageBox.h>
#include <gui/dialogs/ProgressDialog.h>
#include <logic/MinecraftProcess.h>
#include <QtGui/QIcon>
#include "ui_LogPage.h"
#include "logic/net/PasteUpload.h"
#include <QScrollBar>
#include <QtGui/QClipboard>
#include <QtGui/QDesktopServices>
QString LogPage::displayName()
#include <QIcon>
#include <QScrollBar>
#include "logic/MinecraftProcess.h"
#include "gui/GuiUtil.h"
QString LogPage::displayName() const
{
return tr("Minecraft Log");
}
QIcon LogPage::icon()
QIcon LogPage::icon() const
{
return QIcon::fromTheme("refresh");
}
QString LogPage::id()
QString LogPage::id() const
{
return "console";
}
@ -42,42 +40,19 @@ bool LogPage::apply()
return true;
}
bool LogPage::shouldDisplay()
bool LogPage::shouldDisplay() const
{
return m_process->instance()->isRunning();
}
void LogPage::on_btnPaste_clicked()
{
auto text = ui->text->toPlainText();
ProgressDialog dialog(this);
PasteUpload *paste = new PasteUpload(this, text);
dialog.exec(paste);
if (!paste->successful())
{
CustomMessageBox::selectable(this, "Upload failed", paste->failReason(),
QMessageBox::Critical)->exec();
}
else
{
QString link = paste->pasteLink();
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(link);
QDesktopServices::openUrl(link);
CustomMessageBox::selectable(
this, tr("Upload finished"),
tr("The <a href=\"%1\">link to the uploaded log</a> has been opened in the default browser and placed in your clipboard.")
.arg(link),
QMessageBox::Information)->exec();
}
delete paste;
GuiUtil::uploadPaste(ui->text->toPlainText(), this);
}
void LogPage::on_btnCopy_clicked()
{
auto text = ui->text->toPlainText();
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(text);
GuiUtil::setClipboardText(ui->text->toPlainText());
}
void LogPage::on_btnClear_clicked()

View File

@ -36,12 +36,12 @@ class LogPage : public QWidget, public BasePage
public:
explicit LogPage(MinecraftProcess *proc, QWidget *parent = 0);
virtual ~LogPage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual bool apply();
virtual QString helpPage() override { return "Minecraft-Log"; };
virtual bool shouldDisplay();
virtual QString helpPage() const override { return "Minecraft-Log"; }
virtual bool shouldDisplay() const;
private:
/**

View File

@ -33,17 +33,17 @@
#include "logic/Mod.h"
#include <logic/VersionFilterData.h>
QString ModFolderPage::displayName()
QString ModFolderPage::displayName() const
{
return m_displayName;
}
QIcon ModFolderPage::icon()
QIcon ModFolderPage::icon() const
{
return QIcon::fromTheme(m_iconName);
}
QString ModFolderPage::id()
QString ModFolderPage::id() const
{
return m_id;
}
@ -80,14 +80,14 @@ ModFolderPage::~ModFolderPage()
delete ui;
}
bool ModFolderPage::shouldDisplay()
bool ModFolderPage::shouldDisplay() const
{
if(m_inst)
return !m_inst->isRunning();
return true;
}
bool CoreModFolderPage::shouldDisplay()
bool CoreModFolderPage::shouldDisplay() const
{
if (ModFolderPage::shouldDisplay())
{

View File

@ -32,19 +32,26 @@ class ModFolderPage : public QWidget, public BasePage
Q_OBJECT
public:
explicit ModFolderPage(BaseInstance * inst, std::shared_ptr<ModList> mods, QString id, QString iconName,
QString displayName, QString helpPage = "" , QWidget *parent = 0);
explicit ModFolderPage(BaseInstance *inst, std::shared_ptr<ModList> mods, QString id,
QString iconName, QString displayName, QString helpPage = "",
QWidget *parent = 0);
virtual ~ModFolderPage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString helpPage() override { return m_helpName; };
virtual bool shouldDisplay();
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual QString helpPage() const override
{
return m_helpName;
}
virtual bool shouldDisplay() const;
protected:
bool eventFilter(QObject *obj, QEvent *ev);
bool modListFilter(QKeyEvent *ev);
protected:
BaseInstance * m_inst;
BaseInstance *m_inst;
private:
Ui::ModFolderPage *ui;
std::shared_ptr<ModList> m_mods;
@ -53,10 +60,12 @@ private:
QString m_displayName;
QString m_helpName;
public slots:
public
slots:
void modCurrent(const QModelIndex &current, const QModelIndex &previous);
private slots:
private
slots:
void on_addModBtn_clicked();
void on_rmModBtn_clicked();
void on_viewModBtn_clicked();
@ -68,6 +77,8 @@ public:
explicit CoreModFolderPage(BaseInstance *inst, std::shared_ptr<ModList> mods, QString id,
QString iconName, QString displayName, QString helpPage = "",
QWidget *parent = 0);
virtual ~CoreModFolderPage(){};
virtual bool shouldDisplay();
virtual ~CoreModFolderPage()
{
}
virtual bool shouldDisplay() const;
};

View File

@ -1,17 +1,17 @@
#include "NotesPage.h"
#include "ui_NotesPage.h"
QString NotesPage::displayName()
QString NotesPage::displayName() const
{
return tr("Notes");
}
QIcon NotesPage::icon()
QIcon NotesPage::icon() const
{
return QIcon::fromTheme("news");
}
QString NotesPage::id()
QString NotesPage::id() const
{
return "notes";
}

View File

@ -33,11 +33,11 @@ class NotesPage : public QWidget, public BasePage
public:
explicit NotesPage(BaseInstance *inst, QWidget *parent = 0);
virtual ~NotesPage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual bool apply();
virtual QString helpPage() override { return "Notes"; };
virtual QString helpPage() const override { return "Notes"; }
private:
Ui::NotesPage *ui;

122
gui/pages/OtherLogsPage.cpp Normal file
View File

@ -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);
}

45
gui/pages/OtherLogsPage.h Normal file
View File

@ -0,0 +1,45 @@
#pragma once
#include <QWidget>
#include "BasePage.h"
namespace Ui {
class OtherLogsPage;
}
class RecursiveFileSystemWatcher;
class BaseInstance;
class OtherLogsPage : public QWidget, public BasePage
{
Q_OBJECT
public:
explicit OtherLogsPage(BaseInstance *instance, QWidget *parent = 0);
~OtherLogsPage();
QString id() const override { return "logs"; }
QString displayName() const override { return tr("Other logs"); }
QIcon icon() const override { return QIcon(); } // TODO
QString helpPage() const override { return "Minecraft-Logs"; }
void opened() override;
void closed() override;
private
slots:
void on_selectLogBox_currentIndexChanged(const int index);
void on_btnReload_clicked();
void on_btnPaste_clicked();
void on_btnCopy_clicked();
void on_btnDelete_clicked();
private:
Ui::OtherLogsPage *ui;
BaseInstance *m_instance;
RecursiveFileSystemWatcher *m_watcher;
QString m_currentFile;
void setControlsEnabled(const bool enabled);
};

107
gui/pages/OtherLogsPage.ui Normal file
View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>OtherLogsPage</class>
<widget class="QWidget" name="OtherLogsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>480</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPlainTextEdit" name="text">
<property name="enabled">
<bool>false</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QComboBox" name="selectLogBox"/>
</item>
<item>
<widget class="QPushButton" name="btnReload">
<property name="text">
<string>Reload</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnPaste">
<property name="toolTip">
<string>Upload the log to paste.ee - it will stay online for a month</string>
</property>
<property name="text">
<string>Upload Log</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnCopy">
<property name="toolTip">
<string>Copy the whole log into the clipboard</string>
</property>
<property name="text">
<string>&amp;Copy Log</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnDelete">
<property name="toolTip">
<string>Clear the log</string>
</property>
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -10,8 +10,8 @@ public:
{
}
virtual ~ResourcePackPage() {};
virtual bool shouldDisplay() override
virtual ~ResourcePackPage() {}
virtual bool shouldDisplay() const override
{
return !m_inst->traits().contains("no-texturepacks") &&
!m_inst->traits().contains("texturepacks");

View File

@ -221,17 +221,17 @@ public:
}
};
QString ScreenshotsPage::displayName()
QString ScreenshotsPage::displayName() const
{
return tr("Screenshots");
}
QIcon ScreenshotsPage::icon()
QIcon ScreenshotsPage::icon() const
{
return QIcon::fromTheme("screenshots");
}
QString ScreenshotsPage::id()
QString ScreenshotsPage::id() const
{
return "screenshots";
}

View File

@ -47,10 +47,10 @@ public:
};
virtual bool eventFilter(QObject *, QEvent *);
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString helpPage() override { return "Screenshots-management"; };
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual QString helpPage() const override { return "Screenshots-management"; }
private
slots:
void on_uploadBtn_clicked();

View File

@ -9,8 +9,8 @@ public:
tr("Texture packs"), "Texture-packs", parent)
{
}
virtual ~TexturePackPage() {};
virtual bool shouldDisplay() override
virtual ~TexturePackPage() {}
virtual bool shouldDisplay() const override
{
return m_inst->traits().contains("texturepacks");
}

View File

@ -50,22 +50,22 @@
#include <QString>
#include <QUrl>
QString VersionPage::displayName()
QString VersionPage::displayName() const
{
return tr("Version");
}
QIcon VersionPage::icon()
QIcon VersionPage::icon() const
{
return MMC->icons()->getIcon(m_inst->iconKey());
}
QString VersionPage::id()
QString VersionPage::id() const
{
return "version";
}
bool VersionPage::shouldDisplay()
bool VersionPage::shouldDisplay() const
{
return !m_inst->isRunning();
}

View File

@ -33,11 +33,11 @@ class VersionPage : public QWidget, public BasePage
public:
explicit VersionPage(OneSixInstance *inst, QWidget *parent = 0);
virtual ~VersionPage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual QString helpPage() override { return "Instance-version"; };
virtual bool shouldDisplay();
virtual QString displayName() const override;
virtual QIcon icon() const override;
virtual QString id() const override;
virtual QString helpPage() const override { return "Instance-version"; }
virtual bool shouldDisplay() const;
private
slots: