mirror of
https://code.videolan.org/videolan/vlc
synced 2024-08-27 04:21:53 +02:00
qt: Complete firstrun wizard
This commit is contained in:
parent
09ca278c44
commit
d33d01fb82
@ -17,6 +17,7 @@ libqt_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) \
|
||||
-I$(srcdir)/gui/qt -I$(builddir)/gui/qt/ \
|
||||
-I$(builddir)/gui/qt/dialogs/extended \
|
||||
-I$(builddir)/gui/qt/dialogs/fingerprint \
|
||||
-I$(builddir)/gui/qt/dialogs/firstrun \
|
||||
-I$(builddir)/gui/qt/dialogs/help \
|
||||
-I$(builddir)/gui/qt/dialogs/messages \
|
||||
-I$(builddir)/gui/qt/dialogs/open \
|
||||
@ -82,6 +83,7 @@ libqt_plugin_la_SOURCES = \
|
||||
gui/qt/dialogs/fingerprint/fingerprintdialog.cpp \
|
||||
gui/qt/dialogs/fingerprint/fingerprintdialog.hpp \
|
||||
gui/qt/dialogs/firstrun/firstrun.cpp gui/qt/dialogs/firstrun/firstrun.hpp \
|
||||
gui/qt/dialogs/firstrun/firstrunwizard.cpp gui/qt/dialogs/firstrun/firstrunwizard.hpp \
|
||||
gui/qt/dialogs/gototime/gototime.cpp gui/qt/dialogs/gototime/gototime.hpp \
|
||||
gui/qt/dialogs/help/aboutmodel.cpp \
|
||||
gui/qt/dialogs/help/aboutmodel.hpp \
|
||||
@ -313,6 +315,7 @@ nodist_libqt_plugin_la_SOURCES = \
|
||||
gui/qt/dialogs/fingerprint/chromaprint.moc.cpp \
|
||||
gui/qt/dialogs/fingerprint/fingerprintdialog.moc.cpp \
|
||||
gui/qt/dialogs/firstrun/firstrun.moc.cpp \
|
||||
gui/qt/dialogs/firstrun/firstrunwizard.moc.cpp \
|
||||
gui/qt/dialogs/gototime/gototime.moc.cpp \
|
||||
gui/qt/dialogs/help/aboutmodel.moc.cpp \
|
||||
gui/qt/dialogs/help/help.moc.cpp \
|
||||
@ -422,6 +425,7 @@ nodist_libqt_plugin_la_SOURCES += \
|
||||
gui/qt/dialogs/extended/ui_equalizer.h \
|
||||
gui/qt/dialogs/extended/ui_video_effects.h \
|
||||
gui/qt/dialogs/fingerprint/ui_fingerprintdialog.h \
|
||||
gui/qt/dialogs/firstrun/ui_firstrunwizard.h \
|
||||
gui/qt/dialogs/help/ui_about.h \
|
||||
gui/qt/dialogs/help/ui_update.h \
|
||||
gui/qt/dialogs/messages/ui_messages_panel.h \
|
||||
@ -462,6 +466,7 @@ libqt_plugin_la_UI = \
|
||||
gui/qt/dialogs/extended/equalizer.ui \
|
||||
gui/qt/dialogs/extended/video_effects.ui \
|
||||
gui/qt/dialogs/fingerprint/fingerprintdialog.ui \
|
||||
gui/qt/dialogs/firstrun/firstrunwizard.ui \
|
||||
gui/qt/dialogs/help/about.ui \
|
||||
gui/qt/dialogs/help/update.ui \
|
||||
gui/qt/dialogs/messages/messages_panel.ui \
|
||||
|
360
modules/gui/qt/dialogs/firstrun/firstrunwizard.cpp
Normal file
360
modules/gui/qt/dialogs/firstrun/firstrunwizard.cpp
Normal file
@ -0,0 +1,360 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (C) 2021 VLC authors and VideoLAN
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* ( at your option ) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "firstrunwizard.hpp"
|
||||
#include "util/color_scheme_model.hpp"
|
||||
#include "maininterface/main_interface.hpp"
|
||||
#include "dialogs/toolbar/controlbar_profile_model.hpp"
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QButtonGroup>
|
||||
#include <QFileDialog>
|
||||
#include <QtCore>
|
||||
|
||||
#include <vlc_common.h>
|
||||
#include <vlc_input_item.h>
|
||||
#include <vlc_url.h>
|
||||
|
||||
FirstRunWizard::FirstRunWizard( qt_intf_t *_p_intf, QWidget *parent)
|
||||
: QWizard( parent )
|
||||
{
|
||||
p_intf = _p_intf;
|
||||
|
||||
/* Set windown properties */
|
||||
setWindowTitle( qtr( "Welcome" ) );
|
||||
setWindowModality( Qt::WindowModal );
|
||||
setAttribute( Qt::WA_DeleteOnClose );
|
||||
|
||||
/* Build the Ui */
|
||||
ui.setupUi( this );
|
||||
|
||||
/* Set the privacy and network policy */
|
||||
ui.policy->setHtml( qtr( "<p>In order to protect your privacy, <i>VLC media player</i> "
|
||||
"does <b>not</b> collect personal data or transmit them, "
|
||||
"not even in anonymized form, to anyone."
|
||||
"</p>\n"
|
||||
"<p>Nevertheless, <i>VLC</i> is able to automatically retrieve "
|
||||
"information about the media in your playlist from third party "
|
||||
"Internet-based services. This includes cover art, track names, "
|
||||
"artist names and other meta-data."
|
||||
"</p>\n"
|
||||
"<p>Consequently, this may entail identifying some of your media files to third party "
|
||||
"entities. Therefore the <i>VLC</i> developers require your express "
|
||||
"consent for the media player to access the Internet automatically."
|
||||
"</p>\n" ) );
|
||||
ui.policy->setReadOnly( true );
|
||||
|
||||
/* Set up the button group for colour schemes. */
|
||||
/* Creating in Qt Designer has unstable ordering when calling buttons() */
|
||||
colorSchemeGroup = new QButtonGroup( this );
|
||||
colorSchemeGroup->addButton( ui.systemButton );
|
||||
colorSchemeGroup->addButton( ui.lightButton );
|
||||
colorSchemeGroup->addButton( ui.darkButton );
|
||||
colorSchemeGroup->setExclusive( true );
|
||||
|
||||
colorSchemeImages = new QButtonGroup( this );
|
||||
colorSchemeImages->addButton( ui.daynightImage );
|
||||
colorSchemeImages->addButton( ui.lightImage );
|
||||
colorSchemeImages->addButton( ui.darkImage );
|
||||
|
||||
/* Setup the layout page */
|
||||
ui.layoutGroup->setId( ui.modernButton, 0 );
|
||||
ui.layoutGroup->setId( ui.classicButton, 1 );
|
||||
|
||||
layoutImages = new QButtonGroup( this );
|
||||
layoutImages->addButton( ui.modernImage );
|
||||
layoutImages->addButton( ui.classicImage );
|
||||
layoutImages->setId( ui.modernImage, MODERN );
|
||||
layoutImages->setId( ui.classicImage, CLASSIC );
|
||||
|
||||
/* Set the tooltips for each of the layout choices */
|
||||
ui.classicButton->setToolTip( qtr("<ul>"
|
||||
"<li>No client-side decoration</li>"
|
||||
"<li>Toolbar menu</li>"
|
||||
"<li>Pinned video controls</li>"
|
||||
"</ul>") );
|
||||
|
||||
ui.modernButton->setToolTip( qtr("<ul>"
|
||||
"<li>Client-side decoration</li>"
|
||||
"<li>No toolbar menu</li>"
|
||||
"<li>Video controls unpinned</li>"
|
||||
"</ul>") );
|
||||
|
||||
/* Remove the cancel button */
|
||||
setOption( QWizard::NoCancelButton );
|
||||
|
||||
/* Create new instance of MLFoldersModel */
|
||||
if ( vlc_ml_instance_get( p_intf ) )
|
||||
{
|
||||
const auto foldersModel = new MLFoldersModel( this );
|
||||
foldersModel->setMl( vlc_ml_instance_get( p_intf ) );
|
||||
ui.entryPoints->setMLFoldersModel( foldersModel );
|
||||
mlFoldersEditor = ui.entryPoints;
|
||||
mlFoldersModel = foldersModel;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.enableMl->setChecked( false );
|
||||
}
|
||||
|
||||
/* Disable the ML button as toggling doesn't actually do anything */
|
||||
ui.enableMl->setEnabled(false);
|
||||
|
||||
/* Slots and Signals */
|
||||
connect( ui.addButton, &QPushButton::clicked, this, &FirstRunWizard::MLaddNewFolder );
|
||||
connect( colorSchemeGroup, qOverload<QAbstractButton*>( &QButtonGroup::buttonClicked ), this, &FirstRunWizard::updateColorLabel );
|
||||
connect( colorSchemeImages, qOverload<QAbstractButton*>( &QButtonGroup::buttonClicked ), this, &FirstRunWizard::imageColorSchemeClick );
|
||||
connect( ui.layoutGroup, qOverload<QAbstractButton*>( &QButtonGroup::buttonClicked ), this, &FirstRunWizard::updateLayoutLabel );
|
||||
connect( layoutImages, qOverload<QAbstractButton*>( &QButtonGroup::buttonClicked ), this, &FirstRunWizard::imageLayoutClick );
|
||||
connect( this->button(QWizard::FinishButton), &QPushButton::clicked, this, &FirstRunWizard::finish );
|
||||
}
|
||||
|
||||
/**
|
||||
* Function called when the finish button is pressed.
|
||||
* Processes all inputted settings according to chosen options
|
||||
*/
|
||||
void FirstRunWizard::finish()
|
||||
{
|
||||
/* Welcome Page settings */
|
||||
config_PutInt( "metadata-network-access", ui.privacyCheckbox->isChecked() );
|
||||
config_PutInt( "qt-privacy-ask", 0 );
|
||||
|
||||
/* Colour Page settings */
|
||||
p_intf->p_mi->getColorScheme()->setCurrentIndex( colorSchemeGroup->checkedId() );
|
||||
|
||||
/* Layout Page settings */
|
||||
config_PutInt( "qt-menubar", ui.layoutGroup->checkedId() );
|
||||
#if QT_CLIENT_SIDE_DECORATION_AVAILABLE
|
||||
config_PutInt( "qt-titlebar", ui.layoutGroup->checkedId() );
|
||||
#endif
|
||||
p_intf->p_mi->setPinVideoControls( ui.layoutGroup->checkedId() );
|
||||
|
||||
ControlbarProfileModel* controlbarModel = p_intf->p_mi->controlbarProfileModel();
|
||||
assert(controlbarModel);
|
||||
if( ui.layoutGroup->checkedId() )
|
||||
controlbarModel->setSelectedProfileFromId(ControlbarProfileModel::CLASSIC_STYLE);
|
||||
else
|
||||
controlbarModel->setSelectedProfileFromId(ControlbarProfileModel::DEFAULT_STYLE);
|
||||
|
||||
/* Commit changes to the scanned folders for the Media Library */
|
||||
if( vlc_ml_instance_get( p_intf ) && mlFoldersEditor )
|
||||
mlFoldersEditor->commit();
|
||||
|
||||
/* Reload the indexing service for the media library */
|
||||
if( p_intf->p_mi->getMediaLibrary() )
|
||||
p_intf->p_mi->getMediaLibrary()->reload();
|
||||
|
||||
p_intf->p_mi->reloadPrefs();
|
||||
p_intf->p_mi->controlbarProfileModel()->save();
|
||||
config_SaveConfigFile( p_intf );
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a QFileDialog for the user to select a folder to add to the Media Library
|
||||
* If a folder is selected, add it to the list of folders under MLFoldersEditor
|
||||
*/
|
||||
void FirstRunWizard::MLaddNewFolder()
|
||||
{
|
||||
QUrl newEntryPoint = QFileDialog::getExistingDirectoryUrl( this, qtr("Choose a folder to add to the Media Library"),
|
||||
QUrl( QDir::homePath() ));
|
||||
|
||||
if( !newEntryPoint.isEmpty() )
|
||||
mlFoldersEditor->add( newEntryPoint );
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically updates the label on the color scheme page depending
|
||||
* on the currently selected radio button choice
|
||||
* @param id The id of the button we are updating the label of
|
||||
*/
|
||||
void FirstRunWizard::updateColorLabel( QAbstractButton* btn )
|
||||
{
|
||||
switch ( colorSchemeGroup->id(btn) )
|
||||
{
|
||||
case ColorSchemeModel::System:
|
||||
ui.explainerLabel->setText( qtr( "<i>VLC will automatically switch to dark mode accordingly with system settings</i>" ) );
|
||||
break;
|
||||
case ColorSchemeModel::Day:
|
||||
ui.explainerLabel->setText( qtr( "<i>VLC will automatically use light mode</i>" ) );
|
||||
break;
|
||||
case ColorSchemeModel::Night:
|
||||
ui.explainerLabel->setText( qtr( "<i>VLC will automatically use dark mode</i>" ) );
|
||||
break;
|
||||
case ColorSchemeModel::Auto:
|
||||
ui.explainerLabel->setText( qtr( "<i>VLC will automatically switch to dark mode accordingly with system settings</i>") );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically updates the label depending on the currently selected layout
|
||||
* @param id The id of the button we are updating the label of
|
||||
*/
|
||||
void FirstRunWizard::updateLayoutLabel( QAbstractButton* btn )
|
||||
{
|
||||
switch ( ui.layoutGroup->id( btn ) )
|
||||
{
|
||||
case MODERN:
|
||||
ui.layoutExplainer->setText( qtr( "<i>VLC will use a modern layout with no menubar or pinned controls but with client-side decoration</i>" ) );
|
||||
break;
|
||||
case CLASSIC:
|
||||
ui.layoutExplainer->setText( qtr( "<i>VLC will use a classic layout with a menubar and pinned controls but with no client-side decoration</i>" ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the correct button when the corresponding image is clicked
|
||||
* for the color scheme page.
|
||||
* @param id The id of the image that was clicked
|
||||
*/
|
||||
void FirstRunWizard::imageColorSchemeClick( QAbstractButton* btn )
|
||||
{
|
||||
QAbstractButton* groupBtn = colorSchemeGroup->buttons().at( colorSchemeImages->id( btn ) );
|
||||
assert( groupBtn );
|
||||
groupBtn->setChecked( true );
|
||||
updateColorLabel( groupBtn );
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the correct button when the corresponding image is clicked
|
||||
* for the layouts page.
|
||||
* @param id The id of the image that was clicked
|
||||
*/
|
||||
void FirstRunWizard::imageLayoutClick( QAbstractButton* btn )
|
||||
{
|
||||
QAbstractButton* layoutBtn = ui.layoutGroup->buttons().at( layoutImages->id( btn ) );
|
||||
assert( layoutBtn );
|
||||
layoutBtn->setChecked( true );
|
||||
updateLayoutLabel( layoutBtn );
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the navigation of pages for the wizard
|
||||
* @return int - the page id to go to or -1 if we are done
|
||||
*/
|
||||
int FirstRunWizard::nextId() const
|
||||
{
|
||||
switch ( currentId() )
|
||||
{
|
||||
case WELCOME_PAGE:
|
||||
if( ui.enableMl->isChecked() )
|
||||
return FOLDER_PAGE;
|
||||
else
|
||||
return COLOR_SCHEME_PAGE;
|
||||
case FOLDER_PAGE:
|
||||
return COLOR_SCHEME_PAGE;
|
||||
case COLOR_SCHEME_PAGE:
|
||||
return LAYOUT_PAGE;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up the buttons and options for the color scheme page
|
||||
* Needs to be set up later or else the main interface hasn't been created yet
|
||||
* Color schemes are always in the order system/auto, day then night
|
||||
*/
|
||||
void FirstRunWizard::initializePage( int id )
|
||||
{
|
||||
if(id == COLOR_SCHEME_PAGE)
|
||||
{
|
||||
QVector<ColorSchemeModel::Item> schemes = p_intf->p_mi->getColorScheme()->getSchemes();
|
||||
auto schemeButtons = colorSchemeGroup->buttons();
|
||||
auto schemeImages = colorSchemeImages->buttons();
|
||||
|
||||
/* Number of buttons should be equal to the schemes we can choose from */
|
||||
assert( schemes.size() == schemeButtons.size() );
|
||||
assert( schemes.size() == schemeImages.size() );
|
||||
|
||||
for( int i = 0; i < schemes.size(); i++ )
|
||||
{
|
||||
colorSchemeGroup->setId( schemeButtons.at(i), schemes.at(i).scheme );
|
||||
colorSchemeImages->setId( schemeImages.at(i), schemes.at(i).scheme );
|
||||
schemeButtons.at(i)->setText( schemes.at(i).text );
|
||||
if( !i ) updateColorLabel( schemeButtons.at(i) );
|
||||
}
|
||||
}
|
||||
else if ( id == FOLDER_PAGE )
|
||||
addDefaults();
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the default options on rejection of the FirstRun Wizard.
|
||||
* The default options are:
|
||||
* - Yes to metadata
|
||||
* - Default folders in the Media Library
|
||||
* - System/Auto colour scheme
|
||||
* - Modern VLC layout
|
||||
*/
|
||||
void FirstRunWizard::reject()
|
||||
{
|
||||
assert(p_intf->p_mi);
|
||||
/* Welcome Page settings */
|
||||
config_PutInt( "metadata-network-access", 1 );
|
||||
config_PutInt( "qt-privacy-ask", 0 );
|
||||
|
||||
/* Colour Page settings */
|
||||
p_intf->p_mi->getColorScheme()->setCurrentIndex( p_intf->p_mi->getColorScheme()->getSchemes().at(0).scheme );
|
||||
|
||||
/* Layout Page settings */
|
||||
config_PutInt( "qt-menubar", 0 );
|
||||
#if QT_CLIENT_SIDE_DECORATION_AVAILABLE
|
||||
config_PutInt( "qt-titlebar", 0 );
|
||||
#endif
|
||||
p_intf->p_mi->setPinVideoControls( 0 );
|
||||
p_intf->p_mi->controlbarProfileModel()->setSelectedProfileFromId(ControlbarProfileModel::DEFAULT_STYLE);
|
||||
|
||||
/* Folders Page settings */
|
||||
if ( mlFoldersEditor )
|
||||
{
|
||||
addDefaults();
|
||||
mlFoldersEditor->commit();
|
||||
}
|
||||
|
||||
if( p_intf->p_mi->getMediaLibrary() )
|
||||
p_intf->p_mi->getMediaLibrary()->reload();
|
||||
|
||||
config_SaveConfigFile( p_intf );
|
||||
p_intf->p_mi->reloadPrefs();
|
||||
p_intf->p_mi->controlbarProfileModel()->save();
|
||||
|
||||
done( QDialog::Rejected );
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the default folders to the media library
|
||||
*/
|
||||
void FirstRunWizard::addDefaults()
|
||||
{
|
||||
// Return if we already set the defaults or something is null
|
||||
if( mlDefaults || !mlFoldersEditor || mlFoldersEditor->rowCount() )
|
||||
return;
|
||||
|
||||
for( auto&& target : { VLC_VIDEOS_DIR, VLC_MUSIC_DIR } )
|
||||
{
|
||||
auto folder = vlc::wrap_cptr( config_GetUserDir( target ) );
|
||||
if( folder == nullptr )
|
||||
continue;
|
||||
auto folderMrl = vlc::wrap_cptr( vlc_path2uri( folder.get(), nullptr ) );
|
||||
mlFoldersEditor->add( QUrl( folderMrl.get() ) );
|
||||
}
|
||||
|
||||
mlDefaults = true;
|
||||
}
|
68
modules/gui/qt/dialogs/firstrun/firstrunwizard.hpp
Normal file
68
modules/gui/qt/dialogs/firstrun/firstrunwizard.hpp
Normal file
@ -0,0 +1,68 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (C) 2021 VLC authors and VideoLAN
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* ( at your option ) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef VLC_FIRSTRUNWIZARD_H
|
||||
#define VLC_FIRSTRUNWIZARD_H
|
||||
|
||||
#include "ui_firstrunwizard.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QWizard>
|
||||
|
||||
class MLFoldersEditor;
|
||||
class MLFoldersModel;
|
||||
|
||||
class FirstRunWizard : public QWizard
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
FirstRunWizard ( qt_intf_t*, QWidget* parent = nullptr );
|
||||
|
||||
private:
|
||||
enum { WELCOME_PAGE, FOLDER_PAGE, COLOR_SCHEME_PAGE, LAYOUT_PAGE };
|
||||
enum { MODERN, CLASSIC };
|
||||
|
||||
void addDefaults();
|
||||
|
||||
int nextId() const;
|
||||
void initializePage( int id );
|
||||
void reject();
|
||||
|
||||
private:
|
||||
Ui::firstrun ui;
|
||||
|
||||
MLFoldersEditor *mlFoldersEditor = nullptr;
|
||||
MLFoldersModel *mlFoldersModel = nullptr;
|
||||
|
||||
qt_intf_t* p_intf;
|
||||
bool mlDefaults = false;
|
||||
|
||||
QButtonGroup* colorSchemeGroup = nullptr;
|
||||
QButtonGroup* colorSchemeImages = nullptr;
|
||||
QButtonGroup* layoutImages = nullptr;
|
||||
|
||||
private slots:
|
||||
void finish();
|
||||
void MLaddNewFolder();
|
||||
void updateColorLabel( QAbstractButton* );
|
||||
void updateLayoutLabel (QAbstractButton* );
|
||||
void imageColorSchemeClick ( QAbstractButton* );
|
||||
void imageLayoutClick( QAbstractButton* );
|
||||
};
|
||||
|
||||
#endif // VLC_FIRSTRUNWIZARD_H
|
560
modules/gui/qt/dialogs/firstrun/firstrunwizard.ui
Normal file
560
modules/gui/qt/dialogs/firstrun/firstrunwizard.ui
Normal file
@ -0,0 +1,560 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>firstrun</class>
|
||||
<widget class="QWizard" name="firstrun">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>500</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>650</width>
|
||||
<height>400</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Welcome</string>
|
||||
</property>
|
||||
<widget class="QWizardPage" name="welcomePage">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>320</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QFrame" name="horizontalFrame_policy">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="privacy">
|
||||
<property name="text">
|
||||
<string>Privacy and Network Access Policy</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="policy">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="privacyCheckbox">
|
||||
<property name="text">
|
||||
<string>Allow metadata network access</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QFrame" name="horizontalFrame_prefs">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="pref">
|
||||
<property name="text">
|
||||
<string>Preferences</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string><small>For a full list of settings, see the <b>preferences</b> tab</small></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="enableMl">
|
||||
<property name="text">
|
||||
<string>Enable the Media Library</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWizardPage" name="folderPage">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="folderLabel">
|
||||
<property name="text">
|
||||
<string>Folders scanned by the Media Library</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="addButton">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="MLFoldersEditor" name="entryPoints">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::AllEditTriggers</set>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="showGrid">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rowCount">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<row/>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWizardPage" name="colorSchemePage">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="1" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item alignment="Qt::AlignHCenter">
|
||||
<widget class="QRadioButton" name="lightButton">
|
||||
<property name="text">
|
||||
<string>Light</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="lightImage">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../vlc.qrc">
|
||||
<normaloff>:/theme_light.svg</normaloff>:/theme_light.svg</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>87</width>
|
||||
<height>154</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item alignment="Qt::AlignHCenter">
|
||||
<widget class="QRadioButton" name="darkButton">
|
||||
<property name="text">
|
||||
<string>Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="darkImage">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../vlc.qrc">
|
||||
<normaloff>:/theme_dark.svg</normaloff>:/theme_dark.svg</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>87</width>
|
||||
<height>154</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="colorLabel">
|
||||
<property name="text">
|
||||
<string>Select a color scheme</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item alignment="Qt::AlignHCenter">
|
||||
<widget class="QRadioButton" name="systemButton">
|
||||
<property name="text">
|
||||
<string>System </string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="daynightImage">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../vlc.qrc">
|
||||
<normaloff>:/theme_daynight.svg</normaloff>:/theme_daynight.svg</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>87</width>
|
||||
<height>154</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<spacer name="verticalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="3">
|
||||
<widget class="QLabel" name="explainerLabel">
|
||||
<property name="text">
|
||||
<string><i>VLC will automatically switch to dark mode accordingly with system settings</i></string>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<spacer name="verticalSpacer_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWizardPage" name="layoutPage">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="4" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Minimum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="layoutLabel">
|
||||
<property name="text">
|
||||
<string>Select a layout</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item alignment="Qt::AlignHCenter">
|
||||
<widget class="QRadioButton" name="modernButton">
|
||||
<property name="text">
|
||||
<string>Modern</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">layoutGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="modernImage">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../vlc.qrc">
|
||||
<normaloff>:/prefsmenu/sample_minimal.png</normaloff>:/prefsmenu/sample_minimal.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>244</width>
|
||||
<height>145</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item alignment="Qt::AlignHCenter">
|
||||
<widget class="QRadioButton" name="classicButton">
|
||||
<property name="text">
|
||||
<string>Classic</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">layoutGroup</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_9">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="classicImage">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../vlc.qrc">
|
||||
<normaloff>:/prefsmenu/sample_complete.png</normaloff>:/prefsmenu/sample_complete.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>244</width>
|
||||
<height>145</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QLabel" name="layoutExplainer">
|
||||
<property name="text">
|
||||
<string><i>VLC will use a modern layout with no menubar or pinned controls but with client-side decoration</i></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<spacer name="verticalSpacer_11">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>MLFoldersEditor</class>
|
||||
<extends>QTableWidget</extends>
|
||||
<header>widgets/native/mlfolderseditor.hpp</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../vlc.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
<buttongroups>
|
||||
<buttongroup name="layoutGroup"/>
|
||||
</buttongroups>
|
||||
</ui>
|
@ -733,6 +733,8 @@ modules/gui/qt/dialogs/fingerprint/fingerprintdialog.cpp
|
||||
modules/gui/qt/dialogs/fingerprint/fingerprintdialog.hpp
|
||||
modules/gui/qt/dialogs/firstrun/firstrun.cpp
|
||||
modules/gui/qt/dialogs/firstrun/firstrun.hpp
|
||||
modules/gui/qt/dialogs/firstrun/firstrunwizard.cpp
|
||||
modules/gui/qt/dialogs/firstrun/firstrunwizard.hpp
|
||||
modules/gui/qt/dialogs/gototime/gototime.cpp
|
||||
modules/gui/qt/dialogs/gototime/gototime.hpp
|
||||
modules/gui/qt/dialogs/help/help.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user