Skip to content
Extraits de code Groupes Projets
Vérifiée Valider ee82be38 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

UI: Replace the simple help window by an about window with multiple tabs

parent 53a1bfcc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!10UI improvements
......@@ -62,6 +62,7 @@ target_precompile_headers(Vivy PRIVATE
# STL headers
<memory>
<vector>
<atomic>
# Qt headers
<QString>
......
#include "AboutWindow.hh"
#include <QCloseEvent>
using namespace Vivy;
// See https://doc.qt.io/qt-5/richtext-html-subset.html for the supported
// rich text subset.
static const char *aboutContent =
"<body>"
" <h1>About Vivy</h1>"
" <p>Vivy is a replacement for Aegisub, writen in Qt5+and with less segfaults - hopefully.</p>"
" <p>The following libraries where used:</p>"
" <ul>"
" <li>Qt5</li>"
" <li>Lua</li>"
" <li>libavutils</li>"
" <li>libavcodec</li>"
" <li>libavformat</li>"
" </ul>"
"</body>";
AboutWindow::AboutWindow(QWidget *parent) noexcept
: QMainWindow(parent)
{
setWindowIcon(QIcon(":/icons/vivy.png"));
panels = new QTabWidget(this);
panels->setMovable(false);
panels->setTabsClosable(false);
panels->setElideMode(Qt::ElideRight);
panels->setUsesScrollButtons(true);
panels->setDocumentMode(false);
setCentralWidget(panels);
// Simple about message
QLabel *aboutLabel = new QLabel(panels);
aboutLabel->setTextFormat(Qt::RichText);
aboutLabel->setText(aboutContent);
aboutLabel->setTextInteractionFlags(Qt::NoTextInteraction);
// Add the panels
panels->addTab(aboutLabel, "About");
}
void
AboutWindow::closeEvent(QCloseEvent *event) noexcept
{
emit closed();
event->accept();
}
#pragma once
#ifndef __cplusplus
#error "This is a C++ header"
#endif
#include <QMainWindow>
#include <QTabWidget>
#include <QLabel>
namespace Vivy
{
class AboutWindow final : public QMainWindow {
Q_OBJECT
QTabWidget *panels;
public:
explicit AboutWindow(QWidget *parent) noexcept;
~AboutWindow() noexcept = default;
signals:
void closed();
private:
void closeEvent(QCloseEvent *bar) noexcept override;
};
}
#include "DialogHelp.hh"
#include "../VivyApplication.hh"
#include <QWidget>
#include <QLabel>
#include <QDialog>
#include <QPixmap>
using namespace Vivy;
// See https://doc.qt.io/qt-5/richtext-html-subset.html for the supported
// rich text subset.
static const char *aboutContentHeader =
"<body>"
"<h1>About Vivy</h1>"
"<p>Vivy is a replacement for Aegisub, writen in Qt5+and with less segfaults - hopefully.</p>"
"<p>The following libraries where used:</p>"
"<ul>"
" <li>Qt5</li>"
" <li>libavutils</li>"
" <li>libavcodec</li>"
" <li>libavformat</li>"
"</ul>";
static const char *aboutContentFooter = "</body>";
DialogHelp::DialogHelp(QWidget *parent) noexcept
: QMessageBox(parent)
{
setWindowTitle("Vivy - Help");
setWindowFlags(Qt::Dialog);
setWindowModality(Qt::WindowModal);
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setSizePolicy(sizePolicy);
setTextFormat(Qt::RichText);
setText(getAboutContent());
setTextInteractionFlags(Qt::NoTextInteraction);
adjustSize();
}
QString
DialogHelp::getAboutContent() const noexcept
{
QString ret;
ret = aboutContentHeader;
ret.append("<p>Vivy will handle the following most of the video and audio formats.");
ret.append("The audio formats are: " + Utils::audioFileSuffix.join(", "));
ret.append("The video formats are: " + Utils::videoFileSuffix.join(", ") + "</p>");
ret.append(aboutContentFooter);
return ret;
}
#ifndef VIVY_DIALOGHELP_H
#define VIVY_DIALOGHELP_H
#ifndef __cplusplus
#error "This is a C++ header"
#endif
#include <QMessageBox>
#include <QWidget>
namespace Vivy
{
class DialogHelp final : public QMessageBox {
Q_OBJECT
public:
explicit DialogHelp(QWidget *parent = nullptr) noexcept;
~DialogHelp() noexcept = default;
private:
QString getAboutContent() const noexcept;
};
}
#endif // VIVY_DIALOGHELP_H
#include "MainWindow.hh"
#include "DialogHelp.hh"
#include "PropertyModel.hh"
#include "VivyDocumentView.hh"
#include "AboutWindow.hh"
#include "../Lib/Utils.hh"
#include "../VivyApplication.hh"
#include <mutex>
#include <algorithm>
#include <functional>
#include <QWindow>
......@@ -21,6 +22,7 @@
#include <QImage>
#include <QToolBar>
#include <QTabWidget>
#include <QEventLoop>
#define DCL_MENU(menu, name) [[maybe_unused]] QMenu *menu##Menu = menuBar()->addMenu(name);
......@@ -163,8 +165,16 @@ MainWindow::openProperties(int index) noexcept
void
MainWindow::openDialogHelp() noexcept
{
std::unique_ptr<DialogHelp> help_holder = std::make_unique<DialogHelp>(this);
help_holder->exec();
if (aboutWindowMutex.try_lock() && aboutWindow == nullptr) {
aboutWindow = new AboutWindow(this);
QEventLoop loop;
connect(aboutWindow, &AboutWindow::closed, &loop, &QEventLoop::quit);
aboutWindow->show();
loop.exec();
delete aboutWindow;
aboutWindow = nullptr;
aboutWindowMutex.unlock();
}
}
AbstractDocument *
......
#ifndef VIVY_MAINWINDOW_H
#define VIVY_MAINWINDOW_H
#pragma once
#ifndef __cplusplus
#error "This is a C++ header"
......@@ -10,9 +9,11 @@
#include "../Lib/Document/VivyDocumentStore.hh"
#include "DocumentViews/AudioVisualizer.hh"
#include "VivyDocumentView.hh"
#include "AboutWindow.hh"
#include <QMainWindow>
#include <QMenu>
#include <QFileDialog>
#include <QMutex>
namespace Vivy
{
......@@ -22,6 +23,9 @@ class MainWindow final : public QMainWindow {
QTabWidget *documents{ nullptr };
QMenu *viewMenu{ nullptr };
QMutex aboutWindowMutex{ QMutex::NonRecursive };
AboutWindow *aboutWindow{ nullptr };
public:
explicit MainWindow(QWidget *parent = nullptr) noexcept;
~MainWindow() noexcept = default;
......@@ -89,5 +93,3 @@ private slots:
};
}
#endif // VIVY_MAINWINDOW_H
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter