#include "mainwindow.h"
+#include "shared/aboutdialog.h"
#include "clip_list.h"
#include "shared/disk_space_estimator.h"
#include "flags.h"
#include "shared/timebase.h"
#include "ui_mainwindow.h"
+#include <QDesktopServices>
+#include <QMessageBox>
#include <QMouseEvent>
#include <QShortcut>
#include <QTimer>
// The menus.
connect(ui->exit_action, &QAction::triggered, this, &MainWindow::exit_triggered);
+ connect(ui->manual_action, &QAction::triggered, this, &MainWindow::manual_triggered);
+ connect(ui->about_action, &QAction::triggered, this, &MainWindow::about_triggered);
global_disk_space_estimator = new DiskSpaceEstimator(bind(&MainWindow::report_disk_space, this, _1, _2));
disk_free_label = new QLabel(this);
close();
}
+void MainWindow::manual_triggered()
+{
+ if (!QDesktopServices::openUrl(QUrl("https://nageru.sesse.net/doc/"))) {
+ QMessageBox msgbox;
+ msgbox.setText("Could not launch manual in web browser.\nPlease see https://nageru.sesse.net/doc/ manually.");
+ msgbox.exec();
+ }
+}
+
+void MainWindow::about_triggered()
+{
+ AboutDialog("Futatabi", "Multicamera slow motion video server").exec();
+}
+
void MainWindow::highlight_camera_input(int stream_idx)
{
if (stream_idx == 0) {
void report_disk_space(off_t free_bytes, double estimated_seconds_left);
void exit_triggered();
+ void manual_triggered();
+ void about_triggered();
void highlight_camera_input(int stream_idx);
</property>
<addaction name="exit_action"/>
</widget>
+ <widget class="QMenu" name="menu_Help">
+ <property name="title">
+ <string>&Help</string>
+ </property>
+ <addaction name="manual_action"/>
+ <addaction name="about_action"/>
+ </widget>
<addaction name="menuFile"/>
+ <addaction name="menu_Help"/>
</widget>
<action name="exit_action">
<property name="text">
<string>E&xit</string>
</property>
</action>
+ <action name="manual_action">
+ <property name="text">
+ <string>Online &manualā¦</string>
+ </property>
+ </action>
+ <action name="about_action">
+ <property name="text">
+ <string>&About Futatabiā¦</string>
+ </property>
+ </action>
</widget>
<customwidgets>
<customwidget>
#include <string>
#include <vector>
-#include "aboutdialog.h"
+#include "shared/aboutdialog.h"
#include "alsa_pool.h"
#include "analyzer.h"
#include "clickable_label.h"
void MainWindow::about_triggered()
{
- AboutDialog().exec();
+ AboutDialog("Nageru", "Realtime video mixer").exec();
}
void MainWindow::open_analyzer_triggered()
# Preprocess Qt as needed.
qt_files = qt5.preprocess(
- moc_headers: ['aboutdialog.h', 'analyzer.h', 'clickable_label.h', 'compression_reduction_meter.h', 'correlation_meter.h',
+ moc_headers: ['analyzer.h', 'clickable_label.h', 'compression_reduction_meter.h', 'correlation_meter.h',
'ellipsis_label.h', 'glwidget.h', 'input_mapping_dialog.h', 'lrameter.h', 'mainwindow.h', 'midi_mapping_dialog.h',
'nonlinear_fader.h', 'vumeter.h'],
- ui_files: ['aboutdialog.ui', 'analyzer.ui', 'audio_expanded_view.ui', 'audio_miniview.ui', 'display.ui',
+ ui_files: ['analyzer.ui', 'audio_expanded_view.ui', 'audio_miniview.ui', 'display.ui',
'input_mapping.ui', 'mainwindow.ui', 'midi_mapping.ui'],
dependencies: qt5deps)
# Qt objects.
srcs += ['glwidget.cpp', 'mainwindow.cpp', 'vumeter.cpp', 'lrameter.cpp', 'compression_reduction_meter.cpp',
- 'correlation_meter.cpp', 'aboutdialog.cpp', 'analyzer.cpp', 'input_mapping_dialog.cpp', 'midi_mapping_dialog.cpp',
+ 'correlation_meter.cpp', 'analyzer.cpp', 'input_mapping_dialog.cpp', 'midi_mapping_dialog.cpp',
'nonlinear_fader.cpp', 'context_menus.cpp', 'vu_common.cpp', 'piecewise_interpolator.cpp', 'midi_mapper.cpp']
# Auxiliary objects used for nearly everything.
using namespace std;
-AboutDialog::AboutDialog()
+AboutDialog::AboutDialog(const string &program, const string &subheading)
: ui(new Ui::AboutDialog)
{
ui->setupUi(this);
QString str = ui->header->text();
str.replace("@NAGERU_VERSION@", NAGERU_VERSION);
+ str.replace("@PROGRAM@", QString::fromStdString(program));
+ str.replace("@SUBHEADING@", QString::fromStdString(subheading));
ui->header->setText(str);
connect(ui->button_box, &QDialogButtonBox::accepted, [this]{ this->close(); });
#include <QDialog>
#include <QString>
+#include <string>
+
class QObject;
namespace Ui {
Q_OBJECT
public:
- AboutDialog();
+ AboutDialog(const std::string &program, const std::string &subheading);
private:
Ui::AboutDialog *ui;
<item>
<widget class="QLabel" name="header">
<property name="text">
- <string><p><b>Nageru @NAGERU_VERSION@</b></p>
+ <string><p><b>@PROGRAM@ @NAGERU_VERSION@</b></p>
-<p>Realtime video mixer</p></string>
+<p>@SUBHEADING@</p></string>
</property>
</widget>
</item>
qt5 = import('qt5')
-qt5deps = dependency('qt5', modules: ['OpenGL'])
+qt5deps = dependency('qt5', modules: ['Core', 'Gui', 'Widgets', 'OpenGL'])
libmicrohttpddep = dependency('libmicrohttpd')
+# Preprocess Qt as needed.
+qt_files = qt5.preprocess(
+ moc_headers: ['aboutdialog.h'],
+ ui_files: ['aboutdialog.ui'],
+ dependencies: qt5deps)
+
srcs = ['memcpy_interleaved.cpp', 'metacube2.cpp', 'ffmpeg_raii.cpp', 'mux.cpp', 'metrics.cpp', 'context.cpp', 'httpd.cpp', 'disk_space_estimator.cpp', 'read_file.cpp']
+
+# Qt objects.
+srcs += qt_files
+srcs += ['aboutdialog.cpp']
+
shared = static_library('shared', srcs, include_directories: top_include, dependencies: [qt5deps, libmicrohttpddep])
shareddep = declare_dependency(
include_directories: top_include,