452 lines
18 KiB
C++
452 lines
18 KiB
C++
/*
|
|
* Copyright (c) 2013-2026 Meltytech, LLC
|
|
*
|
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef SETTINGS_H
|
|
#define SETTINGS_H
|
|
|
|
#include <framework/mlt_types.h>
|
|
#include <QByteArray>
|
|
#include <QKeySequence>
|
|
#include <QObject>
|
|
#include <QSettings>
|
|
#include <QStringList>
|
|
#include <QThread>
|
|
|
|
class ShotcutSettings : public QObject
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(bool timelineDragScrub READ timelineDragScrub WRITE setTimelineDragScrub NOTIFY
|
|
timelineDragScrubChanged)
|
|
Q_PROPERTY(bool timelineShowWaveforms READ timelineShowWaveforms WRITE setTimelineShowWaveforms
|
|
NOTIFY timelineShowWaveformsChanged)
|
|
Q_PROPERTY(bool timelineShowThumbnails READ timelineShowThumbnails WRITE
|
|
setTimelineShowThumbnails NOTIFY timelineShowThumbnailsChanged)
|
|
Q_PROPERTY(bool timelineRipple READ timelineRipple WRITE setTimelineRipple NOTIFY
|
|
timelineRippleChanged)
|
|
Q_PROPERTY(bool timelineRippleAllTracks READ timelineRippleAllTracks WRITE
|
|
setTimelineRippleAllTracks NOTIFY timelineRippleAllTracksChanged)
|
|
Q_PROPERTY(bool timelineRippleMarkers READ timelineRippleMarkers WRITE setTimelineRippleMarkers
|
|
NOTIFY timelineRippleMarkersChanged)
|
|
Q_PROPERTY(bool timelineSnap READ timelineSnap WRITE setTimelineSnap NOTIFY timelineSnapChanged)
|
|
Q_PROPERTY(bool timelineScrollZoom READ timelineScrollZoom WRITE setTimelineScrollZoom NOTIFY
|
|
timelineScrollZoomChanged)
|
|
Q_PROPERTY(bool timelineFramebufferWaveform READ timelineFramebufferWaveform WRITE
|
|
setTimelineFramebufferWaveform NOTIFY timelineFramebufferWaveformChanged)
|
|
Q_PROPERTY(QString openPath READ openPath WRITE setOpenPath NOTIFY openPathChanged)
|
|
Q_PROPERTY(QString savePath READ savePath WRITE setSavePath NOTIFY savePathChanged)
|
|
Q_PROPERTY(QString playlistThumbnails READ playlistThumbnails WRITE setPlaylistThumbnails NOTIFY
|
|
playlistThumbnailsChanged)
|
|
Q_PROPERTY(QString viewMode READ viewMode WRITE setViewMode NOTIFY viewModeChanged)
|
|
Q_PROPERTY(int playerAudioChannels READ playerAudioChannels NOTIFY playerAudioChannelsChanged)
|
|
Q_PROPERTY(bool playerGPU READ playerGPU NOTIFY playerGpuChanged)
|
|
Q_PROPERTY(double audioInDuration READ audioInDuration WRITE setAudioInDuration NOTIFY
|
|
audioInDurationChanged)
|
|
Q_PROPERTY(double audioOutDuration READ audioOutDuration WRITE setAudioOutDuration NOTIFY
|
|
audioOutDurationChanged)
|
|
Q_PROPERTY(double videoInDuration READ videoInDuration WRITE setVideoInDuration NOTIFY
|
|
videoInDurationChanged)
|
|
Q_PROPERTY(double videoOutDuration READ videoOutDuration WRITE setVideoOutDuration NOTIFY
|
|
videoOutDurationChanged)
|
|
Q_PROPERTY(double audioInCurve READ audioInCurve WRITE setAudioInCurve NOTIFY audioInCurveChanged)
|
|
Q_PROPERTY(
|
|
double audioOutCurve READ audioOutCurve WRITE setAudioOutCurve NOTIFY audioOutCurveChanged)
|
|
Q_PROPERTY(bool smallIcons READ smallIcons WRITE setSmallIcons NOTIFY smallIconsChanged)
|
|
Q_PROPERTY(bool askOutputFilter READ askOutputFilter WRITE setAskOutputFilter NOTIFY
|
|
askOutputFilterChanged)
|
|
Q_PROPERTY(QString appDataLocation READ appDataLocation CONSTANT)
|
|
Q_PROPERTY(TimelineScrolling timelineScrolling READ timelineScrolling WRITE setTimelineScrolling
|
|
NOTIFY timelineScrollingChanged)
|
|
Q_ENUMS(TimelineScrolling)
|
|
Q_PROPERTY(bool timelineRectangleSelect READ timelineRectangleSelect WRITE
|
|
setTimelineRectangleSelect NOTIFY timelineRectangleSelectChanged)
|
|
Q_PROPERTY(bool keyframesDragScrub READ keyframesDragScrub WRITE setKeyframesDragScrub NOTIFY
|
|
keyframesDragScrubChanged)
|
|
Q_PROPERTY(bool timelineAdjustGain READ timelineAdjustGain WRITE setTimelineAdjustGain NOTIFY
|
|
timelineAdjustGainChanged)
|
|
|
|
public:
|
|
static const qsizetype MaxPath{32767};
|
|
enum TimelineScrolling { NoScrolling, CenterPlayhead, PageScrolling, SmoothScrolling };
|
|
enum ProcessingMode { Native8Cpu, Linear8Cpu, Native10Cpu, Linear10Cpu, Linear10GpuCpu };
|
|
|
|
static ShotcutSettings &singleton();
|
|
void log();
|
|
|
|
// general
|
|
QString language() const;
|
|
void setLanguage(const QString &);
|
|
double imageDuration() const;
|
|
void setImageDuration(double);
|
|
QString openPath() const;
|
|
void setOpenPath(const QString &);
|
|
QString savePath() const;
|
|
void setSavePath(const QString &);
|
|
QStringList recent() const;
|
|
void setRecent(const QStringList &);
|
|
QStringList projects();
|
|
void setProjects(const QStringList &);
|
|
QString theme() const;
|
|
void setTheme(const QString &);
|
|
QThread::Priority jobPriority() const;
|
|
void setJobPriority(const QString &);
|
|
bool showTitleBars() const;
|
|
void setShowTitleBars(bool);
|
|
bool showToolBar() const;
|
|
void setShowToolBar(bool);
|
|
bool textUnderIcons() const;
|
|
void setTextUnderIcons(bool);
|
|
bool smallIcons() const;
|
|
void setSmallIcons(bool);
|
|
QByteArray windowGeometry() const;
|
|
void setWindowGeometry(const QByteArray &);
|
|
QByteArray windowGeometryDefault() const;
|
|
void setWindowGeometryDefault(const QByteArray &);
|
|
QByteArray windowState() const;
|
|
void setWindowState(const QByteArray &);
|
|
QByteArray windowStateDefault() const;
|
|
void setWindowStateDefault(const QByteArray &);
|
|
QString viewMode() const;
|
|
void setViewMode(const QString &viewMode);
|
|
QString exportFrameSuffix() const;
|
|
void setExportFrameSuffix(const QString &suffix);
|
|
bool convertAdvanced() const;
|
|
void setConvertAdvanced(bool);
|
|
ProcessingMode processingMode();
|
|
void setProcessingMode(ProcessingMode mode);
|
|
QString processingModeStr(ProcessingMode mode);
|
|
ProcessingMode processingModeId(const QString &mode);
|
|
|
|
// encode
|
|
QString encodePath() const;
|
|
void setEncodePath(const QString &);
|
|
bool encodeFreeSpaceCheck() const;
|
|
void setEncodeFreeSpaceCheck(bool);
|
|
bool encodeUseHardware() const;
|
|
void setEncodeUseHardware(bool);
|
|
QStringList encodeHardware() const;
|
|
void setEncodeHardware(const QStringList &);
|
|
bool encodeHardwareDecoder() const;
|
|
void setEncodeHardwareDecoder(bool);
|
|
bool encodeAdvanced() const;
|
|
void setEncodeAdvanced(bool);
|
|
bool showConvertClipDialog() const;
|
|
void setShowConvertClipDialog(bool);
|
|
bool encodeParallelProcessing() const;
|
|
void setEncodeParallelProcessing(bool);
|
|
|
|
// player
|
|
int playerAudioChannels() const;
|
|
void setPlayerAudioChannels(int);
|
|
QString playerDeinterlacer() const;
|
|
void setPlayerDeinterlacer(const QString &);
|
|
QString playerExternal() const;
|
|
void setPlayerExternal(const QString &);
|
|
bool playerGPU() const;
|
|
bool playerWarnGPU() const;
|
|
QString playerInterpolation() const;
|
|
void setPlayerInterpolation(const QString &);
|
|
bool playerJACK() const;
|
|
void setPlayerJACK(bool);
|
|
int playerDecklinkGamma() const;
|
|
void setPlayerDecklinkGamma(int);
|
|
int playerKeyerMode() const;
|
|
void setPlayerKeyerMode(int);
|
|
bool playerMuted() const;
|
|
void setPlayerMuted(bool);
|
|
QString playerProfile() const;
|
|
void setPlayerProfile(const QString &);
|
|
bool playerProgressive() const;
|
|
void setPlayerProgressive(bool);
|
|
bool playerRealtime() const;
|
|
void setPlayerRealtime(bool);
|
|
bool playerScrubAudio() const;
|
|
void setPlayerScrubAudio(bool);
|
|
int playerVolume() const;
|
|
void setPlayerVolume(int);
|
|
float playerZoom() const;
|
|
void setPlayerZoom(float);
|
|
int playerPreviewScale() const;
|
|
void setPlayerPreviewScale(int);
|
|
bool playerPreviewHardwareDecoder() const;
|
|
bool playerPreviewHardwareDecoderIsSet() const;
|
|
void setPlayerPreviewHardwareDecoder(bool);
|
|
int playerVideoDelayMs() const;
|
|
void setPlayerVideoDelayMs(int);
|
|
double playerJumpSeconds() const;
|
|
void setPlayerJumpSeconds(double);
|
|
QString playerAudioDriver() const;
|
|
void setPlayerAudioDriver(const QString &s);
|
|
bool playerPauseAfterSeek() const;
|
|
void setPlayerPauseAfterSeek(bool);
|
|
|
|
// playlist
|
|
QString playlistThumbnails() const;
|
|
void setPlaylistThumbnails(const QString &);
|
|
bool playlistAutoplay() const;
|
|
void setPlaylistAutoplay(bool);
|
|
bool playlistShowColumn(const QString &);
|
|
void setPlaylistShowColumn(const QString &, bool);
|
|
|
|
// timeline
|
|
bool timelineDragScrub() const;
|
|
void setTimelineDragScrub(bool);
|
|
bool timelineShowWaveforms() const;
|
|
void setTimelineShowWaveforms(bool);
|
|
bool timelineShowThumbnails() const;
|
|
void setTimelineShowThumbnails(bool);
|
|
bool timelineRipple() const;
|
|
void setTimelineRipple(bool);
|
|
bool timelineRippleAllTracks() const;
|
|
void setTimelineRippleAllTracks(bool);
|
|
bool timelineRippleMarkers() const;
|
|
void setTimelineRippleMarkers(bool);
|
|
bool timelineSnap() const;
|
|
void setTimelineSnap(bool);
|
|
int timelineTrackHeight() const;
|
|
void setTimelineTrackHeight(int);
|
|
bool timelineScrollZoom() const;
|
|
void setTimelineScrollZoom(bool);
|
|
bool timelineFramebufferWaveform() const;
|
|
void setTimelineFramebufferWaveform(bool);
|
|
int audioReferenceTrack() const;
|
|
void setAudioReferenceTrack(int);
|
|
double audioReferenceSpeedRange() const;
|
|
void setAudioReferenceSpeedRange(double);
|
|
bool timelinePreviewTransition() const;
|
|
void setTimelinePreviewTransition(bool);
|
|
void setTimelineScrolling(TimelineScrolling value);
|
|
TimelineScrolling timelineScrolling() const;
|
|
bool timelineAutoAddTracks() const;
|
|
void setTimelineAutoAddTracks(bool);
|
|
bool timelineRectangleSelect() const;
|
|
void setTimelineRectangleSelect(bool);
|
|
bool timelineAdjustGain() const;
|
|
void setTimelineAdjustGain(bool);
|
|
|
|
// filter
|
|
QString filterFavorite(const QString &filterName);
|
|
void setFilterFavorite(const QString &filterName, const QString &value);
|
|
double audioInDuration() const;
|
|
void setAudioInDuration(double);
|
|
double audioOutDuration() const;
|
|
void setAudioOutDuration(double);
|
|
double videoInDuration() const;
|
|
void setVideoInDuration(double);
|
|
double videoOutDuration() const;
|
|
void setVideoOutDuration(double);
|
|
int audioInCurve() const;
|
|
void setAudioInCurve(int);
|
|
int audioOutCurve() const;
|
|
void setAudioOutCurve(int);
|
|
bool askOutputFilter() const;
|
|
void setAskOutputFilter(bool);
|
|
|
|
// scope
|
|
bool loudnessScopeShowMeter(const QString &meter) const;
|
|
void setLoudnessScopeShowMeter(const QString &meter, bool b);
|
|
|
|
// Markers
|
|
void setMarkerColor(const QColor &color);
|
|
QColor markerColor() const;
|
|
void setMarkersShowColumn(const QString &column, bool b);
|
|
bool markersShowColumn(const QString &column) const;
|
|
void setMarkerSort(int column, Qt::SortOrder order);
|
|
int getMarkerSortColumn();
|
|
Qt::SortOrder getMarkerSortOrder();
|
|
|
|
// general continued
|
|
int drawMethod() const;
|
|
void setDrawMethod(int);
|
|
bool noUpgrade() const;
|
|
void setNoUpgrade(bool value);
|
|
bool checkUpgradeAutomatic();
|
|
void setCheckUpgradeAutomatic(bool b);
|
|
bool askUpgradeAutomatic();
|
|
void setAskUpgradeAutomatic(bool b);
|
|
bool askChangeVideoMode();
|
|
void setAskChangeVideoMode(bool b);
|
|
|
|
void sync();
|
|
QString appDataLocation() const;
|
|
static void setAppDataForSession(const QString &location);
|
|
void setAppDataLocally(const QString &location);
|
|
|
|
// layout
|
|
QStringList layouts() const;
|
|
bool setLayout(const QString &name, const QByteArray &geometry, const QByteArray &state);
|
|
QByteArray layoutGeometry(const QString &name);
|
|
QByteArray layoutState(const QString &name);
|
|
bool removeLayout(const QString &name);
|
|
int layoutMode() const;
|
|
void setLayoutMode(int mode = 0);
|
|
|
|
// general continued
|
|
bool clearRecent() const;
|
|
void setClearRecent(bool);
|
|
QString projectsFolder() const;
|
|
void setProjectsFolder(const QString &path);
|
|
QString audioInput() const;
|
|
void setAudioInput(const QString &name);
|
|
QString videoInput() const;
|
|
void setVideoInput(const QString &name);
|
|
QString glaxnimatePath() const;
|
|
void setGlaxnimatePath(const QString &path);
|
|
bool exportRangeMarkers() const;
|
|
void setExportRangeMarkers(bool);
|
|
int undoLimit() const;
|
|
bool warnLowMemory() const;
|
|
int backupPeriod() const;
|
|
void setBackupPeriod(int i);
|
|
mlt_time_format timeFormat() const;
|
|
void setTimeFormat(int format);
|
|
bool askFlatpakWrappers();
|
|
void setAskFlatpakWrappers(bool b);
|
|
QString dockerPath() const;
|
|
void setDockerPath(const QString &path);
|
|
QString chromiumPath() const;
|
|
void setChromiumPath(const QString &path);
|
|
QString screenRecorderPath() const;
|
|
void setScreenRecorderPath(const QString &path);
|
|
|
|
// proxy
|
|
bool proxyEnabled() const;
|
|
void setProxyEnabled(bool);
|
|
QString proxyFolder() const;
|
|
void setProxyFolder(const QString &path);
|
|
bool proxyUseProjectFolder() const;
|
|
void setProxyUseProjectFolder(bool);
|
|
bool proxyUseHardware() const;
|
|
void setProxyUseHardware(bool);
|
|
|
|
// Shortcuts
|
|
void clearShortcuts(const QString &name);
|
|
void setShortcuts(const QString &name, const QList<QKeySequence> &shortcuts);
|
|
QList<QKeySequence> shortcuts(const QString &name);
|
|
|
|
// Slideshow
|
|
double slideshowImageDuration(double defaultSeconds) const;
|
|
void setSlideshowImageDuration(double seconds);
|
|
double slideshowAudioVideoDuration(double defaultSeconds) const;
|
|
void setSlideshowAudioVideoDuration(double seconds);
|
|
int slideshowAspectConversion(int defaultAspectConversion) const;
|
|
void setSlideshowAspectConversion(int aspectConversion);
|
|
int slideshowZoomPercent(int defaultZoomPercent) const;
|
|
void setSlideshowZoomPercent(int zoomPercent);
|
|
double slideshowTransitionDuration(double defaultTransitionDuration) const;
|
|
void setSlideshowTransitionDuration(double transitionDuration);
|
|
int slideshowTransitionStyle(int defaultTransitionStyle) const;
|
|
void setSlideshowTransitionStyle(int transitionStyle);
|
|
int slideshowTransitionSoftness(int defaultTransitionSoftness) const;
|
|
void setSlideshowTransitionSoftness(int transitionSoftness);
|
|
|
|
// Keyframes
|
|
bool keyframesDragScrub() const;
|
|
void setKeyframesDragScrub(bool);
|
|
|
|
// Subtitles
|
|
void setSubtitlesShowColumn(const QString &column, bool b);
|
|
bool subtitlesShowColumn(const QString &column) const;
|
|
void setSubtitlesTrackTimeline(bool b);
|
|
bool subtitlesTrackTimeline() const;
|
|
void setSubtitlesShowPrevNext(bool b);
|
|
bool subtitlesShowPrevNext() const;
|
|
void setWhisperExe(const QString &path);
|
|
QString whisperExe();
|
|
void setWhisperModel(const QString &path);
|
|
QString whisperModel();
|
|
|
|
// Notes
|
|
void setNotesZoom(int zoom);
|
|
int notesZoom() const;
|
|
|
|
// Files
|
|
QString filesViewMode() const;
|
|
void setFilesViewMode(const QString &viewMode);
|
|
QStringList filesLocations() const;
|
|
QString filesLocationPath(const QString &name) const;
|
|
bool setFilesLocation(const QString &name, const QString &path);
|
|
bool removeFilesLocation(const QString &name);
|
|
QStringList filesOpenOther(const QString &type) const;
|
|
void setFilesOpenOther(const QString &type, const QString &filePath);
|
|
bool removeFilesOpenOther(const QString &type, const QString &filePath);
|
|
QString filesCurrentDir() const;
|
|
void setFilesCurrentDir(const QString &s);
|
|
bool filesFoldersOpen() const;
|
|
void setFilesFoldersOpen(bool b);
|
|
|
|
// Speech (Text-to-Speech dialog)
|
|
QString speechLanguage() const;
|
|
void setSpeechLanguage(const QString &code);
|
|
QString speechVoice() const;
|
|
void setSpeechVoice(const QString &voiceId);
|
|
double speechSpeed() const;
|
|
void setSpeechSpeed(double speed);
|
|
|
|
// Color Dialog
|
|
void saveCustomColors();
|
|
void restoreCustomColors();
|
|
|
|
public slots:
|
|
void reset();
|
|
|
|
signals:
|
|
void openPathChanged();
|
|
void savePathChanged();
|
|
void timelineDragScrubChanged();
|
|
void timelineShowWaveformsChanged();
|
|
void timelineShowThumbnailsChanged();
|
|
void timelineRippleChanged();
|
|
void timelineRippleAllTracksChanged();
|
|
void timelineRippleMarkersChanged();
|
|
void timelineSnapChanged();
|
|
void timelineScrollZoomChanged();
|
|
void timelineFramebufferWaveformChanged();
|
|
void playerAudioChannelsChanged(int);
|
|
void playerGpuChanged();
|
|
void audioInDurationChanged();
|
|
void audioOutDurationChanged();
|
|
void videoInDurationChanged();
|
|
void videoOutDurationChanged();
|
|
void audioInCurveChanged();
|
|
void audioOutCurveChanged();
|
|
void playlistThumbnailsChanged();
|
|
void viewModeChanged();
|
|
void filesViewModeChanged();
|
|
void smallIconsChanged();
|
|
void askOutputFilterChanged();
|
|
void timelineScrollingChanged();
|
|
void timelineAutoAddTracksChanged();
|
|
void timelineRectangleSelectChanged();
|
|
void timeFormatChanged();
|
|
void keyframesDragScrubChanged();
|
|
void timelineAdjustGainChanged();
|
|
|
|
private:
|
|
explicit ShotcutSettings();
|
|
explicit ShotcutSettings(const QString &appDataLocation);
|
|
void migrateRecent();
|
|
void migrateLayout();
|
|
|
|
QSettings settings;
|
|
QString m_appDataLocation;
|
|
QSettings m_recent;
|
|
};
|
|
|
|
#define Settings ShotcutSettings::singleton()
|
|
|
|
#endif // SETTINGS_H
|