1 #pragma once 2 3 #include "common/common_pch.h" 4 5 #include "mkvtoolnix-gui/main_window/tool_base.h" 6 #include "mkvtoolnix-gui/merge/file_identification_pack.h" 7 #include "mkvtoolnix-gui/util/settings.h" 8 9 #include <QList> 10 11 class QLineEdit; 12 class QStandardItem; 13 14 namespace mtx::bcp47 { 15 class language_c; 16 } 17 18 namespace mtx::bluray::disc_library { 19 struct info_t; 20 } 21 22 namespace mtx::gui::Merge { 23 24 enum class InitialDirMode { 25 ContentLastOpenDir 26 , ContentFirstInputFileLastOpenDir 27 }; 28 29 class MuxConfig; 30 31 class TabPrivate; 32 class Tab : public QWidget { 33 Q_OBJECT 34 35 protected: 36 MTX_DECLARE_PRIVATE(TabPrivate) 37 38 std::unique_ptr<TabPrivate> const p_ptr; 39 40 public: 41 explicit Tab(QWidget *parent); 42 ~Tab(); 43 44 virtual bool hasBeenModified(); 45 virtual bool isEmpty(); 46 virtual bool hasSourceFiles() const; 47 virtual bool hasDestinationFileName() const; 48 virtual bool hasTitle() const; 49 virtual bool hasSelectedNotAppendedRegularTracks() const; 50 51 virtual QString const &fileName() const; 52 virtual QString title() const; 53 virtual void load(QString const &fileName); 54 virtual void cloneConfig(MuxConfig const &config); 55 56 virtual void setChaptersFileName(QString const &fileName); 57 virtual void setTagsFileName(QString const &fileName); 58 virtual void setSegmentInfoFileName(QString const &fileName); 59 60 virtual QList<SourceFilePtr> const &sourceFiles(); 61 virtual QModelIndex fileModelIndexForFileNum(unsigned int num); 62 63 virtual void addOrAppendIdentifiedFiles(QVector<SourceFilePtr> const &identifiedFiles, QModelIndex const &fileModelIdx, IdentificationPack::AddMode addMode); 64 virtual void addIdentifiedFilesAsAdditionalParts(QVector<SourceFilePtr> const &identifiedFiles, QModelIndex const &fileModelIdx); 65 66 virtual void toggleSpecificTrackFlag(unsigned int wantedId); 67 virtual void changeTrackLanguage(QString const &formattedLanguage); 68 69 Q_SIGNALS: 70 void removeThisTab(); 71 void titleChanged(); 72 73 public Q_SLOTS: 74 // Input tab: 75 virtual void onSaveConfig(); 76 virtual void onSaveConfigAs(); 77 virtual void onSaveOptionFile(); 78 virtual void onAddFiles(); 79 virtual void onAddAdditionalParts(); 80 virtual void onAppendFiles(); 81 virtual void onRemoveFiles(); 82 virtual void onRemoveAllFiles(); 83 virtual void onShowCommandLine(); 84 85 virtual void selectAllTracks(); 86 virtual void selectAllVideoTracks(); 87 virtual void selectAllAudioTracks(); 88 virtual void selectAllSubtitlesTracks(); 89 virtual void selectAllTracksFromSelectedFiles(); 90 virtual void enableAllTracks(); 91 virtual void disableAllTracks(); 92 93 virtual void toggleMuxThisForSelectedTracks(); 94 virtual void toggleMuxThisForSelectedAttachedFiles(); 95 96 virtual void onOpenFilesInMediaInfo(); 97 virtual void onOpenTracksInMediaInfo(); 98 99 virtual void onTrackSelectionChanged(); 100 101 virtual void onMoveFilesUp(); 102 virtual void onMoveFilesDown(); 103 virtual void onMoveTracksUp(); 104 virtual void onMoveTracksDown(); 105 virtual void onMoveAttachmentsUp(); 106 virtual void onMoveAttachmentsDown(); 107 virtual void setupMoveUpDownButtons(); 108 virtual void enableMoveFilesButtons(); 109 110 virtual void setupInputLayout(); 111 112 virtual void onTrackNameChanged(QString newValue); 113 virtual void onTrackItemChanged(QStandardItem *item); 114 virtual void onMuxThisChanged(int selected); 115 virtual void onTrackLanguageChanged(mtx::bcp47::language_c const &newLanguage); 116 virtual void onDefaultTrackFlagChanged(int newValue); 117 virtual void onForcedTrackFlagChanged(int newValue); 118 virtual void onTrackEnabledFlagChanged(int newValue); 119 virtual void onHearingImpairedFlagChanged(int newValue); 120 virtual void onVisualImpairedFlagChanged(int newValue); 121 virtual void onTextDescriptionsFlagChanged(int newValue); 122 virtual void onOriginalFlagChanged(int newValue); 123 virtual void onCommentaryFlagChanged(int newValue); 124 virtual void onCompressionChanged(int newValue); 125 virtual void onTrackTagsChanged(QString newValue); 126 virtual void onDelayChanged(QString newValue); 127 virtual void onStretchByChanged(QString newValue); 128 virtual void onDefaultDurationChanged(QString newValue); 129 virtual void onTimestampsChanged(QString newValue); 130 virtual void onBrowseTimestamps(); 131 virtual void onFixBitstreamTimingInfoChanged(bool newValue); 132 virtual void onBrowseTrackTags(); 133 virtual void onSetAspectRatio(); 134 virtual void onSetDisplayDimensions(); 135 virtual void onAspectRatioChanged(QString newValue); 136 virtual void onDisplayWidthChanged(QString newValue); 137 virtual void onDisplayHeightChanged(QString newValue); 138 virtual void onStereoscopyChanged(int newValue); 139 virtual void onCroppingChanged(QString newValue); 140 virtual void onAacIsSBRChanged(int newValue); 141 virtual void onReduceAudioToCoreChanged(bool newValue); 142 virtual void onRemoveDialogNormalizationGainChanged(bool newValue); 143 virtual void onSubtitleCharacterSetChanged(int newValue); 144 virtual void onCuesChanged(int newValue); 145 virtual void onAdditionalTrackOptionsChanged(QString newValue); 146 virtual void onPreviewChapterCharacterSet(); 147 virtual void setChapterCharacterSet(QString const &characterSet); 148 virtual void onCopyFirstFileNameToTitle(); 149 virtual void onCopyOutputFileNameToTitle(); 150 virtual void onCopyTitleToOutputFileName(); 151 virtual void setDestinationFileNameFromSelectedFile(); 152 153 virtual void addToJobQueue(bool startNow, std::optional<Util::Settings::ClearMergeSettingsAction> clearSettings = std::nullopt); 154 155 virtual void reinitFilesTracksControls(); 156 157 virtual void onFileRowsInserted(QModelIndex const &parentIdx, int first, int last); 158 virtual void onTrackRowsInserted(QModelIndex const &parentIdx, int first, int last); 159 160 virtual void showFilesContextMenu(QPoint const &pos); 161 virtual void showTracksContextMenu(QPoint const &pos); 162 virtual void showAttachedFilesContextMenu(QPoint const &pos); 163 virtual void showAttachmentsContextMenu(QPoint const &pos); 164 165 // Output tab: 166 virtual void setupOutputFileControls(); 167 virtual void setDestination(QString const &newValue); 168 virtual void clearDestination(); 169 virtual void clearDestinationMaybe(); 170 virtual void clearTitle(); 171 virtual void clearTitleMaybe(); 172 173 virtual void onTitleChanged(QString newValue); 174 virtual void onBrowseOutput(); 175 virtual void showRecentlyUsedOutputDirs(); 176 virtual void changeOutputDirectoryTo(QString const &directory); 177 virtual void onGlobalTagsChanged(QString newValue); 178 virtual void onBrowseGlobalTags(); 179 virtual void onSegmentInfoChanged(QString newValue); 180 virtual void onBrowseSegmentInfo(); 181 virtual void onSplitModeChanged(int newMode); 182 virtual void onSplitOptionsChanged(QString newValue); 183 virtual void onLinkFilesClicked(bool newValue); 184 virtual void onSplitMaxFilesChanged(int newValue); 185 virtual void onSegmentUIDsChanged(QString newValue); 186 virtual void onPreviousSegmentUIDChanged(QString newValue); 187 virtual void onNextSegmentUIDChanged(QString newValue); 188 virtual void onChaptersChanged(QString newValue); 189 virtual void onBrowseSegmentUID(); 190 virtual void onBrowsePreviousSegmentUID(); 191 virtual void onBrowseNextSegmentUID(); 192 virtual void onBrowseChapters(); 193 virtual void onChapterTitleNumberChanged(int newValue); 194 virtual void onChapterLanguageChanged(mtx::bcp47::language_c const &newLanguage); 195 virtual void onChapterCharacterSetChanged(QString newValue); 196 virtual void onChapterDelayChanged(QString newValue); 197 virtual void onChapterStretchByChanged(QString newValue); 198 virtual void onChapterCueNameFormatChanged(QString newValue); 199 virtual void onWebmClicked(bool newValue); 200 virtual void onAdditionalOptionsChanged(QString newValue); 201 virtual void onEditAdditionalOptions(); 202 virtual void onPreviewSubtitleCharacterSet(); 203 virtual void setSubtitleCharacterSet(QString const &characterSet); 204 virtual void onChapterGenerationModeChanged(); 205 virtual void onChapterGenerationNameTemplateChanged(); 206 virtual void onChapterGenerationIntervalChanged(); 207 208 // Attachments tab: 209 virtual void onAttachmentSelectionChanged(); 210 virtual void onAttachmentNameChanged(QString newValue); 211 virtual void onAttachmentDescriptionChanged(QString newValue); 212 virtual void onAttachmentMIMETypeChanged(QString newValue); 213 virtual void onAttachmentStyleChanged(int newValue); 214 virtual void onAddAttachments(); 215 virtual void onRemoveAttachments(); 216 virtual void onRemoveAllAttachments(); 217 virtual void onSelectAllAttachments(); 218 virtual void addAttachments(QStringList const &fileNames); 219 220 virtual void enableDisableAllAttachedFiles(bool enable); 221 virtual void enableDisableSelectedAttachedFiles(bool enable); 222 virtual void attachedFileItemChanged(QStandardItem *item); 223 224 virtual void retranslateUi(); 225 virtual void handleClearingMergeSettings(Util::Settings::ClearMergeSettingsAction action); 226 227 virtual void signalRemovalOfThisTab(); 228 229 virtual void setupHorizontalScrollAreaInputLayout(); 230 virtual void setupHorizontalTwoColumnsInputLayout(); 231 virtual void setupVerticalTabWidgetInputLayout(); 232 233 protected: 234 virtual void setupAttachmentsControls(); 235 virtual void setupControlLists(); 236 virtual void setupInputControls(); 237 virtual void setupOutputControls(); 238 virtual void setupPredefinedTrackNames(); 239 240 virtual void setupInputToolTips(); 241 virtual void setupOutputToolTips(); 242 virtual void setupSplitModeLabelAndToolTips(); 243 virtual void setupAttachmentsToolTips(); 244 245 virtual void retranslateInputUI(); 246 virtual void retranslateOutputUI(); 247 virtual void retranslateAttachmentsUI(); 248 249 virtual QStringList selectFilesToAdd(QString const &title); 250 virtual QStringList selectAttachmentsToAdd(); 251 virtual void selectFilesAndIdentifyForAddingOrAppending(IdentificationPack::AddMode addMode); 252 virtual void setDefaultsFromSettingsForAddedFiles(QVector<SourceFilePtr> const &files); 253 254 virtual void enableFilesActions(); 255 virtual void enableTracksActions(); 256 virtual void enableAttachedFilesActions(); 257 virtual void enableAttachmentsActions(); 258 virtual void enableAttachmentControls(bool enable); 259 virtual void setInputControlValues(Track *track); 260 virtual void setOutputControlValues(); 261 virtual void setAttachmentControlValues(Attachment *attachment); 262 virtual void clearInputControlValues(); 263 virtual void setControlValuesFromConfig(); 264 virtual MuxConfig &updateConfigFromControlValues(); 265 virtual void withSelectedTracks(std::function<void(Track &)> code, bool notIfAppending = false, QWidget *widget = nullptr); 266 virtual void withSelectedAttachedFiles(std::function<void(Track &)> code); 267 virtual void withSelectedAttachments(std::function<void(Attachment &)> code); 268 virtual void addOrRemoveEmptyComboBoxItem(bool add); 269 virtual QString getOpenFileName(QString const &title, QString const &filter, QLineEdit *lineEdit, InitialDirMode intialDirMode = InitialDirMode::ContentLastOpenDir); 270 virtual QString getSaveFileName(QString const &title, QString const &defaultFileName, QString const &filter, QLineEdit *lineEdit, QString const &defaultSuffix); 271 virtual QString determineInitialDirForOpening(QLineEdit *lineEdit, InitialDirMode mode) const; 272 virtual QString determineInitialDirForSaving(QLineEdit *lineEdit) const; 273 virtual QString defaultFileNameForSaving(QString const &ext); 274 275 virtual void moveSourceFilesUpOrDown(bool up); 276 virtual void moveTracksUpOrDown(bool up); 277 virtual void moveAttachmentsUpOrDown(bool up); 278 279 virtual void moveOutputFileNameToGlobal(); 280 virtual void moveOutputFileNameToOutputTab(); 281 282 virtual QModelIndex selectedSourceFile() const; 283 virtual QList<SourceFile *> selectedSourceFiles() const; 284 virtual void selectSourceFiles(QList<SourceFile *> const &files); 285 286 virtual QList<Track *> selectedTracks() const; 287 virtual void selectTracks(QList<Track *> const &tracks); 288 virtual void selectAllTracksOfType(std::optional<TrackType> type); 289 290 virtual QList<Track *> selectedAttachedFiles() const; 291 virtual QList<Attachment *> selectedAttachments() const; 292 virtual void selectAttachments(QList<Attachment *> const &attachments); 293 virtual std::optional<QString> findExistingAttachmentFileName(QString const &fileName); 294 virtual AttachmentPtr prepareFileForAttaching(QString const &fileName, bool alwaysAdd); 295 virtual void addAttachmentsFromIdentifiedBluray(mtx::bluray::disc_library::info_t const &info); 296 297 virtual bool isReadyForMerging(); 298 virtual bool checkIfOverwritingIsOK(); 299 virtual bool checkIfMissingAudioTrackIsOK(); 300 virtual QString findExistingDestination() const; 301 302 virtual void setTitleMaybe(QVector<SourceFilePtr> const &files); 303 virtual void setTitleMaybe(QString const &title); 304 305 virtual void setOutputFileNameMaybe(bool force = false); 306 virtual QString suggestOutputFileNameExtension() const; 307 virtual QString generateUniqueOutputFileName(QString const &baseName, QDir const &outputDir, bool removeUniquenessSuffix = false); 308 309 virtual void enableDisableAllTracks(bool enable); 310 311 virtual QString currentState(); 312 313 virtual QString mediaInfoLocation(); 314 virtual void openFilesInMediaInfo(QStringList const &fileNames); 315 316 virtual void addSegmentUIDFromFile(QLineEdit &lineEdit, bool append); 317 virtual void addDataFromIdentifiedBlurayFiles(QVector<SourceFilePtr> const &files); 318 }; 319 320 } 321