From 291e40722c8746acd71f33f50c59a68d94b5c742 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 20:41:15 +0000 Subject: [PATCH 01/85] [Q_gui2] Make the gui compact and properly name XML elements Properly (re)name the gui's XML elements to suggest their meaning. Group the gui's bottom components together into the Navigation widget. This serves the purpose of making the interface more compact, and the mouse navigation easier. Shrinking the gui's window should not clutter or overlap elements. A minimum size should be respected to allow displaying every widget. The bottom components are put into individual sets that can be hidden independently. Enable floating Navigation and Codec widgets, and allow to dock them up/down and left/right respectively. Also allow the Toolbar to dock both up/down and left/right. Add a close button to the Navigation and Codec Options widgets, and enable context menus in the widgets main Menu, Toolbar, Navigation, and Codec Options. The View->Toolbars->Navigation menu option will toggle the Navigation visibility, hiding all of its components. Allow to select and copy into the clipboard current time, total time, selection duration, marker A time, and marker B time by highlighting the content of their own element. Redesign current time, marker A time, and marker B time elements to combine action buttons and text fields. This design fixes the displaying of the selection duration's seconds, that were cut due to insufficient space for the label element. --- .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 2374 +++++++++-------- 1 file changed, 1282 insertions(+), 1092 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index cb928e14e..bb33b722b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -27,22 +27,25 @@ 200 - + + + 0 + + + 9 + + + 9 + + + 9 + + + 9 + - + - 6 - - - 0 - - - 0 - - - 0 - - 0 @@ -65,28 +68,19 @@ QFrame::NoFrame - - QFrame::Raised - 0 - + Qt::Horizontal QSizePolicy::Expanding - - - 13 - 13 - - @@ -102,9 +96,6 @@ 21 - - Qt::PreventContextMenu - &Help @@ -128,12 +119,17 @@ &Toolbars - + - + + - + + + + + @@ -145,12 +141,12 @@ - &Auto + A&uto - &Custom + Cust&om @@ -160,7 +156,7 @@ - &Tools + Too&ls @@ -191,12 +187,18 @@ - - Qt::PreventContextMenu + + &Toolbar + + + true Qt::Horizontal + + false + TopToolBarArea @@ -216,19 +218,19 @@ - QDockWidget::NoDockWidgetFeatures + QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea - Codec O&ptions + &Codec Options - 1 + 2 - - + + 0 @@ -239,28 +241,25 @@ 9 - 0 + 9 9 - + 0 - - QLayout::SetDefaultConstraint - - + <b>Video Decoder</b> - + Qt::Vertical @@ -269,31 +268,19 @@ - 20 + 0 13 - + 0 - - 0 - - - 0 - - - 0 - - - 0 - - + Qt::Horizontal @@ -303,30 +290,18 @@ 13 - 53 + 0 - + 6 - - 0 - - - 0 - - - 0 - - - 0 - - + @@ -334,6 +309,22 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + @@ -341,6 +332,16 @@ + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + @@ -364,7 +365,7 @@ - + Qt::Vertical @@ -373,36 +374,21 @@ - 20 + 0 13 - - - - 0 - 0 - - - - - 180 - 16777215 - - + <b>Video Output</b> - - Qt::AutoText - - + Qt::Vertical @@ -411,31 +397,19 @@ - 20 + 0 13 - + 0 - - 0 - - - 0 - - - 0 - - - 0 - - + Qt::Horizontal @@ -444,36 +418,21 @@ - 12 + 13 0 - + 6 - - QLayout::SetDefaultConstraint - - - 0 - - - 0 - - - 0 - - - 0 - - + 0 0 @@ -522,7 +481,7 @@ - + Qt::Vertical @@ -531,34 +490,19 @@ - 20 + 0 13 - + - - - - 0 - 0 - - - - - 180 - 16777215 - - + <b>Audio Output</b> - - Qt::AutoText - @@ -568,10 +512,20 @@ + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + - + Qt::Vertical @@ -580,31 +534,19 @@ - 20 + 0 13 - + 0 - - 0 - - - 0 - - - 0 - - - 0 - - + Qt::Horizontal @@ -613,36 +555,21 @@ - 12 + 13 0 - + 6 - - QLayout::SetDefaultConstraint - - - 0 - - - 0 - - - 0 - - - 0 - - + 0 0 @@ -687,25 +614,10 @@ - + 6 - - QLayout::SetDefaultConstraint - - - 0 - - - 0 - - - 0 - - - 0 - @@ -733,18 +645,22 @@ - - - - 0 - 0 - - + ms + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + @@ -752,7 +668,7 @@ - + Qt::Vertical @@ -761,30 +677,21 @@ - 20 + 0 13 - - - - 0 - 0 - - + <b>Output Format</b> - - Qt::AutoText - - + Qt::Vertical @@ -793,19 +700,19 @@ - 20 + 0 13 - + 0 - + Qt::Horizontal @@ -814,21 +721,21 @@ - 12 + 13 0 - + 6 - + 0 0 @@ -858,19 +765,13 @@ - + Qt::Vertical QSizePolicy::Expanding - - - 20 - 10 - - @@ -878,28 +779,16 @@ - + 0 0 - - - 543 - 120 - - - - - 524287 - 120 - - - QDockWidget::NoDockWidgetFeatures + QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable - Qt::BottomDockWidgetArea + Qt::BottomDockWidgetArea|Qt::TopDockWidgetArea &Navigation @@ -907,14 +796,14 @@ 8 - + - + 0 0 - + 0 @@ -922,7 +811,7 @@ 9 - 1 + 9 9 @@ -931,896 +820,1073 @@ 9 - - - - 0 - 0 - - - - - 0 - 22 - - - - Qt::Horizontal - - - - - + - 12 - - 0 - - - 0 - - - 0 - - - 0 + + + + 0 + 0 + - - 0 + + QFrame::NoFrame + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + + + + + 0 + 0 + + + + + 64 + 107 + + + + QFrame::NoFrame + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 5 + 0 + + + + + + + + + + + + 0 + 0 + - + + QFrame::NoFrame + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + + + + true + + + + 0 + 0 + + + + + 22 + 22 + + + + ... + + + + :/new/prefix1/pics/volume_off.png + :/new/prefix1/pics/volume.png:/new/prefix1/pics/volume_off.png + + + true + + + true + + + + + + + + 0 + 0 + + + + + 22 + 80 + + + + 100 + + + 100 + + + Qt::Vertical + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 5 + 0 + + + + + + + + + + 0 - - - Play [SPACE] - - - - - - ... - - - - :/new/prefix1/pics/player_play.png:/new/prefix1/pics/player_play.png - - - - 24 - 24 - - - - true - - - - - - - Go to previous frame [LEFT] - - - ... - - - - :/new/prefix1/pics/back.png:/new/prefix1/pics/back.png - - - - 24 - 24 - - - - true - - - - - - - Go to next frame [RIGHT] - - - ... - - - - :/new/prefix1/pics/forward.png:/new/prefix1/pics/forward.png - - - - 24 - 24 - + + + Qt::Vertical - - true + + QSizePolicy::Expanding - + - - - Go to previous keyframe [DOWN] - - - ... - - - - :/new/prefix1/pics/player_rew.png:/new/prefix1/pics/player_rew.png + + + + 0 + 0 + - + - 24 - 24 + 0 + 32 - - true - - - - - - - Go to next keyframe [UP] - - - ... - - - - :/new/prefix1/pics/player_fwd.png:/new/prefix1/pics/player_fwd.png - - - - 24 - 24 - - - - true - - - - - - - Set start marker [CTRL+PAGEUP] - - - ... - - - - :/new/prefix1/pics/markA.png:/new/prefix1/pics/markA.png - - - - 27 - 24 - - - - true - - - - - - - Delete selection [DEL] - - - ... - - - - :/new/prefix1/pics/delete_selection.png:/new/prefix1/pics/delete_selection.png - - - - 24 - 24 - - - - true - - - - - - - Set end marker [CTRL+PAGEDOWN] - - - ... - - - - :/new/prefix1/pics/markB.png:/new/prefix1/pics/markB.png - - - - 27 - 24 - - - - true - - - - - - - Go to previous cut point [SHIFT+DOWN] - - - ... - - - - :/new/prefix1/pics/prev_cut.png:/new/prefix1/pics/prev_cut.png - - - - 24 - 24 - - - - true - - - - - - - Go to next cut point [SHIFT+UP] - - - ... - - - - :/new/prefix1/pics/next_cut.png:/new/prefix1/pics/next_cut.png - - - - 24 - 24 - - - - true - - - - - - - Search previous black frame - - - ... - - - - :/new/prefix1/pics/prev_black.png:/new/prefix1/pics/prev_black.png - - - - 24 - 24 - - - - true - - - - - - - Search next black frame - - - ... - - - - :/new/prefix1/pics/next_black.png:/new/prefix1/pics/next_black.png - - - - 24 - 24 - - - - true - - - - - - - Go to first frame [HOME] - - - ... - - - - :/new/prefix1/pics/player_start.png:/new/prefix1/pics/player_start.png - - - - 24 - 24 - - - - true - - - - - - - Go to last frame [END] - - - ... - - - - :/new/prefix1/pics/player_end.png:/new/prefix1/pics/player_end.png - - - - 24 - 24 - - - - true - - - - - - - Backward one minute [CTRL+DOWN] - - - ... - - - - :/new/prefix1/pics/backward1mn.png:/new/prefix1/pics/backward1mn.png - - - - 24 - 24 - - - - true - - - - - - - Forward one minute [CTRL+UP] - - - Forward one minute - - - ... - - - - :/new/prefix1/pics/forward1mn.png:/new/prefix1/pics/forward1mn.png - - - - 24 - 24 - - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 0 - 0 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Time: - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - 00:00:00.000 - - - 12 - - - Qt::AlignCenter - - - true - - - - - - - - 0 - 0 - - - - / 00:00:00.000 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 24 - 0 - - - - - - - - - 0 - 0 - - - - Frame type: - - - - - - - - 0 - 0 - - - - ? - + + QFrame::NoFrame + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Play [SPACE] + + + + + + ... + + + + :/new/prefix1/pics/player_play.png:/new/prefix1/pics/player_play.png + + + + 24 + 24 + + + + true + + + + + + + Go to previous frame [LEFT] + + + ... + + + + :/new/prefix1/pics/back.png:/new/prefix1/pics/back.png + + + + 24 + 24 + + + + true + + + + + + + Go to next frame [RIGHT] + + + ... + + + + :/new/prefix1/pics/forward.png:/new/prefix1/pics/forward.png + + + + 24 + 24 + + + + true + + + + + + + Go to previous keyframe [DOWN] + + + ... + + + + :/new/prefix1/pics/player_rew.png:/new/prefix1/pics/player_rew.png + + + + 24 + 24 + + + + true + + + + + + + Go to next keyframe [UP] + + + ... + + + + :/new/prefix1/pics/player_fwd.png:/new/prefix1/pics/player_fwd.png + + + + 24 + 24 + + + + true + + + + + + + Set start marker [CTRL+PAGEUP] + + + ... + + + + :/new/prefix1/pics/markA.png:/new/prefix1/pics/markA.png + + + + 27 + 24 + + + + true + + + + + + + Delete selection [DEL] + + + ... + + + + :/new/prefix1/pics/delete_selection.png:/new/prefix1/pics/delete_selection.png + + + + 24 + 24 + + + + true + + + + + + + Set end marker [CTRL+PAGEDOWN] + + + ... + + + + :/new/prefix1/pics/markB.png:/new/prefix1/pics/markB.png + + + + 27 + 24 + + + + true + + + + + + + Go to previous cut point [SHIFT+DOWN] + + + ... + + + + :/new/prefix1/pics/prev_cut.png:/new/prefix1/pics/prev_cut.png + + + + 24 + 24 + + + + true + + + + + + + Go to next cut point [SHIFT+UP] + + + ... + + + + :/new/prefix1/pics/next_cut.png:/new/prefix1/pics/next_cut.png + + + + 24 + 24 + + + + true + + + + + + + Search previous black frame + + + ... + + + + :/new/prefix1/pics/prev_black.png:/new/prefix1/pics/prev_black.png + + + + 24 + 24 + + + + true + + + + + + + Search next black frame + + + ... + + + + :/new/prefix1/pics/next_black.png:/new/prefix1/pics/next_black.png + + + + 24 + 24 + + + + true + + + + + + + Go to first frame [HOME] + + + ... + + + + :/new/prefix1/pics/player_start.png:/new/prefix1/pics/player_start.png + + + + 24 + 24 + + + + true + + + + + + + Go to last frame [END] + + + ... + + + + :/new/prefix1/pics/player_end.png:/new/prefix1/pics/player_end.png + + + + 24 + 24 + + + + true + + + + + + + Backward one minute [CTRL+DOWN] + + + ... + + + + :/new/prefix1/pics/backward1mn.png:/new/prefix1/pics/backward1mn.png + + + + 24 + 24 + + + + true + + + + + + + Forward one minute [CTRL+UP] + + + Forward one minute + + + ... + + + + :/new/prefix1/pics/forward1mn.png:/new/prefix1/pics/forward1mn.png + + + + 24 + 24 + + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 0 - 0 - - - - - - - - - - - - - - - 0 - 0 - - - - - 182 - 120 - - - - - 182 - 120 - - - - QDockWidget::NoDockWidgetFeatures - - - Se&lection - - - 8 - - - - - 0 - 0 - - - - - 2 - - - 9 - - - 9 - - - 9 - - - 9 - - - - - - 0 - 0 - - - - - 160 - 20 - - - - - - - - 9 - - - - - 4 - - - - - A: - - - - - - - B: - - - - - - - - 0 - 0 - - - - Go to marker A [PAGE UP] - - - 000000 - - - - - + - + 0 0 - - Go to Marker B [PAGE DOWN] - - - 000000 - + + QFrame::NoFrame + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 0 + 0 + + + + Go to Marker A [PAGE UP] + + + 99:99:99.999 + + + 00:00:00.000 + + + Qt::AlignCenter + + + true + + + + + + + + 0 + 0 + + + + Go to Marker B [PAGE DOWN] + + + 99:99:99.999 + + + 00:00:00.000 + + + Qt::AlignCenter + + + true + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 0 + + + + + + + + 0 + + + + + 0 + + + + + + 0 + 0 + + + + + 160 + 20 + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + 99:99:99.999 + + + 00:00:00.000 + + + Qt::AlignCenter + + + true + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + - - + + - + 0 0 - - - 160 - 0 - + + QFrame::NoFrame + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 99:99:99.999 + + + 00:00:00.000 + + + Qt::AlignCenter + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 0 + + + + + + + + + 0 + 0 + + + + 99:99:99.999 + + + 00:00:00.000 + + + Qt::AlignCenter + + + true + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + + 6 + + + 9 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Frame type: + + + + + + + + 0 + 0 + + + + ? + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + + + + + + + Qt::Vertical - - Selection: 000000 + + QSizePolicy::Expanding - + - - - - - - - - - 0 - 0 - - - - - 42 - 120 - - - - - 42 - 120 - - - - QDockWidget::NoDockWidgetFeatures - - - Qt::BottomDockWidgetArea - - - Vol&ume - - - 8 - - - - - - - - - true - - - - 0 - 0 - - - - - 22 - 22 - - - - - 22 - 22 - - - - ... - - - - :/new/prefix1/pics/volume_off.png - :/new/prefix1/pics/volume.png:/new/prefix1/pics/volume_off.png - - - true - - - true - - - - - - - - - - - 0 - 0 - - - - - 22 - 50 - - - - - 22 - 16777215 - - - - 100 - - - 100 - + - Qt::Vertical + Qt::Horizontal - + + QSizePolicy::Expanding + + - - - - - - - 0 - 0 - - - - - 82 - 120 - - - - - 82 - 120 - - - - QDockWidget::NoDockWidgetFeatures - - - Qt::BottomDockWidgetArea - - - Audio &Metre - - - 8 - - - - - 0 - 0 - - - - - 9 - - + - + 0 0 - 64 - 88 + 0 + 22 - - - 64 - 16777215 - + + QFrame::NoFrame + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 22 + + + + Qt::Horizontal + + + + @@ -1971,6 +2037,20 @@ Ctrl+Alt+N + + + true + + + true + + + S&lider + + + Ctrl+Alt+L + + true @@ -1999,6 +2079,48 @@ Ctrl+Alt+V + + + true + + + true + + + Tim&e + + + Ctrl+Alt+T + + + + + true + + + true + + + Frame T&ype + + + Ctrl+Alt+Y + + + + + true + + + true + + + Cont&rols + + + Ctrl+Alt+O + + true @@ -2083,7 +2205,8 @@ spinBox_TimeValue comboBoxFormat pushButtonFormatConfigure - horizontalSlider + toolButtonAudioToggle + volumeSlider toolButtonPlay toolButtonPreviousFrame toolButtonNextFrame @@ -2098,12 +2221,15 @@ toolButtonNextBlackFrame toolButtonFirstFrame toolButtonLastFrame - pushButtonTime + toolButtonBackOneMinute + toolButtonForwardOneMinute + selectionMarkerA + selectionMarkerB + thumbSliderHolder + selectionDuration currentTime - pushButtonJumpToMarkerA - pushButtonJumpToMarkerB - toolButtonAudioToggle - horizontalSlider_2 + totalTime + navigationSlider @@ -2146,6 +2272,22 @@ toggled(bool) navigationWidget setVisible(bool) + + + -1 + -1 + + + 79 + 274 + + + + + actionViewSlider + toggled(bool) + sliderWidget + setVisible(bool) -1 @@ -2189,6 +2331,54 @@ + + actionViewTime + toggled(bool) + timeWidget + setVisible(bool) + + + -1 + -1 + + + 601 + 569 + + + + + actionViewFrameType + toggled(bool) + frameTypeWidget + setVisible(bool) + + + -1 + -1 + + + 601 + 569 + + + + + actionViewControls + toggled(bool) + controlsWidget + setVisible(bool) + + + -1 + -1 + + + 220 + 569 + + + actionViewToolBar toggled(bool) From 64a9b118b1e622b4c250ad1adfd6ca9a1b46be0e Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 21:50:18 +0000 Subject: [PATCH 02/85] [Q_gui2] Rename elements following their XML definition --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 38467f4d5..9680efbc9 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -420,7 +420,7 @@ void MainWindow::volumeChange( int u ) _upd_in_progres++; - int vol = ui.horizontalSlider_2->value(); + int vol = ui.volumeSlider->value(); AVDM_setVolume(vol); _upd_in_progres--; @@ -429,7 +429,7 @@ void MainWindow::volumeChange( int u ) void MainWindow::audioToggled(bool checked) { if (checked) - AVDM_setVolume(ui.horizontalSlider_2->value()); + AVDM_setVolume(ui.volumeSlider->value()); else AVDM_setVolume(0); } @@ -674,7 +674,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect( ui.comboBoxAudio,SIGNAL(activated(int)),this,SLOT(comboChanged(int))); // Slider - slider=ui.horizontalSlider; + slider=ui.navigationSlider; ADM_mwNavSlider *qslider=(ADM_mwNavSlider *)slider; slider->setMinimum(0); slider->setMaximum(ADM_LARGE_SCALE); @@ -696,12 +696,12 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.toolButtonForwardOneMinute->installEventFilter(this); // Thumb slider - ui.sliderPlaceHolder->installEventFilter(this); - thumbSlider = new ThumbSlider(ui.sliderPlaceHolder); + ui.thumbSliderHolder->installEventFilter(this); + thumbSlider = new ThumbSlider(ui.thumbSliderHolder); connect(thumbSlider, SIGNAL(valueEmitted(int)), this, SLOT(thumbSlider_valueEmitted(int))); // Volume slider - QSlider *volSlider=ui.horizontalSlider_2; + QSlider *volSlider=ui.volumeSlider; volSlider->setMinimum(0); volSlider->setMaximum(100); connect(volSlider,SIGNAL(valueChanged(int)),this,SLOT(volumeChange(int))); @@ -1409,7 +1409,7 @@ void MainWindow::setMenuItemsEnabledState(void) ignoreResizeEvent = true; // en passant reset frame type label if no video is loaded if(!vid) - ui.label_8->setText(QT_TRANSLATE_NOOP("qgui2","?")); + ui.frameTypeValue->setText(QT_TRANSLATE_NOOP("qgui2","?")); } /** @@ -2157,10 +2157,10 @@ bool MainWindow::eventFilter(QObject* watched, QEvent* event) adjustZoom(os.width(),os.height()); break; } - if (watched == ui.sliderPlaceHolder) + if (watched == ui.thumbSliderHolder) { - thumbSlider->resize(ui.sliderPlaceHolder->width(), 16); - thumbSlider->move(0, (ui.sliderPlaceHolder->height() - thumbSlider->height()) / 2); + thumbSlider->resize(ui.thumbSliderHolder->width(), 16); + thumbSlider->move(0, (ui.thumbSliderHolder->height() - thumbSlider->height()) / 2); } break; @@ -2734,9 +2734,9 @@ uint8_t initGUI(const vector& scriptEngines) break; default: break; } - mw->ui.horizontalSlider_2->blockSignals(true); - mw->ui.horizontalSlider_2->setValue(qset->value("volume", 100).toInt()); - mw->ui.horizontalSlider_2->blockSignals(false); + mw->ui.volumeSlider->blockSignals(true); + mw->ui.volumeSlider->setValue(qset->value("volume", 100).toInt()); + mw->ui.volumeSlider->blockSignals(false); qset->endGroup(); // Hack: allow to drop other Qt-specific settings on application restart char *dropSettingsOnLaunch = getenv("ADM_QT_DROP_SETTINGS"); @@ -2819,7 +2819,7 @@ void UI_closeGui(void) qset->beginGroup("MainWindow"); qset->setValue("windowState", ((QMainWindow *)QuiMainWindows)->saveState()); qset->setValue("showMaximized", QuiMainWindows->isMaximized()); - qset->setValue("volume", WIDGET(horizontalSlider_2)->value()); + qset->setValue("volume", WIDGET(volumeSlider)->value()); qset->endGroup(); delete qset; qset = NULL; @@ -3149,7 +3149,7 @@ void UI_setFrameType( uint32_t frametype,uint32_t qp) { if(frametype == CLEAR_FRAME_TYPE) { - WIDGET(label_8)->clear(); + WIDGET(frameTypeValue)->clear(); return; } @@ -3177,7 +3177,7 @@ void UI_setFrameType( uint32_t frametype,uint32_t qp) sprintf(string,QT_TRANSLATE_NOOP("qgui2","%c-%s"),c,f); else sprintf(string,QT_TRANSLATE_NOOP("qgui2","%c-%s (%02d)"),c,f,qp); - WIDGET(label_8)->setText(string); + WIDGET(frameTypeValue)->setText(string); } /** From 93efb98ab96b2b0eea541a1030e32077b8ffd33d Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 13:08:18 +0000 Subject: [PATCH 03/85] [Q_gui2] Fix possible typo volume Metre -> Meter Follow the convention dictated by T_vumeter.{cpp,h}. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 14 ++++++------ .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 22 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 9680efbc9..c9023d6f4 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -839,7 +839,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.navigationWidget->setTitleBarWidget(dummy1); ui.selectionWidget->setTitleBarWidget(dummy2); ui.volumeWidget->setTitleBarWidget(dummy3); - ui.audioMetreWidget->setTitleBarWidget(dummy4); + ui.audioMeterWidget->setTitleBarWidget(dummy4); widgetsUpdateTooltips(); @@ -1784,7 +1784,7 @@ void MainWindow::restoreDefaultWidgetState(bool b) ui.navigationWidget->setVisible(true); ui.selectionWidget->setVisible(true); ui.volumeWidget->setVisible(true); - ui.audioMetreWidget->setVisible(true); + ui.audioMeterWidget->setVisible(true); ui.toolBar->setVisible(true); syncToolbarsMenu(); @@ -2466,7 +2466,7 @@ void MainWindow::calcDockWidgetDimensions(uint32_t &width, uint32_t &height) reqh += ui.menubar->height(); if(ui.toolBar->isVisible() && false==ui.toolBar->isFloating() && ui.toolBar->orientation()==Qt::Horizontal) reqh += ui.toolBar->frameSize().height(); - if(ui.navigationWidget->isVisible() || ui.selectionWidget->isVisible() || ui.volumeWidget->isVisible() || ui.audioMetreWidget->isVisible()) + if(ui.navigationWidget->isVisible() || ui.selectionWidget->isVisible() || ui.volumeWidget->isVisible() || ui.audioMeterWidget->isVisible()) reqh += ui.navigationWidget->frameSize().height(); height = reqh; } @@ -2529,7 +2529,7 @@ void MainWindow::syncToolbarsMenu(void) { #define EXPAND(x) ui.x ## Widget #define CHECKMARK(x,y) ui.menuToolbars->actions().at(x)->setChecked(EXPAND(y)->isVisible()); - CHECKMARK(0,audioMetre) + CHECKMARK(0,audioMeter) CHECKMARK(1,codec) CHECKMARK(2,navigation) CHECKMARK(3,selection) @@ -2745,9 +2745,9 @@ uint8_t initGUI(const vector& scriptEngines) delete qset; qset = NULL; // Probing for OpenGL fails if VU meter is hidden, delay hiding it. - vuMeterIsHidden = mw->ui.audioMetreWidget->isHidden(); + vuMeterIsHidden = mw->ui.audioMeterWidget->isHidden(); if(openglEnabled && vuMeterIsHidden) - mw->ui.audioMetreWidget->setVisible(true); + mw->ui.audioMeterWidget->setVisible(true); } QuiMainWindows = (QWidget*)mw; @@ -2794,7 +2794,7 @@ uint8_t initGUI(const vector& scriptEngines) openGLStarted=true; UI_Qt4InitGl(); if(vuMeterIsHidden) - mw->ui.audioMetreWidget->setVisible(false); + mw->ui.audioMeterWidget->setVisible(false); }else { ADM_info("OpenGL not activated, not initialized\n"); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index bb33b722b..ac53a925e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -123,7 +123,7 @@ - + @@ -825,7 +825,7 @@ 0 - + 0 @@ -835,7 +835,7 @@ QFrame::NoFrame - + 0 @@ -852,12 +852,12 @@ 0 - + 0 - + Qt::Vertical @@ -886,7 +886,7 @@ - + Qt::Vertical @@ -898,7 +898,7 @@ - + Qt::Vertical @@ -2135,7 +2135,7 @@ Ctrl+Alt+B - + true @@ -2143,7 +2143,7 @@ true - &Audio Metre + &Audio Meter Ctrl+Alt+M @@ -2236,9 +2236,9 @@ - actionViewAudioMetre + actionViewAudioMeter toggled(bool) - audioMetreWidget + audioMeterWidget setVisible(bool) From 1fc3ac6924213516a3120ae7f6a82312b2ad0831 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 22:34:17 +0000 Subject: [PATCH 04/85] [Q_gui2] Enable Navigation and Codec widgets docking features Docking features require the presence of the title bar. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index c9023d6f4..ea46fca38 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -829,14 +829,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect(ui.toolBar, SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(toolbarOrientationChangedSlot(Qt::Orientation))); //connect(ui.toolBar_2,SIGNAL(actionTriggered ( QAction *)),this,SLOT(searchToolBar(QAction *))); - QWidget* dummy0 = new QWidget(); - QWidget* dummy1 = new QWidget(); QWidget* dummy2 = new QWidget(); QWidget* dummy3 = new QWidget(); QWidget* dummy4 = new QWidget(); - ui.codecWidget->setTitleBarWidget(dummy0); - ui.navigationWidget->setTitleBarWidget(dummy1); ui.selectionWidget->setTitleBarWidget(dummy2); ui.volumeWidget->setTitleBarWidget(dummy3); ui.audioMeterWidget->setTitleBarWidget(dummy4); From b90f20f6747b159aef957c07f593ac14d441a00f Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 13:34:47 +0000 Subject: [PATCH 05/85] [Q_gui2] Remove residual dock widgets title bars Bottom dock widgets have been combined into the Navigation widget as frame elements. Remove residual code about setting title bars. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index ea46fca38..d848be4b2 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -829,14 +829,6 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect(ui.toolBar, SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(toolbarOrientationChangedSlot(Qt::Orientation))); //connect(ui.toolBar_2,SIGNAL(actionTriggered ( QAction *)),this,SLOT(searchToolBar(QAction *))); - QWidget* dummy2 = new QWidget(); - QWidget* dummy3 = new QWidget(); - QWidget* dummy4 = new QWidget(); - - ui.selectionWidget->setTitleBarWidget(dummy2); - ui.volumeWidget->setTitleBarWidget(dummy3); - ui.audioMeterWidget->setTitleBarWidget(dummy4); - widgetsUpdateTooltips(); this->adjustSize(); From 35eb0d472e139fb1c5571a301c30d4509f7dca2f Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 07:25:31 +0000 Subject: [PATCH 06/85] [Q_gui2] Remove residual dock widgets visibility checks Bottom dock widgets have been combined into the Navigation widget as frame elements. Remove residual code about checking heights. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index d848be4b2..f222b012b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -2454,7 +2454,7 @@ void MainWindow::calcDockWidgetDimensions(uint32_t &width, uint32_t &height) reqh += ui.menubar->height(); if(ui.toolBar->isVisible() && false==ui.toolBar->isFloating() && ui.toolBar->orientation()==Qt::Horizontal) reqh += ui.toolBar->frameSize().height(); - if(ui.navigationWidget->isVisible() || ui.selectionWidget->isVisible() || ui.volumeWidget->isVisible() || ui.audioMeterWidget->isVisible()) + if(ui.navigationWidget->isVisible()) reqh += ui.navigationWidget->frameSize().height(); height = reqh; } From a91583395e0d2816fd8e9b598331eb93f8030fb3 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Fri, 17 Mar 2023 18:47:42 +0000 Subject: [PATCH 07/85] [Q_gui2] New custom title bar for dock widgets Buttons float/dock and close to the left, add a title if set. Use the title's mnemonic & to switch to float/dock state. This solves the problem of Light and Dark themes that do not read dock widgets mnemonic correctly, putting a & into the widget's title. --- .../ADM_userInterfaces/ADM_gui/CMakeLists.txt | 5 +- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 7 ++ .../ADM_userInterfaces/ADM_gui/Q_titleBar.cpp | 77 +++++++++++++++ .../ADM_userInterfaces/ADM_gui/Q_titleBar.h | 30 ++++++ .../ADM_userInterfaces/ADM_gui/titleBar.ui | 94 +++++++++++++++++++ 5 files changed, 211 insertions(+), 2 deletions(-) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.cpp create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.h create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/titleBar.ui diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt b/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt index 838e31edb..2e464b87d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt @@ -1,7 +1,7 @@ SET(ADM_LIB ADM_gui${QT_LIBRARY_EXTENSION}) INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/../common/ADM_icons/") -ADM_QT_WRAP_UI(${ADM_LIB}_header gui2.ui ) -ADM_QT_WRAP_CPP(${ADM_LIB}_source Q_gui2.h ADM_mwNavSlider.h T_preview.h T_vumeter.h T_thumbSlider.h ADM_qtray.h FileAction.h) +ADM_QT_WRAP_UI(${ADM_LIB}_header gui2.ui titleBar.ui ) +ADM_QT_WRAP_CPP(${ADM_LIB}_source Q_gui2.h Q_titleBar.h ADM_mwNavSlider.h T_preview.h T_vumeter.h T_thumbSlider.h ADM_qtray.h FileAction.h) IF(APPLE) ADM_QT_ADD_RESOURCES(${ADM_LIB}_resource avidemux_osx.qrc) ELSEIF(WIN32) @@ -31,6 +31,7 @@ ENDIF(WIN32) SET(${ADM_LIB}_SRCS Q_gui2.cpp Q_gui2GL.cpp Q_gui2_menu.cpp + Q_titleBar.cpp T_preview.cpp T_vumeter.cpp #stubs.cpp diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index f222b012b..57ff70126 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -40,6 +40,7 @@ #include "ADM_cpp.h" #define MENU_DECLARE #include "Q_gui2.h" +#include "Q_titleBar.h" #ifdef BROKEN_PALETTE_PROPAGATION #include @@ -829,6 +830,12 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect(ui.toolBar, SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(toolbarOrientationChangedSlot(Qt::Orientation))); //connect(ui.toolBar_2,SIGNAL(actionTriggered ( QAction *)),this,SLOT(searchToolBar(QAction *))); + TitleBar *codecTitleBar = new TitleBar(ui.codecWidget->windowTitle()); + ui.codecWidget->setTitleBarWidget(codecTitleBar); + + TitleBar *navigationTitleBar = new TitleBar(ui.navigationWidget->windowTitle()); + ui.navigationWidget->setTitleBarWidget(navigationTitleBar); + widgetsUpdateTooltips(); this->adjustSize(); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.cpp new file mode 100644 index 000000000..a92f8f8a4 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.cpp @@ -0,0 +1,77 @@ +/*************************************************************************** + \file Q_titleBar + \brief Custom QDockWidget title bar + \author Matthew White + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "Q_titleBar.h" + +TitleBar::TitleBar(QString title /* = "" */) +{ + QString tt; + + ui.setupUi(this); + + // Can interpret text mnemonic (&) when a buddy is set (setBuddy). + ui.titleLabel->setText(title); + + tt = QT_TRANSLATE_NOOP("qgui2","Dock"); + ui.dockButton->setToolTip(tt); + ui.dockButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_TitleBarMinButton)); + connect(ui.dockButton,SIGNAL(clicked()),this,SLOT(dockParent())); + + tt = QT_TRANSLATE_NOOP("qgui2","Float"); + ui.floatButton->setToolTip(tt); + ui.floatButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_TitleBarMaxButton)); + connect(ui.floatButton,SIGNAL(clicked()),this,SLOT(floatParent())); + + tt = QT_TRANSLATE_NOOP("qgui2","Close"); + ui.closeButton->setToolTip(tt); + ui.closeButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_TitleBarCloseButton)); + connect(ui.closeButton,SIGNAL(clicked()),this,SLOT(closeParent())); +} + +void TitleBar::showEvent(QShowEvent *e) +{ + QDockWidget *dockWidget = qobject_cast(parentWidget()); + bool floating = dockWidget->isFloating(); + QWidget::showEvent(e); + ui.dockButton->setVisible(floating); + ui.floatButton->setVisible(!floating); + // Interpret text mnemonic (&). + if(floating) + ui.titleLabel->setBuddy(ui.dockButton); + else + ui.titleLabel->setBuddy(ui.floatButton); +} + +void TitleBar::dockParent(void) +{ + QDockWidget *dockWidget = qobject_cast(parentWidget()); + dockWidget->setFloating(false); +} + +void TitleBar::floatParent(void) +{ + QDockWidget *dockWidget = qobject_cast(parentWidget()); + dockWidget->setFloating(true); +} + +void TitleBar::closeParent(void) +{ + QDockWidget *dockWidget = qobject_cast(parentWidget()); + dockWidget->setVisible(false); +} + +TitleBar::~TitleBar() +{ +} diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.h new file mode 100644 index 000000000..e269c054a --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_titleBar.h @@ -0,0 +1,30 @@ +#ifndef Q_titleBar_h +#define Q_titleBar_h + +#include +#include +#include "ui_titleBar.h" + +/** + \class TitleBar +*/ +class TitleBar : public QWidget +{ + Q_OBJECT + +public: + TitleBar(QString title = ""); + virtual ~TitleBar(); + +protected: + void showEvent(QShowEvent *e); + +private: + Ui_TitleBar ui; + +private slots: + void dockParent(void); + void floatParent(void); + void closeParent(void); +}; +#endif // Q_titleBar_h diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/titleBar.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/titleBar.ui new file mode 100644 index 000000000..674bd38fd --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/titleBar.ui @@ -0,0 +1,94 @@ + + + TitleBar + + + + 0 + 0 + 213 + 36 + + + + + 0 + 0 + + + + Template + + + + 0 + + + + + ... + + + + + + + ... + + + + + + + ... + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 0 + + + + + + + + + 75 + true + false + + + + Title + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + From 9c251d1a5a67658c9ddccf9209f1dd47a0e2b60a Mon Sep 17 00:00:00 2001 From: Matthew White Date: Fri, 17 Mar 2023 18:48:24 +0000 Subject: [PATCH 08/85] [Q_gui2] Darken Light theme background FIXME Slightly darkening the Light theme windows' background helps to spot the dock widgets' resize handle, otherwise not visible enough. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 57ff70126..ee417d3f9 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1861,6 +1861,12 @@ void MainWindow::setLightTheme(void) { QApplication::setStyle(BASIC_QT_STYLE); QPalette pal = style()->standardPalette(); + // FIXME: This is a hack to have dock widgets' resize handle more + // visible on light themes. A better solution would be to change + // the resize handle color directly. In the meantime, a slightly + // darker window's color than that of the standard palette is + // applied. + pal.setColor(QPalette::Window, QColor(167,167,167)); qApp->setPalette(pal); #ifdef BROKEN_PALETTE_PROPAGATION PROPAGATE_PALETTE(pal) From 101fd3f88fbc6b709733bf010a7bd74d87cf82b7 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 12:31:04 +0000 Subject: [PATCH 09/85] [Q_gui2] Update Toolbars menu items Add new hideable items and resort Toolbars order, bottom dock widgets have been combined into the Navigation widget as frame elements. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index ee417d3f9..715726ec7 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -2530,12 +2530,17 @@ void MainWindow::syncToolbarsMenu(void) { #define EXPAND(x) ui.x ## Widget #define CHECKMARK(x,y) ui.menuToolbars->actions().at(x)->setChecked(EXPAND(y)->isVisible()); - CHECKMARK(0,audioMeter) + ui.menuToolbars->actions().at(0)->setChecked(ui.toolBar->isVisible()); CHECKMARK(1,codec) CHECKMARK(2,navigation) - CHECKMARK(3,selection) - CHECKMARK(4,volume) - ui.menuToolbars->actions().at(5)->setChecked(ui.toolBar->isVisible()); + // separator + CHECKMARK(4,audioMeter) + CHECKMARK(5,volume) + CHECKMARK(6,controls) + CHECKMARK(7,selection) + CHECKMARK(8,time) + CHECKMARK(9,slider) + CHECKMARK(10,frameType) #undef CHECKMARK #undef EXPAND } From e23adfb3b6f5d6eab34fe98b9b65aba6369830fe Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 12:31:39 +0000 Subject: [PATCH 10/85] [Q_gui2] Update widgets visibility Initialize new hideable items visibility, the Navigation dock widget contains new frame elements. Sort top to botton following the gui. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 715726ec7..27700a266 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1775,12 +1775,16 @@ void MainWindow::widgetsUpdateTooltips(void) */ void MainWindow::restoreDefaultWidgetState(bool b) { + ui.toolBar->setVisible(true); ui.codecWidget->setVisible(true); ui.navigationWidget->setVisible(true); - ui.selectionWidget->setVisible(true); - ui.volumeWidget->setVisible(true); ui.audioMeterWidget->setVisible(true); - ui.toolBar->setVisible(true); + ui.volumeWidget->setVisible(true); + ui.controlsWidget->setVisible(true); + ui.selectionWidget->setVisible(true); + ui.timeWidget->setVisible(true); + ui.sliderWidget->setVisible(true); + ui.frameTypeWidget->setVisible(true); syncToolbarsMenu(); updateZoomIndicator(); From 9ba232bc90a2fca0cc2cb1f8604328a1d2ed58d0 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Fri, 17 Mar 2023 21:50:15 +0000 Subject: [PATCH 11/85] [Q_gui2] Allow to hide the status bar Use the status bar as a XML widget. The status bar can be hidden via 'View->Toolbars->Status Bar'. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 39 +++++++++---------- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 +- .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 32 +++++++++++++++ 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 27700a266..9284324f2 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1776,6 +1776,7 @@ void MainWindow::widgetsUpdateTooltips(void) void MainWindow::restoreDefaultWidgetState(bool b) { ui.toolBar->setVisible(true); + ui.statusBarWidget->setVisible(true); ui.codecWidget->setVisible(true); ui.navigationWidget->setVisible(true); ui.audioMeterWidget->setVisible(true); @@ -2535,35 +2536,31 @@ void MainWindow::syncToolbarsMenu(void) #define EXPAND(x) ui.x ## Widget #define CHECKMARK(x,y) ui.menuToolbars->actions().at(x)->setChecked(EXPAND(y)->isVisible()); ui.menuToolbars->actions().at(0)->setChecked(ui.toolBar->isVisible()); - CHECKMARK(1,codec) - CHECKMARK(2,navigation) + CHECKMARK(1,statusBar) + CHECKMARK(2,codec) + CHECKMARK(3,navigation) // separator - CHECKMARK(4,audioMeter) - CHECKMARK(5,volume) - CHECKMARK(6,controls) - CHECKMARK(7,selection) - CHECKMARK(8,time) - CHECKMARK(9,slider) - CHECKMARK(10,frameType) + CHECKMARK(5,audioMeter) + CHECKMARK(6,volume) + CHECKMARK(7,controls) + CHECKMARK(8,selection) + CHECKMARK(9,time) + CHECKMARK(10,slider) + CHECKMARK(11,frameType) #undef CHECKMARK #undef EXPAND } /** - \fn addStatusBar - \brief Add status bar to the main window + \fn initStatusBar + \brief Initialize the main window's status bar */ -void MainWindow::addStatusBar(void) +void MainWindow::initStatusBar(void) { - QStatusBar * statusBar = new QStatusBar(this); - statusBar->setSizeGripEnabled(false); - this->statusBarInfo = new QLabel(""); - statusBar->addWidget(this->statusBarInfo); - - statusBar->setContentsMargins(4,0,4,0); - - this->setStatusBar(statusBar); + ui.statusBarWidget->setSizeGripEnabled(false); + ui.statusBarWidget->addWidget(this->statusBarInfo); + ui.statusBarWidget->setContentsMargins(4,0,4,0); updateStatusBarInfo(); } @@ -2811,7 +2808,7 @@ uint8_t initGUI(const vector& scriptEngines) } #endif mw->syncToolbarsMenu(); - mw->addStatusBar(); + mw->initStatusBar(); return 1; } diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 5792cff0d..581959517 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -123,7 +123,7 @@ class MainWindow : public QMainWindow void setZoomToFit(void); void updateZoomIndicator(void); void syncToolbarsMenu(void); - void addStatusBar(void); + void initStatusBar(void); void updateStatusBarInfo(void); void updateStatusBarDisplayInfo(const char * display); void updateStatusBarDecoderInfo(const char * decoder); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index ac53a925e..777393f1b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -120,6 +120,7 @@ &Toolbars + @@ -1892,6 +1893,7 @@ + @@ -2037,6 +2039,20 @@ Ctrl+Alt+N + + + true + + + true + + + Status &Bar + + + Ctrl+Alt+B + + true @@ -2283,6 +2299,22 @@ + + actionViewStatusBar + toggled(bool) + statusBarWidget + setVisible(bool) + + + -1 + -1 + + + 79 + 274 + + + actionViewSlider toggled(bool) From a700fbacbe3c6c3ee2c3d17db2dfe876d0062c0d Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 21 Mar 2023 19:11:22 +0000 Subject: [PATCH 12/85] [Q_gui2] Move 'Frame Type' label into the status bar --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 11 ++- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 + .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 87 ------------------- 3 files changed, 7 insertions(+), 93 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 9284324f2..517ab05fa 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1403,8 +1403,6 @@ void MainWindow::setMenuItemsEnabledState(void) // or loading a video with small dimensions, so ignore just this one resize event ignoreResizeEvent = true; // en passant reset frame type label if no video is loaded - if(!vid) - ui.frameTypeValue->setText(QT_TRANSLATE_NOOP("qgui2","?")); } /** @@ -1785,7 +1783,6 @@ void MainWindow::restoreDefaultWidgetState(bool b) ui.selectionWidget->setVisible(true); ui.timeWidget->setVisible(true); ui.sliderWidget->setVisible(true); - ui.frameTypeWidget->setVisible(true); syncToolbarsMenu(); updateZoomIndicator(); @@ -2546,7 +2543,6 @@ void MainWindow::syncToolbarsMenu(void) CHECKMARK(8,selection) CHECKMARK(9,time) CHECKMARK(10,slider) - CHECKMARK(11,frameType) #undef CHECKMARK #undef EXPAND } @@ -2576,6 +2572,8 @@ void MainWindow::updateStatusBarInfo(void) s += QString(QT_TRANSLATE_NOOP("qgui2","Input: %1x%2, %3fps | Decoder: %4 | Display: %5 | Zoom: %6%")) .arg(avifileinfo->width).arg(avifileinfo->height).arg(avifileinfo->fps1000/1000.0) .arg(statusBarInfo_Decoder).arg(statusBarInfo_Display).arg(statusBarInfo_Zoom); + if(!statusBarFrame_Type.isEmpty()) + s += QString(QT_TRANSLATE_NOOP("qgui2"," | Frame type: %1")).arg(statusBarFrame_Type); } else { @@ -3156,7 +3154,7 @@ void UI_setFrameType( uint32_t frametype,uint32_t qp) { if(frametype == CLEAR_FRAME_TYPE) { - WIDGET(frameTypeValue)->clear(); + ((MainWindow *)QuiMainWindows)->statusBarFrame_Type = ""; return; } @@ -3184,8 +3182,9 @@ void UI_setFrameType( uint32_t frametype,uint32_t qp) sprintf(string,QT_TRANSLATE_NOOP("qgui2","%c-%s"),c,f); else sprintf(string,QT_TRANSLATE_NOOP("qgui2","%c-%s (%02d)"),c,f,qp); - WIDGET(frameTypeValue)->setText(string); + ((MainWindow *)QuiMainWindows)->statusBarFrame_Type = QString(string); + ((MainWindow *)QuiMainWindows)->updateStatusBarInfo(); } /** * diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 581959517..35884cfae 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -136,6 +136,8 @@ class MainWindow : public QMainWindow static void updateCheckDone(int version, const std::string &date, const std::string &downloadLink); static MainWindow *mainWindowSingleton; + QString statusBarFrame_Type; + #ifdef __APPLE__ void fileOpenWrapper(QList list) { openFiles(list); } #endif diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index 777393f1b..b5cc6aa29 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -130,7 +130,6 @@ - @@ -1742,62 +1741,6 @@ - - - - - 0 - 0 - - - - QFrame::NoFrame - - - - 6 - - - 9 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - Frame type: - - - - - - - - 0 - 0 - - - - ? - - - - - - @@ -2109,20 +2052,6 @@ Ctrl+Alt+T - - - true - - - true - - - Frame T&ype - - - Ctrl+Alt+Y - - true @@ -2379,22 +2308,6 @@ - - actionViewFrameType - toggled(bool) - frameTypeWidget - setVisible(bool) - - - -1 - -1 - - - 601 - 569 - - - actionViewControls toggled(bool) From 3ae84d6cf21f5821aa76174f7035addc0814ea6b Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 22:38:23 +0000 Subject: [PATCH 13/85] [T_vumeter] Define volume meter size with macros --- .../ADM_userInterfaces/ADM_gui/T_vumeter.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp index 56949bb8d..1ad83435b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp @@ -40,6 +40,8 @@ static ADM_Qvumeter *vuWidget = NULL; #define DRED 0xFFBF0000 #define BLACK 0xFF000000 +#define VU_WIDTH 64 +#define VU_HEIGHT 88 #define VU_BAR_WIDTH 5 #define VU_PEAK_WIDTH 7 #define VU_BOTTOM_SCALE -60.0 // dBFS, must be negative @@ -51,11 +53,11 @@ ADM_Qvumeter::ADM_Qvumeter(QWidget *z, int width, int height) : QWidget(z) z->resize(width + 2, height + 2); rgbDataBuffer = new uint8_t[width * height * 4]; - for(int i=0;i<88;i++) + for(int i=0;ishow(); return true; @@ -158,11 +160,11 @@ bool UI_vuUpdate(int32_t volume[8]) if (activeChannelCount == 0) // just clear { - for(int i=0;i<88;i++) + for(int i=0;i= activeChannelCount) From 0c5ceef66de5bf03f26f62f1b6db18786daa69cf Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 14 Mar 2023 04:09:50 +0000 Subject: [PATCH 14/85] [T_vumeter] Increase volume meter height The gui interface has space for a taller volume meter. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp index 1ad83435b..658947fe8 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_vumeter.cpp @@ -41,7 +41,7 @@ static ADM_Qvumeter *vuWidget = NULL; #define BLACK 0xFF000000 #define VU_WIDTH 64 -#define VU_HEIGHT 88 +#define VU_HEIGHT 107 #define VU_BAR_WIDTH 5 #define VU_PEAK_WIDTH 7 #define VU_BOTTOM_SCALE -60.0 // dBFS, must be negative From 17e561922aa25f4544875ca950db09847a7fa8e9 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 00:11:34 +0000 Subject: [PATCH 15/85] [ADM_gui] Add Append icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/append.png | Bin 0 -> 949 bytes .../ADM_gui/pics/append@2x.png | Bin 0 -> 2056 bytes .../ADM_gui/pics/svg/append.svg | 3254 +++++++++++++++++ 7 files changed, 3262 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/append.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/append@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/append.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index 997ebc685..f18fa5804 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -5,6 +5,7 @@ pics/avidemux_window_icon_linux.png pics/back.png pics/calc.png + pics/append.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -40,6 +41,7 @@ pics/volume_off.png pics/back@2x.png pics/backward1mn@2x.png + pics/append@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index eb48cfb40..ab8c5c400 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -5,6 +5,7 @@ pics/avidemux.icns pics/back.png pics/calc.png + pics/append.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -40,6 +41,7 @@ pics/volume_off.png pics/back@2x.png pics/backward1mn@2x.png + pics/append@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 6491e4ccb..9f2f5f7a0 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -5,6 +5,7 @@ pics/avidemux_icon_small.png pics/back.png pics/calc.png + pics/append.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -40,6 +41,7 @@ pics/volume_off.png pics/back@2x.png pics/backward1mn@2x.png + pics/append@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index ac7b416aa..580ae7f08 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -5,6 +5,7 @@ pics/avidemux_icon_small.png pics/back.png pics/calc.png + pics/append.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -40,6 +41,7 @@ pics/volume_off.png pics/back@2x.png pics/backward1mn@2x.png + pics/append@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/append.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/append.png new file mode 100644 index 0000000000000000000000000000000000000000..81ae38d7f3e33d2d908a903078671bc63cc0a1b3 GIT binary patch literal 949 zcmV;m14{gfP)GP!v10h!(bKVwqON&LYNqF@+#v zBsU4WMewUpLlAwpxU3h}sNr(&R{Ow#;c(7*&ikB~-zc$IjNd8SZ$16LFt7tGFE97m z?RN859^7uXzin=A-YKP0$(hgR|4OIRf4siFe!8izuaBFX8vq6d252^$9oN}xHsbO4 zeJB+2Vp*0MjYcJzOiH<2mS8X_sZ>ge#iHoCE}2Y5ve~R?nkFYFCvtRjB$}p4sZ^3o zCL_A8OR-p#R4OIGU{K2CvLus9iAJMhS(d3-mSrXqiEkGd7nr8W>FFtkVc_w2C=?3# z{eE077p+zcyWI|es;a1}%EQA0l}d%l$w`{cCXGgesi`SywHkpyfbH#VAC_gAkw`=o zMfq^3sw#$I2p|rJLp&bOr|T6(kw_#WmSve8yGT(K4h{~uy1L^0{G4z&Orz1j?RIl^ zc1A9jzK-AT2Vi4kgXibxFAd&BlgM6Fhfm6a6$dV70`#bW5X zPOVmBZ*LEP@$qru@pxASbZpc8{e2D(52;qGM59qACMEz_TU(=2sZgy}Sy)*3`8E|1 zW@l%A+`?wVFbo=v24iDmxZQ59udlnR;LX76^)fUx^oEN5{(kcLJj27oxLhuto}L&T z9R)6VOJ`ZoP|Q+ z&vZK7`||SgX}R6vT2)o%=jZQ3p^#UJ#bPWiE$I%2!`D@)T}som>gww1z4HH0|113s X#^blM>O%mX00000NkvXXu0mjfQpL6E literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/append@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/append@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..400a1fe5c82998bd269e9e0d620682ffe9f96977 GIT binary patch literal 2056 zcmV+j2>17iP)sJ6fEydSA+S=L_FJHdg)j=ISdeoPjo9p@Vo8{!>pslTq zO-)UyoKC0S>-GMVF}5p%AR=E#NXUN#L3oy!nD|$2ZZ0VRU}$Ja86FkNj zPmHmkT{@kP0LZSSq@;lR)M~Z#?AbHB)oM*8B90pv7~p(9pJrraBywhE1{#e9EiElD zo6Tr#ZG~2=1puU`rlPa66K1m+CX)#~&jSFmva-|ww}~-ECX`6R;%^*{{DW2WEc8!ha3(Elu9L5S69*5 z*$DtJ7z{9*%?J$*h23t)(9jS7;Nr!LIDPsw0AOlr3J!+@M~)mpc6K(>($W9`qobn$ zfcW@$oIigaiHV5-fWE#y0Km}D5c2Z!pjNA~v9W=!t}XyTeSJM9CnpgZ840J;DSDCU z+ZovI6%rCcTCG<0+zWz0DwQfIYwPP72>N!Jl9GaV@7~FHQc@C}PG_)(3+_qG^E{@f zr)4}YE)FkVya?t{qGW5}M>>1G!h(b!KYkoVMMYptdM-9KH3h{yu*FB{ z%9SfJ^T6jlKPoCpa_Tb1P+MCoGw*adQCV3Tpk28(Jp=pp?Zd5Gw`6>5Yz!8Q1#jNG zk?;!_F5tw86SDTz)zz4vpAW#Qe{FgO%FD~4R;y*axVRV`$HC|Gi7X-_0@c;kvbNLH z(=Zy10b2F1O$Bi1&><8Q6v%i-M+X)b7BD$EDdE?zUl&u5uT@e~;y1b5jy4rQZEY>W z!onoX+w70j*ctJq{yk0Nj z;^HK{tgK9yGBCz)|Ni~|Nf4V_1I5L~SYKb4Foi;aii!%v#KcJW;^HFi-n}d9G$}rsi^@Gf#d$$)!Nz`N=iy(ZR6wPaqZf*0ImAhrUP&|9H^?QlJS(36r4PH63NNQ z68`AXBk`r@Yn7CgAT~BO0IUABrCg}7u@Ms!6Ea>^RfUz66+}cth>VC(R8%C}l>|XR zd3kw&cIDbqHoCE~fx^N#M@I+TZa1Q$qL7i1A(mCTy1GC_IC$`& zq^vSHIEaXd2qY&bi)9s?&4%&uap-h92!bG%Rh~Y5ikX=ia2$t>j0~}?(%s#S<>h7Y zJddobEbu%Jm&=8Yjt+eK^hs*?+p@~#%a-B!Wuth|)XU`r0Kzn;T&YU@ey?gh<<#M69xfuY^(9nSB=xBt8 zhhuJTPApc{)zx8bZ4Dg9VSIcX4u=B(@bKY7q^GBYi16ge69AvnjNaZ}#KpzI=kuYl zu~D3%mX;PAIB)>#>+7hmuLl5_OeW}bIw+M&EH5vMIhh~`#Bto`Hz*?FtX6C4&sN-h z{``3g5pgUhCkF9>A{tz(GVa0RBu%OZzJ~H<#GgAG!?&gF>Ux>`L=rw79tFGa8N3PfS0v mcJ + + + From f2ddafeb4609f7d282227ed94d6e1e2e861076b4 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 16:10:41 +0000 Subject: [PATCH 16/85] [ADM_gui] Add 'Save Script' icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/savescript.png | Bin 0 -> 981 bytes .../ADM_gui/pics/savescript@2x.png | Bin 0 -> 1959 bytes .../ADM_gui/pics/svg/savescript.svg | 3103 +++++++++++++++++ 7 files changed, 3111 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/savescript.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/savescript@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/savescript.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index f18fa5804..ec538393d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -6,6 +6,7 @@ pics/back.png pics/calc.png pics/append.png + pics/savescript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -42,6 +43,7 @@ pics/back@2x.png pics/backward1mn@2x.png pics/append@2x.png + pics/savescript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index ab8c5c400..e32631db3 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -6,6 +6,7 @@ pics/back.png pics/calc.png pics/append.png + pics/savescript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -42,6 +43,7 @@ pics/back@2x.png pics/backward1mn@2x.png pics/append@2x.png + pics/savescript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 9f2f5f7a0..9c65c03dc 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -6,6 +6,7 @@ pics/back.png pics/calc.png pics/append.png + pics/savescript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -42,6 +43,7 @@ pics/back@2x.png pics/backward1mn@2x.png pics/append@2x.png + pics/savescript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 580ae7f08..daa01699e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -6,6 +6,7 @@ pics/back.png pics/calc.png pics/append.png + pics/savescript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -42,6 +43,7 @@ pics/back@2x.png pics/backward1mn@2x.png pics/append@2x.png + pics/savescript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/savescript.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/savescript.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7bd007c95c0ce9be11c66bdd893c6cb3ef81a6 GIT binary patch literal 981 zcmV;`11kK9P)M4hozo3^&< ze}Dh^dSPJ!%evSwj^l80a)Q>Ud!ehVE0E1*?;IW;{-%`rtRAEakV>V<<#JUCE48z; z!*n9SReiD9#=uw>BL0`wzbd6>q?EbJ7!M$oO4X|rfI^|bcfiLr_P4-RG#a-os~tFK z2$-FnWn^T;li0Rx=I7@D5JG_VelCV#cx)cP%E}6xo0}ddT_>SmRRJu^s%q-{kgu;7 zd{-fqQs-xylu|bYIF7^i_BN$b>D+dFeB3azZQB9hCr*1VfGwreJvL zJQU66(FrgKnSbFEDdnrOy(yp!85|sBZFrcU8$hx`@Tm~&!UHMg-<9_+1(YG9qoX{z zaf3%Skb)3=VHo@qjTV7qZLBXq8FDio=a=4Io}WQVz?VW$oR}aK3b~xlY%f4-?PuU) z7zXk2apv0FSq8org8$-idU|@G!B0aF(CKu#u(-I$WkbI#7x+992?WAn-Fk4~?(gr5 zY&Kh{S3wYXY1{VgqoX5VRa8h|+hj7Ca#9Vvu623`b(|S*mA>Jk00000NkvXXu0mjf DyJN0< literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/savescript@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/savescript@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..605a1661a7031279ebcd635b00388471a223efba GIT binary patch literal 1959 zcmV;Y2Uz%tP)7%! z8OML`%y?|4iQ^`*9oKb}Dvpy<1Qnu}mabYjH3&LrLCfwUSPAF}I91|;xWJ97R9v|A z!pANPg#n~RyDVzOE?RY0i?j>mL$R7vC2Z=A6C8UJdpsW;#!gL|Nj%PEmji!kWO?3? zdH(Z0@ALlO=N$paz@g@)5G+if0&HrUW(C|g00M{s9|leV@#eiC;NTiR4g3u#9Rvvh zqyY_h0yqjt0rtNEybb&cc$EVnp){|4Ad}1GM$_rEg!}gPjr;fSJBy2pgUx3+z+ZG- z50pg9=LI08QYq=gi4%f=+-P!gl3TZKB?^VYIUc^0KuK(Omq6Zp3qlAkT(}_Ta=8TX z81N);78ulZT@K7i-Z8Oz?XopojrSY^yJBt zTW%#u{yogL?On?q$Km$v+t&R2{0eSpeGYg9=!%4l8$v${ojt$r%%hKX$~zcESv)(Ko9V;uItO4 zx|1h?OeVvXD_1-lUcY{wnVA{S@_N0_^71lkYipRM=~=J8zh5307#LbzU40Bl0#V@i zos#e*P^nb7bLWm{!*aRoS!UZd<#L&snHlP(63QNPBLZSbQF>QQ^P|8sxFYaHUDsDN zP1`jpcoHZUi`=+zW7h|J!M1H`wHlR5g`aP1aIu3n>%gF*giO=?5O4`t0R9Tpc58QF zlep#cLUb;x!r?G|eSJMZ4p$|sd$svMqL3Ga5U8pua19UBfqkAXlt?6)nws)uK($)s z=FOYF+O*(jq}t(0AQp>p=FAyiovp2{bxojKcoJAzTH@NZYrZ;b#r*dZo&;*O8gp}V z@24$Y;eTopcZ2^E_@L2sBFnaIPwj7-CYEJ&B(K}iR$szh2YPf}Z;uQPU;&Mm#PChP zaUAOPI_vA})M~XINm!OesZ`ok#O(yjvM>xo0KK@$HUoICt%?o&8z|_yUeq+r^i9At zO^U@L)6>&bDwQ4Ia!X3rYP-sqM_?ERjYdP@s?sk4pJ^K1PT&FXEbwbx*Gs+$*tX5) z<|gaw>wLRh=HqReXQ$QlREPaW9fv;(f#Z&-Dj?M=b3k%Htbp@%=&wSCrcUxrKv5J9 zA3n^$zyLqm*x*lw!3hAzaj!0+0H1v5jskbPyM+qyDX3Rr4tNt-*EG%X9ff3BCLWKI z&*upZ5A*3zh-D$ZgXkv5yh( zf(?8b>VJS4;3vRKz`I>Xp%zqCC7n)hk+`(7!b_$}Z!mUm;R+bPfC6s%0xzcvLAq1b7B7vB+=jB&)C=)*=&~Y^z`t2hkM;=A-JTfSkb71>pqJ>P1CepV{_ngT9PE<@i^n- z;~Y79l*`d5FYZBNNeDixD1=fe`uh4D+(oKR2PZ}cvLBFTnSp@;^7%Z;Oopc;5nl5k zQ4)fSib5@!WMX21NF>sd%pI+Y2ezS66otXTLGt-LvEgAJ4~3ZBMq&f_oGkNhvtBx# zMwb1ZIvwbaEEEcnNF@Jf%#@;R=_UjCf-E!F9H~quLpbbz3EWN~s8jkaghC-w zsTBEq9wV9LqN1=2d_|JD)0`{WY?f#=+LGhGY-oj12e2PJcwkHJxl-V&tkG!D+uJMt zRjqPrb5p#hsw84D$1n`%-o1N>ruF4=*~Zmy9oeAZevnZHmI{S}C=?0@=~gljDT9h( znAK{vwy>~ZZZp;b-of2U?zxC4&5Cc~4qcERd+Y=W2;pwnP2AM^b|W322;60lMGPJi t_&cuZ3;J^#F9>#bkp}LO!JfIw{{Sr^oNu|R_Zk2I002ovPDHLkV1ky+oznmS literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/savescript.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/savescript.svg new file mode 100644 index 000000000..3c83ae856 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/savescript.svg @@ -0,0 +1,3103 @@ + + + + From ba3d3e254b931440ab5965a2f1346a63a495af8f Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 16:31:48 +0000 Subject: [PATCH 17/85] [ADM_gui] Add 'Run Script' icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/runscript.png | Bin 0 -> 1035 bytes .../ADM_gui/pics/runscript@2x.png | Bin 0 -> 2646 bytes .../ADM_gui/pics/svg/runscript.svg | 3090 +++++++++++++++++ 7 files changed, 3098 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/runscript.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/runscript@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/runscript.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index ec538393d..29b6a221b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -7,6 +7,7 @@ pics/calc.png pics/append.png pics/savescript.png + pics/runscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -44,6 +45,7 @@ pics/backward1mn@2x.png pics/append@2x.png pics/savescript@2x.png + pics/runscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index e32631db3..41c1aa293 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -7,6 +7,7 @@ pics/calc.png pics/append.png pics/savescript.png + pics/runscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -44,6 +45,7 @@ pics/backward1mn@2x.png pics/append@2x.png pics/savescript@2x.png + pics/runscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 9c65c03dc..09043318a 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -7,6 +7,7 @@ pics/calc.png pics/append.png pics/savescript.png + pics/runscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -44,6 +45,7 @@ pics/backward1mn@2x.png pics/append@2x.png pics/savescript@2x.png + pics/runscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index daa01699e..eba694f9d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -7,6 +7,7 @@ pics/calc.png pics/append.png pics/savescript.png + pics/runscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -44,6 +45,7 @@ pics/backward1mn@2x.png pics/append@2x.png pics/savescript@2x.png + pics/runscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/runscript.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/runscript.png new file mode 100644 index 0000000000000000000000000000000000000000..331cac3a2bb7bf4e533909ee2be84a2ea3cd7ad6 GIT binary patch literal 1035 zcmV+m1oZofP)llu(RufEb$axFzU_@!(;2Ym7k;O8F|6bglc!Jy-$eN}a;YA1l9s-AlI@eItVYQ-twHEU~YpSxVH z;S=B$XJD=#W>wW=0443fH2BZLEmeK#Nd`8X?fUTWFyrInpM^r9w~xSIsDNJ-{Oylh zC4~&$0B%6-i*Qp_YmS4Dj*gZsFE3x;*w`?}#>R5#bo%2Wc+K;$I1ApcB8>q&S^+Bq z)+I20h4XG$Qq_i|2B}o)>eSR!B|t|<2j%7E<9T?482oHgF5#eyn%*-r09F8oI3x~ryiA16l@LhzxdwK01WM792@SccJ5ChE~ z*j>*bOhMKU2f$SkAsUU=2ZO;JkZWma`8ytue*y%2kbaQYY(lmc9sq5J+(HH-5>3Ku zKKShiu$}|^9N2r{TU8C%?e>o*Cnpa8`uqDcfk5DH2j~rOoCW(lSk3VJI$RQwh2jjJ zT2)n5F@tE#`?ke~mRlR}Qi<0TUl6Ze3e!{IQe zr>Acf2mgeSuN}VB=lo!%!OTG}30XJn0u3TUEEfBqySv*2ay>mgW-J!FR&0=mG`L|m znKwy;=?4=yX8G$X7=K<*L?M+oyR(^MM&LVPW6MU`k zM-QGjJK!x4|zWTZet8)A{AVz<|x|c3X{&jb9HA4rY!EQ$)7zLu(hT z%og=+fTtcdw&3PI1VkitR6H~^^u_Ax>Zf&ebr(iPMz)Ub7gzqVi`0NW0T&DrNhY9c zA3BeN12i=?g}h$x#izmZH%aY7X9C_5k)-YafAYU>@DDwmV_OnLy@vn*002ovPDHLk FV1giX4eBDTd7zkmUcB;n0==jwcuoQ4At+j(f zuw!e(Dls6i2Zv0lAFxS>#5OSCWUOn84Al^01Omp8WOwg9{o~#ZyPE|8naMcA^ViPq zIq&;C=e*~A-*Z+NhQT)(uE8eob#Ya|VB@NQ!NyeqgAI4=gOt*PEhu6bhIOSKtyr%?mSGqXaCSgSIRtnZcn-KpN~v8T-T;)9mFd8yGiS~; zH#awr4g>k0@4gIXjKDeda&N?*2YncFnYIqmK3_dosg)A~h{*MTCS=0?bR33R~ga2BycEC6zV zCUD&XV}MtH`LV6KTx4fw>p=PL-Mih*&CP7uv}uTCSx-eGk*R?|;DVv*EZ|&Va}JDg zxWynKMHadds0Wb`*8v-VrBceY%OM{K1YF0DA1?s1V{z~I`>C(59~O;9H#9XhWlAYi zo(CzV4_FMmcsq=005LYjxRhyh1n?$^nQ$%eJK!NH<3l0gp~4EK&N3C7tH0sU{Fg>PhZs8*_jp$1{3TqT)0sAe7?_I zF4xZW>(@se;sSf~e+!g92)-8>7$R{TO`P9N;NQThMW8-Rn&1L90?&XCSOQc5qs|w* zF?c*4A8>CV5YQr#a~ad?^|D~W0#gX_m)zXk&N%X;9NSBt0N=(GpaCd31&3xpIr_2NP;qB_` znxK@LzJ2@lgt>);g||3i8hbrO?*{^$z*Nu|6n4 zfFr`h-l7TxudITedx730qeZ}8(5`m~0F#|^&%uKS-9ULqM~Anuu`%JCEMB}=2_fnN zfxxj~Fqj9_j(}U=1ozA&A7P*ZSPngwz1xd`qYlS@42WUpOq>KB0oHAWFYW~OdD6Js zfdAuH@=^6qp5s;7j09V2fcGXH)Tn zD}15J%*^xv75nz>(@&f@(f@r$Mg|211z})wdwcs=cA=NjYo`<-r4&v@d<=MYDqPb< z;_3s0fGJ?LK&#vBerVOIRW}JCCU4ueEn(cedGnOp?fy*H^*2JH&}pDD1g*~81dIpv z1JmIe;91}?Ddn*9)tvzXoPinG7l$Vn!mzhNT$eQN05A>AkL?<=XvK;Z`_t3Yf6>y? z;yrx$a6;-VE-p5O5U+*9;V+#-xDQy+1|JrH*_dQ|1h5B01q`FV1aW;T5eWjEoc?WK zvw-qd;Cl^7?x*(xMPPmo?*pZId3pc5>#n=Lt(2NoU0t2vBtJi2WoBlEbzR?*mzNiX z{*-+HDD8yzWaCH0^=b)>dCbLqo!pl9CbyyyNrv{u6%}c6Q=@ptKvB=0T*EfmjA?1+NbZ zfbBqTEM@l#a0<~hV0#ASz6qYiDU4MCB@pg~cYp=Jhe|1{udnY0rBtck?{~$g&dkhA z^7Hc}nx<_&bm&kt*`6cfBcL=4d&(gE#}s}`fW6=uDH}V-FCR#sk&o?(jDQTI>vH z0D4mE6UMIJRnU#ymON@0#;F+j<;$15P1Bs;+uNI&-1khMK3!#GWSj-I6c!eyT>WGb zhGCq-E?&=9L3arQ+n6|x8YE>Q6?bO4fq9^6p$k|ItT7CuD}H=oVIe|@QQh6$1Jc{w zci*jq5Pus!e0b}nJY+dO)&Q#m@Wm`p@lI7zUP)QVI)NFW_P}Z2abSaC7~RR^gb-#l z8htqViRcDi03O*3r;1YaV&@gm1{8p5 zgcI0JRQ36K5yLQ4Yinz}WmykQojUb&d3iZtA70?dm@#AOi;Igd>v7C5j2_@s;Qj;9 zF%8tm7Z9Kzp*8pfCfz>X&ky9NYw@P*+Ra3Aom_>03=p{lAXt*x!?uiy}j%hFWZtUoYh}hq(SK@hHN-6g3+ou&4 z7Ft(|e3JbE&+GjHzNz@e|3h + + + From 23e460831001d0677383f08fbc331876bf1bbdf0 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 14:25:02 +0000 Subject: [PATCH 18/85] [ADM_gui] Add 'Debug Script' icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/debugscript.png | Bin 0 -> 1489 bytes .../ADM_gui/pics/debugscript@2x.png | Bin 0 -> 3668 bytes .../ADM_gui/pics/svg/debugscript.svg | 3398 +++++++++++++++++ 7 files changed, 3406 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/debugscript.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/debugscript@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/debugscript.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index 29b6a221b..dab5fd091 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -8,6 +8,7 @@ pics/append.png pics/savescript.png pics/runscript.png + pics/debugscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -46,6 +47,7 @@ pics/append@2x.png pics/savescript@2x.png pics/runscript@2x.png + pics/debugscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index 41c1aa293..ccf9d1b05 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -8,6 +8,7 @@ pics/append.png pics/savescript.png pics/runscript.png + pics/debugscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -46,6 +47,7 @@ pics/append@2x.png pics/savescript@2x.png pics/runscript@2x.png + pics/debugscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 09043318a..a49cedd6c 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -8,6 +8,7 @@ pics/append.png pics/savescript.png pics/runscript.png + pics/debugscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -46,6 +47,7 @@ pics/append@2x.png pics/savescript@2x.png pics/runscript@2x.png + pics/debugscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index eba694f9d..b72ddb8f8 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -8,6 +8,7 @@ pics/append.png pics/savescript.png pics/runscript.png + pics/debugscript.png pics/fileopen.png pics/filesave.png pics/filesaveas.png @@ -46,6 +47,7 @@ pics/append@2x.png pics/savescript@2x.png pics/runscript@2x.png + pics/debugscript@2x.png pics/fileopen@2x.png pics/filesave@2x.png pics/forward1mn@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/debugscript.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/debugscript.png new file mode 100644 index 0000000000000000000000000000000000000000..37637d4804df575eee433ca22618374d6ca09ec8 GIT binary patch literal 1489 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 z + + + From 26394504bf92dc24ea870cd48bcb34e46b3526dc Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 00:19:11 +0000 Subject: [PATCH 19/85] [ADM_gui] Add Undo icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/svg/undo.svg | 119 ++++++++++++++++++ .../ADM_userInterfaces/ADM_gui/pics/undo.png | Bin 0 -> 972 bytes .../ADM_gui/pics/undo@2x.png | Bin 0 -> 2353 bytes 7 files changed, 127 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/undo.svg create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/undo.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/undo@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index dab5fd091..3d056bf6c 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -18,6 +18,7 @@ pics/info.png pics/markA.png pics/markB.png + pics/undo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -55,6 +56,7 @@ pics/info@2x.png pics/markA@2x.png pics/markB@2x.png + pics/undo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index ccf9d1b05..525a51265 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -18,6 +18,7 @@ pics/info.png pics/markA.png pics/markB.png + pics/undo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -55,6 +56,7 @@ pics/info@2x.png pics/markA@2x.png pics/markB@2x.png + pics/undo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index a49cedd6c..0ffbd1dac 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -18,6 +18,7 @@ pics/info.png pics/markA.png pics/markB.png + pics/undo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -55,6 +56,7 @@ pics/info@2x.png pics/markA@2x.png pics/markB@2x.png + pics/undo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index b72ddb8f8..8e240fe83 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -18,6 +18,7 @@ pics/info.png pics/markA.png pics/markB.png + pics/undo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -55,6 +56,7 @@ pics/info@2x.png pics/markA@2x.png pics/markB@2x.png + pics/undo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/undo.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/undo.svg new file mode 100644 index 000000000..693e92131 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/undo.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/undo.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/undo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc7990501338ad3188c468098529d930beab8d7 GIT binary patch literal 972 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 XHiAKu0M(|800000NkvXXu0mjfj|xeX literal 0 HcmV?d00001 From af17b6c600483da062c086b77c34d9dfbd9bce1a Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 00:19:51 +0000 Subject: [PATCH 20/85] [ADM_gui] Add Redo icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_userInterfaces/ADM_gui/pics/redo.png | Bin 0 -> 962 bytes .../ADM_gui/pics/redo@2x.png | Bin 0 -> 2435 bytes .../ADM_gui/pics/svg/redo.svg | 119 ++++++++++++++++++ 7 files changed, 127 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/redo.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/redo@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/redo.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index 3d056bf6c..66b26871e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -19,6 +19,7 @@ pics/markA.png pics/markB.png pics/undo.png + pics/redo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -57,6 +58,7 @@ pics/markA@2x.png pics/markB@2x.png pics/undo@2x.png + pics/redo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index 525a51265..b25b76bd3 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -19,6 +19,7 @@ pics/markA.png pics/markB.png pics/undo.png + pics/redo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -57,6 +58,7 @@ pics/markA@2x.png pics/markB@2x.png pics/undo@2x.png + pics/redo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 0ffbd1dac..e0e1e2745 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -19,6 +19,7 @@ pics/markA.png pics/markB.png pics/undo.png + pics/redo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -57,6 +58,7 @@ pics/markA@2x.png pics/markB@2x.png pics/undo@2x.png + pics/redo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 8e240fe83..9e96fba55 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -19,6 +19,7 @@ pics/markA.png pics/markB.png pics/undo.png + pics/redo.png pics/next.png pics/next_black.png pics/next_cut.png @@ -57,6 +58,7 @@ pics/markA@2x.png pics/markB@2x.png pics/undo@2x.png + pics/redo@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/redo.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/redo.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1b834bae1c0bcd31acd7e43ca79ab528d4ab55 GIT binary patch literal 962 zcmV;z13mnSP)K}ci5F&{NhE+`X9IB1jJd+s?s%)NR?o6!MVuwKqtYk%Lj z*SGi1gb@6nk$v34D2g&s6lES!lYj7AW-;K#Azx$c~XL}k#DS-Z(=?ZU-b4`y>qABe-7q>Sg=6$)G2cH>W&Wb zd9THBlX>dQvv_CSI+Y}u$TCT!Lqlr){o*4>#8{+vXuy?Oq zrfIh?UzV(2uX^^ZpYR)IWwX|7+^GHFLD@p#VO5=-vggiOjxy2)`&HfDD$Pu;Usr2s zaT9AW13BY%Jy9x6u3}(74f~L5I5dY(jvgH!R3mrnP{mdh>V?nX+r~gA%W_$QUz+;l zacpR4BCFO`w=ut7l*hi=v;Dnoo7%BslB-uIcUen|TbS1XDB$~x7biB%nd2H}Hd(lU z7txLVINRFl_J$2A2M&lYT#&@^cyD*N7%S`BFOQ>V&P-IWXpw*L`~&Btaed_Lfb*~l zC7dW0U0=OgwW~`7A0n5j&!E)Tr)Sfq`~KgvN3B%Si#;KP>cf5+k0^?=O~3`bj1E-r zRi^&)^|fpLJUD1Zqj79Z+S%#u@UZuBsNRq^UvQHEHo$}sYMBs%D2it0a!wBqdv)>R z`=@YpRI+ueWMIG_aqM^eiq9Vf(j1M&su|@%Z6@Vo~<+Vfm2}FC9N_9o{mH zH{>2b2qD3br%(HA^JcXqnOHP`zRa>^69`QYpbk>S?!G=>hM;oehGdGq=>yb3#;|R0 z(0grduJ!bY&!3m1DQRlT=kl=t>L3*y8XfgYZ?7FomiS@rT;&xj+(JBEfJxtEh@vRx kzQ-AVNXDKRz>|o70lsh9zhn#lsQ>@~07*qoM6N<$f*KCYPXGV_ literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/redo@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/redo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8df40abaf70b130fc7c91e15ee267094df99bfa1 GIT binary patch literal 2435 zcmV-}34Hd6P) zq{gOvXu^lqHY{z^#H1gZRuk){tGOC$O;LA~)!mg^$3-RMuF_gvMbQ;`XPCL{hjRvo zVHiMR>;4nMFqgUa`Jd4>tdVgKQV?ELffT?hf17|oAPj_bUGJB#2Z6z4grxCqU>T4D z`~|ooKl|VWVvM!`P9PJ=kPn>!*yS|?=mpw=+rVAfO6@BzP;_I(dr z2l^A)GpP`g4@d{HfC6AKPy)=C1kw>6P!TH@0s4RrX~adK8Mq|>ZU+W5O&g3eegm)^ zxC#6oI1IEW^4x?xAXhyVm?e!~4wOq0?%Z4)UN4s7Vw5>^P^?ynM4+PsE?r{q>{%kG zPtzR^;{{rQ3&7ujZ-MWnM>1lJ_xpUzJb99ke1;v73zH`xSH=kx0Y3#+0>!gtk^Stm zq;A@TvUu^h)y&k@MaqE#xIX)g+=d1gAY%L*;27{7un?#QR@BsxwPg!xK>-e69^e2H z7Ko$-bX_+i+*$#w1-vt6Q1I4Uq&@#UrnI#2=nungN7=X$W#dLHfdKB;U&nRq7_$)z za~ZMHr8PBV)z*py$;-ob^(uJ?@0buFIRay@oHTwGuo~D5{QQY0C<+F#z5MdzjE_fI z8S2raSa$6q$K|35_!Y3criPhO;{kj=EQkfn0j!D2bV33$Y_bsH@>@m0|L(iw?Au35 zR#swH-VdIB8nv;J^o0wVSyO|pwiZ+Db)OFfZ~^&43(9nB61)L(I7`)h=5#u8?Y2um6Jo>#~)9u zPedYc^eDzFuMkjx|t4R2?s{ z=*Hr1e#pYF zzQS_i1WI=H#0gYYp_okABM}M^4Ry2!r0&i@giroUFJU#06Fl3t5w5GF4LAuL0?r_0 zLMK9brT}vgUhM@2*R5kPJ9~0v*x^8V}vgM+md*9XlRubd??1P6A;Uy>Ti+bEK7&B#+U92Qd%> zN&pe_;h4+mz!Kn>Kvi)u?#CWO>F$0I^C3SUB`*&fj1YE11QbNVIRMMtxyf%92oOe; zva3LMbjXmNv?4lY2)J_bB9~UJ;@=q=v{zOV+Pam+5j>_QFDJem^N*FRI@UB_*h8 zl0ftMQ1|Y|$*{2NiX{LtDI%j3_efZ+LxiK=8-k{3{kpE-K#YP`L}#}nDv}#fRttc6 zEiKG#X~Df~7cRi=bYicp#On8BDldl>D^Q%y;rn~NsE8;TA?%_AqO)t{-aQ864U0u? zE-5!};*>_28JPoUnr0vd`mh`oZ!;XG>GI(Y#AZN_G^n7XgZzdDW;HaB0ocuE?B(U8 zd%c)_K9q_I6o&&xXXglEXPD*6hmiX(EiK7CuyQ4)Kma$e063@XdPo{Q3Nk;U@g9-e zEA5hy2~j+vgj@*0HWYTJPLX@+6q)t)H~_n<4&{Lx5%S@v2l{|pK==9c7$lk0s;g1n zf1hl`m>EE5pT6X@$0Rg>=-jQ6kcGryHxDQ<3~~{A%L1h6x~?dirlIS)1^5Y2lb_GZ zD_2NQX2_$DGI0Dj&A?}fW_A_1Ju(p@Vp`pg-! z%gV;~LUS`lRTbTxoqP-I1^$evJbj4x2PVIzn1odH$Ari`0|;rFW<*115aF8hz^YF_ zC9AA#?3*rLjJkU_>DASgg~OyEO6Fe?O0)|Y00v~tkC`JAL44RD@^uI%kH>?@;~^Lf zMi4G5X>Mlji!WkHOB=fyc|53oKbFIX$?EB$5V1W{fasR<5yA_g%j5A3+%JLgVDfl8 z00e_U1Hm*i6k>s4kn#BA$u-RU`6$mlhuJW2ojb>zP>4l{4XX;E7}4y$3kHKd9*^gN z!zmGB4ID(&?7sm`AACTktVl`WcB8!a9_F?->_?6;yS|=9>(^6)$f;}+%&}96Ap$bi z`ViCA@qqy@tzS>5r)Ofi#cG8$YfxW(6=lno#GQINFd{@`vfV)pD#tEd;D-$x7zl?G ze)ge2q8J}QY_@(0{ORC9u0Qh(1EElY|9l8AihvBI9z;p~BXDfb9W=1-D8|>EE#fBM`tCZ;qHQjJtIxC#^ojVcUNY=Uk;g zMN<=to0`bkz8zP3I<}%BtT{QD`}&5?$EMv&6WaTfIT6-%{Vqc5TtyrY5&M~ zqw9Jv(8jRjjqSh&aU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 811cc27a4f67489dca86b9a7d7673d557dede723 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 18:28:53 +0000 Subject: [PATCH 21/85] [ADM_gui] Add Cut icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_userInterfaces/ADM_gui/pics/cut.png | Bin 0 -> 1141 bytes .../ADM_gui/pics/cut@2x.png | Bin 0 -> 2225 bytes .../ADM_gui/pics/svg/cut.svg | 162 ++++++++++++++++++ 7 files changed, 170 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/cut.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/cut@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/cut.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index 66b26871e..e5442a5ef 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -20,6 +20,7 @@ pics/markB.png pics/undo.png pics/redo.png + pics/cut.png pics/next.png pics/next_black.png pics/next_cut.png @@ -59,6 +60,7 @@ pics/markB@2x.png pics/undo@2x.png pics/redo@2x.png + pics/cut@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index b25b76bd3..14ff18f2b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -20,6 +20,7 @@ pics/markB.png pics/undo.png pics/redo.png + pics/cut.png pics/next.png pics/next_black.png pics/next_cut.png @@ -59,6 +60,7 @@ pics/markB@2x.png pics/undo@2x.png pics/redo@2x.png + pics/cut@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index e0e1e2745..36e7a87f8 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -20,6 +20,7 @@ pics/markB.png pics/undo.png pics/redo.png + pics/cut.png pics/next.png pics/next_black.png pics/next_cut.png @@ -59,6 +60,7 @@ pics/markB@2x.png pics/undo@2x.png pics/redo@2x.png + pics/cut@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 9e96fba55..2b4033ed9 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -20,6 +20,7 @@ pics/markB.png pics/undo.png pics/redo.png + pics/cut.png pics/next.png pics/next_black.png pics/next_cut.png @@ -59,6 +60,7 @@ pics/markB@2x.png pics/undo@2x.png pics/redo@2x.png + pics/cut@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/cut.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..851ea4e27294a24ed48016258312f47c59e8fe80 GIT binary patch literal 1141 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e1f69f63e15768a7b71f2596a6e3d5e7826677f7 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 18:31:00 +0000 Subject: [PATCH 22/85] [ADM_gui] Add Copy icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_userInterfaces/ADM_gui/pics/copy.png | Bin 0 -> 590 bytes .../ADM_gui/pics/copy@2x.png | Bin 0 -> 955 bytes .../ADM_gui/pics/svg/copy.svg | 182 ++++++++++++++++++ 7 files changed, 190 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/copy.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/copy@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/copy.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index e5442a5ef..e5bab7e5b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -21,6 +21,7 @@ pics/undo.png pics/redo.png pics/cut.png + pics/copy.png pics/next.png pics/next_black.png pics/next_cut.png @@ -61,6 +62,7 @@ pics/undo@2x.png pics/redo@2x.png pics/cut@2x.png + pics/copy@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index 14ff18f2b..c86ca2569 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -21,6 +21,7 @@ pics/undo.png pics/redo.png pics/cut.png + pics/copy.png pics/next.png pics/next_black.png pics/next_cut.png @@ -61,6 +62,7 @@ pics/undo@2x.png pics/redo@2x.png pics/cut@2x.png + pics/copy@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 36e7a87f8..0852f111d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -21,6 +21,7 @@ pics/undo.png pics/redo.png pics/cut.png + pics/copy.png pics/next.png pics/next_black.png pics/next_cut.png @@ -61,6 +62,7 @@ pics/undo@2x.png pics/redo@2x.png pics/cut@2x.png + pics/copy@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 2b4033ed9..7bd2c7415 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -21,6 +21,7 @@ pics/undo.png pics/redo.png pics/cut.png + pics/copy.png pics/next.png pics/next_black.png pics/next_cut.png @@ -61,6 +62,7 @@ pics/undo@2x.png pics/redo@2x.png pics/cut@2x.png + pics/copy@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/copy.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc189e287e0dec3f3b8fa95658188cf4b354bf9 GIT binary patch literal 590 zcmV-U0b)XjfM z2Wv@d1mmBf;MwlE@cW#@y^>)VoU+78)6c*e_#c4c)vQ*lwN9sVdq{91k(jHhdhZFe z+wD7D*KZC1N~IF{d|r40>k`0~&)_jIb)6Le%d#X~@6l{F0f+$aK7j|oas%Jt8W05} zz~+dLuK<_8W3gC#o=hf6AP|`8x;{E40B}*MR06}{P>RRnBArePfDcxy`KiGc0LO92 zWHMy4+5TWKm;)?>A{0Nl`cJpL?~%hIkPvMejXV32S)Jarsr0gy~4=YYKd#A2~< zBoevyGi5H9lR}};tX{7_0X5S!=UX=b5JK!cJ*>6{WUstmjaI8gp-}LX4M4ZsMO9VL zyEU*#rBZgk-xs}J&+!XHqftrIv?Z&5u>mZAmqw#8VzuVJwE$lKB9dVkSe7Lp82*Ep crfItyU#IVI=cuZikN^Mx07*qoM6N<$f^+Tn7ytkO literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/copy@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/copy@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc5ef7d6997395c9e35c7ad1c862d2c265af74a GIT binary patch literal 955 zcmV;s14R6ZP)i|&1NHwKsuc!lgSu> zfd8O~2j0L%Qs@jffO}UYcsOl@Cdj=^Je7%2f)qVN(+aouf76I;Ayc~d|0Vej#pc2 z?Fu1^rfH5urZRv=1SEb_F&7sX@8|RRrktOen!20KX1^@i38w$rwThH(7?*d3KJ6(Y;SLW zE0s!r5{X2wbcH5Ve|H?G?7D8P+hQ(5sGV2{p*_!YXJ=h5+=^($beyD)kO{3luo9;&n8>vG9jEDP>nLGSzC8QmF(W zlu}6`SsyA}mUV9Z_2nV0o~AKcA1s^bO9K}nFop8@JiEKQJrT0AvvaBc1sYggUA@#x zd&%h(YT0`uAheD~1T^3R<@x#f^7#08l$RGhIXU?kzfF4WCN~Utz#i~%d3pJW4)4kx zqJe$jGjK?oXei6Fv~Alp;4AP3|K=5CchW!&e?foXXU4gR#@8ygZHMl?J;DQA%d!F^ dAO`(&n}1gv!LC5RyRQHM002ovPDHLkV1iB!q#^(S literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/copy.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/copy.svg new file mode 100644 index 000000000..778668000 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/copy.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From db37fda52318967e5f1259e5fcaa7bd2240f6a46 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 18:32:47 +0000 Subject: [PATCH 23/85] [ADM_gui] Add Paste icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_userInterfaces/ADM_gui/pics/paste.png | Bin 0 -> 891 bytes .../ADM_gui/pics/paste@2x.png | Bin 0 -> 1778 bytes .../ADM_gui/pics/svg/paste.svg | 129 ++++++++++++++++++ 7 files changed, 137 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/paste.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/paste@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/paste.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index e5bab7e5b..1b7f88eb1 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -22,6 +22,7 @@ pics/redo.png pics/cut.png pics/copy.png + pics/paste.png pics/next.png pics/next_black.png pics/next_cut.png @@ -63,6 +64,7 @@ pics/redo@2x.png pics/cut@2x.png pics/copy@2x.png + pics/paste@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index c86ca2569..8e32cf65e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -22,6 +22,7 @@ pics/redo.png pics/cut.png pics/copy.png + pics/paste.png pics/next.png pics/next_black.png pics/next_cut.png @@ -63,6 +64,7 @@ pics/redo@2x.png pics/cut@2x.png pics/copy@2x.png + pics/paste@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 0852f111d..07fd942fb 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -22,6 +22,7 @@ pics/redo.png pics/cut.png pics/copy.png + pics/paste.png pics/next.png pics/next_black.png pics/next_cut.png @@ -63,6 +64,7 @@ pics/redo@2x.png pics/cut@2x.png pics/copy@2x.png + pics/paste@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 7bd2c7415..19fcd2f30 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -22,6 +22,7 @@ pics/redo.png pics/cut.png pics/copy.png + pics/paste.png pics/next.png pics/next_black.png pics/next_cut.png @@ -63,6 +64,7 @@ pics/redo@2x.png pics/cut@2x.png pics/copy@2x.png + pics/paste@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/paste.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/paste.png new file mode 100644 index 0000000000000000000000000000000000000000..a79f7d0922df06973b272bed6dd100c32e974431 GIT binary patch literal 891 zcmV->1BCpEP)@Vql0|tZ;>u8#WrfFD~RcD%JT2YjBz&c1Min4B+X4x=r1! zS0sd(@p`?vKp-%C&|?PzfmyHDn-fCJZ0;3)gLo(un)Y}+O90Kl_dTN7CVD)crBEm| z13cRz2Y3R!*;bzdp4xdZ7<^Y%RrNv$@o6_L33vc>6c!Xk z`LMFG@};S%>HOs6kp zW%j=j0xM|OoKEL@KA%tb^z_^=#s?B5n^qki9kjHx>}*ex2FlCJA71Y5Jr#*W>hEu> z_4W15y4~*C+S=N?s;chbjgOC$&1M1nssN~|siCc{t+2(?TrPJp91g$CWHQzB^Yd=_ zHS^(c*hnN2ms(p}OAAR03kzHMo|m1fswdLv^wDTEs>`x$$+B!kqftGR$v9M1J-!#e zWG?`K%jLS@^Z6ovzyGu(Ni;S#=5<}awjb`6fngX(l2i;QCzHvuu~^Ii=mXH- zc_osnXu?9kVz|Vyxj7b1CoC!=QO7pfrL43)e&}2B?rjNUE^g?Na+K zw5L&@&o={j7MS)g^GX#VpvG>u_r(qR5%?SU5qOmU-t>wBpA+MF4I>2D?RM$&`3?fh zfjcWJEAQF9ef$0Y9>+v%+_%b-Ue727^KB+f6hK27`3F-AzWLF$$aj zI`q8{*O}*byFChg1oRab7x$Ewmi{!cbQ4ipTH0A$T-*a(20m6fB_P=pisLfy3GlSX z<7q#7^l0v-OP6kmR~m?|sQKe0`U9~YL(5K4lp&ADb4E3Ph;HF(aowFp9j+5VhoUH< z%F4>`wDnQobzm+qZ;WLwuv14KpsK2>MNyQHs_$g7sdGaC8lL-rVTZ$UzM!DsH*Mu{ z;GG*d7!6+FYn{zzv;AICQSlqGJ%1mG`bJ<>0jlzgz!!k@dc7@XvpKA7^D^*fn#2LR z0jJJpGMOS?ueTYHz-PdP(Rv?JNLH$YuYjND&!0b7QBiS5Ti*k`m=1Fl&l3}&g~Q?a ze(~bP1HiAqp&OBh)U$0Ecn^rUT&{rCYVFllz7HHu(Gh^3*vizxVzKmX+qSI}h^Vnb zsrX7sfZ7v30siadh6*5O za29wi1wWgCfX-G{R@S*{)v9iw7x*+)@{s<4ZID=ki+DVqc12N!w3TlV+xM=A08p*7 z&73(i=yto$5Su#h1O4d`N=ty+GfhBivfL0NaeBldfpQWLGh4Q7X`VfMb_i$(PN&oR z00LMFypqnJ)~;Rq*518)*8#T_78X8q>eQ*bwDn%#N!@?Ez*9P#&1SpU)YRk$g5~Aq z@9y5c`?+Xz)NNl67r;tl9h7nrLY%sC<;p54J zvSdj=@XM@Ov#e6e2gkw%#xMfJMqyybjvWt6Dc=i)LLXVJ)*gME!yvx~DRg#=#nKxL z20xZk?%T6x&x1mUzOirsRwkTAv$C=%Dk@5<)MPSYGMVC^x3;#nz6n$tjmF~I+S;a) zl9ETF(de~DfeQ6kyDAL^gRHBo`_^nWM}WgejvR5@?e^Q_^~1x%3=b#VTLAF;{e;6K zPBI8$Bk*P1Fn#)T{CAVcgE-Nd0;J|?c_l?$m&6+ix`}gl}0seBi zT(_-QvEqqTV-*z@F)%QoHI8?@NGd2@@p=Qp>uw!S%I#*A^t&&bosvSrKe-nnz&mKB-=+&H@oSQNgH>0m_1qB6p zb#-+&16N%xS76?}dA$~krElxjt)0Nt`ucjYeEIUcOvW7TRU&N&A+T61FLif!ug}TJ zd8oFw_B4RmY>xEw^qk1e&3#*l%)T8bB2raV^|+L>K}y+BU0wZ{5F(uEI4bwd3jn0SU}zs2 z8rl#Fg&bK~S*;ThgJfr+Od%SLF3QWxy8{s6aCpLAxCM{{OjLmQsmwHLtFfc)AH~(p UAPVU@l>h($07*qoM6N<$f(4^jqW}N^ literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/paste.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/paste.svg new file mode 100644 index 000000000..23fff9b93 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/paste.svg @@ -0,0 +1,129 @@ + + + + From 2d5bfcefb8fbba4b186c4318c96b33d4c4ecf9fc Mon Sep 17 00:00:00 2001 From: Matthew White Date: Wed, 15 Mar 2023 04:58:26 +0000 Subject: [PATCH 24/85] [ADM_gui] Add 'Reset Marker A/B' icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 4 + .../ADM_gui/avidemux_osx.qrc | 4 + .../ADM_gui/avidemux_win32.qrc | 4 + .../ADM_gui/avidemux_win32_custom_font.qrc | 4 + .../ADM_gui/pics/reset_markA.png | Bin 0 -> 715 bytes .../ADM_gui/pics/reset_markA@2x.png | Bin 0 -> 1555 bytes .../ADM_gui/pics/reset_markB.png | Bin 0 -> 709 bytes .../ADM_gui/pics/reset_markB@2x.png | Bin 0 -> 1555 bytes .../ADM_gui/pics/svg/reset_markA.svg | 459 ++++++++++++++++++ .../ADM_gui/pics/svg/reset_markB.svg | 459 ++++++++++++++++++ 10 files changed, 934 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markA.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markA@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markB.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markB@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markA.svg create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markB.svg diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index 1b7f88eb1..950ed643d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -23,6 +23,8 @@ pics/cut.png pics/copy.png pics/paste.png + pics/reset_markA.png + pics/reset_markB.png pics/next.png pics/next_black.png pics/next_cut.png @@ -65,6 +67,8 @@ pics/cut@2x.png pics/copy@2x.png pics/paste@2x.png + pics/reset_markA@2x.png + pics/reset_markB@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index 8e32cf65e..294869b61 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -23,6 +23,8 @@ pics/cut.png pics/copy.png pics/paste.png + pics/reset_markA.png + pics/reset_markB.png pics/next.png pics/next_black.png pics/next_cut.png @@ -65,6 +67,8 @@ pics/cut@2x.png pics/copy@2x.png pics/paste@2x.png + pics/reset_markA@2x.png + pics/reset_markB@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 07fd942fb..7bf1c1d39 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -23,6 +23,8 @@ pics/cut.png pics/copy.png pics/paste.png + pics/reset_markA.png + pics/reset_markB.png pics/next.png pics/next_black.png pics/next_cut.png @@ -65,6 +67,8 @@ pics/cut@2x.png pics/copy@2x.png pics/paste@2x.png + pics/reset_markA@2x.png + pics/reset_markB@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 19fcd2f30..65d69c7d6 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -23,6 +23,8 @@ pics/cut.png pics/copy.png pics/paste.png + pics/reset_markA.png + pics/reset_markB.png pics/next.png pics/next_black.png pics/next_cut.png @@ -65,6 +67,8 @@ pics/cut@2x.png pics/copy@2x.png pics/paste@2x.png + pics/reset_markA@2x.png + pics/reset_markB@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markA.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markA.png new file mode 100644 index 0000000000000000000000000000000000000000..79c2bf25e685cc40ddeb6ccc62084dd6c18d5550 GIT binary patch literal 715 zcmV;+0yO=JP)Z@5N$qsYU3z zQYy7s15JyRQWfB;h`bNO-6=4S{?1EhGMSg*4+m}lJU{d$nM@|{xD3{e4SS%Jx;GCa z!%&#kQP?iPfjle1;A!|gUjJ0vQGf$^Q-Sa#q=4~G0j|eXDK!tAb6yW0+gthx;PH6Y x+gEJ^&>B9UZ|t_Q_zLP5j&7at|I*(oegVeQpJ{W_r-=Xn002ovPDHLkV1nYbG6Vns literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markA@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markA@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c20f256d4a216d1cde1f42b81313ccf70946f154 GIT binary patch literal 1555 zcmV+u2JHEXP)1vj*(RHA($th~yJ>=;rawY{OrQ}pq*AaABrp+bQ0!Gflp2c{YrGH$#i->e}TdO8(Zp=0fF-=(0O|sdY886Oke%j4u|B@w;7ls{{nRDLv zob$ckcg{$vs0um6vUlU~HLYk&22+}VC9|G?J?*In|1_su|7*;~s0yItA z0#pGn0Vfrx-V1wx{lI>|-(Q$xj!BX7Xj$vs4m^q=-&zd2&VzCp7!qw2&CSiNYi>!Y zGmE?fI0(E6JX;RC2S90E{-~5|f~#TG8L)zNJMbjX2{hI~Ngqg+Yt1eNBo$zh-w7N6 zUIuE8LeWK#O4fs23RqEq=%^eX9-dF|t^rH~)2gZ(=?F+zN?12Q zZ2@3D(JCQ6IQQWc&_x1X$#^15FnBw47##b!CcT@gsG0b-mrz*7l{{o>1p9 zNRsr)>C>lA#AjeDa2T+B7{c*l>ye^d>M&ymfM7E@0YXD9HPgg?O*D2WO9Uzo3 z?FAbhv2OcSRh>=s-Gw}$s;a4JS{V2lkr^jPp!F%({W&OYNg8<%I443U3d9Nv3ybEF z7q($y-)WeUNF)(46VQQC;5H(urHo~n*h=AZnx@?V&H{JtLPz^5rG$kDa8pr~U}IzB z;h$oq#nC0DM58SfzIyd)e}Ym1#DEPTwxyX1SRy2z+E7mP93zO0850fY1#;I0hj__ z`3PzTS9T~Jn5wR>zU^|kVsgZ_P>srpiOXfiE?v5G%k6gO^jIZn#;{7;ai9-)ANa8! z{%ZnrB$q6*z^YqHOT-lLJtAJc*J0vuFnnvxE(N5tC$`pQ7*XnW1D;VBYX-e<`J?Ne z#8W<%NZ?Qtaff2yxL;S5FRtdO=#AW70>AP~r=yM)O3L2OG)%lx%#*Nz`8nXOs+fx~9A z`CD3A=6ia2a@t?cztF%2|HQQ3*zjK|HwEMyn*#EU{{j7^)~pzCYTW<;002ovPDHLk FV1km9wL<^^ literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markB.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/reset_markB.png new file mode 100644 index 0000000000000000000000000000000000000000..dd3872a1e1702e4a95c5b02f4adb81c650da3844 GIT binary patch literal 709 zcmV;$0y_PPP)NklzziU%b z6vsa|d2O2J%VR{s&^O7<}Mr z&<&su_#U$AW$AS)st zJCXYFAbk<81YuokeQXc{Dh)h^gE4rawVwIg0sx!=oP3{@XMEN097m&j~HXpfNIKbQmNGBis#ME zb~(Kb3^lFmVCF$RfycmA5vg0onDgh}jota&2nKfo!vSL^#>Yz$&m+;TKP`xWS_5)0 zw+MOQv;|-c3e{AAYM)>)uzPKMpA#BoP*zHE($Enec27obUOGI42?M3n}5RbmJqV$RXk)fbgZ9S*GjS{Icak~-uM5!|Mz|V z&wGxfCht-e zKp@Zzw3wzT1IV&$0t0PrZKq02qU0Iy`~B4(k7xIxVOOhWigQjGo~Ru;;rII&1F=%} zS8@Vgua`(9GPCERyDB0QfLk_M>Kd;1dcCNsDgjl11Be50MNuZ4m8o0Al4RZdKO7EA zfD2dzJPSMu%u-c#!f}*Uh5GvX?7+RiX5ek$9pD9EuBxiGiL_Z(0>NO=0W<^6cf%bv zXaUv%YXPsSs#V3dSylp?rpZ7JU|$Z>L9n~wPT(crHDIBtsx^sqQV=Rp$Wp;A1&)Ai z9y9>Y0B-`10JVjZsCXrA0lo+MA*cr)2i{2h&MahcSDXMqBXAg`r=S*i7iBYLb9ODLHU|^tn+qP|X^B)TgF$+waMcDp_Js1o&Ax3&!P%gj+(iU)Tf(L*N zfCt#Cs_J<~QH)IS6lEn6^Rgaz8h9*0V$58%*=%xKTicT3M%@hE5|`|f#e=qM!+}8H zTf;CK0PlKmyql$;UBEifN8uds3Gfl{yP_zgH{V-q2JFB+2-$1S^t@ph1cO0GGI#(T z2ufCsVHk@MSkV0IVOZqIgCJf7*Sgs=|) zxbt+h6zBt67c_)L#_NF{KtNU1>q!!lq9|2lgK$MQvh$;2|r~`$-1V%EPPt6&ZY~hm4oQ=5T zlJ5u$LKIj7);_^u0Qd~J3<&~~BpvRZ^Y>l(8qze4&yQdI1-N|*;~j&vMf@-DBk&&Z z4KNJF7qS{)8L+(z=4O@A0^kO2%X3cwu0Jl%WIQJ|HZ? zxRvd2IBMd^sV$iVRAXAPSZpNGXVrR;vQ=V$FM!oxMBq>00MHAZ1Y(mZWIAvLF%lgJ zD=`K(n@w(SZ(sJE?yen8vl8w0Nc8B@qhA?@(FEKNIJ0%K3wRZD{f3p;4Gd1&N+^nA zsj7MvP=PPWV9FLOSWw;F-M#4fp*gNmLy`cTHp}XsGjwTiaPX~gIJ_K~mx+J{YyoSN z*zErXdZJUjfDi zlcqEp@H6l}a0s}VE%*r$ml?|TAsFn!JDS;$OmqVctiD2W2W6~%&fzHm(cz=KYi_7Xp7N&pTu-omy z&d$zwZ*Ol&`z!eu8o0$jF_jy)%$716rU_IU(*!Dw{{TNw?pN~vS-k)N002ovPDHLk FV1hsXt+D_B literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markA.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markA.svg new file mode 100644 index 000000000..188c1aa97 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markA.svg @@ -0,0 +1,459 @@ + + + + diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markB.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markB.svg new file mode 100644 index 000000000..f0bf98aa5 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/reset_markB.svg @@ -0,0 +1,459 @@ + + + + From 7925ba5e1ce4b407d3fcf498aba251420bdd551b Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 20:27:04 +0000 Subject: [PATCH 25/85] [ADM_gui] Add 'Go to Time' icons --- .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/svg/time.svg | 2066 +++++++++++++++++ .../ADM_userInterfaces/ADM_gui/pics/time.png | Bin 0 -> 1555 bytes .../ADM_gui/pics/time@2x.png | Bin 0 -> 3766 bytes 7 files changed, 2074 insertions(+) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/time.svg create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/time.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/time@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index 950ed643d..290152ce8 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -25,6 +25,7 @@ pics/paste.png pics/reset_markA.png pics/reset_markB.png + pics/time.png pics/next.png pics/next_black.png pics/next_cut.png @@ -69,6 +70,7 @@ pics/paste@2x.png pics/reset_markA@2x.png pics/reset_markB@2x.png + pics/time@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index 294869b61..2f68f3a7f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -25,6 +25,7 @@ pics/paste.png pics/reset_markA.png pics/reset_markB.png + pics/time.png pics/next.png pics/next_black.png pics/next_cut.png @@ -69,6 +70,7 @@ pics/paste@2x.png pics/reset_markA@2x.png pics/reset_markB@2x.png + pics/time@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 7bf1c1d39..cb44ba59f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -25,6 +25,7 @@ pics/paste.png pics/reset_markA.png pics/reset_markB.png + pics/time.png pics/next.png pics/next_black.png pics/next_cut.png @@ -69,6 +70,7 @@ pics/paste@2x.png pics/reset_markA@2x.png pics/reset_markB@2x.png + pics/time@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 65d69c7d6..19c0681b9 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -25,6 +25,7 @@ pics/paste.png pics/reset_markA.png pics/reset_markB.png + pics/time.png pics/next.png pics/next_black.png pics/next_cut.png @@ -69,6 +70,7 @@ pics/paste@2x.png pics/reset_markA@2x.png pics/reset_markB@2x.png + pics/time@2x.png pics/next_black@2x.png pics/next_cut@2x.png pics/player_end@2x.png diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/time.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/time.svg new file mode 100644 index 000000000..b2381d579 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/time.svg @@ -0,0 +1,2066 @@ + + + + diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/time.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/time.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3339ad0f0b527cc18e75ec07dd0ade9ced1e11 GIT binary patch literal 1555 zcmV+u2JHEXP)a|2 z6g@M~^Pc^1u#N2q#VM#EMkpX`DG*p7Bm~MMkrLbm3LlGh&xTdEP*(hj2Bek+Vu5Ky zBC}%!I~+?8L#PGu2d+QxSDuaE_|0?yv4A9n-reZld(PZ5S93@#7Q=RtNF??MAz}cg z2_Zj9DThC$asV;_9#Tpl7>1GE4ufn(kVqtkZQH(~s_M@J0|V6S^@_p4LF#h3005m% z2c=R;)a!NHYPD?6`E5$+HN!CS-y~RET#PZs?)ZE@Jrao^5{V!b3PDv>5JCU|Qc7^n zk;~^rBJKYOwRe`>FMbQpW`V94jkwomX?;Tx?HZ`!{M;w!i5WDe0&_buER7< zG#U*&eE1O0pFc++5P)sl@cDcg8ymyu=qM_cilfzPT}Y?Xjc_>pbQ8hi;$qC@a?M8~ z5i&P7M?D@7?%%(ULZJXfQP6BQ(d+f#bUGoWM5oiivuDqcN~Lh*$PtW1{u3W+F>@1{|eJQ1s zkWwNT3?dW?p<1n?TCKwAbYf;^hI+kTw-Dkt08rk(eY;0h)mz7pA1CAED!w zyWJ2%ARG?k?AfzOrBY}%o0~RHN(mtZR#sN<;>8ObJ9Z3>Mg!SwHnO_9I!}cVKMf2F z&}cLY%d+5hyP;_sgb*7Kk7l!pix)5Ux9IB-LO|0rxZQ4W&Jm49v2*86MFTN8{`~nb$iJ3~a}LY0z!<~e;2;Gs>HsjL z>pB47@#Dwvcs%g?{hONa-o1-o_w2#s`}er|^ywFQP1A7V#0eCOMZ9|T3UhOF&~+Vz zkdWhJ|Hm6|r!fFzG8z0cKaVlf1T<~ix~~UwNGS{Lb~_9JCr_S4u~-D>e9P)qs|5f! zbLPyJ`Q5vBBN~lDN(s|6A*IYy0I$pCvf!LURaG#?{&SM;f)E167*th-Wmzbf%L2e_ z3Sg;TuhV=!4_()>wzh^+sr0`IN~IFk*4CiwI`a8E8jS`8ut+JT@n*AWCzDAq#$cKz zEXx9=^t-_+rLZgurfGsPhGa5{X0vHiO8=sUVPrYyx0jcfQ79BJJ3EV`M~^~P)$byq zltNWiOiWDR+_`he=krLVQsA85G7KX}KNVf8)oSL#!h-nl;R6DJ0Q`PGa=9GJBPFz**}-dW#n=>`2BwP{eE;h9V{#?hU zyWK8=!5}#2AcR2IbvPUj+>AzXGa7}%;n>)7aLy431kmkv5s$}ZCX*qY^GlPHlLg>2 zKM04zFVpFCqf)6%X0us2G&DpeCMK|V?_M~aPUyOh^y(@;SQZW)Is~uRi~alekG?l zG#cxi^Gj1xQwyKtZE5=(D&t!$Y7#+TA=xBI5QzP@gA&gT_HxxOLG zHwiW(kx2X?gqQ^|4PYODA3mkB0RG0uJ%3;rMs7Qde*wA`e(h-b^cw&G002ovPDHLk FV1nOE$iDyp literal 0 HcmV?d00001 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/time@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/time@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..79dc6f6c65138c2de9b28054089b5fd89206b5bc GIT binary patch literal 3766 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 J^*WBR{|C?1@Vx*4 literal 0 HcmV?d00001 From 823ac2016d4ed59c09a838861fa8862dfde02723 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Wed, 15 Mar 2023 05:07:56 +0000 Subject: [PATCH 26/85] [ADM_gui] Put A on the left of the arrow in goMarkA icons Reading left-to-right, the segment A to B has the former letter before the latter. It makes sense to express this positioning in the goMarkA icons (A< vs >A, where goMarkB is >B, to represent the segment A<->B). --- .../ADM_gui/pics/goMarkA.png | Bin 1043 -> 1047 bytes .../ADM_gui/pics/goMarkA@2x.png | Bin 2403 -> 2441 bytes .../ADM_gui/pics/svg/goMarkA.svg | 61 +++++++++--------- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/goMarkA.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/goMarkA.png index cff8f9cb99264076c1fec0f0006db0ec25d51e22..243b27e5ded8eadebdef3b3eab49517d908dcabb 100644 GIT binary patch delta 967 zcmV;&133JX2$u+uUVo%XL_t(YiM5tpNMvOg$A9OXIWz8D6r zT2pQeF0n~^Ra+gx1zp(&;p@SPYlTMQLg2E)qpi zFioNRmpC7MF@J#f`C}X^aB!_J21`pz(%aiBJK=V_1+Y#$9=BxSa99=>7bTfYN-~+0 zL?S7X@$2$p^A&l7kF#*8JUnxF1AL7ippLxIKIl8VibL9Se&~4hDrdtFzFgrWT@bEAI4Gj&{*49!~ zRAiM&M1MGS#z$&PV{)K{6SWm6fU534Ri@hPEHbyM)6;KmG!?D zsd)BFe(H|{`B#RfX{frcqX5&>(}Y4HfbH)h5`Q5Qi7-DuZyES}K3s>LoPMR0cVBye zvmbWhef@h9D=D(sTz&!(vC5;WDqUS&^!4>w$L)4oB?NFd>>PXSFrS^Rr1;)6Prh)0 z?|v9Z1dN=C`fo)vO~dAJI7lupThmihQ-jy*-4)5q%nSnq158a#(cRsR)9FOhH0*Xb z^?%aCxSu}4#kN7N2FCdM^OHRKkjpBy(%;`N8yg$MV=*d^AE&IWjEahiT?Fgv>x_(y zu(G_&QX)ZRW#yiIWSYXSkp!0mf6#pLDTYFSQvRTZ5)1}KL@*44wY9ap69G_IScu(j zM^)8*x@N{oO|a9lyEpKJ3tlk8AAS@zgK_9y4H357LD%gUb3ar>04I5 p6B1inTifN^wz`cVl)L@g@((|~;)#~;Dh2=m002ovPDHLkV1kQzVGGj3f+!nBNJ6;KOY9Ovu+Ww)L$FG%G8&ChBI`o1k$)DO4M)MStzpWYL0nxY zr#qwf&fH%Q;yBYfjJ4Yr4*d9?Ki_i>hjZY6hUn?(`TSu7a(^7>V1mufO;yZUDOL1c z2qKfo6t_AAgb)Y*>*;hF$599&C}8tI&_hcx&Yl~m>Dg+|z1hSg8S0)m#?)9Bt<5KSx$`SN9h@VX+`+bO zOw**Hp&_pw{r&yfx6kLx)0LH$V%s)Z0>@EEDG)-?)qn8}q3drEi6(jJ%$MB!=?}VMS7hmP0_gd(^@IB{0 z`H_vyWY%V2U;u#b?rvIIS};wM(b3V|i6~3}plQ2f`(jfKi{HIXaz}FdjS-Ymq*5tH zMn*6UgMaq+b~-vb02mw`+>Z~tEs92?2NGl<1X2^|Qp2L)UWgzz?BLRa^=*yrV`x}%ho7}@r0Z*NmqSBFw6 zE0IV9Aq1gNh~?#Flv21{F7!PDmrL^7@Av5J4PaY;@nP>tDvyh>QQnx3oTYTy=K?KPZw`Z$`FzmJqs z#9}erZZ~eX8?V<(Wo2ca&C=2mu~>{dD=Qp7af0&la>N(@YwCl`3pAdr;7nUB?jw4^ zW#>2!mStg@=7IV>csw3lE*AhI7!0an>pc3Oho#t|$xTq-V=9KjT(5(mr&6gy8~+y) leQ0Rtvw!XNkdt^I{0*c>+!EHk+GhX&002ovPDHLkV1kIH+av%0 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/goMarkA@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/goMarkA@2x.png index 72cdf208acc27a9197b2e571662772f02da3beaf..62a1df71edcee4e774ef7f87bf5c3efb7a003cbd 100644 GIT binary patch delta 2373 zcmV-L3A*;<5{VO#U4ID{NklpI3C%NxE_nhZ>&-=dTo_})%UDuh-5Wj2!Glj5e z)22tiY!WkpoRN|7&KEhLuIp%;CXBug|E_O083=Z}{e~rhrfD&@&pXEieU@jjJj?kb z$D8)qgjpqEbhHRUs1D2u0lKaeR5ctMN``VbJ9$F`~DnqZ%>a-VqMqq`Fsoy594q+@Or(| z5+RBriHV6=EEddWGm4^2Nl4gvKEH~+&&9b5b`DmwaIW6Yki$!IQUXqwpJ%LheKrG{ zrr~zGX=!O;aBz^!j11D#(~%@8(s4ya1^xZ~F$3o2=6|wc#fr#vAP}IhuaBmtCKfJS z$btn6FdB`M77+|;3_HCvw+(W%@)94{bkNo@#4U5pXqwJtyOT5LyBT&a3*~^W>x_(y zP+wn9ip9d(jT>V+^>{pN-MST*%N28P&6+hFKYl#Qwq(f?G)?2sp+o4pPIh)S27_T- z;+m%8^?#{!b`NvvTo*?^ZsS5@AL#Jmtar}2~brPyWNf~ z%jB(I9k=s?2M@+24^UNAMR#{M85tQ-c2N{rzkWUY_wUDIv0$}YjZ)tSBFNh zHC*9n<^MQ!u8S_alTGWF^QYf_7i(%_$T7EBxqr#1pzENjYDj?J@5gSpvu@qGF}+h< zTs)5FG)hZLdG5LAV(tloz@5vN(|hF#7KD2=&S5G~U*^LT?X2wkd2GKN)(5!2Wcms5F zJAXJ@*~S}hpXFbr7pQOS=jo^N_|K7N#v~txrfHwez<4-t-~ev7JIbag3V}c%a$QqX zLuY3vSy@>z&kKTps;UHoK_p2csA>#5d^EQY@=% zMhg(bIWXRWwr9_t7~2akybyJ*>pFY)?tdM#4^>qO1cF?1`Dkvt%7G7?`RiL}DLdT6 zEgwufXlOv!b(}6AC(m@y(9(~hD4f{0 zg>SC9b;iWQJct*TD^yEMJ zZ*$)b5g-Txk|ZHZl7uM6dZw(bEGDch77H)G{BlfNgTa8$=Zjo7Ha1dUU(eE|xjcC9 zA_M`pzurS@doOtp|BatKm4C;pzbe3#m@s1zvM7p(q8O9J@fNR3moBk=`}Rq7zIX3l zwr$(Sy!4w{|Ii(rt~S!=NaTEzn>XJ(&7qH)c;nSV)~(5zxU(_HOOk{r%QCVoN6kWS zZ!afKoS0U}VTAKXl0+UXhH)+5%CtU&6_u~c=6&fJ1j3Rk6AN{i;G#ga%E&dS(ZphP{=aKq*@GQ%{Otz zHb`BggRQT8z@7s(c7Ofh5pG{(os@`35|4hf?CR>Gy1F{5p}}Ba$BrGC&E_#X%gf7) zE8w-)UW<6^GiQOtEMZDiNKZA8vml92&JWVq+{5Y(f9IuVAK>{P--9fVU3SBLilQiD zFc=sa8397xzy8g%prBw}@(|iqTCLHZYj1C-wzd|B!$H_l;eWC%%Mv#k73R-LWc5lb zo4#`^53ik1<~#$x-&w)x!d;v>-#zY_q9}%v*l08&iXyG8t&>{3;z5!m3JVKk?8U{! zoT{$IVzERC2>%pCCds6bv(U`Cd*|`}4GYP?E1kh1Cl5Tno9ACSh|3+jUkO(s;n=Zb zx~}Uu91c1t}P1C48d6Ki|&XJv+O>%N_+yyfpR8{AiJAXiDkDHpheroFn>9V_7wqzcc zdz|!Ly+&@1girH9n(sH%$7>7=)}7r)<6Vq#*uWE$HkUmPM+e*?(X#L}GqA$BQ98Fn^AW#cUw^Rx{@t2I=T=k(zAaTVGEn)nbem07R-q_=I9Q zM~h*?($KIVk}}7GecVm-OciNrIGQiIn7!V%Ub@20n6GS(#(<)NTw$fBhNtcg&JC-l?J7 r-{1el4d(ZSLij3{%&A~@mmuK(*V15HT6Om+00000NkvXXu0mjf{Ux0l delta 2335 zcmV+)3E=jL6XOz)U4IDhNklfyA8D*Ob{r?r(Q5ljSJt^c_nzlHK7aQb{*QYLRe5=N$-P$M zP9UYHr|NUtiXnZ&^+yU9 z_HPmb28@n`N~Ic)|7!j zNJ`Yv^jQ~At}wH(z=X-DN2`&TY%ml>!Rz&6x7+FK>%--8g)Otu7^BnaNK8z`U@)N7 zYJ&`v`s{<8v~+R9YDXWdMUq7754Uo){Wgyj&t&C8*?;8BP9Zrd1}VyDD2jsH?WUun zgN}|4Ow*?`&1gieR!`ahS(fST>A_;Lker;1*=!~*E-nxa$?KJ|JKXqu3di4jj-1&k z?5MTy(uR7f-)rXFr7w7V`D`98p2^H~13ImUAVdy_$K#>By`5V&8)ao>VM7mKv)Qm% zECE`h(SNXf`SP&5OMs@PCYqa@DJUo)CME`zN;O=C6a`{*YI5hK0`P44eLV444!`>C z`_vpfPv_@$F16lb)v|2n|l^Z6orUs05h)ER-(=?oj0u?R$9yc7zDf^Vg9WZzGCMVy(bkcRxiD$?c(J9-uZ406|Zrq5; zWD3w0i-pstPmjBP_5XEyR+VHSz;y1@R`)zv}#YuBy~qH}X|$8YXcXes;a7xwI6@{@r3&yJ9dor_I75?niXPzD2h{0p+38t^)J@3 zs$v^`{dShjH&D7FjmL^o$egYwDNz@6o2#j*nY0WTt~h)4>ohX*QR6u5ONMi(&x(&y#d!dds*|$ zU-;24_YxbU@W_%>)~-qC;lgRm%Fv^a(;!Kq5v{GQ4We^$a)N64*s*2HmLUF9&(hM;h%(dC(kL!24w@SsMSqveg-)j%j>32ma1IRd zo7WHVPSq(=3~H7YPNR513bQlyBpbAdLih(TK@cz)3^X=2vU>IE5bv8zCKfMV9MJ$6 zjzVK&V}L$!;sl+Yowx@F5k(Q5PKP8(BV}~BmUsNSkC_<;4jj77FJ3-~!|7t4IgtnM zPh~+~64O(4Xn!?g#3vR-QAkcs=IYg}%$+-zyu3U%Zrm97-fT8URrM+=Dnh#C+qZ9X z^ypDCGBQxB)x+g&4>+dvkv9%9lN<5h}5@^11lMGWFi{~X%v|t)pGh#`I*L>L` zObox@Pk(0{O8n+^2zd2kF2 z^7&1fr3;NbxX8#{vw;+Y7PX|B)Nh3#2qYyXq0wk)Yir}|*|WsN#Guh=Cat*7=VM@C z0IgO_c6K%i2?>l&dnwtVW7R|H#K&pq>Gv>mhMom^$(W2W#OkC8-+;!0D2gN|CZgBt z@p`>@Jb#`kJuwP`fFwz1wc4;1PSw=ZqJzT8BIOAMLKR)AtfziwN8aB&*eW*EgN&f4-ynqFp1^ z*4Fk%uiD+g=-0qepW~LiNRJMZ&1U=lUDoga_!ytUe*iES@FOIz(TxBA002ovPDHLk FV1ivOp9}y1 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkA.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkA.svg index f74035105..43b6bd4b3 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkA.svg +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkA.svg @@ -7,11 +7,11 @@ viewBox="0 0 100 100" version="1.1" id="svg5" - inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" sodipodi:docname="goMarkA.svg" - inkscape:export-filename="markA2.png" - inkscape:export-xdpi="32.512001" - inkscape:export-ydpi="32.512001" + inkscape:export-filename="goMarkA.png" + inkscape:export-xdpi="6.0959997" + inkscape:export-ydpi="6.0959997" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -43,11 +43,11 @@ showgrid="true" width="100mm" inkscape:zoom="1.5322563" - inkscape:cx="61.021124" - inkscape:cy="158.91598" - inkscape:window-width="1920" - inkscape:window-height="1027" - inkscape:window-x="0" + inkscape:cx="168.37914" + inkscape:cy="210.80024" + inkscape:window-width="716" + inkscape:window-height="861" + inkscape:window-x="720" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1" @@ -1285,10 +1285,10 @@ style="color-interpolation-filters:sRGB" inkscape:label="Lightness-Contrast" id="filter7311" - x="0" - y="0" - width="1" - height="1"> + x="-0.010012527" + y="-0.021965465" + width="1.0200251" + height="1.0439309"> + + transform="translate(-37.735644)"> A + transform="matrix(0.81013241,0,0,0.88349737,11.969649,5.2408136)" + clip-path="url(#clipPath1053)">A - + transform="matrix(-1,0,0,1,97.413687,-2.6516693)" + style="display:inline"> Date: Wed, 15 Mar 2023 05:18:37 +0000 Subject: [PATCH 27/85] [ADM_gui] Align the letter B in goMarkB icons Visually center the letter B in its box. --- .../ADM_gui/pics/goMarkB.png | Bin 1058 -> 1050 bytes .../ADM_gui/pics/goMarkB@2x.png | Bin 2431 -> 2360 bytes .../ADM_gui/pics/svg/goMarkB.svg | 43 ++++++++++-------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/goMarkB.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/goMarkB.png index ea1132d17aebd2b0515496d0957a9e8951d75065..666d9bd2bdcf1ac723710cffa2aa874ed7042906 100644 GIT binary patch delta 970 zcmV;*12z1j2$~3xUVo=aL_t(YiM5u0NZfT8$6ufC=X-ZeJ!Woo_)oJMLCZM8@{jHy zFhOQTu&6;q42BXcLJXq0z^g_W!JrWwB3RahQd4M=bs=0TZN^PAVQ{^wk$oIL=EYfN-!elH z!LqD>?1NGYtu>};t^s@z2y>gmfz}$&p>E!4eT>Gs{TN0eh=?#hKTj+cV|;vkBLINY z>7=r<60g@wCV!J591c@kTZ`Rphu7XdD<@9}MMUIcWKkY{x>F9m&@C5!yewC*#w8wK zI|~a7GC4UZb8~Y76g{P-rP9;WBO)S!KtL837sXhoYh`oXclTb#hnje@{s2!M{hSXz z`hjFJjb&M^tgPU6y9-#=)z#72*-3kQJ0&G0BoYbQ+JD*ra5(H(mc<4@J}+pkP)gDC z{KHHKUgqa$lEx$bOiV>dCQ}9T4NzTOO>=WIKA(?n?siD5Up5^6b1_lO*$Ky0MHZn6aLpq&iVqya0`ns-*$l7QIzn|lQ zy7#%ZyufGv!v*h%$K#=+qXWO+PghqL0I^t%p?{$vKw-DrF}2n=1h=dl*Af|8-~5WP z^OtCT?k@IKn(Vo~gg<^SPBf87Y&@saX_QjfY_?4RLn(5(Jcc$nGdRr~?|sWbZw04b ze-P7Dtgf!!5OjEWm{=@EDwSenWaO`kD!g7V@p!xtz-H6T{_-0~Ume8CtkBVVKd!yI zHh=b$)|x9<=77x-MIsR*k;ulqs;UZ~&xhOXrmwG$^73*_o6RH;yi78g;mqI#nx4HE zPfhVvaqirCyk0M%P^ds>7zQqv3zy4<)|%1L?fe?>0Y<#e=cCFk!TeZGnHgJGxp3- zDTQg8|5^tj1X4#{Vn#I2=eRId-CxuYJD|i^VZbGsWWZIMdV9OiWB*Sr$@C zG)=>{ZKRZ&7Jm+h85$ZQ8jWIE7QFG!CDr!9pi)Yy$=~MH6VH64j=$KcuK#pH-MY1) z78W*aZf;JEj*cp&lxk>bP)?^)0SZvLxw)#Yu1@v$_p2oQe!rTZpI2J)xTa-OR(g=3 zubOze_9*qIzvRPDM~Fsan5Ic25}~}j9Dtdb86uGgZhyC%ii!#h!@%eBQD0xr$jAr) z4o3#2X|hR>NGPNf2q9>C;W5Viukw2^%2TJlVED%%(db%=z5&|W+6V*!ghC;zs;aPU zo4&q20Hl;ymW94s!3;x^pO?ue=bz=4cR_fd6@Bm*NDa>Cttak^5~kIo5{(^!R2x>K0Z!uZ7q$BjY-XI z5Cnt4JtcQrcSud3OKr!J%jKf1tPHo?4Zy&_0PXGV0K{T3hKGmIw%=5 zs(GK4zvj5uaWdtNw6?Yq2n3j&oyFtvpp?Sn@qZ*UBO@aNT}ruQbJMh0S&ehHwVx~3 zrg-W3B8nf-cfJ24ii(N=SXo)YwrzwE7>2P$pb3F(C(xwEg`P3qZvT$smHC{1^AU7i zu)e;&W7F>LZYC!u2?m4o_Vxl$Q&WSK5~Wlsfni9d{|IyX^&ZT4g!j%q$o&U1H~W*6 zl7E{wXDBT_v`OIgdhvR_o8#*0YC1bR0a#pIBrh)y-7s|ggExpq<6P*uPSbOTIaYB5 zO-t=ZN-3^hy+&qc7CxVksi`SKp%4HC1qGCplu%q;48Y~f-{W*TaX1`^&%1r<-HxAm z^ymRjojAh1S^A#ME|EwOkH=YEUEQ-50881~*%*cafCvNvD%q|#TFd^}?*sa0f_joE zoek1~zP7fu>%!e4(Yw03KK?I(yCsm$S9;g*H$|7W(_w<0+W-In07*qoM6N<$g8Ad_ AeE3&26~}*XnZ@H7d!9X>;AL!ioCzkj*-Qvv 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 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkB.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkB.svg index caf85aeb9..4f04ce8f3 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkB.svg +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/goMarkB.svg @@ -7,9 +7,9 @@ viewBox="0 0 100 100" version="1.1" id="svg5" - inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" sodipodi:docname="goMarkB.svg" - inkscape:export-filename="markB.png" + inkscape:export-filename="goMarkB.png" inkscape:export-xdpi="6.0959997" inkscape:export-ydpi="6.0959997" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" @@ -42,11 +42,11 @@ inkscape:document-units="mm" showgrid="true" width="100mm" - inkscape:zoom="1.5322563" - inkscape:cx="190.24233" - inkscape:cy="181.75811" - inkscape:window-width="1920" - inkscape:window-height="1027" + inkscape:zoom="1.0834688" + inkscape:cx="353.49426" + inkscape:cy="311.96099" + inkscape:window-width="1436" + inkscape:window-height="861" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -985,10 +985,10 @@ style="color-interpolation-filters:sRGB" inkscape:label="Lightness-Contrast" id="filter7311" - x="0" - y="0" - width="1" - height="1"> + x="-0.010012527" + y="-0.021965465" + width="1.0200251" + height="1.0439309"> + @@ -1232,13 +1244,8 @@ x="41.456036" y="75.35659" id="text6826" - transform="matrix(0.84710934,0,0,0.86445915,12.439162,6.6293162)" - clip-path="url(#clipPath1053-3)">B + transform="matrix(0.84710934,0,0,0.86445915,10.427892,6.6293162)" + clip-path="url(#clipPath1053-3)">B Date: Mon, 20 Mar 2023 00:20:20 +0000 Subject: [PATCH 28/85] [Q_gui2] Add icon to Append menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index acfdba9e6..7e387cf3a 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -34,7 +34,7 @@ typedef struct #ifdef MENU_DECLARE static const MenuEntry _myMenuFile[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Open"), NULL,ACT_OPEN_VIDEO, MKICON(fileopen),"Ctrl+O",0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Append"), NULL,ACT_APPEND_VIDEO, NULL,"Ctrl+A",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Append"), NULL,ACT_APPEND_VIDEO, MKICON(append),"Ctrl+A",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save"), NULL,ACT_SAVE_VIDEO, MKICON(filesave),"Ctrl+S",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Queue"), NULL,ACT_SAVE_QUEUE, NULL,"Ctrl+U",0}, {MENU_SUBMENU,QT_TRANSLATE_NOOP("adm","Save as Image"), NULL,ACT_DUMMY, NULL,NULL,0}, From 4cf2ab8c66d20562102e1f6f3d78ec9f11fc9fac Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 16:47:55 +0000 Subject: [PATCH 29/85] [Q_gui2] Add icon to 'Save As Project' menu item --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp index d4676b7ed..9adfbf49f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp @@ -68,7 +68,7 @@ void MainWindow::addScriptEnginesToFileMenu(vector& fileMenu) i++; } - MenuEntry saveAsProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","Save &As Project..."), NULL, (Action)(firstMenuId + 2), NULL, NULL, true}; + MenuEntry saveAsProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","Save &As Project..."), NULL, (Action)(firstMenuId + 2), MKICON(savescript), NULL, true}; it = fileMenu.insert(it + 1, saveAsProjectEntry); i += 3; } From 9ffeec7a85561d29c64a7a4f7901ee0b7c0e128b Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 16:48:50 +0000 Subject: [PATCH 30/85] [Q_gui2] Add icon to 'Run Project' menu item --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp index 9adfbf49f..bee1962bc 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp @@ -58,7 +58,7 @@ void MainWindow::addScriptEnginesToFileMenu(vector& fileMenu) MenuEntry dummyEntry = {MENU_SUBMENU, itemName, NULL, ACT_DUMMY, NULL, NULL, true}; it = fileMenu.insert(it, dummyEntry); - MenuEntry runProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Run Project..."), NULL, firstMenuId, NULL, NULL, true}; + MenuEntry runProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Run Project..."), NULL, firstMenuId, MKICON(runscript), NULL, true}; it = fileMenu.insert(it + 1, runProjectEntry); if ((this->_scriptEngines[engineIndex]->capabilities() & IScriptEngine::Debugger) == IScriptEngine::Debugger) From 6102cc27036a15733b38e2f41b53ec41861763d1 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 14:27:39 +0000 Subject: [PATCH 31/85] [Q_gui2] Add icon to 'Debug Project' menu item --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp index bee1962bc..3a0e9d1ad 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp @@ -63,7 +63,7 @@ void MainWindow::addScriptEnginesToFileMenu(vector& fileMenu) if ((this->_scriptEngines[engineIndex]->capabilities() & IScriptEngine::Debugger) == IScriptEngine::Debugger) { - MenuEntry debugEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Debug Project..."), NULL, (Action)(firstMenuId + 1), NULL, NULL, true}; + MenuEntry debugEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Debug Project..."), NULL, (Action)(firstMenuId + 1), MKICON(debugscript), NULL, true}; it = fileMenu.insert(it + 1, debugEntry); i++; } From 8b12f1a11ca040bc10021caffbe67647ce5ba6c5 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 14:21:40 +0000 Subject: [PATCH 32/85] [Q_gui2] Add icon to Undo menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index 7e387cf3a..395e867ac 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -65,7 +65,7 @@ static const MenuEntry _myMenuRecent[] = { std::vector myMenuRecent(_myMenuRecent, _myMenuRecent + sizeof(_myMenuRecent) / sizeof(_myMenuRecent[0])); static const MenuEntry _myMenuEdit[] = { - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Undo"), NULL,ACT_Undo, NULL,"Ctrl+Z",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Undo"), NULL,ACT_Undo, MKICON(undo),"Ctrl+Z",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"), NULL,ACT_Redo, NULL,"Ctrl+Y",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"), NULL,ACT_ResetSegments, NULL,NULL,0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"), NULL,ACT_Cut, NULL,"Ctrl+X",0}, From 6665f5593bd4161eff82f6851bd66efc86f235c5 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 14:22:04 +0000 Subject: [PATCH 33/85] [Q_gui2] Add icon to Redo menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index 395e867ac..a5cee637a 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -66,7 +66,7 @@ std::vector myMenuRecent(_myMenuRecent, _myMenuRecent + sizeof(_myMen static const MenuEntry _myMenuEdit[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Undo"), NULL,ACT_Undo, MKICON(undo),"Ctrl+Z",0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"), NULL,ACT_Redo, NULL,"Ctrl+Y",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"), NULL,ACT_Redo, MKICON(redo),"Ctrl+Y",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"), NULL,ACT_ResetSegments, NULL,NULL,0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"), NULL,ACT_Cut, NULL,"Ctrl+X",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"), NULL,ACT_Copy, NULL,"Ctrl+C",0}, From 2ce7f988a1d5383470bbd7183847bad32e4c076c Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 22:41:11 +0000 Subject: [PATCH 34/85] [Q_gui2] Add icon to Cut menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index a5cee637a..fe3dc95c7 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -68,7 +68,7 @@ static const MenuEntry _myMenuEdit[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Undo"), NULL,ACT_Undo, MKICON(undo),"Ctrl+Z",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"), NULL,ACT_Redo, MKICON(redo),"Ctrl+Y",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"), NULL,ACT_ResetSegments, NULL,NULL,0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"), NULL,ACT_Cut, NULL,"Ctrl+X",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"), NULL,ACT_Cut, MKICON(cut),"Ctrl+X",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"), NULL,ACT_Copy, NULL,"Ctrl+C",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"), NULL,ACT_Paste, NULL,"Ctrl+V",0}, #ifdef __APPLE__ From bf638bf346be6e576a63e3f4dee69ebd0c8a92dd Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 22:41:37 +0000 Subject: [PATCH 35/85] [Q_gui2] Add icon to Copy menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index fe3dc95c7..9a7732499 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -69,7 +69,7 @@ static const MenuEntry _myMenuEdit[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"), NULL,ACT_Redo, MKICON(redo),"Ctrl+Y",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"), NULL,ACT_ResetSegments, NULL,NULL,0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"), NULL,ACT_Cut, MKICON(cut),"Ctrl+X",0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"), NULL,ACT_Copy, NULL,"Ctrl+C",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"), NULL,ACT_Copy, MKICON(copy),"Ctrl+C",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"), NULL,ACT_Paste, NULL,"Ctrl+V",0}, #ifdef __APPLE__ {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"), NULL,ACT_Delete, NULL,"Backspace",0}, From 564a2779c571de853ce089d8f0742a89e61d30ac Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 22:42:10 +0000 Subject: [PATCH 36/85] [Q_gui2] Add icon to Paste menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index 9a7732499..ecf0da9ce 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -70,7 +70,7 @@ static const MenuEntry _myMenuEdit[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"), NULL,ACT_ResetSegments, NULL,NULL,0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"), NULL,ACT_Cut, MKICON(cut),"Ctrl+X",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"), NULL,ACT_Copy, MKICON(copy),"Ctrl+C",0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"), NULL,ACT_Paste, NULL,"Ctrl+V",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"), NULL,ACT_Paste, MKICON(paste),"Ctrl+V",0}, #ifdef __APPLE__ {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"), NULL,ACT_Delete, NULL,"Backspace",0}, #else From 87dc001a672a9e428610197a2bf0fd6cca1d3d3e Mon Sep 17 00:00:00 2001 From: Matthew White Date: Wed, 15 Mar 2023 14:30:21 +0000 Subject: [PATCH 37/85] [Q_gui2] Add icon to Delete menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index ecf0da9ce..3db79ef96 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -72,9 +72,9 @@ static const MenuEntry _myMenuEdit[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"), NULL,ACT_Copy, MKICON(copy),"Ctrl+C",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"), NULL,ACT_Paste, MKICON(paste),"Ctrl+V",0}, #ifdef __APPLE__ - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"), NULL,ACT_Delete, NULL,"Backspace",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"), NULL,ACT_Delete, MKICON(delete_selection),"Backspace",0}, #else - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"), NULL,ACT_Delete, NULL,"Delete",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"), NULL,ACT_Delete, MKICON(delete_selection),"Delete",0}, #endif {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker A"), NULL,ACT_MarkA, MKICON(markA), "Ctrl+PgUp",0}, From c0e47d5aaf34e19ce226d92b3f27876d1f54f78f Mon Sep 17 00:00:00 2001 From: Matthew White Date: Wed, 15 Mar 2023 05:34:00 +0000 Subject: [PATCH 38/85] [Q_gui2] Add icon to 'Reset Marker A/B' menu items --- avidemux/common/ADM_commonUI/myOwnMenu.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index 3db79ef96..0ff0e584f 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -79,8 +79,8 @@ static const MenuEntry _myMenuEdit[] = { {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker A"), NULL,ACT_MarkA, MKICON(markA), "Ctrl+PgUp",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker B"), NULL,ACT_MarkB, MKICON(markB), "Ctrl+PgDown",0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Marker A"), NULL,ACT_ResetMarkerA, NULL,"Ctrl+Shift+PgUp",0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Marker B"), NULL,ACT_ResetMarkerB, NULL,"Ctrl+Shift+PgDown",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Marker A"), NULL,ACT_ResetMarkerA, MKICON(reset_markA),"Ctrl+Shift+PgUp",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Marker B"), NULL,ACT_ResetMarkerB, MKICON(reset_markB),"Ctrl+Shift+PgDown",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Markers"), NULL,ACT_ResetMarkers, NULL,"Ctrl+Home",0}, {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Pr&eferences"), NULL,ACT_PREFERENCES, NULL,NULL,0}, From 8815e7db9c46da261fb9524280ee030e3fc67ce2 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 14 Mar 2023 02:49:11 +0000 Subject: [PATCH 39/85] [Q_gui2] Add icon to 'Go to Time' menu item --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index 0ff0e584f..139604128 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -146,7 +146,7 @@ static const MenuEntry _myMenuGo[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Marker A"), NULL,ACT_GotoMarkA, MKICON(goMarkA), "PgUp",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Marker B"), NULL,ACT_GotoMarkB, MKICON(goMarkB), "PgDown",0}, {MENU_SEPARATOR,"-",NULL,ACT_DUMMY, NULL,NULL,1}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Time"), NULL,ACT_SelectTime, NULL, "Ctrl+T",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Time"), NULL,ACT_SelectTime, MKICON(time), "Ctrl+T",0}, {MENU_SEPARATOR,"-",NULL,ACT_DUMMY, NULL,NULL,1}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Backward 1 second"), NULL,ACT_Back1Second, MKICON(backward1s), "Shift+Left",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Forward 1 second"), NULL,ACT_Forward1Second, MKICON(forward1s), "Shift+Right",0}, From fde30220a648f1b01671a58ea8ff9b27bfed0ee8 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 03:41:55 +0000 Subject: [PATCH 40/85] [Q_gui2] Set 'Current Time' field tooltip --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 517ab05fa..66374b8ac 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1707,6 +1707,9 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_GotoMarkB,Go) ui.pushButtonJumpToMarkerB->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); + ui.currentTime->setToolTip(tt); + QString backtext, forwardtext, hint = "\n"; Action actBack, actForward; From 18f0d82141e6759cee488b4dc093ac73cf29874d Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 14 Mar 2023 06:07:04 +0000 Subject: [PATCH 41/85] [Q_gui2] Set 'Total Time' field style and tooltip The 'Total Time' has been converted into a text field, its content can be highlighted and copied to the clipboard, there's no longer the need to prefix the content with ' / ' label, update the code accordingly. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 66374b8ac..5e2121c72 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -729,12 +729,12 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng QString text = "00:00:00.000"; // Don't translate this. #ifdef USE_CUSTOM_TIME_DISPLAY_FONT ui.currentTime->setFont(QFont("ADM7SEG")); + ui.totalTime->setFont(QFont("ADM7SEG")); #endif ui.currentTime->setText(text); // Override ui translations to make sure we use point as decimal separator. QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); ui.currentTime->setFixedSize(1.15 * ctrect.width(), ui.currentTime->height()); - text = QString("/ ") + text; ui.totalTime->setText(text); // Override ui translations here too. //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); @@ -840,6 +840,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng this->adjustSize(); ui.currentTime->setTextMargins(0,0,0,0); // some Qt themes mess with text margins + ui.totalTime->setTextMargins(0,0,0,0); // some Qt themes mess with text margins threshold = RESIZE_THRESHOLD; actZoomCalled = false; @@ -1710,6 +1711,9 @@ void MainWindow::widgetsUpdateTooltips(void) tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Total time"); + ui.totalTime->setToolTip(tt); + QString backtext, forwardtext, hint = "\n"; Action actBack, actForward; @@ -1808,6 +1812,7 @@ void MainWindow::setDefaultThemeSlot(bool b) QApplication::setStyle(defaultStyle); ui.currentTime->setTextMargins(0,0,0,0); + ui.totalTime->setTextMargins(0,0,0,0); QPalette pal = style()->standardPalette(); qApp->setPalette(pal); @@ -1816,6 +1821,7 @@ void MainWindow::setDefaultThemeSlot(bool b) ui.checkBox_TimeShift->setPalette(x); \ ui.spinBox_TimeValue->setPalette(x); \ ui.currentTime->setPalette(x); \ + ui.totalTime->setPalette(x); \ ui.menuFile->setPalette(x); \ ui.menuRecent->setPalette(x); \ ui.menuEdit->setPalette(x); \ @@ -3225,7 +3231,7 @@ void UI_setTotalTime(uint64_t curTime) uint32_t shorty=(uint32_t)(curTime/1000); ms2time(shorty,&hh,&mm,&ss,&ms); - sprintf(text, "/ %02d:%02d:%02d.%03d", hh, mm, ss, ms); + sprintf(text, "%02d:%02d:%02d.%03d", hh, mm, ss, ms); WIDGET(totalTime)->setText(text); slider->setTotalDuration(curTime); } From 74df790aa1025684565a02f7ef757d4c41f79ff5 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 14 Mar 2023 06:10:52 +0000 Subject: [PATCH 42/85] [Q_gui2] Set 'Selection Duration' field style and tooltip The 'Selection Duration' has been converted into a text field, its content can be highlighted and copied to the clipboard, update the code accordingly, there's no longer the need to prefix the content with 'Selection:' label. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 5e2121c72..f783bcb88 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -730,12 +730,14 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng #ifdef USE_CUSTOM_TIME_DISPLAY_FONT ui.currentTime->setFont(QFont("ADM7SEG")); ui.totalTime->setFont(QFont("ADM7SEG")); + ui.selectionDuration->setFont(QFont("ADM7SEG")); #endif ui.currentTime->setText(text); // Override ui translations to make sure we use point as decimal separator. QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); ui.currentTime->setFixedSize(1.15 * ctrect.width(), ui.currentTime->height()); ui.totalTime->setText(text); // Override ui translations here too. + ui.selectionDuration->setText(text); // Override ui translations here too. //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); @@ -841,6 +843,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng this->adjustSize(); ui.currentTime->setTextMargins(0,0,0,0); // some Qt themes mess with text margins ui.totalTime->setTextMargins(0,0,0,0); // some Qt themes mess with text margins + ui.selectionDuration->setTextMargins(0,0,0,0); // some Qt themes mess with text margins threshold = RESIZE_THRESHOLD; actZoomCalled = false; @@ -1714,6 +1717,9 @@ void MainWindow::widgetsUpdateTooltips(void) tt = QT_TRANSLATE_NOOP("qgui2","Total time"); ui.totalTime->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Time from Marker A to B"); + ui.selectionDuration->setToolTip(tt); + QString backtext, forwardtext, hint = "\n"; Action actBack, actForward; @@ -1813,6 +1819,7 @@ void MainWindow::setDefaultThemeSlot(bool b) QApplication::setStyle(defaultStyle); ui.currentTime->setTextMargins(0,0,0,0); ui.totalTime->setTextMargins(0,0,0,0); + ui.selectionDuration->setTextMargins(0,0,0,0); QPalette pal = style()->standardPalette(); qApp->setPalette(pal); @@ -1822,6 +1829,7 @@ void MainWindow::setDefaultThemeSlot(bool b) ui.spinBox_TimeValue->setPalette(x); \ ui.currentTime->setPalette(x); \ ui.totalTime->setPalette(x); \ + ui.selectionDuration->setPalette(x); \ ui.menuFile->setPalette(x); \ ui.menuRecent->setPalette(x); \ ui.menuEdit->setPalette(x); \ @@ -3269,8 +3277,7 @@ void UI_setMarkers(uint64_t a, uint64_t b) timems=(uint32_t)(b-a); ms2time(timems,&hh,&mm,&ss,&ms); snprintf(text,79,"%02" PRIu32":%02" PRIu32":%02" PRIu32".%03" PRIu32,hh,mm,ss,ms); - QString duration=QString::fromUtf8(QT_TRANSLATE_NOOP("qgui2","Selection: "))+QString(text); - WIDGET(selectionDuration)->setText(duration); + WIDGET(selectionDuration)->setText(text); slider->setMarkers(absoluteA, absoluteB); } From 62c8de0c5bd6f1f50deeb45e1a1ef427f0ed73ca Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 02:46:57 +0000 Subject: [PATCH 43/85] [Q_gui2] Set 'Marker A/B' fields style and tooltips The 'Jump to Marker A/B' buttons has been converted into text fields, update the code accordingly. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index f783bcb88..1a5ff9409 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -731,6 +731,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.currentTime->setFont(QFont("ADM7SEG")); ui.totalTime->setFont(QFont("ADM7SEG")); ui.selectionDuration->setFont(QFont("ADM7SEG")); + ui.selectionMarkerA->setFont(QFont("ADM7SEG")); + ui.selectionMarkerB->setFont(QFont("ADM7SEG")); #endif ui.currentTime->setText(text); // Override ui translations to make sure we use point as decimal separator. QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); @@ -738,6 +740,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.totalTime->setText(text); // Override ui translations here too. ui.selectionDuration->setText(text); // Override ui translations here too. + ui.selectionMarkerA->setText(text); // Override ui translations here too. + ui.selectionMarkerB->setText(text); // Override ui translations here too. //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); @@ -844,6 +848,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.currentTime->setTextMargins(0,0,0,0); // some Qt themes mess with text margins ui.totalTime->setTextMargins(0,0,0,0); // some Qt themes mess with text margins ui.selectionDuration->setTextMargins(0,0,0,0); // some Qt themes mess with text margins + ui.selectionMarkerA->setTextMargins(0,0,0,0); // some Qt themes mess with text margins + ui.selectionMarkerB->setTextMargins(0,0,0,0); // some Qt themes mess with text margins threshold = RESIZE_THRESHOLD; actZoomCalled = false; @@ -1720,6 +1726,12 @@ void MainWindow::widgetsUpdateTooltips(void) tt = QT_TRANSLATE_NOOP("qgui2","Time from Marker A to B"); ui.selectionDuration->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Marker A"); + ui.selectionMarkerA->setToolTip(tt); + + tt = QT_TRANSLATE_NOOP("qgui2","Marker B"); + ui.selectionMarkerB->setToolTip(tt); + QString backtext, forwardtext, hint = "\n"; Action actBack, actForward; @@ -1820,6 +1832,8 @@ void MainWindow::setDefaultThemeSlot(bool b) ui.currentTime->setTextMargins(0,0,0,0); ui.totalTime->setTextMargins(0,0,0,0); ui.selectionDuration->setTextMargins(0,0,0,0); + ui.selectionMarkerA->setTextMargins(0,0,0,0); + ui.selectionMarkerB->setTextMargins(0,0,0,0); QPalette pal = style()->standardPalette(); qApp->setPalette(pal); @@ -1830,6 +1844,8 @@ void MainWindow::setDefaultThemeSlot(bool b) ui.currentTime->setPalette(x); \ ui.totalTime->setPalette(x); \ ui.selectionDuration->setPalette(x); \ + ui.selectionMarkerA->setPalette(x); \ + ui.selectionMarkerB->setPalette(x); \ ui.menuFile->setPalette(x); \ ui.menuRecent->setPalette(x); \ ui.menuEdit->setPalette(x); \ @@ -3267,12 +3283,12 @@ void UI_setMarkers(uint64_t a, uint64_t b) timems=(uint32_t)(a); ms2time(timems,&hh,&mm,&ss,&ms); snprintf(text,79,"%02" PRIu32":%02" PRIu32":%02" PRIu32".%03" PRIu32,hh,mm,ss,ms); - WIDGET(pushButtonJumpToMarkerA)->setText(text); + WIDGET(selectionMarkerA)->setText(text); timems=(uint32_t)(b); ms2time(timems,&hh,&mm,&ss,&ms); snprintf(text,79,"%02" PRIu32":%02" PRIu32":%02" PRIu32".%03" PRIu32,hh,mm,ss,ms); - WIDGET(pushButtonJumpToMarkerB)->setText(text); + WIDGET(selectionMarkerB)->setText(text); timems=(uint32_t)(b-a); ms2time(timems,&hh,&mm,&ss,&ms); From aa1b41a397202599da960871cf139ae9758b9621 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 22:22:48 +0000 Subject: [PATCH 44/85] [Q_gui2] Keep 'Selection Duration' field always enabled Do not disable the selection duration field when there's no media loaded. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 1a5ff9409..95fcf17d4 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1404,7 +1404,6 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Recent, ACT_CLEAR_RECENT, haveRecentItems) ENABLE(Recent, ACT_RESTORE_SESSION, A_checkSavedSession(false)) - ui.selectionDuration->setEnabled(vid); slider->setEnabled(vid); updateCodecWidgetControlsState(); From 68de7379b30896223fe5153a038fcf38e452c903 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 03:43:27 +0000 Subject: [PATCH 45/85] [Q_gui2] Add 'Go to Time' button to 'Current Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 23 +++++++++++++++++-- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 ++ .../ADM_gui/translation_table.h | 1 - 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 95fcf17d4..a132da04e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -146,6 +146,8 @@ static bool needsResizing=false; static QAction *findAction(std::vector *list, Action action); static QAction *findActionInToolBar(QToolBar *tb, Action action); +static QAction *pushButtonTime; + #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) #define CONNECT(object,zzz) connect( (ui.object),SIGNAL(triggered()),this,SLOT(buttonPressed())); @@ -743,6 +745,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.selectionMarkerA->setText(text); // Override ui translations here too. ui.selectionMarkerB->setText(text); // Override ui translations here too. + // Put an edit time button inside the element + pushButtonTime = ui.currentTime->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); + connect(pushButtonTime,SIGNAL(triggered()),this,SLOT(seekTime())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1295,11 +1301,9 @@ void MainWindow::buildButtonLists(void) #define ADD_PUSHBUTTON_LOADED(x) PushButtonsAvailableWhenFileLoaded.push_back(ui.x); #define ADD_PUSHBUTTON_PLAYBACK(x) PushButtonsDisabledOnPlayback.push_back(ui.x); - ADD_PUSHBUTTON_LOADED(pushButtonTime) ADD_PUSHBUTTON_LOADED(pushButtonJumpToMarkerA) ADD_PUSHBUTTON_LOADED(pushButtonJumpToMarkerB) - ADD_PUSHBUTTON_PLAYBACK(pushButtonTime) ADD_PUSHBUTTON_PLAYBACK(pushButtonJumpToMarkerA) ADD_PUSHBUTTON_PLAYBACK(pushButtonJumpToMarkerB) @@ -1340,6 +1344,8 @@ void MainWindow::setMenuItemsEnabledState(void) if(ADM_PREVIEW_NONE != admPreview::getPreviewMode()) slider->setEnabled(false); + pushButtonTime->setEnabled(false); + return; } @@ -1404,6 +1410,7 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Recent, ACT_CLEAR_RECENT, haveRecentItems) ENABLE(Recent, ACT_RESTORE_SESSION, A_checkSavedSession(false)) + pushButtonTime->setEnabled(vid); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1708,6 +1715,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_End,Go) ui.toolButtonLastFrame->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Go to Time"); + tt += SHORTCUT(ACT_SelectTime,Go) + pushButtonTime->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Go to marker A"); tt += SHORTCUT(ACT_GotoMarkA,Go) ui.pushButtonJumpToMarkerA->setToolTip(tt); @@ -2015,6 +2026,14 @@ void MainWindow::timeChanged(int) { sendAction (ACT_TimeShift) ; } +/** + \fn seekTime + \brief Called to seek a position in the player +*/ +void MainWindow::seekTime(void) +{ + sendAction (ACT_SelectTime) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 35884cfae..f3511d895 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -227,6 +227,8 @@ private slots: void checkChanged(int); void comboChanged(int z); + void seekTime(void); + void buttonPressed(void); void toolButtonPressed(bool z); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h index 5cc8fba8a..3f950379a 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h @@ -20,7 +20,6 @@ PROCESS(toolButtonFirstFrame, ACT_Begin) \ PROCESS(toolButtonLastFrame, ACT_End) \ PROCESS(pushButtonJumpToMarkerA, ACT_GotoMarkA) \ PROCESS(pushButtonJumpToMarkerB, ACT_GotoMarkB) \ -PROCESS(pushButtonTime, ACT_SelectTime) \ PROCESS(toolButtonBackOneMinute, ACT_Back1Mn) \ PROCESS(toolButtonForwardOneMinute, ACT_Forward1Mn) \ From 2f925ed0ca351899cc76a27f9edfefca5cecba5c Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 11 Mar 2023 22:18:09 +0000 Subject: [PATCH 46/85] [Q_gui2] Fix 'Current Time' too short field There sould be no need to set a fixed width, it interferes with the element due to presence of the combined action button. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index a132da04e..969ea3e71 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -737,14 +737,15 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.selectionMarkerB->setFont(QFont("ADM7SEG")); #endif ui.currentTime->setText(text); // Override ui translations to make sure we use point as decimal separator. - QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); - ui.currentTime->setFixedSize(1.15 * ctrect.width(), ui.currentTime->height()); - ui.totalTime->setText(text); // Override ui translations here too. ui.selectionDuration->setText(text); // Override ui translations here too. ui.selectionMarkerA->setText(text); // Override ui translations here too. ui.selectionMarkerB->setText(text); // Override ui translations here too. + // Disabling to not cut off the text when adding action buttons + //QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); + //ui.currentTime->setFixedSize(1.15 * ctrect.width(), ui.currentTime->height()); + // Put an edit time button inside the element pushButtonTime = ui.currentTime->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); connect(pushButtonTime,SIGNAL(triggered()),this,SLOT(seekTime())); From f13e4a59743f526671bf725e08ed0eba1ae33fcc Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 17:17:13 +0000 Subject: [PATCH 47/85] [Q_gui2] Add 'Save Script' button to 'Current Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 33 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 34 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 969ea3e71..a638379d0 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -147,6 +147,7 @@ static QAction *findAction(std::vector *list, Action action); static QAction *findActionInToolBar(QToolBar *tb, Action action); static QAction *pushButtonTime; +static QAction *pushButtonSaveScript; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -750,6 +751,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonTime = ui.currentTime->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); connect(pushButtonTime,SIGNAL(triggered()),this,SLOT(seekTime())); + // Put a save script button inside the element + pushButtonSaveScript = ui.currentTime->addAction(QIcon(MKICON(savescript)), QLineEdit::LeadingPosition); + connect(pushButtonSaveScript,SIGNAL(triggered()),this,SLOT(saveScriptAction())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1322,6 +1327,21 @@ void MainWindow::buildButtonLists(void) */ void MainWindow::setMenuItemsEnabledState(void) { + bool tinyPy = false; + + // Implementation of getPythonScriptEngine() + if(_scriptEngines.size() > 0) + { + for(int i = 0; i < _scriptEngines.size(); i++) + { + if (!_scriptEngines[i]->defaultFileExtension().compare("py")) + { + tinyPy = true; + break; + } + } + } + if(playing || (navigateWhilePlayingState != 0)) // this actually doesn't work as it should { int n=ActionsDisabledOnPlayback.size(); @@ -1346,6 +1366,7 @@ void MainWindow::setMenuItemsEnabledState(void) slider->setEnabled(false); pushButtonTime->setEnabled(false); + pushButtonSaveScript->setEnabled(false); return; } @@ -1412,6 +1433,7 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Recent, ACT_RESTORE_SESSION, A_checkSavedSession(false)) pushButtonTime->setEnabled(vid); + pushButtonSaveScript->setEnabled(vid && tinyPy); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1728,6 +1750,9 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_GotoMarkB,Go) ui.pushButtonJumpToMarkerB->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Save tinyPy script"); + pushButtonSaveScript->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2035,6 +2060,14 @@ void MainWindow::seekTime(void) { sendAction (ACT_SelectTime) ; } +/** + \fn saveScriptAction + \brief Called to save the project as a script +*/ +void MainWindow::saveScriptAction(void) +{ + sendAction (ACT_SAVE_PY_SCRIPT) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index f3511d895..762334911 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -228,6 +228,7 @@ private slots: void comboChanged(int z); void seekTime(void); + void saveScriptAction(void); void buttonPressed(void); void toolButtonPressed(bool z); From 2e22602a250d7cb436131466a0fcb52a843331e9 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 17:25:20 +0000 Subject: [PATCH 48/85] [Q_gui2] Add 'Run Script' button to 'Current Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 21 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 22 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index a638379d0..907f0aded 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -148,6 +148,7 @@ static QAction *findActionInToolBar(QToolBar *tb, Action action); static QAction *pushButtonTime; static QAction *pushButtonSaveScript; +static QAction *pushButtonRunScript; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -755,6 +756,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonSaveScript = ui.currentTime->addAction(QIcon(MKICON(savescript)), QLineEdit::LeadingPosition); connect(pushButtonSaveScript,SIGNAL(triggered()),this,SLOT(saveScriptAction())); + // Put a run script button inside the element + pushButtonRunScript = ui.currentTime->addAction(QIcon(MKICON(runscript)), QLineEdit::LeadingPosition); + connect(pushButtonRunScript,SIGNAL(triggered()),this,SLOT(runScriptAction())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1327,11 +1332,14 @@ void MainWindow::buildButtonLists(void) */ void MainWindow::setMenuItemsEnabledState(void) { + bool engines = false; bool tinyPy = false; // Implementation of getPythonScriptEngine() if(_scriptEngines.size() > 0) { + engines = true; + for(int i = 0; i < _scriptEngines.size(); i++) { if (!_scriptEngines[i]->defaultFileExtension().compare("py")) @@ -1367,6 +1375,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonTime->setEnabled(false); pushButtonSaveScript->setEnabled(false); + pushButtonRunScript->setEnabled(false); return; } @@ -1434,6 +1443,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); + pushButtonRunScript->setEnabled(engines); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1753,6 +1763,9 @@ void MainWindow::widgetsUpdateTooltips(void) tt = QT_TRANSLATE_NOOP("qgui2","Save tinyPy script"); pushButtonSaveScript->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Run script/project"); + pushButtonRunScript->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2068,6 +2081,14 @@ void MainWindow::saveScriptAction(void) { sendAction (ACT_SAVE_PY_SCRIPT) ; } +/** + \fn runScriptAction + \brief Called to run a script (aka project) +*/ +void MainWindow::runScriptAction(void) +{ + sendAction (ACT_RUN_SCRIPT) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 762334911..99ca7a156 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -229,6 +229,7 @@ private slots: void seekTime(void); void saveScriptAction(void); + void runScriptAction(void); void buttonPressed(void); void toolButtonPressed(bool z); From bbbef5cfd93b7182398fb7ac68c42ea4b5b56048 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 11:54:57 +0000 Subject: [PATCH 49/85] [Q_gui2] Add Append button to 'Total Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 20 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 907f0aded..322d59d07 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -149,6 +149,7 @@ static QAction *findActionInToolBar(QToolBar *tb, Action action); static QAction *pushButtonTime; static QAction *pushButtonSaveScript; static QAction *pushButtonRunScript; +static QAction *pushButtonAppend; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -760,6 +761,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonRunScript = ui.currentTime->addAction(QIcon(MKICON(runscript)), QLineEdit::LeadingPosition); connect(pushButtonRunScript,SIGNAL(triggered()),this,SLOT(runScriptAction())); + // Put an append button inside the element + pushButtonAppend = ui.totalTime->addAction(QIcon(MKICON(append)), QLineEdit::LeadingPosition); + connect(pushButtonAppend,SIGNAL(triggered()),this,SLOT(appendAction())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1376,6 +1381,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonTime->setEnabled(false); pushButtonSaveScript->setEnabled(false); pushButtonRunScript->setEnabled(false); + pushButtonAppend->setEnabled(false); return; } @@ -1444,6 +1450,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); + pushButtonAppend->setEnabled(vid); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1766,6 +1773,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt = QT_TRANSLATE_NOOP("qgui2","Run script/project"); pushButtonRunScript->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Append media"); + tt += SHORTCUT(ACT_APPEND_VIDEO,File) + pushButtonAppend->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2089,6 +2100,14 @@ void MainWindow::runScriptAction(void) { sendAction (ACT_RUN_SCRIPT) ; } +/** + \fn appendAction + \brief Called to append a mendia +*/ +void MainWindow::appendAction(void) +{ + sendAction (ACT_APPEND_VIDEO) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 99ca7a156..a8405cb7f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -230,6 +230,7 @@ private slots: void seekTime(void); void saveScriptAction(void); void runScriptAction(void); + void appendAction(void); void buttonPressed(void); void toolButtonPressed(bool z); From 605e45a58cfe0c9f628ad40603aa6df32c637f72 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 00:38:07 +0000 Subject: [PATCH 50/85] [Q_gui2] Add Undo button to 'Current Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 20 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 322d59d07..a4bd8d803 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -150,6 +150,7 @@ static QAction *pushButtonTime; static QAction *pushButtonSaveScript; static QAction *pushButtonRunScript; static QAction *pushButtonAppend; +static QAction *pushButtonUndo; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -765,6 +766,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonAppend = ui.totalTime->addAction(QIcon(MKICON(append)), QLineEdit::LeadingPosition); connect(pushButtonAppend,SIGNAL(triggered()),this,SLOT(appendAction())); + // Put an undo button inside the element + pushButtonUndo = ui.totalTime->addAction(QIcon(MKICON(undo)), QLineEdit::LeadingPosition); + connect(pushButtonUndo,SIGNAL(triggered()),this,SLOT(undoAction())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1382,6 +1387,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonSaveScript->setEnabled(false); pushButtonRunScript->setEnabled(false); pushButtonAppend->setEnabled(false); + pushButtonUndo->setEnabled(false); return; } @@ -1451,6 +1457,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); pushButtonAppend->setEnabled(vid); + pushButtonUndo->setEnabled(undo); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1777,6 +1784,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_APPEND_VIDEO,File) pushButtonAppend->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Undo action"); + tt += SHORTCUT(ACT_Undo,Edit) + pushButtonUndo->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2108,6 +2119,14 @@ void MainWindow::appendAction(void) { sendAction (ACT_APPEND_VIDEO) ; } +/** + \fn undoAction + \brief Called to undo the action +*/ +void MainWindow::undoAction(void) +{ + sendAction (ACT_Undo) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index a8405cb7f..fb988a0eb 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -231,6 +231,7 @@ private slots: void saveScriptAction(void); void runScriptAction(void); void appendAction(void); + void undoAction(void); void buttonPressed(void); void toolButtonPressed(bool z); From a11a10472682148a2ae19bfa87bc3240f52bc0d5 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 19 Mar 2023 00:42:13 +0000 Subject: [PATCH 51/85] [Q_gui2] Add Redo button to 'Current Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 20 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index a4bd8d803..7b42fd444 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -151,6 +151,7 @@ static QAction *pushButtonSaveScript; static QAction *pushButtonRunScript; static QAction *pushButtonAppend; static QAction *pushButtonUndo; +static QAction *pushButtonRedo; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -770,6 +771,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonUndo = ui.totalTime->addAction(QIcon(MKICON(undo)), QLineEdit::LeadingPosition); connect(pushButtonUndo,SIGNAL(triggered()),this,SLOT(undoAction())); + // Put a redo button inside the element + pushButtonRedo = ui.totalTime->addAction(QIcon(MKICON(redo)), QLineEdit::LeadingPosition); + connect(pushButtonRedo,SIGNAL(triggered()),this,SLOT(redoAction())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1388,6 +1393,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonRunScript->setEnabled(false); pushButtonAppend->setEnabled(false); pushButtonUndo->setEnabled(false); + pushButtonRedo->setEnabled(false); return; } @@ -1458,6 +1464,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonRunScript->setEnabled(engines); pushButtonAppend->setEnabled(vid); pushButtonUndo->setEnabled(undo); + pushButtonRedo->setEnabled(redo); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1788,6 +1795,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_Undo,Edit) pushButtonUndo->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Redo action"); + tt += SHORTCUT(ACT_Redo,Edit) + pushButtonRedo->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2127,6 +2138,14 @@ void MainWindow::undoAction(void) { sendAction (ACT_Undo) ; } +/** + \fn redoAction + \brief Called to redo the action +*/ +void MainWindow::redoAction(void) +{ + sendAction (ACT_Redo) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index fb988a0eb..3a81975fd 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -232,6 +232,7 @@ private slots: void runScriptAction(void); void appendAction(void); void undoAction(void); + void redoAction(void); void buttonPressed(void); void toolButtonPressed(bool z); From 6510edcbc22ae3be06a2d8b6fb24463ce349b05b Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 22:26:08 +0000 Subject: [PATCH 52/85] [Q_gui2] Add Cut button to 'Selection Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 20 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 7b42fd444..29a25d648 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -152,6 +152,7 @@ static QAction *pushButtonRunScript; static QAction *pushButtonAppend; static QAction *pushButtonUndo; static QAction *pushButtonRedo; +static QAction *pushButtonCut; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -775,6 +776,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonRedo = ui.totalTime->addAction(QIcon(MKICON(redo)), QLineEdit::LeadingPosition); connect(pushButtonRedo,SIGNAL(triggered()),this,SLOT(redoAction())); + // Put a cut button inside the element + pushButtonCut = ui.selectionDuration->addAction(QIcon(MKICON(cut)), QLineEdit::LeadingPosition); + connect(pushButtonCut,SIGNAL(triggered()),this,SLOT(cutSelection())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1394,6 +1399,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonAppend->setEnabled(false); pushButtonUndo->setEnabled(false); pushButtonRedo->setEnabled(false); + pushButtonCut->setEnabled(false); return; } @@ -1465,6 +1471,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonAppend->setEnabled(vid); pushButtonUndo->setEnabled(undo); pushButtonRedo->setEnabled(redo); + pushButtonCut->setEnabled(canDelete); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1799,6 +1806,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_Redo,Edit) pushButtonRedo->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Cut selection"); + tt += SHORTCUT(ACT_Cut,Edit) + pushButtonCut->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2146,6 +2157,14 @@ void MainWindow::redoAction(void) { sendAction (ACT_Redo) ; } +/** + \fn cutSelection + \brief Called to cut the selection +*/ +void MainWindow::cutSelection(void) +{ + sendAction (ACT_Cut) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 3a81975fd..584a5be6d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -233,6 +233,7 @@ private slots: void appendAction(void); void undoAction(void); void redoAction(void); + void cutSelection(void); void buttonPressed(void); void toolButtonPressed(bool z); From cdea0f84f1e4b6f91d4969b4e82b14af57351fc6 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 22:30:29 +0000 Subject: [PATCH 53/85] [Q_gui2] Add Copy button to 'Selection Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 20 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 29a25d648..0996178da 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -153,6 +153,7 @@ static QAction *pushButtonAppend; static QAction *pushButtonUndo; static QAction *pushButtonRedo; static QAction *pushButtonCut; +static QAction *pushButtonCopy; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -780,6 +781,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonCut = ui.selectionDuration->addAction(QIcon(MKICON(cut)), QLineEdit::LeadingPosition); connect(pushButtonCut,SIGNAL(triggered()),this,SLOT(cutSelection())); + // Put a copy button inside the text element + pushButtonCopy = ui.selectionDuration->addAction(QIcon(MKICON(copy)), QLineEdit::LeadingPosition); + connect(pushButtonCopy,SIGNAL(triggered()),this,SLOT(copySelection())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1400,6 +1405,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonUndo->setEnabled(false); pushButtonRedo->setEnabled(false); pushButtonCut->setEnabled(false); + pushButtonCopy->setEnabled(false); return; } @@ -1472,6 +1478,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonUndo->setEnabled(undo); pushButtonRedo->setEnabled(redo); pushButtonCut->setEnabled(canDelete); + pushButtonCopy->setEnabled(vid); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1810,6 +1817,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_Cut,Edit) pushButtonCut->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Copy selection"); + tt += SHORTCUT(ACT_Copy,Edit) + pushButtonCopy->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2165,6 +2176,14 @@ void MainWindow::cutSelection(void) { sendAction (ACT_Cut) ; } +/** + \fn copySelection + \brief Called to copy the selection +*/ +void MainWindow::copySelection(void) +{ + sendAction (ACT_Copy) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 584a5be6d..988f28a6e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -234,6 +234,7 @@ private slots: void undoAction(void); void redoAction(void); void cutSelection(void); + void copySelection(void); void buttonPressed(void); void toolButtonPressed(bool z); From 549ef7d55bd9df9717f3e1832787b5d16430c806 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 18 Mar 2023 22:39:18 +0000 Subject: [PATCH 54/85] [Q_gui2] Add Paste button to 'Selection Time' field --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + 2 files changed, 20 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 0996178da..b96625bc0 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -154,6 +154,7 @@ static QAction *pushButtonUndo; static QAction *pushButtonRedo; static QAction *pushButtonCut; static QAction *pushButtonCopy; +static QAction *pushButtonPaste; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -785,6 +786,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonCopy = ui.selectionDuration->addAction(QIcon(MKICON(copy)), QLineEdit::LeadingPosition); connect(pushButtonCopy,SIGNAL(triggered()),this,SLOT(copySelection())); + // Put a paste button inside the text element + pushButtonPaste = ui.selectionDuration->addAction(QIcon(MKICON(paste)), QLineEdit::LeadingPosition); + connect(pushButtonPaste,SIGNAL(triggered()),this,SLOT(pasteClipboard())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1406,6 +1411,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonRedo->setEnabled(false); pushButtonCut->setEnabled(false); pushButtonCopy->setEnabled(false); + pushButtonPaste->setEnabled(false); return; } @@ -1479,6 +1485,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonRedo->setEnabled(redo); pushButtonCut->setEnabled(canDelete); pushButtonCopy->setEnabled(vid); + pushButtonPaste->setEnabled(paste); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1821,6 +1828,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_Copy,Edit) pushButtonCopy->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Paste clipboard"); + tt += SHORTCUT(ACT_Paste,Edit) + pushButtonPaste->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Current time"); ui.currentTime->setToolTip(tt); @@ -2184,6 +2195,14 @@ void MainWindow::copySelection(void) { sendAction (ACT_Copy) ; } +/** + \fn pasteClipboard + \brief Called to paste the clipboard +*/ +void MainWindow::pasteClipboard(void) +{ + sendAction (ACT_Paste) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 988f28a6e..47c5134cb 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -235,6 +235,7 @@ private slots: void redoAction(void); void cutSelection(void); void copySelection(void); + void pasteClipboard(void); void buttonPressed(void); void toolButtonPressed(bool z); From a6a63e1ecd835438e637003310b178d62b8a288f Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 04:10:39 +0000 Subject: [PATCH 55/85] [Q_gui2] New 'Go to Time' feature for Marker A/B This allows to edit marker A/B time via the existing 'Go to Time' dialog (already used to edit the current time). --- avidemux/common/gui_action.names | 4 + avidemux/common/gui_navigate.cpp | 146 ++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 6 + 3 files changed, 156 insertions(+) diff --git a/avidemux/common/gui_action.names b/avidemux/common/gui_action.names index 428ae884b..993ef7ac3 100644 --- a/avidemux/common/gui_action.names +++ b/avidemux/common/gui_action.names @@ -13,6 +13,8 @@ ACT(STAGED_BEGIN) ACT(SetHDRConfig) ACT(SetPostProcessing) ACT(SelectTime) +ACT(SelectMarkerA) +ACT(SelectMarkerB) ACT(STAGED_END) //----- SAVE ----- @@ -48,6 +50,8 @@ ACT(Goto) ACT(GotoTime) ACT(Begin) ACT(End) +ACT(ChangeMarkerA) +ACT(ChangeMarkerB) ACT(GotoMarkA) ACT(GotoMarkB) ACT(Scale) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 96491d5c1..ed6b3b5eb 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -35,6 +35,8 @@ #include "ADM_vidMisc.h" #include "ADM_preview.h" +#include "prefs.h" + static ADMCountdown NaggingCountDown(5000); // Wait 5 sec before nagging again for cannot seek static void A_timedError(bool *first, const char *s); @@ -43,6 +45,8 @@ extern void A_setHDRConfig(void); extern void A_setPostproc(void); static uint32_t jumpTarget[4] = {0}; +static uint32_t jumpMarkerA[4] = {0}; +static uint32_t jumpMarkerB[4] = {0}; bool GUI_infiniteForward(uint64_t pts); bool GUI_lastFrameBeforePts(uint64_t pts); @@ -76,6 +80,27 @@ void HandleAction_Staged(Action action) stagedActionSuccess = 1; } break; + case ACT_SelectMarkerA: + case ACT_SelectMarkerB: + { + uint64_t pts; + uint32_t *t; + stagedActionSuccess = 0; + // Get current marker A time + pts = video_body->getMarkerAPts(); + t = jumpMarkerA; + ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + // Get current marker B time + pts = video_body->getMarkerBPts(); + t = jumpMarkerB; + ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + // Always initialize both, but select only one + if(action == ACT_SelectMarkerA) + t = jumpMarkerA; + if (DIA_gotoTime(t,t+1,t+2,t+3)) + stagedActionSuccess = 1; + } + break; default:break; } } @@ -86,6 +111,7 @@ void HandleAction_Staged(Action action) void HandleAction_Navigate(Action action) { static int ignore_change=0; + switch (action) { @@ -306,6 +332,126 @@ static int ignore_change=0; stagedActionSuccess = 0; } break; + case ACT_ChangeMarkerA: + case ACT_ChangeMarkerB: + if(!playing && stagedActionSuccess) + { + // Selected marker A/B time + uint32_t *t = jumpMarkerA; + uint32_t *tB = jumpMarkerB; + uint32_t hh,mm,ss,ms; + uint64_t ptsA, ptsB; + + // Selected marker A/B time chooser + uint64_t *sel = &ptsA; + + // Total time (beyond the last frame) + uint64_t tot = video_body->getVideoDuration(); + + // Current marker A/B to verify changes + uint64_t preA = ptsA = video_body->getMarkerAPts(); + uint64_t preB = ptsB = video_body->getMarkerBPts(); + + // Backup the current time to restore it later + uint32_t time[4] = {0}; + uint64_t pts = admPreview::getCurrentPts(); + ms2time((uint32_t)(pts/1000),time,time+1,time+2,time+3); + + // Jump to time to find the correct marker A/B time, then + // restore the previous current time after procesing. + while(t) + { + hh = t[0]; + mm = t[1]; + ss = t[2]; + ms = t[3]; + + // Check if outside boundaries when jumping to A/B + if(sel) + { + uint64_t x = ((hh*3600+mm*60+ss)*1000+ms)*1000; + + if(x == 0) + *sel = 0; + else if(x >= tot) + *sel = tot; + else if(x != *sel) + sel = NULL; + } + + // Inside boundaries or restoring previous time + if(!sel) + { + // FIXME: Don't jump to find the correct marker + // A/B time, rather find the closest frame then + // frame2time. + A_jumpToTime(hh,mm,ss,ms); + } + + // Exit the loop after restoring previous time + if(!tB) + { + break; + } + else if(t != tB) + { + // When inside boundaries find marker A time + if(!sel) + ptsA = admPreview::getCurrentPts(); + + // Switch to marker B + t = tB; + sel = &ptsB; + continue; + } + else + { + // When inside boundaries find marker B time + if(!sel) + ptsB = admPreview::getCurrentPts(); + + // Swap marker A and B when necessary + if(ptsA > ptsB) + { + bool swapit = false; + + if(!prefs->get(FEATURES_SWAP_IF_A_GREATER_THAN_B, &swapit)) + swapit = true; + + if(swapit) // auto swap + { + uint64_t y = ptsA; + ptsA = ptsB; + ptsB = y; + } + else + { + if(action == ACT_ChangeMarkerA) + ptsB = tot; // reset B + else + ptsA = 0; // reset A + } + } + + // Restore the previous time breaking the loop + t = time; + tB = NULL; + sel = NULL; + } + } + + // Check if any marker A/B has been changed + if(preA != ptsA || preB != ptsB) + { + video_body->addToUndoQueue(); + video_body->setMarkerAPts(ptsA); + video_body->setMarkerBPts(ptsB); + UI_setMarkers(ptsA, ptsB); + } + + stagedActionSuccess = 0; + } + break; case ACT_Refresh: { // Flush cache and seek to the current picture if(playing) break; diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index b96625bc0..93855adca 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -538,6 +538,12 @@ void MainWindow::actionSlot(Action a) case ACT_SelectTime: a = ACT_GotoTime; break; + case ACT_SelectMarkerA: + a = ACT_ChangeMarkerA; + break; + case ACT_SelectMarkerB: + a = ACT_ChangeMarkerB; + break; default:break; } } From 73e9297de4322a7242a40b8e47ef4a688044d603 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 21 Mar 2023 21:18:37 +0000 Subject: [PATCH 56/85] [Q_gui2] Allow to set the 'Go to Time' dialog title When setting a Marker A/B time directly, it may be useful to have a dialog title describing the action. --- avidemux/common/ADM_commonUI/DIA_gototime.cpp | 8 ++++++-- avidemux/common/gui_navigate.cpp | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/avidemux/common/ADM_commonUI/DIA_gototime.cpp b/avidemux/common/ADM_commonUI/DIA_gototime.cpp index 94aeb6a4e..76df1c655 100644 --- a/avidemux/common/ADM_commonUI/DIA_gototime.cpp +++ b/avidemux/common/ADM_commonUI/DIA_gototime.cpp @@ -25,7 +25,7 @@ * @param ms * @return */ -uint8_t DIA_gotoTime(uint32_t *hh, uint32_t *mm, uint32_t *ss,uint32_t *ms) +uint8_t DIA_gotoTime(uint32_t *hh, uint32_t *mm, uint32_t *ss,uint32_t *ms, const char *title) { uint32_t v=(*hh)*3600*1000+(*mm)*60*1000+(*ss)*1000+*ms; uint32_t max=(uint32_t)(video_body->getVideoDuration()/1000); @@ -33,11 +33,15 @@ uint32_t max=(uint32_t)(video_body->getVideoDuration()/1000); diaElemTimeStamp eh(&v,QT_TRANSLATE_NOOP("adm","TimeStamp:"),0,max); diaElem *allWidgets[]={&eh}; - if(!diaFactoryRun(QT_TRANSLATE_NOOP("adm","Go to Time"),1,allWidgets)) return 0; + if(!diaFactoryRun(QT_TRANSLATE_NOOP("adm", title),1,allWidgets)) return 0; // ms2time(v,hh,mm,ss,ms); return 1; +} +uint8_t DIA_gotoTime(uint32_t *hh, uint32_t *mm, uint32_t *ss,uint32_t *ms) +{ + return DIA_gotoTime(hh, mm, ss, ms, "Go to Time"); } // EOF diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index ed6b3b5eb..0c693b9d8 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -40,6 +40,7 @@ static ADMCountdown NaggingCountDown(5000); // Wait 5 sec before nagging again for cannot seek static void A_timedError(bool *first, const char *s); +extern uint8_t DIA_gotoTime(uint32_t *hh, uint32_t *mm, uint32_t *ss,uint32_t *ms, const char *title); extern uint8_t DIA_gotoTime(uint32_t *hh, uint32_t *mm, uint32_t *ss,uint32_t *ms); extern void A_setHDRConfig(void); extern void A_setPostproc(void); @@ -85,6 +86,7 @@ void HandleAction_Staged(Action action) { uint64_t pts; uint32_t *t; + const char *DIA_title = "Set Marker A Time"; stagedActionSuccess = 0; // Get current marker A time pts = video_body->getMarkerAPts(); @@ -97,7 +99,9 @@ void HandleAction_Staged(Action action) // Always initialize both, but select only one if(action == ACT_SelectMarkerA) t = jumpMarkerA; - if (DIA_gotoTime(t,t+1,t+2,t+3)) + else + DIA_title = "Set Marker B Time"; + if (DIA_gotoTime(t,t+1,t+2,t+3,DIA_title)) stagedActionSuccess = 1; } break; From 2fcd988de9078ce82fedd7bc2c70e276078f4c39 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 04:14:31 +0000 Subject: [PATCH 57/85] [Q_gui2] Add 'Go to Time' buttons to 'Marker A/B' fields --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 34 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 ++ 2 files changed, 36 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 93855adca..649adc613 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -155,6 +155,8 @@ static QAction *pushButtonRedo; static QAction *pushButtonCut; static QAction *pushButtonCopy; static QAction *pushButtonPaste; +static QAction *pushButtonEditMarkerA; +static QAction *pushButtonEditMarkerB; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -796,6 +798,12 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonPaste = ui.selectionDuration->addAction(QIcon(MKICON(paste)), QLineEdit::LeadingPosition); connect(pushButtonPaste,SIGNAL(triggered()),this,SLOT(pasteClipboard())); + // Put an edit marker button inside the text elements + pushButtonEditMarkerA = ui.selectionMarkerA->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); + connect(pushButtonEditMarkerA,SIGNAL(triggered()),this,SLOT(editMarkerA())); + pushButtonEditMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); + connect(pushButtonEditMarkerB,SIGNAL(triggered()),this,SLOT(editMarkerB())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1418,6 +1426,8 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonCut->setEnabled(false); pushButtonCopy->setEnabled(false); pushButtonPaste->setEnabled(false); + pushButtonEditMarkerA->setEnabled(false); + pushButtonEditMarkerB->setEnabled(false); return; } @@ -1492,6 +1502,8 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonCut->setEnabled(canDelete); pushButtonCopy->setEnabled(vid); pushButtonPaste->setEnabled(paste); + pushButtonEditMarkerA->setEnabled(vid); + pushButtonEditMarkerB->setEnabled(vid); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1800,6 +1812,12 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_SelectTime,Go) pushButtonTime->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Edit Marker A"); + pushButtonEditMarkerA->setToolTip(tt); + + tt = QT_TRANSLATE_NOOP("qgui2","Edit Marker B"); + pushButtonEditMarkerB->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Go to marker A"); tt += SHORTCUT(ACT_GotoMarkA,Go) ui.pushButtonJumpToMarkerA->setToolTip(tt); @@ -2209,6 +2227,22 @@ void MainWindow::pasteClipboard(void) { sendAction (ACT_Paste) ; } +/** + \fn editMarkerA + \brief Called to edit the marker A +*/ +void MainWindow::editMarkerA(void) +{ + sendAction (ACT_SelectMarkerA) ; +} +/** + \fn editMarkerB + \brief Called to edit the marker B +*/ +void MainWindow::editMarkerB(void) +{ + sendAction (ACT_SelectMarkerB) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 47c5134cb..289be25fd 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -236,6 +236,8 @@ private slots: void cutSelection(void); void copySelection(void); void pasteClipboard(void); + void editMarkerA(void); + void editMarkerB(void); void buttonPressed(void); void toolButtonPressed(bool z); From bb3202e3ad8fa2c1e4a7c06141f0c76088257469 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 02:51:11 +0000 Subject: [PATCH 58/85] [Q_gui2] Add 'Go to Marker A/B' button to 'Marker A/B' fields The 'Jump to Marker A/B' buttons has been converted into text fields, update the code accordingly. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 42 ++++++++++++++----- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 + .../ADM_gui/translation_table.h | 2 - 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 649adc613..b2a655c1b 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -157,6 +157,8 @@ static QAction *pushButtonCopy; static QAction *pushButtonPaste; static QAction *pushButtonEditMarkerA; static QAction *pushButtonEditMarkerB; +static QAction *pushButtonJumpToMarkerA; +static QAction *pushButtonJumpToMarkerB; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -804,6 +806,12 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonEditMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); connect(pushButtonEditMarkerB,SIGNAL(triggered()),this,SLOT(editMarkerB())); + // Put a jump marker button inside the text elements + pushButtonJumpToMarkerA = ui.selectionMarkerA->addAction(QIcon(MKICON(goMarkA)), QLineEdit::LeadingPosition); + connect(pushButtonJumpToMarkerA,SIGNAL(triggered()),this,SLOT(gotoMarkerA())); + pushButtonJumpToMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(goMarkB)), QLineEdit::LeadingPosition); + connect(pushButtonJumpToMarkerB,SIGNAL(triggered()),this,SLOT(gotoMarkerB())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1356,12 +1364,6 @@ void MainWindow::buildButtonLists(void) #define ADD_PUSHBUTTON_LOADED(x) PushButtonsAvailableWhenFileLoaded.push_back(ui.x); #define ADD_PUSHBUTTON_PLAYBACK(x) PushButtonsDisabledOnPlayback.push_back(ui.x); - ADD_PUSHBUTTON_LOADED(pushButtonJumpToMarkerA) - ADD_PUSHBUTTON_LOADED(pushButtonJumpToMarkerB) - - ADD_PUSHBUTTON_PLAYBACK(pushButtonJumpToMarkerA) - ADD_PUSHBUTTON_PLAYBACK(pushButtonJumpToMarkerB) - ADD_PUSHBUTTON_PLAYBACK(pushButtonDecoderConf) ADD_PUSHBUTTON_PLAYBACK(pushButtonVideoConf) ADD_PUSHBUTTON_PLAYBACK(pushButtonVideoFilter) @@ -1428,6 +1430,8 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonPaste->setEnabled(false); pushButtonEditMarkerA->setEnabled(false); pushButtonEditMarkerB->setEnabled(false); + pushButtonJumpToMarkerA->setEnabled(false); + pushButtonJumpToMarkerB->setEnabled(false); return; } @@ -1504,6 +1508,8 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonPaste->setEnabled(paste); pushButtonEditMarkerA->setEnabled(vid); pushButtonEditMarkerB->setEnabled(vid); + pushButtonJumpToMarkerA->setEnabled(vid); + pushButtonJumpToMarkerB->setEnabled(vid); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1818,13 +1824,13 @@ void MainWindow::widgetsUpdateTooltips(void) tt = QT_TRANSLATE_NOOP("qgui2","Edit Marker B"); pushButtonEditMarkerB->setToolTip(tt); - tt = QT_TRANSLATE_NOOP("qgui2","Go to marker A"); + tt = QT_TRANSLATE_NOOP("qgui2","Go to Marker A"); tt += SHORTCUT(ACT_GotoMarkA,Go) - ui.pushButtonJumpToMarkerA->setToolTip(tt); + pushButtonJumpToMarkerA->setToolTip(tt); - tt = QT_TRANSLATE_NOOP("qgui2","Go to marker B"); + tt = QT_TRANSLATE_NOOP("qgui2","Go to Marker B"); tt += SHORTCUT(ACT_GotoMarkB,Go) - ui.pushButtonJumpToMarkerB->setToolTip(tt); + pushButtonJumpToMarkerB->setToolTip(tt); tt = QT_TRANSLATE_NOOP("qgui2","Save tinyPy script"); pushButtonSaveScript->setToolTip(tt); @@ -2243,6 +2249,22 @@ void MainWindow::editMarkerB(void) { sendAction (ACT_SelectMarkerB) ; } +/** + \fn gotoMarkerA + \brief Called to jump to the marker A in the player +*/ +void MainWindow::gotoMarkerA(void) +{ + sendAction (ACT_GotoMarkA) ; +} +/** + \fn gotoMarkerB + \brief Called to jump to the marker B in the player +*/ +void MainWindow::gotoMarkerB(void) +{ + sendAction (ACT_GotoMarkB) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 289be25fd..0aa508e07 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -238,6 +238,8 @@ private slots: void pasteClipboard(void); void editMarkerA(void); void editMarkerB(void); + void gotoMarkerA(void); + void gotoMarkerB(void); void buttonPressed(void); void toolButtonPressed(bool z); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h index 3f950379a..3c8f44b93 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/translation_table.h @@ -18,8 +18,6 @@ PROCESS(toolButtonPreviousBlackFrame, ACT_PrevBlackFrame) \ PROCESS(toolButtonNextBlackFrame, ACT_NextBlackFrame) \ PROCESS(toolButtonFirstFrame, ACT_Begin) \ PROCESS(toolButtonLastFrame, ACT_End) \ -PROCESS(pushButtonJumpToMarkerA, ACT_GotoMarkA) \ -PROCESS(pushButtonJumpToMarkerB, ACT_GotoMarkB) \ PROCESS(toolButtonBackOneMinute, ACT_Back1Mn) \ PROCESS(toolButtonForwardOneMinute, ACT_Forward1Mn) \ From 154dca96b0b42ab8e0fb87e7ea35355007486f55 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 12 Mar 2023 06:34:33 +0000 Subject: [PATCH 59/85] [Q_gui2] Add 'Reset Marker A/B' buttons to 'Marker A/B' fields With being unable to seek beyond the last frame, the reset marker B button is useful to put the marker B at total time position (beyond the last frame). To put the marker B at total time position (beyond the last frame), set the marker A, then reset the marker B. The reset marker A button resets to position 0, the B button to the position just after the last frame (aka infinite). The presence of the reset marker A/B buttons also give a hint about when the markers are unset, that is when a button is grayed out. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 36 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index b2a655c1b..4d350545c 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -159,6 +159,8 @@ static QAction *pushButtonEditMarkerA; static QAction *pushButtonEditMarkerB; static QAction *pushButtonJumpToMarkerA; static QAction *pushButtonJumpToMarkerB; +static QAction *pushButtonResetMarkerA; +static QAction *pushButtonResetMarkerB; #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) @@ -812,6 +814,12 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonJumpToMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(goMarkB)), QLineEdit::LeadingPosition); connect(pushButtonJumpToMarkerB,SIGNAL(triggered()),this,SLOT(gotoMarkerB())); + // Put a reset marker button inside the text elements + pushButtonResetMarkerA = ui.selectionMarkerA->addAction(QIcon(MKICON(reset_markA)), QLineEdit::LeadingPosition); + connect(pushButtonResetMarkerA,SIGNAL(triggered()),this,SLOT(resetMarkerA())); + pushButtonResetMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(reset_markB)), QLineEdit::LeadingPosition); + connect(pushButtonResetMarkerB,SIGNAL(triggered()),this,SLOT(resetMarkerB())); + //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu @@ -1432,6 +1440,8 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonEditMarkerB->setEnabled(false); pushButtonJumpToMarkerA->setEnabled(false); pushButtonJumpToMarkerB->setEnabled(false); + pushButtonResetMarkerA->setEnabled(false); + pushButtonResetMarkerB->setEnabled(false); return; } @@ -1510,6 +1520,8 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonEditMarkerB->setEnabled(vid); pushButtonJumpToMarkerA->setEnabled(vid); pushButtonJumpToMarkerB->setEnabled(vid); + pushButtonResetMarkerA->setEnabled(resetA); + pushButtonResetMarkerB->setEnabled(resetB); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1832,6 +1844,14 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_GotoMarkB,Go) pushButtonJumpToMarkerB->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Reset Marker A (time 0)"); + tt += SHORTCUT(ACT_ResetMarkerA,Edit) + pushButtonResetMarkerA->setToolTip(tt); + + tt = QT_TRANSLATE_NOOP("qgui2","Reset Marker B (total time)"); + tt += SHORTCUT(ACT_ResetMarkerB,Edit) + pushButtonResetMarkerB->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Save tinyPy script"); pushButtonSaveScript->setToolTip(tt); @@ -2265,6 +2285,22 @@ void MainWindow::gotoMarkerB(void) { sendAction (ACT_GotoMarkB) ; } +/** + \fn resetMarkerA + \brief Called to reset the marker A +*/ +void MainWindow::resetMarkerA(void) +{ + sendAction (ACT_ResetMarkerA) ; +} +/** + \fn resetMarkerB + \brief Called to reset the marker B +*/ +void MainWindow::resetMarkerB(void) +{ + sendAction (ACT_ResetMarkerB) ; +} /** \fn searchMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 0aa508e07..d2acf2dd1 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -240,6 +240,8 @@ private slots: void editMarkerB(void); void gotoMarkerA(void); void gotoMarkerB(void); + void resetMarkerA(void); + void resetMarkerB(void); void buttonPressed(void); void toolButtonPressed(bool z); From 29bc17fa8f03ccacbcc8e37e920133df4e293633 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Mon, 20 Mar 2023 04:32:40 +0000 Subject: [PATCH 60/85] [Q_gui2] Add 'Edit Marker A/B' menu items --- avidemux/common/ADM_commonUI/myOwnMenu.h | 2 ++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index 139604128..55ad3947a 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -79,6 +79,8 @@ static const MenuEntry _myMenuEdit[] = { {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker A"), NULL,ACT_MarkA, MKICON(markA), "Ctrl+PgUp",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker B"), NULL,ACT_MarkB, MKICON(markB), "Ctrl+PgDown",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Edit Marker A"), NULL,ACT_SelectMarkerA, MKICON(time), "Ctrl+Alt+PgUp",0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Edit Marker B"), NULL,ACT_SelectMarkerB, MKICON(time), "Ctrl+Alt+PgDown",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Marker A"), NULL,ACT_ResetMarkerA, MKICON(reset_markA),"Ctrl+Shift+PgUp",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Marker B"), NULL,ACT_ResetMarkerB, MKICON(reset_markB),"Ctrl+Shift+PgDown",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Markers"), NULL,ACT_ResetMarkers, NULL,"Ctrl+Home",0}, diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 4d350545c..1f5c6d243 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1122,6 +1122,12 @@ bool MainWindow::buildMenu(QMenu *root,MenuEntry *menu, int nb) case ACT_MarkB: prefs->get(KEYBOARD_SHORTCUTS_ALT_MARK_B,sc); break; + case ACT_SelectMarkerA: + prefs->get(KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_A,sc); + break; + case ACT_SelectMarkerB: + prefs->get(KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_B,sc); + break; case ACT_ResetMarkerA: prefs->get(KEYBOARD_SHORTCUTS_ALT_RESET_MARK_A,sc); break; @@ -1482,6 +1488,8 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Edit, ACT_Redo, redo) ENABLE(Edit, ACT_ResetSegments, vid) // TODO: Detect that segment layout matches the default one and disable "Reset Edit" then too. + ENABLE(Edit, ACT_SelectMarkerA, vid) + ENABLE(Edit, ACT_SelectMarkerB, vid) ENABLE(Edit, ACT_ResetMarkerA, resetA) ENABLE(Edit, ACT_ResetMarkerB, resetB) ENABLE(Edit, ACT_ResetMarkers, (resetA || resetB)) @@ -1660,6 +1668,8 @@ void MainWindow::updateActionShortcuts(void) case ACT_Delete: case ACT_MarkA: case ACT_MarkB: + case ACT_SelectMarkerA: + case ACT_SelectMarkerB: case ACT_ResetMarkerA: case ACT_ResetMarkerB: case ACT_ResetMarkers: @@ -1706,6 +1716,12 @@ void MainWindow::updateActionShortcuts(void) case ACT_MarkB: prefs->get(KEYBOARD_SHORTCUTS_ALT_MARK_B,sc); break; + case ACT_SelectMarkerA: + prefs->get(KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_A,sc); + break; + case ACT_SelectMarkerB: + prefs->get(KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_B,sc); + break; case ACT_ResetMarkerA: prefs->get(KEYBOARD_SHORTCUTS_ALT_RESET_MARK_A,sc); break; @@ -1831,9 +1847,11 @@ void MainWindow::widgetsUpdateTooltips(void) pushButtonTime->setToolTip(tt); tt = QT_TRANSLATE_NOOP("qgui2","Edit Marker A"); + tt += SHORTCUT(ACT_SelectMarkerA,Edit) pushButtonEditMarkerA->setToolTip(tt); tt = QT_TRANSLATE_NOOP("qgui2","Edit Marker B"); + tt += SHORTCUT(ACT_SelectMarkerB,Edit) pushButtonEditMarkerB->setToolTip(tt); tt = QT_TRANSLATE_NOOP("qgui2","Go to Marker A"); From b34407ec71e283d641c7aecb095dadbcc45a4e94 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Tue, 14 Mar 2023 01:22:43 +0000 Subject: [PATCH 61/85] [Q_gui2] Build 'Edit Marker A/B' menu items preferences $ cd avidemux_core/ADM_coreUtils/src $ nano prefs2.conf $ chmod +x update_prefs.sh $ ./update_prefs.sh --- avidemux_core/ADM_coreUtils/include/prefs2_list.h | 2 ++ avidemux_core/ADM_coreUtils/src/prefs2.conf | 2 ++ avidemux_core/ADM_coreUtils/src/prefs2.h | 2 ++ avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp | 2 ++ avidemux_core/ADM_coreUtils/src/prefs2_json.cpp | 2 ++ avidemux_core/ADM_coreUtils/src/prefs2_pref.h | 2 ++ 6 files changed, 12 insertions(+) diff --git a/avidemux_core/ADM_coreUtils/include/prefs2_list.h b/avidemux_core/ADM_coreUtils/include/prefs2_list.h index b46b3dce4..d0a81da96 100644 --- a/avidemux_core/ADM_coreUtils/include/prefs2_list.h +++ b/avidemux_core/ADM_coreUtils/include/prefs2_list.h @@ -27,6 +27,8 @@ KEYBOARD_SHORTCUTS_USE_ALTERNATE_KBD_SHORTCUTS, //bool KEYBOARD_SHORTCUTS_SWAP_UP_DOWN_KEYS, //bool KEYBOARD_SHORTCUTS_ALT_MARK_A, //string KEYBOARD_SHORTCUTS_ALT_MARK_B, //string +KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_A, //string +KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_B, //string KEYBOARD_SHORTCUTS_ALT_RESET_MARK_A, //string KEYBOARD_SHORTCUTS_ALT_RESET_MARK_B, //string KEYBOARD_SHORTCUTS_ALT_RESET_MARKERS, //string diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.conf b/avidemux_core/ADM_coreUtils/src/prefs2.conf index b17350ff7..ff70af321 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.conf +++ b/avidemux_core/ADM_coreUtils/src/prefs2.conf @@ -48,6 +48,8 @@ bool:use_alternate_kbd_shortcuts, 0, 0, 1 bool:swap_up_down_keys, 0, 0, 1 string:alt_mark_a, "I" string:alt_mark_b, "O" +string:alt_edit_mark_a, "Z" +string:alt_edit_mark_b, "X" string:alt_reset_mark_a, "U" string:alt_reset_mark_b, "P" string:alt_reset_markers, "R" diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.h b/avidemux_core/ADM_coreUtils/src/prefs2.h index 1f3df7a8f..6c4bc0609 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2.h @@ -36,6 +36,8 @@ struct { bool swap_up_down_keys; std::string alt_mark_a; std::string alt_mark_b; + std::string alt_edit_mark_a; + std::string alt_edit_mark_b; std::string alt_reset_mark_a; std::string alt_reset_mark_b; std::string alt_reset_markers; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp index 8b858cd20..04c549b58 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp @@ -29,6 +29,8 @@ extern const ADM_paramList my_prefs_struct_param[]={ {"keyboard_shortcuts.swap_up_down_keys",offsetof(my_prefs_struct,keyboard_shortcuts.swap_up_down_keys),"bool",ADM_param_bool}, {"keyboard_shortcuts.alt_mark_a",offsetof(my_prefs_struct,keyboard_shortcuts.alt_mark_a),"std::string",ADM_param_stdstring}, {"keyboard_shortcuts.alt_mark_b",offsetof(my_prefs_struct,keyboard_shortcuts.alt_mark_b),"std::string",ADM_param_stdstring}, + {"keyboard_shortcuts.alt_edit_mark_a",offsetof(my_prefs_struct,keyboard_shortcuts.alt_edit_mark_a),"std::string",ADM_param_stdstring}, + {"keyboard_shortcuts.alt_edit_mark_b",offsetof(my_prefs_struct,keyboard_shortcuts.alt_edit_mark_b),"std::string",ADM_param_stdstring}, {"keyboard_shortcuts.alt_reset_mark_a",offsetof(my_prefs_struct,keyboard_shortcuts.alt_reset_mark_a),"std::string",ADM_param_stdstring}, {"keyboard_shortcuts.alt_reset_mark_b",offsetof(my_prefs_struct,keyboard_shortcuts.alt_reset_mark_b),"std::string",ADM_param_stdstring}, {"keyboard_shortcuts.alt_reset_markers",offsetof(my_prefs_struct,keyboard_shortcuts.alt_reset_markers),"std::string",ADM_param_stdstring}, diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp index f9a44a984..8768a3ccc 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp @@ -39,6 +39,8 @@ json.addBool("use_alternate_kbd_shortcuts",key->keyboard_shortcuts.use_alternate json.addBool("swap_up_down_keys",key->keyboard_shortcuts.swap_up_down_keys); json.addString("alt_mark_a",key->keyboard_shortcuts.alt_mark_a); json.addString("alt_mark_b",key->keyboard_shortcuts.alt_mark_b); +json.addString("alt_edit_mark_a",key->keyboard_shortcuts.alt_edit_mark_a); +json.addString("alt_edit_mark_b",key->keyboard_shortcuts.alt_edit_mark_b); json.addString("alt_reset_mark_a",key->keyboard_shortcuts.alt_reset_mark_a); json.addString("alt_reset_mark_b",key->keyboard_shortcuts.alt_reset_mark_b); json.addString("alt_reset_markers",key->keyboard_shortcuts.alt_reset_markers); diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h index 46f4f63ba..2de9a5432 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h @@ -40,6 +40,8 @@ static optionDesc myOptions[]={ { KEYBOARD_SHORTCUTS_SWAP_UP_DOWN_KEYS,"keyboard_shortcuts.swap_up_down_keys",ADM_param_bool ,"0", 0, 1}, { KEYBOARD_SHORTCUTS_ALT_MARK_A,"keyboard_shortcuts.alt_mark_a" ,ADM_param_stdstring ,"I", 0, 0}, { KEYBOARD_SHORTCUTS_ALT_MARK_B,"keyboard_shortcuts.alt_mark_b" ,ADM_param_stdstring ,"O", 0, 0}, +{ KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_A,"keyboard_shortcuts.alt_edit_mark_a",ADM_param_stdstring ,"Z", 0, 0}, +{ KEYBOARD_SHORTCUTS_ALT_EDIT_MARK_B,"keyboard_shortcuts.alt_edit_mark_b",ADM_param_stdstring ,"X", 0, 0}, { KEYBOARD_SHORTCUTS_ALT_RESET_MARK_A,"keyboard_shortcuts.alt_reset_mark_a",ADM_param_stdstring ,"U", 0, 0}, { KEYBOARD_SHORTCUTS_ALT_RESET_MARK_B,"keyboard_shortcuts.alt_reset_mark_b",ADM_param_stdstring ,"P", 0, 0}, { KEYBOARD_SHORTCUTS_ALT_RESET_MARKERS,"keyboard_shortcuts.alt_reset_markers",ADM_param_stdstring ,"R", 0, 0}, From 3c3efe2c15f011f0594053cd4c2d619143dca919 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 00:34:02 +0000 Subject: [PATCH 62/85] [Q_gui2] New feature to edit 'Current Time' field directly --- .../ADM_userInterfaces/ADM_gui2/gui_none.cpp | 4 ++ avidemux/common/ADM_commonUI/GUI_ui.h | 1 + avidemux/common/gui_action.names | 1 + avidemux/common/gui_navigate.cpp | 9 +++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 62 +++++++++++++++++-- .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 2 +- 6 files changed, 73 insertions(+), 6 deletions(-) diff --git a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp index 9e26ffec3..263aa63c2 100644 --- a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp +++ b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp @@ -154,6 +154,10 @@ void UI_SetCurrentFormat( uint32_t f ) { cliFormat=f; } +bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + return false; +} void UI_setCurrentTime(uint64_t x) { diff --git a/avidemux/common/ADM_commonUI/GUI_ui.h b/avidemux/common/ADM_commonUI/GUI_ui.h index 0293a7d06..e28ab2b73 100644 --- a/avidemux/common/ADM_commonUI/GUI_ui.h +++ b/avidemux/common/ADM_commonUI/GUI_ui.h @@ -5,6 +5,7 @@ void UI_updateFrameCount(uint32_t curFrame); void UI_setFrameCount(uint32_t curFrame,uint32_t total); +bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); void UI_setCurrentTime(uint64_t pts); void UI_setTotalTime(uint64_t curTime); void UI_setSegments(uint32_t numOfSegs, uint64_t * segPts); diff --git a/avidemux/common/gui_action.names b/avidemux/common/gui_action.names index 993ef7ac3..95537dfac 100644 --- a/avidemux/common/gui_action.names +++ b/avidemux/common/gui_action.names @@ -12,6 +12,7 @@ ACT(StopAvi) ACT(STAGED_BEGIN) ACT(SetHDRConfig) ACT(SetPostProcessing) +ACT(GetTime) ACT(SelectTime) ACT(SelectMarkerA) ACT(SelectMarkerB) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 0c693b9d8..d0819d268 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -70,6 +70,15 @@ void HandleAction_Staged(Action action) case ACT_SetPostProcessing: A_setPostproc(); break; + case ACT_GetTime: + { + stagedActionSuccess = 0; + // Read the time set in the UI, not the real PTS + uint32_t *t = jumpTarget; + if(UI_getCurrentTime(t,t+1,t+2,t+3)) + stagedActionSuccess = 1; + } + break; case ACT_SelectTime: { stagedActionSuccess = 0; diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 1f5c6d243..c8e32eb9e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -143,6 +143,8 @@ static bool uiIsMaximized=false; static bool needsResizing=false; +static QRegExp timeRegExp("^([0-9]{2}):([0-5][0-9]):([0-5][0-9])\\.([0-9]{3})$"); + static QAction *findAction(std::vector *list, Action action); static QAction *findActionInToolBar(QToolBar *tb, Action action); @@ -474,9 +476,20 @@ void MainWindow::timeChangeFinished(void) void MainWindow::currentTimeChanged(void) { - sendAction(ACT_GotoTime); + sendAction(ACT_GetTime); - this->setFocus(Qt::OtherFocusReason); + // NOTE: QLineEdit::editingFinished() is emitted when Enter is + // pressed or the focus is lost. Pressing Enter alone doesn't + // change focus. Hence, changing focus programmatically after + // pressing Enter will emit the signal one more time. This is + // like pressing Enter followed by pressing Tab (two signals). + // Pressing Tab alone will send only one signal while changing + // focus. Keep this in mind when you expect to receive only 1 + // signal after pressing Enter. + + // Disabling to stay on the field after pressing Enter, the user + // may want to try different edits. To change field use Tab. + //this->setFocus(Qt::OtherFocusReason); } /** @@ -541,6 +554,7 @@ void MainWindow::actionSlot(Action a) case ACT_SetPostProcessing: a = ACT_Refresh; break; + case ACT_GetTime: case ACT_SelectTime: a = ACT_GotoTime; break; @@ -741,8 +755,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect(ui.checkBox_TimeShift,SIGNAL(stateChanged(int)),this,SLOT(checkChanged(int))); connect(ui.spinBox_TimeValue,SIGNAL(valueChanged(int)),this,SLOT(timeChanged(int))); connect(ui.spinBox_TimeValue, SIGNAL(editingFinished()), this, SLOT(timeChangeFinished())); -#if 0 /* it is read-only */ - QRegExp timeRegExp("^[0-9]{2}:[0-5][0-9]:[0-5][0-9]\\.[0-9]{3}$"); +#if 1 /* disable if read-only */ QRegExpValidator *timeValidator = new QRegExpValidator(timeRegExp, this); ui.currentTime->setValidator(timeValidator); ui.currentTime->setInputMask("99:99:99.999"); @@ -820,7 +833,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng pushButtonResetMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(reset_markB)), QLineEdit::LeadingPosition); connect(pushButtonResetMarkerB,SIGNAL(triggered()),this,SLOT(resetMarkerB())); - //connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); + // Get the time the user sets directly in the text element + connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); // Build file,... menu addScriptEnginesToFileMenu(myMenuFile); @@ -1433,6 +1447,7 @@ void MainWindow::setMenuItemsEnabledState(void) if(ADM_PREVIEW_NONE != admPreview::getPreviewMode()) slider->setEnabled(false); + ui.currentTime->setReadOnly(true); pushButtonTime->setEnabled(false); pushButtonSaveScript->setEnabled(false); pushButtonRunScript->setEnabled(false); @@ -1515,6 +1530,7 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Recent, ACT_CLEAR_RECENT, haveRecentItems) ENABLE(Recent, ACT_RESTORE_SESSION, A_checkSavedSession(false)) + ui.currentTime->setReadOnly(!vid); pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); @@ -3531,6 +3547,42 @@ admUITaskBarProgress *UI_getTaskBarProgress() return QuiTaskBarProgress; } +/** + \fn UI_getCurrentTime + \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS +*/ +bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + QRegExp rx(timeRegExp); + + // Previous state + uint64_t pts = admPreview::getCurrentPts(); + + if(rx.exactMatch(WIDGET(currentTime)->text())) + { + QStringList results = rx.capturedTexts(); + + *hh = results.at(1).toInt(NULL, 10); + *mm = results.at(2).toInt(NULL, 10); + *ss = results.at(3).toInt(NULL, 10); + *ms = results.at(4).toInt(NULL, 10); + + uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; + + // Abort if there are no changes + if(x == pts) + return false; + } + else + { + // On failure revert to previous state + UI_setCurrentTime(pts); + return false; + } + + return true; +} + /** \fn UI_setCurrentTime \brief Set current PTS of displayed video diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index b5cc6aa29..4bb130970 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -1699,7 +1699,7 @@ Qt::AlignCenter - true + false From 7f6b25730a0b06176e83527fd3bfc3a462b9ea95 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 05:21:31 +0000 Subject: [PATCH 63/85] [Q_gui2] New feature to edit 'Marker A/B' fields directly --- .../ADM_userInterfaces/ADM_gui2/gui_none.cpp | 8 ++ avidemux/common/ADM_commonUI/GUI_ui.h | 2 + avidemux/common/gui_action.names | 2 + avidemux/common/gui_navigate.cpp | 30 ++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 98 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 + .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 4 +- 7 files changed, 144 insertions(+), 2 deletions(-) diff --git a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp index 263aa63c2..3cdec298b 100644 --- a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp +++ b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp @@ -158,6 +158,14 @@ bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { return false; } +bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + return false; +} +bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + return false; +} void UI_setCurrentTime(uint64_t x) { diff --git a/avidemux/common/ADM_commonUI/GUI_ui.h b/avidemux/common/ADM_commonUI/GUI_ui.h index e28ab2b73..cbef9e328 100644 --- a/avidemux/common/ADM_commonUI/GUI_ui.h +++ b/avidemux/common/ADM_commonUI/GUI_ui.h @@ -6,6 +6,8 @@ void UI_updateFrameCount(uint32_t curFrame); void UI_setFrameCount(uint32_t curFrame,uint32_t total); bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); +bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); +bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); void UI_setCurrentTime(uint64_t pts); void UI_setTotalTime(uint64_t curTime); void UI_setSegments(uint32_t numOfSegs, uint64_t * segPts); diff --git a/avidemux/common/gui_action.names b/avidemux/common/gui_action.names index 95537dfac..4a1f1f258 100644 --- a/avidemux/common/gui_action.names +++ b/avidemux/common/gui_action.names @@ -13,6 +13,8 @@ ACT(STAGED_BEGIN) ACT(SetHDRConfig) ACT(SetPostProcessing) ACT(GetTime) +ACT(GetMarkerA) +ACT(GetMarkerB) ACT(SelectTime) ACT(SelectMarkerA) ACT(SelectMarkerB) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index d0819d268..3ca4979bd 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -90,6 +90,36 @@ void HandleAction_Staged(Action action) stagedActionSuccess = 1; } break; + case ACT_GetMarkerA: + { + stagedActionSuccess = 0; + // Read the time set in the UI, not the real PTS + uint32_t *t = jumpMarkerA; + if(UI_getMarkerA(t,t+1,t+2,t+3)) + { + // Never leave the other marker uninitialized + uint64_t pts = video_body->getMarkerBPts(); + t = jumpMarkerB; + ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + stagedActionSuccess = 1; + } + } + break; + case ACT_GetMarkerB: + { + stagedActionSuccess = 0; + // Read the time set in the UI, not the real PTS + uint32_t *t = jumpMarkerB; + if(UI_getMarkerB(t,t+1,t+2,t+3)) + { + // Never leave the other marker uninitialized + uint64_t pts = video_body->getMarkerAPts(); + t = jumpMarkerA; + ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + stagedActionSuccess = 1; + } + } + break; case ACT_SelectMarkerA: case ACT_SelectMarkerB: { diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index c8e32eb9e..fbe42e31d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -492,6 +492,16 @@ void MainWindow::currentTimeChanged(void) //this->setFocus(Qt::OtherFocusReason); } +void MainWindow::markerAChanged(void) +{ + sendAction(ACT_GetMarkerA); +} + +void MainWindow::markerBChanged(void) +{ + sendAction(ACT_GetMarkerB); +} + /** \fn currentTimeToClipboard */ @@ -558,9 +568,11 @@ void MainWindow::actionSlot(Action a) case ACT_SelectTime: a = ACT_GotoTime; break; + case ACT_GetMarkerA: case ACT_SelectMarkerA: a = ACT_ChangeMarkerA; break; + case ACT_GetMarkerB: case ACT_SelectMarkerB: a = ACT_ChangeMarkerB; break; @@ -759,6 +771,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng QRegExpValidator *timeValidator = new QRegExpValidator(timeRegExp, this); ui.currentTime->setValidator(timeValidator); ui.currentTime->setInputMask("99:99:99.999"); + ui.selectionMarkerA->setValidator(timeValidator); + ui.selectionMarkerA->setInputMask("99:99:99.999"); + ui.selectionMarkerB->setValidator(timeValidator); + ui.selectionMarkerB->setInputMask("99:99:99.999"); #endif // set the size of the current time display to fit the content QString text = "00:00:00.000"; // Don't translate this. @@ -836,6 +852,10 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng // Get the time the user sets directly in the text element connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); + // Get the time the user sets directly in the text elements + connect(ui.selectionMarkerA, SIGNAL(editingFinished()), this, SLOT(markerAChanged())); + connect(ui.selectionMarkerB, SIGNAL(editingFinished()), this, SLOT(markerBChanged())); + // Build file,... menu addScriptEnginesToFileMenu(myMenuFile); addScriptShellsToToolsMenu(myMenuTool); @@ -1448,6 +1468,8 @@ void MainWindow::setMenuItemsEnabledState(void) slider->setEnabled(false); ui.currentTime->setReadOnly(true); + ui.selectionMarkerA->setReadOnly(true); + ui.selectionMarkerB->setReadOnly(true); pushButtonTime->setEnabled(false); pushButtonSaveScript->setEnabled(false); pushButtonRunScript->setEnabled(false); @@ -1531,6 +1553,8 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Recent, ACT_RESTORE_SESSION, A_checkSavedSession(false)) ui.currentTime->setReadOnly(!vid); + ui.selectionMarkerA->setReadOnly(!vid); + ui.selectionMarkerB->setReadOnly(!vid); pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); @@ -3583,6 +3607,80 @@ bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) return true; } +/** + \fn UI_getMarkerA + \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS +*/ +bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + QRegExp rx(timeRegExp); + + // Previous state + uint64_t ptsA = video_body->getMarkerAPts(); + uint64_t ptsB = video_body->getMarkerBPts(); + + if(rx.exactMatch(WIDGET(selectionMarkerA)->text())) + { + QStringList results = rx.capturedTexts(); + + *hh = results.at(1).toInt(NULL, 10); + *mm = results.at(2).toInt(NULL, 10); + *ss = results.at(3).toInt(NULL, 10); + *ms = results.at(4).toInt(NULL, 10); + + uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; + + // Abort if there are no changes + if(x == ptsA) + return false; + } + else + { + // On failure revert to previous state + UI_setMarkers(ptsA, ptsB); + return false; + } + + return true; +} + +/** + \fn UI_getMarkerB + \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS +*/ +bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + QRegExp rx(timeRegExp); + + // Previous state + uint64_t ptsA = video_body->getMarkerAPts(); + uint64_t ptsB = video_body->getMarkerBPts(); + + if(rx.exactMatch(WIDGET(selectionMarkerB)->text())) + { + QStringList results = rx.capturedTexts(); + + *hh = results.at(1).toInt(NULL, 10); + *mm = results.at(2).toInt(NULL, 10); + *ss = results.at(3).toInt(NULL, 10); + *ms = results.at(4).toInt(NULL, 10); + + uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; + + // Abort if there are no changes + if(x == ptsB) + return false; + } + else + { + // On failure revert to previous state + UI_setMarkers(ptsA, ptsB); + return false; + } + + return true; +} + /** \fn UI_setCurrentTime \brief Set current PTS of displayed video diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index d2acf2dd1..ca601f349 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -250,6 +250,8 @@ private slots: void previewModeChangedFromToolbar(bool status); void currentTimeChanged(void); + void markerAChanged(void); + void markerBChanged(void); void sliderValueChanged(int u); void sliderMoved(int value); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index 4bb130970..e68a141d2 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -1535,7 +1535,7 @@ Qt::AlignCenter - true + false @@ -1560,7 +1560,7 @@ Qt::AlignCenter - true + false From 2507fadc0dcbeaeb398e173a69d31608002f9078 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 06:29:58 +0000 Subject: [PATCH 64/85] [Q_gui2] New feature to edit 'Selection Duration' field directly Modifying the selection duration will shift the marker B. i.e. marker B = marker A + selection duration --- .../ADM_userInterfaces/ADM_gui2/gui_none.cpp | 4 ++ avidemux/common/ADM_commonUI/GUI_ui.h | 1 + avidemux/common/gui_action.names | 1 + avidemux/common/gui_navigate.cpp | 19 +++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 50 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 2 +- 7 files changed, 77 insertions(+), 1 deletion(-) diff --git a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp index 3cdec298b..41967a82f 100644 --- a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp +++ b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp @@ -166,6 +166,10 @@ bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { return false; } +bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + return false; +} void UI_setCurrentTime(uint64_t x) { diff --git a/avidemux/common/ADM_commonUI/GUI_ui.h b/avidemux/common/ADM_commonUI/GUI_ui.h index cbef9e328..8c8de9c11 100644 --- a/avidemux/common/ADM_commonUI/GUI_ui.h +++ b/avidemux/common/ADM_commonUI/GUI_ui.h @@ -8,6 +8,7 @@ void UI_setFrameCount(uint32_t curFrame,uint32_t total); bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); +bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); void UI_setCurrentTime(uint64_t pts); void UI_setTotalTime(uint64_t curTime); void UI_setSegments(uint32_t numOfSegs, uint64_t * segPts); diff --git a/avidemux/common/gui_action.names b/avidemux/common/gui_action.names index 4a1f1f258..99e85c5de 100644 --- a/avidemux/common/gui_action.names +++ b/avidemux/common/gui_action.names @@ -15,6 +15,7 @@ ACT(SetPostProcessing) ACT(GetTime) ACT(GetMarkerA) ACT(GetMarkerB) +ACT(GetSelection) ACT(SelectTime) ACT(SelectMarkerA) ACT(SelectMarkerB) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 3ca4979bd..ba7245bac 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -144,6 +144,25 @@ void HandleAction_Staged(Action action) stagedActionSuccess = 1; } break; + case ACT_GetSelection: + { + stagedActionSuccess = 0; + // Read the time set in the UI, not the real PTS + uint32_t time[4] = {0}, *t = time; + if(UI_getSelectionTime(t,t+1,t+2,t+3)) + { + // Never leave the markers uninitialized + uint64_t ptsA = video_body->getMarkerAPts(); + uint64_t ptsB, delta = ((t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; + t = jumpMarkerA; + ms2time((uint32_t)(ptsA/1000),t,t+1,t+2,t+3); + t = jumpMarkerB; + ptsB = ptsA + delta; + ms2time((uint32_t)(ptsB/1000),t,t+1,t+2,t+3); + stagedActionSuccess = 1; + } + } + break; default:break; } } diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index fbe42e31d..1123ed8e7 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -502,6 +502,11 @@ void MainWindow::markerBChanged(void) sendAction(ACT_GetMarkerB); } +void MainWindow::selectionDurationChanged(void) +{ + sendAction(ACT_GetSelection); +} + /** \fn currentTimeToClipboard */ @@ -573,6 +578,7 @@ void MainWindow::actionSlot(Action a) a = ACT_ChangeMarkerA; break; case ACT_GetMarkerB: + case ACT_GetSelection: case ACT_SelectMarkerB: a = ACT_ChangeMarkerB; break; @@ -775,6 +781,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.selectionMarkerA->setInputMask("99:99:99.999"); ui.selectionMarkerB->setValidator(timeValidator); ui.selectionMarkerB->setInputMask("99:99:99.999"); + ui.selectionDuration->setValidator(timeValidator); + ui.selectionDuration->setInputMask("99:99:99.999"); #endif // set the size of the current time display to fit the content QString text = "00:00:00.000"; // Don't translate this. @@ -856,6 +864,9 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect(ui.selectionMarkerA, SIGNAL(editingFinished()), this, SLOT(markerAChanged())); connect(ui.selectionMarkerB, SIGNAL(editingFinished()), this, SLOT(markerBChanged())); + // Get the time the user sets directly in the text element + connect(ui.selectionDuration, SIGNAL(editingFinished()), this, SLOT(selectionDurationChanged())); + // Build file,... menu addScriptEnginesToFileMenu(myMenuFile); addScriptShellsToToolsMenu(myMenuTool); @@ -1470,6 +1481,7 @@ void MainWindow::setMenuItemsEnabledState(void) ui.currentTime->setReadOnly(true); ui.selectionMarkerA->setReadOnly(true); ui.selectionMarkerB->setReadOnly(true); + ui.selectionDuration->setReadOnly(true); pushButtonTime->setEnabled(false); pushButtonSaveScript->setEnabled(false); pushButtonRunScript->setEnabled(false); @@ -1555,6 +1567,7 @@ void MainWindow::setMenuItemsEnabledState(void) ui.currentTime->setReadOnly(!vid); ui.selectionMarkerA->setReadOnly(!vid); ui.selectionMarkerB->setReadOnly(!vid); + ui.selectionDuration->setReadOnly(!vid); pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); @@ -3681,6 +3694,43 @@ bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) return true; } +/** + \fn UI_getSelectionTime + \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS +*/ +bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + QRegExp rx(timeRegExp); + + // Previous state + uint64_t ptsA = video_body->getMarkerAPts(); + uint64_t ptsB = video_body->getMarkerBPts(); + + if(rx.exactMatch(WIDGET(selectionDuration)->text())) + { + QStringList results = rx.capturedTexts(); + + *hh = results.at(1).toInt(NULL, 10); + *mm = results.at(2).toInt(NULL, 10); + *ss = results.at(3).toInt(NULL, 10); + *ms = results.at(4).toInt(NULL, 10); + + uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; + + // Abort if there are no changes + if(ptsB == (ptsA + x)) + return false; + } + else + { + // On failure revert to previous state + UI_setMarkers(ptsA, ptsB); + return false; + } + + return true; +} + /** \fn UI_setCurrentTime \brief Set current PTS of displayed video diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index ca601f349..d9a615ed1 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -252,6 +252,7 @@ private slots: void currentTimeChanged(void); void markerAChanged(void); void markerBChanged(void); + void selectionDurationChanged(void); void sliderValueChanged(int u); void sliderMoved(int value); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index e68a141d2..572df50c4 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -1633,7 +1633,7 @@ Qt::AlignCenter - true + false From fefb4a6a8692cf5c99dcc24fec209384b3587b77 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 06:53:23 +0000 Subject: [PATCH 65/85] [Q_gui2] New feature to edit 'Total Time' field directly Modifying the total time will set the marker A to the new duration and reset the marker B, selecting the last part of the video that once cut will give the new total duration. i.e. marker A = new total duration, marker B = old total duration --- .../ADM_userInterfaces/ADM_gui2/gui_none.cpp | 4 ++ avidemux/common/ADM_commonUI/GUI_ui.h | 1 + avidemux/common/gui_action.names | 1 + avidemux/common/gui_navigate.cpp | 18 +++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 50 +++++++++++++++++++ .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 1 + .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 2 +- 7 files changed, 76 insertions(+), 1 deletion(-) diff --git a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp index 41967a82f..556cfa43c 100644 --- a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp +++ b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp @@ -170,6 +170,10 @@ bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { return false; } +bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + return false; +} void UI_setCurrentTime(uint64_t x) { diff --git a/avidemux/common/ADM_commonUI/GUI_ui.h b/avidemux/common/ADM_commonUI/GUI_ui.h index 8c8de9c11..17b209ff0 100644 --- a/avidemux/common/ADM_commonUI/GUI_ui.h +++ b/avidemux/common/ADM_commonUI/GUI_ui.h @@ -9,6 +9,7 @@ bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); +bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); void UI_setCurrentTime(uint64_t pts); void UI_setTotalTime(uint64_t curTime); void UI_setSegments(uint32_t numOfSegs, uint64_t * segPts); diff --git a/avidemux/common/gui_action.names b/avidemux/common/gui_action.names index 99e85c5de..515c8ccfd 100644 --- a/avidemux/common/gui_action.names +++ b/avidemux/common/gui_action.names @@ -16,6 +16,7 @@ ACT(GetTime) ACT(GetMarkerA) ACT(GetMarkerB) ACT(GetSelection) +ACT(GetTotal) ACT(SelectTime) ACT(SelectMarkerA) ACT(SelectMarkerB) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index ba7245bac..7a3a0844c 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -163,6 +163,24 @@ void HandleAction_Staged(Action action) } } break; + case ACT_GetTotal: + { + stagedActionSuccess = 0; + // Read the time set in the UI, not the real PTS + uint32_t time[4] = {0}, *t = time; + if(UI_getTotalTime(t,t+1,t+2,t+3)) + { + // Never leave the markers uninitialized + uint64_t ptsA = ((t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; + uint64_t ptsB = video_body->getVideoDuration(); + t = jumpMarkerA; + ms2time((uint32_t)(ptsA/1000),t,t+1,t+2,t+3); + t = jumpMarkerB; + ms2time((uint32_t)(ptsB/1000),t,t+1,t+2,t+3); + stagedActionSuccess = 1; + } + } + break; default:break; } } diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 1123ed8e7..e49c9523d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -507,6 +507,11 @@ void MainWindow::selectionDurationChanged(void) sendAction(ACT_GetSelection); } +void MainWindow::totalTimeChanged(void) +{ + sendAction(ACT_GetTotal); +} + /** \fn currentTimeToClipboard */ @@ -574,6 +579,7 @@ void MainWindow::actionSlot(Action a) a = ACT_GotoTime; break; case ACT_GetMarkerA: + case ACT_GetTotal: case ACT_SelectMarkerA: a = ACT_ChangeMarkerA; break; @@ -783,6 +789,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.selectionMarkerB->setInputMask("99:99:99.999"); ui.selectionDuration->setValidator(timeValidator); ui.selectionDuration->setInputMask("99:99:99.999"); + ui.totalTime->setValidator(timeValidator); + ui.totalTime->setInputMask("99:99:99.999"); #endif // set the size of the current time display to fit the content QString text = "00:00:00.000"; // Don't translate this. @@ -867,6 +875,9 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng // Get the time the user sets directly in the text element connect(ui.selectionDuration, SIGNAL(editingFinished()), this, SLOT(selectionDurationChanged())); + // Get the time the user sets directly in the text element + connect(ui.totalTime, SIGNAL(editingFinished()), this, SLOT(totalTimeChanged())); + // Build file,... menu addScriptEnginesToFileMenu(myMenuFile); addScriptShellsToToolsMenu(myMenuTool); @@ -1482,6 +1493,7 @@ void MainWindow::setMenuItemsEnabledState(void) ui.selectionMarkerA->setReadOnly(true); ui.selectionMarkerB->setReadOnly(true); ui.selectionDuration->setReadOnly(true); + ui.totalTime->setReadOnly(true); pushButtonTime->setEnabled(false); pushButtonSaveScript->setEnabled(false); pushButtonRunScript->setEnabled(false); @@ -1568,6 +1580,7 @@ void MainWindow::setMenuItemsEnabledState(void) ui.selectionMarkerA->setReadOnly(!vid); ui.selectionMarkerB->setReadOnly(!vid); ui.selectionDuration->setReadOnly(!vid); + ui.totalTime->setReadOnly(!vid); pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); @@ -3731,6 +3744,43 @@ bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) return true; } +/** + \fn UI_getTotalTime + \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS +*/ +bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +{ + bool status = true; + QRegExp rx(timeRegExp); + + // Previous state + uint64_t tot = video_body->getVideoDuration(); + + if(rx.exactMatch(WIDGET(totalTime)->text())) + { + QStringList results = rx.capturedTexts(); + + *hh = results.at(1).toInt(NULL, 10); + *mm = results.at(2).toInt(NULL, 10); + *ss = results.at(3).toInt(NULL, 10); + *ms = results.at(4).toInt(NULL, 10); + + uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; + + // Abort if there are no changes + if(x == tot) + return false; + } + else + { + status = false; + } + + // Always revert to previous state + UI_setTotalTime(tot); + return status; +} + /** \fn UI_setCurrentTime \brief Set current PTS of displayed video diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index d9a615ed1..1f13b65c9 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -253,6 +253,7 @@ private slots: void markerAChanged(void); void markerBChanged(void); void selectionDurationChanged(void); + void totalTimeChanged(void); void sliderValueChanged(int u); void sliderMoved(int value); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index 572df50c4..b4077d7f4 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -1737,7 +1737,7 @@ Qt::AlignCenter - true + false From 910f45de7854c24f4092ef8747501b5ead9a6140 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 13:10:38 +0000 Subject: [PATCH 66/85] [Q_gui2] Remember visibility state of each widget set Save the visibility state of each widget set as preferences. Individual sets in the Navigation dock can be hidden or not, then after a restart the previous state is restored. The Navigation dock can be hidden without changing the state of its children. The previous condition will be remembered. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 164 ++++++++++++++---- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 31 +++- 2 files changed, 161 insertions(+), 34 deletions(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index e49c9523d..0f07ed0c9 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -920,6 +920,18 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.menuToolbars->addSeparator(); ui.menuToolbars->addAction(restoreDefaults); + // On visibility change by connected checkboxes update preferences + connect(ui.actionViewToolBar, SIGNAL(toggled(bool)), this, SLOT(toolBarVisibilityChanged(bool))); + connect(ui.actionViewStatusBar, SIGNAL(toggled(bool)), this, SLOT(statusBarVisibilityChanged(bool))); + connect(ui.actionViewCodecOptions, SIGNAL(toggled(bool)), this, SLOT(codecVisibilityChanged(bool))); + connect(ui.actionViewNavigation, SIGNAL(toggled(bool)), this, SLOT(navigationVisibilityChanged(bool))); + connect(ui.actionViewAudioMeter, SIGNAL(toggled(bool)), this, SLOT(audioMeterVisibilityChanged(bool))); + connect(ui.actionViewVolume, SIGNAL(toggled(bool)), this, SLOT(volumeVisibilityChanged(bool))); + connect(ui.actionViewControls, SIGNAL(toggled(bool)), this, SLOT(controlsVisibilityChanged(bool))); + connect(ui.actionViewSelection, SIGNAL(toggled(bool)), this, SLOT(selectionVisibilityChanged(bool))); + connect(ui.actionViewTime, SIGNAL(toggled(bool)), this, SLOT(timeVisibilityChanged(bool))); + connect(ui.actionViewSlider, SIGNAL(toggled(bool)), this, SLOT(sliderVisibilityChanged(bool))); + connect(ui.menuToolbars->actions().last(),SIGNAL(triggered(bool)),this,SLOT(restoreDefaultWidgetState(bool))); defaultThemeAction = NULL; @@ -2047,18 +2059,10 @@ void MainWindow::widgetsUpdateTooltips(void) */ void MainWindow::restoreDefaultWidgetState(bool b) { - ui.toolBar->setVisible(true); - ui.statusBarWidget->setVisible(true); - ui.codecWidget->setVisible(true); - ui.navigationWidget->setVisible(true); - ui.audioMeterWidget->setVisible(true); - ui.volumeWidget->setVisible(true); - ui.controlsWidget->setVisible(true); - ui.selectionWidget->setVisible(true); - ui.timeWidget->setVisible(true); - ui.sliderWidget->setVisible(true); - - syncToolbarsMenu(); + // Set visibility via connected checkboxes + for(int i = ADM_Toolbars_Item::FIRST; i <= ADM_Toolbars_Item::LAST; i++) + ui.menuToolbars->actions().at(i)->setChecked(true); + updateZoomIndicator(); addToolBar(ui.toolBar); @@ -2067,6 +2071,96 @@ void MainWindow::restoreDefaultWidgetState(bool b) setZoomToFit(); } +/** + \fn toolBarVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::toolBarVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_TOOLBAR_VISIBLE, checked); +} + +/** + \fn statusBarVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::statusBarVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_STATUSBAR_VISIBLE, checked); +} + +/** + \fn codecVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::codecVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_CODEC_VISIBLE, checked); +} + +/** + \fn navigationVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::navigationVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_NAVIGATION_VISIBLE, checked); +} + +/** + \fn audioMeterVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::audioMeterVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_AUDIOMETER_VISIBLE, checked); +} + +/** + \fn volumeVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::volumeVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_VOLUME_VISIBLE, checked); +} + +/** + \fn controlsVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::controlsVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_CONTROLS_VISIBLE, checked); +} + +/** + \fn selectionVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::selectionVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_SELECTION_VISIBLE, checked); +} + +/** + \fn timeVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::timeVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_TIME_VISIBLE, checked); +} + +/** + \fn sliderVisibilityChanged + \brief On checkbox state change save preferences. +*/ +void MainWindow::sliderVisibilityChanged(bool checked) +{ + prefs->set(TOOLBARS_SLIDER_VISIBLE, checked); +} + /** \fn setDefaultThemeSlot \brief Set default theme and update settings. @@ -2926,27 +3020,31 @@ void MainWindow::volumeWidgetOperational(void) } /** - \fn syncToolbarsMenu - \brief Make sure only visible widgets have check marks - in the Toolbars submenu of the View menu. + \fn initWidgetsVisibility + \brief Initialize widgets visibility from preferences. */ -void MainWindow::syncToolbarsMenu(void) -{ -#define EXPAND(x) ui.x ## Widget -#define CHECKMARK(x,y) ui.menuToolbars->actions().at(x)->setChecked(EXPAND(y)->isVisible()); - ui.menuToolbars->actions().at(0)->setChecked(ui.toolBar->isVisible()); - CHECKMARK(1,statusBar) - CHECKMARK(2,codec) - CHECKMARK(3,navigation) - // separator - CHECKMARK(5,audioMeter) - CHECKMARK(6,volume) - CHECKMARK(7,controls) - CHECKMARK(8,selection) - CHECKMARK(9,time) - CHECKMARK(10,slider) -#undef CHECKMARK -#undef EXPAND +void MainWindow::initWidgetsVisibility(void) +{ + bool visible; + + // Changing checked state automatically shows/hides the widget, + // there's no need to explicitly set a widget's visibility. +#define PREF_SET_VISIBLE(preference) \ + prefs->get(TOOLBARS_ ## preference ## _VISIBLE, &visible); \ + ui.menuToolbars->actions().at(ADM_Toolbars_Item::preference)->setChecked(visible) + + PREF_SET_VISIBLE(TOOLBAR); + PREF_SET_VISIBLE(STATUSBAR); + PREF_SET_VISIBLE(CODEC); + PREF_SET_VISIBLE(NAVIGATION); + PREF_SET_VISIBLE(AUDIOMETER); + PREF_SET_VISIBLE(VOLUME); + PREF_SET_VISIBLE(CONTROLS); + PREF_SET_VISIBLE(SELECTION); + PREF_SET_VISIBLE(TIME); + PREF_SET_VISIBLE(SLIDER); + +#undef PREF_SET_VISIBLE } /** @@ -3207,7 +3305,7 @@ uint8_t initGUI(const vector& scriptEngines) ADM_info("OpenGL not activated, not initialized\n"); } #endif - mw->syncToolbarsMenu(); + mw->initWidgetsVisibility(); mw->initStatusBar(); return 1; diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 1f13b65c9..ee43913af 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -122,7 +122,7 @@ class MainWindow : public QMainWindow void setActZoomCalledFlag(bool called); void setZoomToFit(void); void updateZoomIndicator(void); - void syncToolbarsMenu(void); + void initWidgetsVisibility(void); void initStatusBar(void); void updateStatusBarInfo(void); void updateStatusBarDisplayInfo(const char * display); @@ -221,6 +221,24 @@ class MainWindow : public QMainWindow int statusBarInfo_Zoom; QString statusBarInfo_Display, statusBarInfo_Decoder; + // Reflects the items order set in View->Toolbars + enum ADM_Toolbars_Item + { + FIRST=0, // begin (for iterations) + TOOLBAR=0, // toolBar + STATUSBAR=1, // statusBarWidget + CODEC=2, // codecWidget + NAVIGATION=3, // navigationWidget + // separator + AUDIOMETER=5, // audioMeterWidget + VOLUME=6, // volumeWidget + CONTROLS=7, // controlsWidget + SELECTION=8, // selectionWidget + TIME=9, // timeWidget + SLIDER=10, // sliderWidget + LAST=10 // end (for iterations) + }; + private slots: void timeChanged(int); void timeChangeFinished(void); @@ -255,6 +273,17 @@ private slots: void selectionDurationChanged(void); void totalTimeChanged(void); + void toolBarVisibilityChanged(bool); + void statusBarVisibilityChanged(bool); + void codecVisibilityChanged(bool); + void navigationVisibilityChanged(bool); + void audioMeterVisibilityChanged(bool); + void volumeVisibilityChanged(bool); + void controlsVisibilityChanged(bool); + void selectionVisibilityChanged(bool); + void timeVisibilityChanged(bool); + void sliderVisibilityChanged(bool); + void sliderValueChanged(int u); void sliderMoved(int value); void sliderReleased(void); From 78555ea687b6bbb10d85bd729aa35cd7725c82e4 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 13:23:51 +0000 Subject: [PATCH 67/85] [Q_gui2] Build widgets sets preferences $ cd avidemux_core/ADM_coreUtils/src $ nano prefs2.conf $ chmod +x update_prefs.sh $ ./update_prefs.sh --- avidemux_core/ADM_coreUtils/include/prefs2_list.h | 10 ++++++++++ avidemux_core/ADM_coreUtils/src/prefs2.conf | 15 +++++++++++++++ avidemux_core/ADM_coreUtils/src/prefs2.h | 12 ++++++++++++ avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp | 10 ++++++++++ avidemux_core/ADM_coreUtils/src/prefs2_json.cpp | 12 ++++++++++++ avidemux_core/ADM_coreUtils/src/prefs2_pref.h | 10 ++++++++++ 6 files changed, 69 insertions(+) diff --git a/avidemux_core/ADM_coreUtils/include/prefs2_list.h b/avidemux_core/ADM_coreUtils/include/prefs2_list.h index d0a81da96..d857d1f75 100644 --- a/avidemux_core/ADM_coreUtils/include/prefs2_list.h +++ b/avidemux_core/ADM_coreUtils/include/prefs2_list.h @@ -74,3 +74,13 @@ PICTURES_FPS_TYPE, //uint32_t HDR_TONEMAPPING, //uint32_t HDR_TARGET_LUMINANCE, //float HDR_OUT_OF_GAMUT_HANDLING, //uint32_t +TOOLBARS_TOOLBAR_VISIBLE, //bool +TOOLBARS_STATUSBAR_VISIBLE, //bool +TOOLBARS_CODEC_VISIBLE, //bool +TOOLBARS_NAVIGATION_VISIBLE, //bool +TOOLBARS_AUDIOMETER_VISIBLE, //bool +TOOLBARS_VOLUME_VISIBLE, //bool +TOOLBARS_CONTROLS_VISIBLE, //bool +TOOLBARS_SELECTION_VISIBLE, //bool +TOOLBARS_TIME_VISIBLE, //bool +TOOLBARS_SLIDER_VISIBLE, //bool diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.conf b/avidemux_core/ADM_coreUtils/src/prefs2.conf index ff70af321..f1179e1d8 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.conf +++ b/avidemux_core/ADM_coreUtils/src/prefs2.conf @@ -126,6 +126,21 @@ uint32_t:tonemapping, 1, 0, 99 float:target_luminance, 100.0, 0.0, 1000.0 uint32_t:out_of_gamut_handling, 0, 0, 99 } +# Some widgets (toolbar, codec, and navitation, which are dock +# widgets) are automatically saved in QtSettings.ini under the +# 'windowState' preference. We override the visibility here. +toolbars{ +bool:toolbar_visible, 1, 0, 1 +bool:statusbar_visible, 1, 0, 1 +bool:codec_visible, 1, 0, 1 +bool:navigation_visible, 1, 0, 1 +bool:audiometer_visible, 1, 0, 1 +bool:volume_visible, 1, 0, 1 +bool:controls_visible, 1, 0, 1 +bool:selection_visible, 1, 0, 1 +bool:time_visible, 1, 0, 1 +bool:slider_visible, 1, 0, 1 +} # } # diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.h b/avidemux_core/ADM_coreUtils/src/prefs2.h index 6c4bc0609..312c975bf 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2.h @@ -102,4 +102,16 @@ struct { float target_luminance; uint32_t out_of_gamut_handling; }hdr; +struct { + bool toolbar_visible; + bool statusbar_visible; + bool codec_visible; + bool navigation_visible; + bool audiometer_visible; + bool volume_visible; + bool controls_visible; + bool selection_visible; + bool time_visible; + bool slider_visible; +}toolbars; }my_prefs_struct; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp index 04c549b58..42f99c9bf 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp @@ -76,5 +76,15 @@ extern const ADM_paramList my_prefs_struct_param[]={ {"hdr.tonemapping",offsetof(my_prefs_struct,hdr.tonemapping),"uint32_t",ADM_param_uint32_t}, {"hdr.target_luminance",offsetof(my_prefs_struct,hdr.target_luminance),"float",ADM_param_float}, {"hdr.out_of_gamut_handling",offsetof(my_prefs_struct,hdr.out_of_gamut_handling),"uint32_t",ADM_param_uint32_t}, + {"toolbars.toolbar_visible",offsetof(my_prefs_struct,toolbars.toolbar_visible),"bool",ADM_param_bool}, + {"toolbars.statusbar_visible",offsetof(my_prefs_struct,toolbars.statusbar_visible),"bool",ADM_param_bool}, + {"toolbars.codec_visible",offsetof(my_prefs_struct,toolbars.codec_visible),"bool",ADM_param_bool}, + {"toolbars.navigation_visible",offsetof(my_prefs_struct,toolbars.navigation_visible),"bool",ADM_param_bool}, + {"toolbars.audiometer_visible",offsetof(my_prefs_struct,toolbars.audiometer_visible),"bool",ADM_param_bool}, + {"toolbars.volume_visible",offsetof(my_prefs_struct,toolbars.volume_visible),"bool",ADM_param_bool}, + {"toolbars.controls_visible",offsetof(my_prefs_struct,toolbars.controls_visible),"bool",ADM_param_bool}, + {"toolbars.selection_visible",offsetof(my_prefs_struct,toolbars.selection_visible),"bool",ADM_param_bool}, + {"toolbars.time_visible",offsetof(my_prefs_struct,toolbars.time_visible),"bool",ADM_param_bool}, + {"toolbars.slider_visible",offsetof(my_prefs_struct,toolbars.slider_visible),"bool",ADM_param_bool}, {NULL,0,NULL} }; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp index 8768a3ccc..5c092ee76 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp @@ -105,6 +105,18 @@ json.addUint32("tonemapping",key->hdr.tonemapping); json.addFloat("target_luminance",key->hdr.target_luminance); json.addUint32("out_of_gamut_handling",key->hdr.out_of_gamut_handling); json.endNode(); +json.addNode("toolbars"); +json.addBool("toolbar_visible",key->toolbars.toolbar_visible); +json.addBool("statusbar_visible",key->toolbars.statusbar_visible); +json.addBool("codec_visible",key->toolbars.codec_visible); +json.addBool("navigation_visible",key->toolbars.navigation_visible); +json.addBool("audiometer_visible",key->toolbars.audiometer_visible); +json.addBool("volume_visible",key->toolbars.volume_visible); +json.addBool("controls_visible",key->toolbars.controls_visible); +json.addBool("selection_visible",key->toolbars.selection_visible); +json.addBool("time_visible",key->toolbars.time_visible); +json.addBool("slider_visible",key->toolbars.slider_visible); +json.endNode(); return json.dumpToFile(file); }; bool my_prefs_struct_jdeserialize(const char *file, const ADM_paramList *tmpl,my_prefs_struct *key){ diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h index 2de9a5432..1016638b4 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h @@ -87,5 +87,15 @@ static optionDesc myOptions[]={ { HDR_TONEMAPPING,"hdr.tonemapping" ,ADM_param_uint32_t ,"1", 0, 99}, { HDR_TARGET_LUMINANCE,"hdr.target_luminance" ,ADM_param_float ,"100.0", 0.0, 1000.0}, { HDR_OUT_OF_GAMUT_HANDLING,"hdr.out_of_gamut_handling" ,ADM_param_uint32_t ,"0", 0, 99}, +{ TOOLBARS_TOOLBAR_VISIBLE,"toolbars.toolbar_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_STATUSBAR_VISIBLE,"toolbars.statusbar_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_CODEC_VISIBLE,"toolbars.codec_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_NAVIGATION_VISIBLE,"toolbars.navigation_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_AUDIOMETER_VISIBLE,"toolbars.audiometer_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_VOLUME_VISIBLE,"toolbars.volume_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_CONTROLS_VISIBLE,"toolbars.controls_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_SELECTION_VISIBLE,"toolbars.selection_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_TIME_VISIBLE,"toolbars.time_visible" ,ADM_param_bool ,"1", 0, 1}, +{ TOOLBARS_SLIDER_VISIBLE,"toolbars.slider_visible" ,ADM_param_bool ,"1", 0, 1}, }; From d5bf7f2918f4b584304c88e533111fcfd76cd210 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 14:42:05 +0000 Subject: [PATCH 68/85] [Q_gui2] Workaround to update dock widgets toolbar checkbox When a dock widget visibility is toggled via a method, like context menu, which is not its toolbar checkbox, use a workaround to update the state of the toolbar checkbox. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 0f07ed0c9..c316286c4 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -920,6 +920,11 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.menuToolbars->addSeparator(); ui.menuToolbars->addAction(restoreDefaults); + // Workaround to set checkboxes when changing the visibility elsewhere + connect(ui.toolBar, SIGNAL(visibilityChanged(bool)), this, SLOT(toolBarVisibilityChanged(bool))); + connect(ui.codecWidget, SIGNAL(visibilityChanged(bool)), this, SLOT(codecVisibilityChanged(bool))); + connect(ui.navigationWidget, SIGNAL(visibilityChanged(bool)), this, SLOT(navigationVisibilityChanged(bool))); + // On visibility change by connected checkboxes update preferences connect(ui.actionViewToolBar, SIGNAL(toggled(bool)), this, SLOT(toolBarVisibilityChanged(bool))); connect(ui.actionViewStatusBar, SIGNAL(toggled(bool)), this, SLOT(statusBarVisibilityChanged(bool))); @@ -2078,6 +2083,9 @@ void MainWindow::restoreDefaultWidgetState(bool b) void MainWindow::toolBarVisibilityChanged(bool checked) { prefs->set(TOOLBARS_TOOLBAR_VISIBLE, checked); + // Workaround to set/unset the checkbox when changing the + // visibility elsewhere. + ui.menuToolbars->actions().at(ADM_Toolbars_Item::TOOLBAR)->setChecked(checked); } /** @@ -2096,6 +2104,9 @@ void MainWindow::statusBarVisibilityChanged(bool checked) void MainWindow::codecVisibilityChanged(bool checked) { prefs->set(TOOLBARS_CODEC_VISIBLE, checked); + // Workaround to set/unset the checkbox when changing the + // visibility elsewhere. + ui.menuToolbars->actions().at(ADM_Toolbars_Item::CODEC)->setChecked(checked); } /** @@ -2105,6 +2116,9 @@ void MainWindow::codecVisibilityChanged(bool checked) void MainWindow::navigationVisibilityChanged(bool checked) { prefs->set(TOOLBARS_NAVIGATION_VISIBLE, checked); + // Workaround to set/unset the checkbox when changing the + // visibility elsewhere. + ui.menuToolbars->actions().at(ADM_Toolbars_Item::NAVIGATION)->setChecked(checked); } /** From d57464013838bf8db5b0711699e1f7ef1c6a1de0 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 23 Mar 2023 15:33:16 +0000 Subject: [PATCH 69/85] [Q_gui2] Use Views->Toolbars as default context menu Override the application default context menu. Right clicking on the menu bar, tool bar, or dock widgets will open Views->Toolbars menu. --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 12 ++++++++++++ avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index c316286c4..d1b33286f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1244,6 +1244,18 @@ bool MainWindow::buildMenu(QMenu *root,MenuEntry *menu, int nb) return true; } +/** + \fn createPopupMenu + \bries Override the application default context menu. +*/ +QMenu *MainWindow::createPopupMenu() +{ + QMenu *menu = QMainWindow::createPopupMenu(); + menu->clear(); + menu->addActions(ui.menuToolbars->actions()); + return menu; +} + /** buildFileMenu */ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index ee43913af..4a9aa636a 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -184,6 +184,8 @@ class MainWindow : public QMainWindow QTimer navigateWhilePlayingTimer; const std::vector& _scriptEngines; + QMenu *createPopupMenu(void); + void addScriptDirToMenu(QMenu* scriptMenu, const QString& dir, const QStringList& fileExts); void addScriptEnginesToFileMenu(std::vector& fileMenu); void addScriptShellsToToolsMenu(vector& toolMenu); From 65d08ea5e5c76f2ae3cb0b7e00dfaf6ab327fc8d Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 06:13:43 +0000 Subject: [PATCH 70/85] [Q_gui2] Fix compiling on macOS thanks to eumagga0x2a --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index d1b33286f..20714a0b2 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -714,7 +714,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng #endif #ifdef __APPLE__ - ui.navButtonsLayout->setSpacing(2); + ui.controlsWidgetLayout->setSpacing(2); // Qt upscales 2x sized icons in the toolbar, making them huge and pixelated in HiDPI conditions, WTF? ui.toolBar->setIconSize(QSize(24,24)); #endif From 9598eb194d8b86fee3f15c3ef46a4ec3f5bd7d0c Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 14:12:53 +0000 Subject: [PATCH 71/85] [Q_gui2] Fix math formulas to calculate time in microseconds A uint64_t type cast gives the right precision to uint32_t values when converting to a hh:mm:ss.mm,us time expressed in microseconds. --- avidemux/common/gui_navigate.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 7a3a0844c..a2847dafc 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -153,7 +153,7 @@ void HandleAction_Staged(Action action) { // Never leave the markers uninitialized uint64_t ptsA = video_body->getMarkerAPts(); - uint64_t ptsB, delta = ((t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; + uint64_t ptsB, delta = (((uint64_t)t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; t = jumpMarkerA; ms2time((uint32_t)(ptsA/1000),t,t+1,t+2,t+3); t = jumpMarkerB; @@ -171,7 +171,7 @@ void HandleAction_Staged(Action action) if(UI_getTotalTime(t,t+1,t+2,t+3)) { // Never leave the markers uninitialized - uint64_t ptsA = ((t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; + uint64_t ptsA = (((uint64_t)t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; uint64_t ptsB = video_body->getVideoDuration(); t = jumpMarkerA; ms2time((uint32_t)(ptsA/1000),t,t+1,t+2,t+3); @@ -449,7 +449,7 @@ static int ignore_change=0; // Check if outside boundaries when jumping to A/B if(sel) { - uint64_t x = ((hh*3600+mm*60+ss)*1000+ms)*1000; + uint64_t x = (((uint64_t)hh*3600+mm*60+ss)*1000+ms)*1000; if(x == 0) *sel = 0; From 2d158020c37e4f24d7a49a6ae2869203968afc73 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Fri, 24 Mar 2023 23:51:03 +0000 Subject: [PATCH 72/85] [Q_gui2] Add microsecond precision property to time fields New ADM_QLineEditPTS class to add precision to time fields. GUI text elements now store time at microsecond precisions. This prevents the jittering bug when switching focus out from a time field. Jittering bug: Time fields signal editingFinished after switching the focus or pressing Enter. Fields signaled as edited are compared with the previous real time to confirm that they have been truly modified. A field time is converted from milli to the micro seconds of the real time. The equality fails when the real time microseconds part is not all zero. The jitter is when the field time, differing from the real time, is replaced with the closest frame real time (usually the frame before). Thanks to szlldm for spotting the jittering bug. Thanks to eumagga0x2a for fixing obsolete regexp code. --- .../ADM_gui/ADM_QLineEditPTS.cpp | 396 ++++++++++++++++++ .../ADM_gui/ADM_QLineEditPTS.h | 51 +++ .../ADM_userInterfaces/ADM_gui/CMakeLists.txt | 3 +- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 233 ++--------- .../qt4/ADM_userInterfaces/ADM_gui/gui2.ui | 45 +- 5 files changed, 503 insertions(+), 225 deletions(-) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.cpp create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.h diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.cpp new file mode 100644 index 000000000..702a6aac7 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.cpp @@ -0,0 +1,396 @@ +/*************************************************************************** + \file ADM_QLineEditPTS + \brief Custom QLineEdit to store the time pointer (precision timing) + \author Matthew White + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include +#include +#include +#include "ADM_misc.h" +#include "ADM_QLineEditPTS.h" + +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) +#include +#include +#else +#include +#include +#include +#endif + +ADM_CORE6_EXPORT uint8_t ms2time(uint32_t ms, uint32_t *h, uint32_t *m, uint32_t *s, uint32_t *mms); + +static +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + QRegExp +#else + QRegularExpression +#endif + timeRegExp("^([0-9]{2}):([0-5][0-9]):([0-5][0-9])\\.([0-9]{3})$"); + +static +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + QRegExp +#else + QRegularExpression +#endif + PTSRegExp("^(.*)([0-9]{2}):([0-5][0-9]):([0-5][0-9])\\.([0-9]{3})(,([0-9]{3}))?$"); + +/** + * \brief Convert a hh:mm:ss.ms,us string to integer values (",us" is optional). + * \param[in] text string in 00:00:00.000,000 format (",000" is optional). + * \param[out] hh set to hours. + * \param[out] mm set to minutes. + * \param[out] ss set to seconds. + * \param[out] ms set to milliseconds. + * \param[out] us set to microseconds. + * \return true if the string has the right format, otherwise false. + */ +bool text2time(const char *text, uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) +{ +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + QRegExp +#else + QRegularExpression +#endif + rx(PTSRegExp); + +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + if(rx.exactMatch(text)) +#else + QRegularExpressionMatch match = rx.match(text); + if(match.hasMatch()) +#endif + { + QStringList results = +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + rx.capturedTexts(); +#else + match.capturedTexts(); +#endif + + *hh = results.at(2).toInt(NULL, 10); + *mm = results.at(3).toInt(NULL, 10); + *ss = results.at(4).toInt(NULL, 10); + *ms = results.at(5).toInt(NULL, 10); + + if(results.size() > 6) + *us = results.at(7).toInt(NULL, 10); + else + *us = 0; + + return true; + } + + return false; +} + +/** + * \brief Convert time into PTS. + * \param[in] hh hours. + * \param[in] mm minutes. + * \param[in] ss seconds. + * \param[in] ms milliseconds. + * \param[in] us microseconds. + * \return pts time in microseconds (us). + */ +uint64_t time2pts(const uint32_t *hh, const uint32_t *mm, const uint32_t *ss, const uint32_t *ms, const uint32_t *us) +{ + return (((uint64_t)(*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000+(*us); +} + +/** + * \brief Convert PTS to hh:mm:ss.ms,us string. + * \param[in] pts time in microseconds (us). + * \return string in 00:00:00.000,000 format. + */ +QString pts2text(const uint64_t &pts) +{ + char text[80]; + uint32_t hh, mm, ss, ms, us; + + us = pts - (uint64_t)((uint32_t)(pts/1000))*1000; + ms2time((uint32_t)(pts/1000), &hh, &mm, &ss, &ms); + snprintf(text, 79, "%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ".%03" PRIu32 ",%03" PRIu32, hh, mm, ss, ms, us); + + return text; +} + +/** + * \brief Append/Replace PTS string to/in a text. + * \param[in,out] text string to modify. + * \param[in] pts string in 00:00:00.000,000 format (",000" is optional). + * \return reference to text. + */ +QString &appendPTS(QString &text, const QString &pts) +{ + QString check = pts; + + // Verify the format of the PTS string + if(!truncatePTS(check).isEmpty()) + return text; + + // Remove any appended PTS string + if(!truncatePTS(text).isEmpty()) + text.append(" "); + + // Append the PTS string + return text.append(pts); +} + +/** + * \brief Append/Replace PTS string to/in a text. + * \param[in,out] text string to modify. + * \param[in] pts time in microseconds (us). + * \return reference to text. + */ +QString &appendPTS(QString &text, const uint64_t &pts) +{ + return appendPTS(text, pts2text(pts)); +} + +/** + * \brief Remove appended PTS string from a text. + * \param[in,out] text string to modify. + * \return reference to text. + */ +QString &truncatePTS(QString &text) +{ +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + QRegExp +#else + QRegularExpression +#endif + rx(PTSRegExp); + +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + if(rx.exactMatch(text)) +#else + QRegularExpressionMatch match = rx.match(text); + if(match.hasMatch()) +#endif + { + QStringList results = +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + rx.capturedTexts(); +#else + match.capturedTexts(); +#endif + text = results.at(1).trimmed(); + } + + return text; +} + +/** + * \brief Initialize PTS to the given value. + * \param[in] pts time in microseconds (us). + * \param[in] parent sent to the QWidget constructor. + * \sa ADM_QLineEditPTS::setPTS(const uint64_t&) + */ +ADM_QLineEditPTS::ADM_QLineEditPTS(const uint64_t &pts, QWidget *parent /* = nullptr */) : QLineEdit(parent) +{ +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + QRegExpValidator *timeValidator = new QRegExpValidator(timeRegExp, this); +#else + QRegularExpressionValidator *timeValidator = new QRegularExpressionValidator(timeRegExp, this); +#endif + setInputMask("99:99:99.999"); + setValidator(timeValidator); + setPTS(pts); +} + +/** + * \brief Initialize PTS to 0 microseconds (us). + * \param[in] parent sent to the QWidget constructor. + * \sa ADM_QLineEditPTS::setPTS(const uint64_t&) + */ +ADM_QLineEditPTS::ADM_QLineEditPTS(QWidget *parent /* = nullptr */) : ADM_QLineEditPTS(0, parent) +{ +} + +ADM_QLineEditPTS::~ADM_QLineEditPTS() +{ +} + +/** + * \brief Internally used to set text(). + * \param[in] text string to use as text(). + * \sa ADM_QLineEditPTS::setPTS(const uint64_t&) + */ +void ADM_QLineEditPTS::setText(const QString &text) +{ + QLineEdit::setText(text); +} + +/** + * \brief Internally used to set a hardcoded value. + * \param[in] validator content validator, pass 0 to disable. + * \sa ADM_QLineEditPTS::setInputMask(const QString&) + */ +void ADM_QLineEditPTS::setValidator(const QValidator *validator) +{ + QLineEdit::setValidator(validator); +} + +/** + * \brief Internally used to set a hardcoded value. + * \param[in] mask input mask, pass an empty string to disable. + * \sa ADM_QLineEditPTS::setValidator(const QValidator*) + */ +void ADM_QLineEditPTS::setInputMask(const QString &mask) +{ + QLineEdit::setInputMask(mask); +} + +/** + * \brief Set PTS to 0 microseconds (us). + * \sa ADM_QLineEditPTS::resetEdit(void) + */ +void ADM_QLineEditPTS::clear(void) +{ + setPTS(0); +} + +/** + * \brief Reset to the original PTS. + * \sa ADM_QLineEditPTS::isTextEdited(void) + */ +void ADM_QLineEditPTS::resetEdit(void) +{ + setText(_uneditedText); +} + +/** + * \brief Set PTS to the given value. + * \param[in] pts time in microseconds (us). + * \sa ADM_QLineEditPTS::PTS(void) + * \sa ADM_QLineEditPTS::uneditedPTS(void) + */ +void ADM_QLineEditPTS::setPTS(const uint64_t &pts) +{ + _pts = pts; + // Remove microseconds from conversion to text + setText(pts2text(_pts).chopped(4)); + _uneditedText = text(); +} + +/** + * \brief Return the current PTS. + * \return time in microseconds (us). + * \sa ADM_QLineEditPTS::isTextEdited(void) + */ +uint64_t ADM_QLineEditPTS::PTS(void) +{ + uint32_t hh, mm, ss, ms, us; + return PTS(&hh, &mm, &ss, &ms, &us); +} + +/** + * \brief Return the current PTS. + * \param[out] hh set to hours. + * \param[out] mm set to minutes. + * \param[out] ss set to seconds. + * \param[out] ms set to milliseconds. + * \param[out] us set to microseconds. + * \return time in microseconds (us). + * \sa ADM_QLineEditPTS::isTextEdited(void) + */ +uint64_t ADM_QLineEditPTS::PTS(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) +{ + // Fail if text() isn't in the right format + assert(text2time(text().toUtf8().constData(), hh, mm, ss, ms, us)); + // Compute microseconds missing from the text + *us = _pts - (uint64_t)((uint32_t)(_pts/1000))*1000; + return time2pts(hh, mm, ss, ms, us); +} + +/** + * \brief Return the original PTS. + * \return time in microseconds (us). + * \sa ADM_QLineEditPTS::isTextEdited(void) + */ +uint64_t ADM_QLineEditPTS::uneditedPTS(void) +{ + return _pts; +} + +/** + * \brief Return the original PTS. + * \param[out] hh set to hours. + * \param[out] mm set to minutes. + * \param[out] ss set to seconds. + * \param[out] ms set to milliseconds. + * \param[out] us set to microseconds. + * \return time in microseconds (us). + * \sa ADM_QLineEditPTS::isTextEdited(void) + */ +uint64_t ADM_QLineEditPTS::uneditedPTS(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) +{ + // Compute microseconds missing from the text + *us = _pts - (uint64_t)((uint32_t)(_pts/1000))*1000; + ms2time((uint32_t)(_pts/1000), hh, mm, ss, ms); + return _pts; +} + +/** + * \brief Return the current PTS as hh:mm:ss.ms string. + * \return string in 00:00:00.000 format. + * \sa ADM_QLineEditPTS::PTS(void) + */ +QString ADM_QLineEditPTS::text(void) +{ + return QLineEdit::text(); +} + +/** + * \brief Return the original PTS as hh:mm:ss.ms string. + * \return string in 00:00:00.000 format. + * \sa ADM_QLineEditPTS::uneditedPTS(void) + */ +QString ADM_QLineEditPTS::uneditedText(void) +{ + return _uneditedText; +} + +/** + * \brief Return true if the PTS has been edited by the user (via GUI). + * \return true if text() has been modified, otherwise false. + * \sa ADM_QLineEditPTS::resetEdit(void) + */ +bool ADM_QLineEditPTS::isTextEdited(void) +{ + return (text() != _uneditedText); +} + +/** + * \brief Append/Replace PTS string to/in tooltip. + * \sa ADM_QLineEditPTS::setPTS(const uint64_t&) + */ +void ADM_QLineEditPTS::appendPTSToolTip(void) +{ + QString tt = toolTip(); + // Append whole PTS to tooltip + setToolTip(appendPTS(tt, _pts)); +} + +/** + * \brief Remove appended PTS string from tooltip. + * \sa ADM_QLineEditPTS::setPTS(const uint64_t&) + */ +void ADM_QLineEditPTS::removePTSToolTip(void) +{ + QString tt = toolTip(); + // Remove any appended PTS from tooltip + setToolTip(truncatePTS(tt)); +} diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.h new file mode 100644 index 000000000..f9aff1847 --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/ADM_QLineEditPTS.h @@ -0,0 +1,51 @@ +#ifndef ADM_QLineEditPTS_h +#define ADM_QLineEditPTS_h + +#include + +bool text2time(const char *text, uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); +uint64_t time2pts(const uint32_t *hh, const uint32_t *mm, const uint32_t *ss, const uint32_t *ms, const uint32_t *us); +QString pts2text(const uint64_t &pts); +QString &appendPTS(QString &text, const uint64_t &pts); +QString &appendPTS(QString &text, const QString &pts); +QString &truncatePTS(QString &text); + +/** + * \brief Add properties and methods to give timing precision. + */ +class ADM_QLineEditPTS : public QLineEdit +{ + Q_OBJECT + +public: + ADM_QLineEditPTS(const uint64_t &pts, QWidget *parent = nullptr); + ADM_QLineEditPTS(QWidget *parent = nullptr); + virtual ~ADM_QLineEditPTS(); + + void clear(void); + void resetEdit(void); + void setPTS(const uint64_t &pts); + uint64_t PTS(); + uint64_t PTS(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); + uint64_t uneditedPTS(void); + uint64_t uneditedPTS(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); + QString text(void); + QString uneditedText(void); + bool isTextEdited(void); + void appendPTSToolTip(void); + void removePTSToolTip(void); + +private: + uint64_t _pts; + QString _uneditedText; + + // Do not set the text directly, use setPTS(), unless setText() is + // designed to hold the us too (i.e. not cutting the real time). + void setText(const QString &text); + + // These use hardcoded values, don't move them from here. + void setValidator(const QValidator *validator); + void setInputMask(const QString &mask); +}; + +#endif // ADM_QLineEditPTS_h diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt b/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt index 2e464b87d..dbbc0c398 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/CMakeLists.txt @@ -1,7 +1,7 @@ SET(ADM_LIB ADM_gui${QT_LIBRARY_EXTENSION}) INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/../common/ADM_icons/") ADM_QT_WRAP_UI(${ADM_LIB}_header gui2.ui titleBar.ui ) -ADM_QT_WRAP_CPP(${ADM_LIB}_source Q_gui2.h Q_titleBar.h ADM_mwNavSlider.h T_preview.h T_vumeter.h T_thumbSlider.h ADM_qtray.h FileAction.h) +ADM_QT_WRAP_CPP(${ADM_LIB}_source Q_gui2.h Q_titleBar.h ADM_QLineEditPTS.h ADM_mwNavSlider.h T_preview.h T_vumeter.h T_thumbSlider.h ADM_qtray.h FileAction.h) IF(APPLE) ADM_QT_ADD_RESOURCES(${ADM_LIB}_resource avidemux_osx.qrc) ELSEIF(WIN32) @@ -32,6 +32,7 @@ SET(${ADM_LIB}_SRCS Q_gui2.cpp Q_gui2GL.cpp Q_gui2_menu.cpp Q_titleBar.cpp + ADM_QLineEditPTS.cpp T_preview.cpp T_vumeter.cpp #stubs.cpp diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 20714a0b2..139fbb9f6 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -41,6 +41,7 @@ #define MENU_DECLARE #include "Q_gui2.h" #include "Q_titleBar.h" +#include "ADM_QLineEditPTS.h" #ifdef BROKEN_PALETTE_PROPAGATION #include @@ -143,8 +144,6 @@ static bool uiIsMaximized=false; static bool needsResizing=false; -static QRegExp timeRegExp("^([0-9]{2}):([0-5][0-9]):([0-5][0-9])\\.([0-9]{3})$"); - static QAction *findAction(std::vector *list, Action action); static QAction *findActionInToolBar(QToolBar *tb, Action action); @@ -779,21 +778,7 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng connect(ui.checkBox_TimeShift,SIGNAL(stateChanged(int)),this,SLOT(checkChanged(int))); connect(ui.spinBox_TimeValue,SIGNAL(valueChanged(int)),this,SLOT(timeChanged(int))); connect(ui.spinBox_TimeValue, SIGNAL(editingFinished()), this, SLOT(timeChangeFinished())); -#if 1 /* disable if read-only */ - QRegExpValidator *timeValidator = new QRegExpValidator(timeRegExp, this); - ui.currentTime->setValidator(timeValidator); - ui.currentTime->setInputMask("99:99:99.999"); - ui.selectionMarkerA->setValidator(timeValidator); - ui.selectionMarkerA->setInputMask("99:99:99.999"); - ui.selectionMarkerB->setValidator(timeValidator); - ui.selectionMarkerB->setInputMask("99:99:99.999"); - ui.selectionDuration->setValidator(timeValidator); - ui.selectionDuration->setInputMask("99:99:99.999"); - ui.totalTime->setValidator(timeValidator); - ui.totalTime->setInputMask("99:99:99.999"); -#endif - // set the size of the current time display to fit the content - QString text = "00:00:00.000"; // Don't translate this. + #ifdef USE_CUSTOM_TIME_DISPLAY_FONT ui.currentTime->setFont(QFont("ADM7SEG")); ui.totalTime->setFont(QFont("ADM7SEG")); @@ -801,11 +786,11 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng ui.selectionMarkerA->setFont(QFont("ADM7SEG")); ui.selectionMarkerB->setFont(QFont("ADM7SEG")); #endif - ui.currentTime->setText(text); // Override ui translations to make sure we use point as decimal separator. - ui.totalTime->setText(text); // Override ui translations here too. - ui.selectionDuration->setText(text); // Override ui translations here too. - ui.selectionMarkerA->setText(text); // Override ui translations here too. - ui.selectionMarkerB->setText(text); // Override ui translations here too. + ui.currentTime->setPTS(0); + ui.totalTime->setPTS(0); + ui.selectionMarkerA->setPTS(0); + ui.selectionMarkerB->setPTS(0); + ui.selectionDuration->setPTS(0); // Disabling to not cut off the text when adding action buttons //QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); @@ -3727,34 +3712,15 @@ admUITaskBarProgress *UI_getTaskBarProgress() */ bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { - QRegExp rx(timeRegExp); - - // Previous state - uint64_t pts = admPreview::getCurrentPts(); - - if(rx.exactMatch(WIDGET(currentTime)->text())) - { - QStringList results = rx.capturedTexts(); - - *hh = results.at(1).toInt(NULL, 10); - *mm = results.at(2).toInt(NULL, 10); - *ss = results.at(3).toInt(NULL, 10); - *ms = results.at(4).toInt(NULL, 10); - - uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; - - // Abort if there are no changes - if(x == pts) - return false; - } - else + if(WIDGET(currentTime)->isTextEdited()) { - // On failure revert to previous state - UI_setCurrentTime(pts); - return false; + uint32_t us; + WIDGET(currentTime)->PTS(hh, mm, ss, ms, &us); + return true; } - return true; + WIDGET(currentTime)->resetEdit(); + return false; } /** @@ -3763,35 +3729,15 @@ bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) */ bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { - QRegExp rx(timeRegExp); - - // Previous state - uint64_t ptsA = video_body->getMarkerAPts(); - uint64_t ptsB = video_body->getMarkerBPts(); - - if(rx.exactMatch(WIDGET(selectionMarkerA)->text())) + if(WIDGET(selectionMarkerA)->isTextEdited()) { - QStringList results = rx.capturedTexts(); - - *hh = results.at(1).toInt(NULL, 10); - *mm = results.at(2).toInt(NULL, 10); - *ss = results.at(3).toInt(NULL, 10); - *ms = results.at(4).toInt(NULL, 10); - - uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; - - // Abort if there are no changes - if(x == ptsA) - return false; - } - else - { - // On failure revert to previous state - UI_setMarkers(ptsA, ptsB); - return false; + uint32_t us; + WIDGET(selectionMarkerA)->PTS(hh, mm, ss, ms, &us); + return true; } - return true; + WIDGET(selectionMarkerA)->resetEdit(); + return false; } /** @@ -3800,35 +3746,15 @@ bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) */ bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { - QRegExp rx(timeRegExp); - - // Previous state - uint64_t ptsA = video_body->getMarkerAPts(); - uint64_t ptsB = video_body->getMarkerBPts(); - - if(rx.exactMatch(WIDGET(selectionMarkerB)->text())) + if(WIDGET(selectionMarkerB)->isTextEdited()) { - QStringList results = rx.capturedTexts(); - - *hh = results.at(1).toInt(NULL, 10); - *mm = results.at(2).toInt(NULL, 10); - *ss = results.at(3).toInt(NULL, 10); - *ms = results.at(4).toInt(NULL, 10); - - uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; - - // Abort if there are no changes - if(x == ptsB) - return false; - } - else - { - // On failure revert to previous state - UI_setMarkers(ptsA, ptsB); - return false; + uint32_t us; + WIDGET(selectionMarkerB)->PTS(hh, mm, ss, ms, &us); + return true; } - return true; + WIDGET(selectionMarkerB)->resetEdit(); + return false; } /** @@ -3837,35 +3763,15 @@ bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) */ bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { - QRegExp rx(timeRegExp); - - // Previous state - uint64_t ptsA = video_body->getMarkerAPts(); - uint64_t ptsB = video_body->getMarkerBPts(); - - if(rx.exactMatch(WIDGET(selectionDuration)->text())) + if(WIDGET(selectionDuration)->isTextEdited()) { - QStringList results = rx.capturedTexts(); - - *hh = results.at(1).toInt(NULL, 10); - *mm = results.at(2).toInt(NULL, 10); - *ss = results.at(3).toInt(NULL, 10); - *ms = results.at(4).toInt(NULL, 10); - - uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; - - // Abort if there are no changes - if(ptsB == (ptsA + x)) - return false; - } - else - { - // On failure revert to previous state - UI_setMarkers(ptsA, ptsB); - return false; + uint32_t us; + WIDGET(selectionDuration)->PTS(hh, mm, ss, ms, &us); + return true; } - return true; + WIDGET(selectionDuration)->resetEdit(); + return false; } /** @@ -3874,35 +3780,15 @@ bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) */ bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) { - bool status = true; - QRegExp rx(timeRegExp); - - // Previous state - uint64_t tot = video_body->getVideoDuration(); - - if(rx.exactMatch(WIDGET(totalTime)->text())) + if(WIDGET(totalTime)->isTextEdited()) { - QStringList results = rx.capturedTexts(); - - *hh = results.at(1).toInt(NULL, 10); - *mm = results.at(2).toInt(NULL, 10); - *ss = results.at(3).toInt(NULL, 10); - *ms = results.at(4).toInt(NULL, 10); - - uint64_t x = (((*hh)*3600+(*mm)*60+(*ss))*1000+(*ms))*1000; - - // Abort if there are no changes - if(x == tot) - return false; - } - else - { - status = false; + uint32_t us; + WIDGET(totalTime)->PTS(hh, mm, ss, ms, &us); + return true; } - // Always revert to previous state - UI_setTotalTime(tot); - return status; + WIDGET(totalTime)->resetEdit(); + return false; } /** @@ -3911,14 +3797,7 @@ bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) */ void UI_setCurrentTime(uint64_t curTime) { - char text[80]; - uint32_t mm,hh,ss,ms; - uint32_t shorty=(uint32_t)(curTime/1000); - - ms2time(shorty,&hh,&mm,&ss,&ms); - sprintf(text, "%02d:%02d:%02d.%03d", hh, mm, ss, ms); - WIDGET(currentTime)->setText(text); - + WIDGET(currentTime)->setPTS(curTime); } /** @@ -3927,13 +3806,7 @@ void UI_setCurrentTime(uint64_t curTime) */ void UI_setTotalTime(uint64_t curTime) { - char text[80]; - uint32_t mm,hh,ss,ms; - uint32_t shorty=(uint32_t)(curTime/1000); - - ms2time(shorty,&hh,&mm,&ss,&ms); - sprintf(text, "%02d:%02d:%02d.%03d", hh, mm, ss, ms); - WIDGET(totalTime)->setText(text); + WIDGET(totalTime)->setPTS(curTime); slider->setTotalDuration(curTime); } /** @@ -3950,29 +3823,11 @@ void UI_setSegments(uint32_t numOfSegs, uint64_t * segPts) */ void UI_setMarkers(uint64_t a, uint64_t b) { - char text[80]; - uint64_t absoluteA=a,absoluteB=b; - uint32_t hh,mm,ss,ms; - uint32_t timems; - a/=1000; - b/=1000; - - timems=(uint32_t)(a); - ms2time(timems,&hh,&mm,&ss,&ms); - snprintf(text,79,"%02" PRIu32":%02" PRIu32":%02" PRIu32".%03" PRIu32,hh,mm,ss,ms); - WIDGET(selectionMarkerA)->setText(text); - - timems=(uint32_t)(b); - ms2time(timems,&hh,&mm,&ss,&ms); - snprintf(text,79,"%02" PRIu32":%02" PRIu32":%02" PRIu32".%03" PRIu32,hh,mm,ss,ms); - WIDGET(selectionMarkerB)->setText(text); - - timems=(uint32_t)(b-a); - ms2time(timems,&hh,&mm,&ss,&ms); - snprintf(text,79,"%02" PRIu32":%02" PRIu32":%02" PRIu32".%03" PRIu32,hh,mm,ss,ms); - WIDGET(selectionDuration)->setText(text); - - slider->setMarkers(absoluteA, absoluteB); + WIDGET(selectionMarkerA)->setPTS(a); + WIDGET(selectionMarkerB)->setPTS(b); + // NOTE: To cut the us use (uint64_t)((uint32_t)(a/1000))*1000 + WIDGET(selectionDuration)->setPTS(b - a); + slider->setMarkers(a, b); } /** diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui index b4077d7f4..76c22c7fc 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/gui2.ui @@ -1515,7 +1515,7 @@ 0 - + 0 @@ -1525,12 +1525,6 @@ Go to Marker A [PAGE UP] - - 99:99:99.999 - - - 00:00:00.000 - Qt::AlignCenter @@ -1540,7 +1534,7 @@ - + 0 @@ -1550,12 +1544,6 @@ Go to Marker B [PAGE DOWN] - - 99:99:99.999 - - - 00:00:00.000 - Qt::AlignCenter @@ -1616,19 +1604,13 @@ 0 - + 0 0 - - 99:99:99.999 - - - 00:00:00.000 - Qt::AlignCenter @@ -1682,19 +1664,13 @@ 0 - + 0 0 - - 99:99:99.999 - - - 00:00:00.000 - Qt::AlignCenter @@ -1720,19 +1696,13 @@ - + 0 0 - - 99:99:99.999 - - - 00:00:00.000 - Qt::AlignCenter @@ -2137,6 +2107,11 @@ QSlider
ADM_mwNavSlider.h
+ + ADM_QLineEditPTS + QLineEdit +
ADM_QLineEditPTS.h
+
pushButtonDecoderConf From 37c549fc7fecfe3af67af588141406f312b0ebd0 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 16:05:57 +0000 Subject: [PATCH 73/85] [Q_gui2] Fix markers A/B time fields with obsolete text Editing the markers A/B fields directly, by changing the text, may result in a computed frame real position not diffrent from before. Different timings may resolve to the same frame. When an A/B text refresh is not performed anyway, the edited value may be obsolete. Editing A/B directly is more flexible than the 'Go to Time' dialog but, as said before, the difference is that the former changes the field text before the frame computation is done, the latter intead changes the text after, and only if the computed time differs from the currently one set. --- avidemux/common/gui_navigate.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index a2847dafc..faeca9a93 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -526,8 +526,12 @@ static int ignore_change=0; video_body->addToUndoQueue(); video_body->setMarkerAPts(ptsA); video_body->setMarkerBPts(ptsB); - UI_setMarkers(ptsA, ptsB); } + // Always refresh the time fields text, even if the are no + // changes in marker A/B. The fields may have been edited + // directly by changing the text. Avoiding a refresh will + // leave a value that may not match the real position. + UI_setMarkers(ptsA, ptsB); stagedActionSuccess = 0; } From 61f0baba5bc2e45d3a89cfcbbcf60715cc6d9773 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 17:35:40 +0000 Subject: [PATCH 74/85] [Q_gui2] Fix total time field with obsolete text Confirming the total time edit should be followed by a refresh. The total time field can be edited to prepare a cut selection from the marker A to B starting from the end of the video. This feature can be used to set a cut to reduce the video length of a specific amount. After refreshing the total time field, the video length specified will be indicated by the marker A time. --- avidemux/common/gui_navigate.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index faeca9a93..9ca0efdf1 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -532,6 +532,10 @@ static int ignore_change=0; // directly by changing the text. Avoiding a refresh will // leave a value that may not match the real position. UI_setMarkers(ptsA, ptsB); + // Refresh the total time field too. It is used to select + // from A to B starting from the end of the video to set a + // cut range to redure the duration of the video. + UI_setTotalTime(tot); stagedActionSuccess = 0; } From e08e77ac497de2c6698ade5babce3be7a8a28479 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 06:19:19 +0000 Subject: [PATCH 75/85] [Q_gui2] Show tooltips with precision timings over time fields Time fields will show microsecond precision timings when hovered, i.e. 99:59:59.999,999. Tooltips will be updated when a field has been programmatically changed, or a user's edit is confirmed. This could also be used for debugging purposes. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 139fbb9f6..96a26bed1 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -2053,6 +2053,15 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(actForward,Go) tt += hint; ui.toolButtonForwardOneMinute->setToolTip(tt); + + if(avifileinfo) + { + ui.currentTime->appendPTSToolTip(); + ui.totalTime->appendPTSToolTip(); + ui.selectionMarkerA->appendPTSToolTip(); + ui.selectionMarkerB->appendPTSToolTip(); + ui.selectionDuration->appendPTSToolTip(); + } } /** @@ -3798,6 +3807,8 @@ bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) void UI_setCurrentTime(uint64_t curTime) { WIDGET(currentTime)->setPTS(curTime); + if(avifileinfo) + WIDGET(currentTime)->appendPTSToolTip(); } /** @@ -3808,6 +3819,8 @@ void UI_setTotalTime(uint64_t curTime) { WIDGET(totalTime)->setPTS(curTime); slider->setTotalDuration(curTime); + if(avifileinfo) + WIDGET(totalTime)->appendPTSToolTip(); } /** \fn UI_setSegments @@ -3828,6 +3841,12 @@ void UI_setMarkers(uint64_t a, uint64_t b) // NOTE: To cut the us use (uint64_t)((uint32_t)(a/1000))*1000 WIDGET(selectionDuration)->setPTS(b - a); slider->setMarkers(a, b); + if(avifileinfo) + { + WIDGET(selectionMarkerA)->appendPTSToolTip(); + WIDGET(selectionMarkerB)->appendPTSToolTip(); + WIDGET(selectionDuration)->appendPTSToolTip(); + } } /** From a9e96e7adec6f9d1673a769cdd4d343c998fdf30 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 07:16:09 +0000 Subject: [PATCH 76/85] [Q_gui2] Add preference to toggle timing tooltips $ cd avidemux_core/ADM_coreUtils/src $ nano prefs2.conf $ chmod +x update_prefs.sh $ ./update_prefs.sh --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 8 +++- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 45 +++++++++++++++++-- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 4 ++ .../ADM_coreUtils/include/prefs2_list.h | 1 + avidemux_core/ADM_coreUtils/src/prefs2.conf | 1 + avidemux_core/ADM_coreUtils/src/prefs2.h | 1 + .../ADM_coreUtils/src/prefs2_desc.cpp | 1 + .../ADM_coreUtils/src/prefs2_json.cpp | 1 + avidemux_core/ADM_coreUtils/src/prefs2_pref.h | 1 + 9 files changed, 58 insertions(+), 5 deletions(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index 1d4e58036..8dbb3b67f 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -48,6 +48,7 @@ uint32_t olddevice,newdevice; uint32_t render; bool useSwap=0; +bool showPTSToolTips=0; uint32_t lavcThreads=0; uint32_t encodePriority=2; @@ -261,6 +262,8 @@ std::string currentSdlDriver=getSdlDriverName(); // SWAP A&B if A>B if(!prefs->get(FEATURES_SWAP_IF_A_GREATER_THAN_B, &useSwap)) useSwap=0; + if(!prefs->get(FEATURES_PTS_TIMINGS_TOOLTIPS, &showPTSToolTips)) + showPTSToolTips=0; // Get level of message verbosity prefs->get(MESSAGE_LEVEL,&msglevel); // Downmix default @@ -277,6 +280,7 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemToggle swapUpDownKeys(&swapUpDown,QT_TRANSLATE_NOOP("adm","Re_verse UP and DOWN arrow keys for navigation")); diaElemToggle swapMouseWheel(&swapWheel,QT_TRANSLATE_NOOP("adm","Reverse mouse _wheel for navigation")); diaElemToggle swapMarkers(&useSwap,QT_TRANSLATE_NOOP("adm","_Swap markers if marker A is set past marker B or marker B before A in video")); + diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","_Show precision timings in time fields tooltips")); diaElemToggle checkForUpdate(&doAutoUpdate,QT_TRANSLATE_NOOP("adm","_Check for new release")); @@ -539,7 +543,7 @@ std::string currentSdlDriver=getSdlDriverName(); //-- #define NB_ELEM(x) sizeof(x)/sizeof(diaElem *) /* User Interface */ - diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &checkForUpdate}; + diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &ptsToolTips, &checkForUpdate}; diaElemTabs tabUser(QT_TRANSLATE_NOOP("adm","User Interface"),NB_ELEM(diaUser),diaUser); /* Automation */ @@ -812,6 +816,8 @@ std::string currentSdlDriver=getSdlDriverName(); // Auto swap A/B vs reset the other marker prefs->set(FEATURES_SWAP_IF_A_GREATER_THAN_B, useSwap); + // Show precision timings in time fields tooltips + prefs->set(FEATURES_PTS_TIMINGS_TOOLTIPS, showPTSToolTips); // prefs->set(MESSAGE_LEVEL,msglevel); // Discard changes to output config on video load diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 96a26bed1..8d96c003e 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -534,6 +534,32 @@ void MainWindow::setRefreshCap(void) prefs->get(FEATURES_CAP_REFRESH_VALUE,&refreshCapValue); } +/** + \fn updatePTSToolTips +*/ +void MainWindow::updatePTSToolTips(void) +{ + showPTSToolTips = false; + prefs->get(FEATURES_PTS_TIMINGS_TOOLTIPS,&showPTSToolTips); + + if (!showPTSToolTips) + { + ui.currentTime->removePTSToolTip(); + ui.totalTime->removePTSToolTip(); + ui.selectionMarkerA->removePTSToolTip(); + ui.selectionMarkerB->removePTSToolTip(); + ui.selectionDuration->removePTSToolTip(); + } + else if(avifileinfo) + { + ui.currentTime->appendPTSToolTip(); + ui.totalTime->appendPTSToolTip(); + ui.selectionMarkerA->appendPTSToolTip(); + ui.selectionMarkerB->appendPTSToolTip(); + ui.selectionDuration->appendPTSToolTip(); + } +} + /** \fn busyTimerTimeout */ @@ -2054,7 +2080,7 @@ void MainWindow::widgetsUpdateTooltips(void) tt += hint; ui.toolButtonForwardOneMinute->setToolTip(tt); - if(avifileinfo) + if(avifileinfo && showPTSToolTips) { ui.currentTime->appendPTSToolTip(); ui.totalTime->appendPTSToolTip(); @@ -3383,6 +3409,7 @@ void UI_applySettings(void) ((MainWindow *)QuiMainWindows)->updateActionShortcuts(); ((MainWindow *)QuiMainWindows)->volumeWidgetOperational(); ((MainWindow *)QuiMainWindows)->setRefreshCap(); + ((MainWindow *)QuiMainWindows)->updatePTSToolTips(); } /** \fn UI_getCurrentPreview @@ -3807,7 +3834,9 @@ bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) void UI_setCurrentTime(uint64_t curTime) { WIDGET(currentTime)->setPTS(curTime); - if(avifileinfo) + if(!avifileinfo) + WIDGET(currentTime)->removePTSToolTip(); + else if(((MainWindow *)QuiMainWindows)->showPTSToolTips) WIDGET(currentTime)->appendPTSToolTip(); } @@ -3819,7 +3848,9 @@ void UI_setTotalTime(uint64_t curTime) { WIDGET(totalTime)->setPTS(curTime); slider->setTotalDuration(curTime); - if(avifileinfo) + if(!avifileinfo) + WIDGET(totalTime)->removePTSToolTip(); + else if(((MainWindow *)QuiMainWindows)->showPTSToolTips) WIDGET(totalTime)->appendPTSToolTip(); } /** @@ -3841,7 +3872,13 @@ void UI_setMarkers(uint64_t a, uint64_t b) // NOTE: To cut the us use (uint64_t)((uint32_t)(a/1000))*1000 WIDGET(selectionDuration)->setPTS(b - a); slider->setMarkers(a, b); - if(avifileinfo) + if(!avifileinfo) + { + WIDGET(selectionMarkerA)->removePTSToolTip(); + WIDGET(selectionMarkerB)->removePTSToolTip(); + WIDGET(selectionDuration)->removePTSToolTip(); + } + else if(((MainWindow *)QuiMainWindows)->showPTSToolTips) { WIDGET(selectionMarkerA)->appendPTSToolTip(); WIDGET(selectionMarkerB)->appendPTSToolTip(); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 4a9aa636a..29d61b7eb 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -138,6 +138,10 @@ class MainWindow : public QMainWindow QString statusBarFrame_Type; + // Show precision timings in time fields tooltips + void updatePTSToolTips(void); + bool showPTSToolTips; + #ifdef __APPLE__ void fileOpenWrapper(QList list) { openFiles(list); } #endif diff --git a/avidemux_core/ADM_coreUtils/include/prefs2_list.h b/avidemux_core/ADM_coreUtils/include/prefs2_list.h index d857d1f75..b84904345 100644 --- a/avidemux_core/ADM_coreUtils/include/prefs2_list.h +++ b/avidemux_core/ADM_coreUtils/include/prefs2_list.h @@ -1,4 +1,5 @@ VERSION_APIVERSION, //uint32_t +FEATURES_PTS_TIMINGS_TOOLTIPS, //bool FEATURES_SWAP_IF_A_GREATER_THAN_B, //bool FEATURES_SAVEPREFSONEXIT, //bool FEATURES_IGNORESAVEDMARKERS, //bool diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.conf b/avidemux_core/ADM_coreUtils/src/prefs2.conf index f1179e1d8..8be30313e 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.conf +++ b/avidemux_core/ADM_coreUtils/src/prefs2.conf @@ -17,6 +17,7 @@ version{ uint32_t:apiVersion, 1, 0, 999 } features{ +bool:pts_timings_tooltips, 1, 0, 1 bool:swap_if_A_greater_than_B, 1, 0, 1 bool:saveprefsonexit, 1, 0, 1 bool:ignoresavedmarkers, 0, 0, 1 diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.h b/avidemux_core/ADM_coreUtils/src/prefs2.h index 312c975bf..97208555c 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2.h @@ -6,6 +6,7 @@ struct { uint32_t apiVersion; }version; struct { + bool pts_timings_tooltips; bool swap_if_A_greater_than_B; bool saveprefsonexit; bool ignoresavedmarkers; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp index 42f99c9bf..6efcde445 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp @@ -1,6 +1,7 @@ // automatically generated by admSerialization.py, do not edit! extern const ADM_paramList my_prefs_struct_param[]={ {"version.apiVersion",offsetof(my_prefs_struct,version.apiVersion),"uint32_t",ADM_param_uint32_t}, + {"features.pts_timings_tooltips",offsetof(my_prefs_struct,features.pts_timings_tooltips),"bool",ADM_param_bool}, {"features.swap_if_A_greater_than_B",offsetof(my_prefs_struct,features.swap_if_A_greater_than_B),"bool",ADM_param_bool}, {"features.saveprefsonexit",offsetof(my_prefs_struct,features.saveprefsonexit),"bool",ADM_param_bool}, {"features.ignoresavedmarkers",offsetof(my_prefs_struct,features.ignoresavedmarkers),"bool",ADM_param_bool}, diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp index 5c092ee76..6b910c17f 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp @@ -9,6 +9,7 @@ json.addNode("version"); json.addUint32("apiVersion",key->version.apiVersion); json.endNode(); json.addNode("features"); +json.addBool("pts_timings_tooltips",key->features.pts_timings_tooltips); json.addBool("swap_if_A_greater_than_B",key->features.swap_if_A_greater_than_B); json.addBool("saveprefsonexit",key->features.saveprefsonexit); json.addBool("ignoresavedmarkers",key->features.ignoresavedmarkers); diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h index 1016638b4..8e88212fc 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h @@ -12,6 +12,7 @@ typedef struct #endif static optionDesc myOptions[]={ { VERSION_APIVERSION,"version.apiVersion" ,ADM_param_uint32_t ,"1", 0, 999}, +{ FEATURES_PTS_TIMINGS_TOOLTIPS,"features.pts_timings_tooltips" ,ADM_param_bool ,"1", 0, 1}, { FEATURES_SWAP_IF_A_GREATER_THAN_B,"features.swap_if_A_greater_than_B",ADM_param_bool ,"1", 0, 1}, { FEATURES_SAVEPREFSONEXIT,"features.saveprefsonexit" ,ADM_param_bool ,"1", 0, 1}, { FEATURES_IGNORESAVEDMARKERS,"features.ignoresavedmarkers" ,ADM_param_bool ,"0", 0, 1}, From 227ef9137e341007977f738ae239e01cf986dd73 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 07:36:33 +0000 Subject: [PATCH 77/85] [Q_gui2] Fix to manage signals when time fields are readonly This is a workaround about editingFinished events. Even when time fields are set to readonly, the signal triggers just one time when the field is clicked and then the focus is changed, with Tab or by clicking another element. This could be a better solution than disabling the time fields, if there are action buttons that should be kept enabled in a field. --- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 8d96c003e..f8aaa14fe 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -475,6 +475,13 @@ void MainWindow::timeChangeFinished(void) void MainWindow::currentTimeChanged(void) { + // Workaroud to reject a weird editingFinished event that triggers + // even when this element was already readonly. This happens just + // one time when switching focus away from the readonly element or + // not readonly. + if(WIDGET(currentTime)->isReadOnly()) + return; + sendAction(ACT_GetTime); // NOTE: QLineEdit::editingFinished() is emitted when Enter is @@ -493,21 +500,33 @@ void MainWindow::currentTimeChanged(void) void MainWindow::markerAChanged(void) { + // Workaroud: see above. + if(WIDGET(selectionMarkerA)->isReadOnly()) + return; sendAction(ACT_GetMarkerA); } void MainWindow::markerBChanged(void) { + // Workaroud: see above. + if(WIDGET(selectionMarkerB)->isReadOnly()) + return; sendAction(ACT_GetMarkerB); } void MainWindow::selectionDurationChanged(void) { + // Workaroud: see above. + if(WIDGET(selectionDuration)->isReadOnly()) + return; sendAction(ACT_GetSelection); } void MainWindow::totalTimeChanged(void) { + // Workaroud: see above. + if(WIDGET(totalTime)->isReadOnly()) + return; sendAction(ACT_GetTotal); } From e160dba03e65c28861f51d7a8d086d9979190500 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sat, 25 Mar 2023 17:05:55 +0000 Subject: [PATCH 78/85] [Q_gui2] Start making use of microseconds precision --- .../ADM_userInterfaces/ADM_gui2/gui_none.cpp | 10 ++-- avidemux/common/ADM_commonUI/GUI_ui.h | 10 ++-- avidemux/common/gui_navigate.cpp | 49 ++++++++++++------- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 25 ++++------ 4 files changed, 51 insertions(+), 43 deletions(-) diff --git a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp index 556cfa43c..d3489a7dc 100644 --- a/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp +++ b/avidemux/cli/ADM_userInterfaces/ADM_gui2/gui_none.cpp @@ -154,23 +154,23 @@ void UI_SetCurrentFormat( uint32_t f ) { cliFormat=f; } -bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { return false; } -bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { return false; } -bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { return false; } -bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { return false; } -bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { return false; } diff --git a/avidemux/common/ADM_commonUI/GUI_ui.h b/avidemux/common/ADM_commonUI/GUI_ui.h index 17b209ff0..2c5e9c4d8 100644 --- a/avidemux/common/ADM_commonUI/GUI_ui.h +++ b/avidemux/common/ADM_commonUI/GUI_ui.h @@ -5,11 +5,11 @@ void UI_updateFrameCount(uint32_t curFrame); void UI_setFrameCount(uint32_t curFrame,uint32_t total); -bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); -bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); -bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); -bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); -bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms); +bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); +bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); +bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); +bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); +bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us); void UI_setCurrentTime(uint64_t pts); void UI_setTotalTime(uint64_t curTime); void UI_setSegments(uint32_t numOfSegs, uint64_t * segPts); diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 9ca0efdf1..5442249f3 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -45,9 +45,10 @@ extern uint8_t DIA_gotoTime(uint32_t *hh, uint32_t *mm, uint32_t *ss,uint32_t *m extern void A_setHDRConfig(void); extern void A_setPostproc(void); -static uint32_t jumpTarget[4] = {0}; -static uint32_t jumpMarkerA[4] = {0}; -static uint32_t jumpMarkerB[4] = {0}; +// hh:mm:ss.ms,us +static uint32_t jumpTarget[5] = {0}; +static uint32_t jumpMarkerA[5] = {0}; +static uint32_t jumpMarkerB[5] = {0}; bool GUI_infiniteForward(uint64_t pts); bool GUI_lastFrameBeforePts(uint64_t pts); @@ -75,7 +76,7 @@ void HandleAction_Staged(Action action) stagedActionSuccess = 0; // Read the time set in the UI, not the real PTS uint32_t *t = jumpTarget; - if(UI_getCurrentTime(t,t+1,t+2,t+3)) + if(UI_getCurrentTime(t,t+1,t+2,t+3,t+4)) stagedActionSuccess = 1; } break; @@ -86,6 +87,7 @@ void HandleAction_Staged(Action action) uint64_t pts = admPreview::getCurrentPts(); uint32_t *t = jumpTarget; ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + t[4] = pts - (uint64_t)((uint32_t)(pts/1000))*1000; if (DIA_gotoTime(t,t+1,t+2,t+3)) stagedActionSuccess = 1; } @@ -95,12 +97,13 @@ void HandleAction_Staged(Action action) stagedActionSuccess = 0; // Read the time set in the UI, not the real PTS uint32_t *t = jumpMarkerA; - if(UI_getMarkerA(t,t+1,t+2,t+3)) + if(UI_getMarkerA(t,t+1,t+2,t+3,t+4)) { // Never leave the other marker uninitialized uint64_t pts = video_body->getMarkerBPts(); t = jumpMarkerB; ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + t[4] = pts - (uint64_t)((uint32_t)(pts/1000))*1000; stagedActionSuccess = 1; } } @@ -110,12 +113,13 @@ void HandleAction_Staged(Action action) stagedActionSuccess = 0; // Read the time set in the UI, not the real PTS uint32_t *t = jumpMarkerB; - if(UI_getMarkerB(t,t+1,t+2,t+3)) + if(UI_getMarkerB(t,t+1,t+2,t+3,t+4)) { // Never leave the other marker uninitialized uint64_t pts = video_body->getMarkerAPts(); t = jumpMarkerA; ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + t[4] = pts - (uint64_t)((uint32_t)(pts/1000))*1000; stagedActionSuccess = 1; } } @@ -131,10 +135,12 @@ void HandleAction_Staged(Action action) pts = video_body->getMarkerAPts(); t = jumpMarkerA; ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + t[4] = pts - (uint64_t)((uint32_t)(pts/1000))*1000; // Get current marker B time pts = video_body->getMarkerBPts(); t = jumpMarkerB; ms2time((uint32_t)(pts/1000),t,t+1,t+2,t+3); + t[4] = pts - (uint64_t)((uint32_t)(pts/1000))*1000; // Always initialize both, but select only one if(action == ACT_SelectMarkerA) t = jumpMarkerA; @@ -148,17 +154,19 @@ void HandleAction_Staged(Action action) { stagedActionSuccess = 0; // Read the time set in the UI, not the real PTS - uint32_t time[4] = {0}, *t = time; - if(UI_getSelectionTime(t,t+1,t+2,t+3)) + uint32_t time[5] = {0}, *t = time; + if(UI_getSelectionTime(t,t+1,t+2,t+3,t+4)) { // Never leave the markers uninitialized uint64_t ptsA = video_body->getMarkerAPts(); - uint64_t ptsB, delta = (((uint64_t)t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; + uint64_t ptsB, delta = (((uint64_t)t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000+t[4]; t = jumpMarkerA; ms2time((uint32_t)(ptsA/1000),t,t+1,t+2,t+3); + t[4] = ptsA - (uint64_t)((uint32_t)(ptsA/1000))*1000; t = jumpMarkerB; ptsB = ptsA + delta; ms2time((uint32_t)(ptsB/1000),t,t+1,t+2,t+3); + t[4] = ptsB - (uint64_t)((uint32_t)(ptsB/1000))*1000; stagedActionSuccess = 1; } } @@ -167,16 +175,18 @@ void HandleAction_Staged(Action action) { stagedActionSuccess = 0; // Read the time set in the UI, not the real PTS - uint32_t time[4] = {0}, *t = time; - if(UI_getTotalTime(t,t+1,t+2,t+3)) + uint32_t time[5] = {0}, *t = time; + if(UI_getTotalTime(t,t+1,t+2,t+3,t+4)) { // Never leave the markers uninitialized - uint64_t ptsA = (((uint64_t)t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000; + uint64_t ptsA = (((uint64_t)t[0]*3600+t[1]*60+t[2])*1000+t[3])*1000+t[4]; uint64_t ptsB = video_body->getVideoDuration(); t = jumpMarkerA; ms2time((uint32_t)(ptsA/1000),t,t+1,t+2,t+3); + t[4] = ptsA - (uint64_t)((uint32_t)(ptsA/1000))*1000; t = jumpMarkerB; ms2time((uint32_t)(ptsB/1000),t,t+1,t+2,t+3); + t[4] = ptsB - (uint64_t)((uint32_t)(ptsB/1000))*1000; stagedActionSuccess = 1; } } @@ -403,12 +413,13 @@ static int ignore_change=0; if(playing) break; if(!stagedActionSuccess) break; uint32_t *t = jumpTarget; - uint32_t hh,mm,ss,ms; + uint32_t hh,mm,ss,ms,us; hh = *t++; mm = *t++; ss = *t++; ms = *t; - A_jumpToTime(hh,mm,ss,ms); + us = *t+1; + A_jumpToTime(hh,mm,ss,ms); // FIXME: missing us stagedActionSuccess = 0; } break; @@ -419,7 +430,7 @@ static int ignore_change=0; // Selected marker A/B time uint32_t *t = jumpMarkerA; uint32_t *tB = jumpMarkerB; - uint32_t hh,mm,ss,ms; + uint32_t hh,mm,ss,ms,us; uint64_t ptsA, ptsB; // Selected marker A/B time chooser @@ -433,9 +444,10 @@ static int ignore_change=0; uint64_t preB = ptsB = video_body->getMarkerBPts(); // Backup the current time to restore it later - uint32_t time[4] = {0}; + uint32_t time[5] = {0}; uint64_t pts = admPreview::getCurrentPts(); ms2time((uint32_t)(pts/1000),time,time+1,time+2,time+3); + time[4] = pts - (uint64_t)((uint32_t)(pts/1000))*1000; // Jump to time to find the correct marker A/B time, then // restore the previous current time after procesing. @@ -445,11 +457,12 @@ static int ignore_change=0; mm = t[1]; ss = t[2]; ms = t[3]; + us = t[4]; // Check if outside boundaries when jumping to A/B if(sel) { - uint64_t x = (((uint64_t)hh*3600+mm*60+ss)*1000+ms)*1000; + uint64_t x = (((uint64_t)hh*3600+mm*60+ss)*1000+ms)*1000+us; if(x == 0) *sel = 0; @@ -465,7 +478,7 @@ static int ignore_change=0; // FIXME: Don't jump to find the correct marker // A/B time, rather find the closest frame then // frame2time. - A_jumpToTime(hh,mm,ss,ms); + A_jumpToTime(hh,mm,ss,ms); // FIXME: missing us } // Exit the loop after restoring previous time diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index f8aaa14fe..7f073b8bc 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -3765,12 +3765,11 @@ admUITaskBarProgress *UI_getTaskBarProgress() \fn UI_getCurrentTime \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS */ -bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { if(WIDGET(currentTime)->isTextEdited()) { - uint32_t us; - WIDGET(currentTime)->PTS(hh, mm, ss, ms, &us); + WIDGET(currentTime)->PTS(hh, mm, ss, ms, us); return true; } @@ -3782,12 +3781,11 @@ bool UI_getCurrentTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) \fn UI_getMarkerA \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS */ -bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { if(WIDGET(selectionMarkerA)->isTextEdited()) { - uint32_t us; - WIDGET(selectionMarkerA)->PTS(hh, mm, ss, ms, &us); + WIDGET(selectionMarkerA)->PTS(hh, mm, ss, ms, us); return true; } @@ -3799,12 +3797,11 @@ bool UI_getMarkerA(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) \fn UI_getMarkerB \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS */ -bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { if(WIDGET(selectionMarkerB)->isTextEdited()) { - uint32_t us; - WIDGET(selectionMarkerB)->PTS(hh, mm, ss, ms, &us); + WIDGET(selectionMarkerB)->PTS(hh, mm, ss, ms, us); return true; } @@ -3816,12 +3813,11 @@ bool UI_getMarkerB(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) \fn UI_getSelectionTime \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS */ -bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { if(WIDGET(selectionDuration)->isTextEdited()) { - uint32_t us; - WIDGET(selectionDuration)->PTS(hh, mm, ss, ms, &us); + WIDGET(selectionDuration)->PTS(hh, mm, ss, ms, us); return true; } @@ -3833,12 +3829,11 @@ bool UI_getSelectionTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) \fn UI_getTotalTime \brief Get currently displayed PTS, this may have been edited by the user and it's not the real PTS */ -bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms) +bool UI_getTotalTime(uint32_t *hh, uint32_t *mm, uint32_t *ss, uint32_t *ms, uint32_t *us) { if(WIDGET(totalTime)->isTextEdited()) { - uint32_t us; - WIDGET(totalTime)->PTS(hh, mm, ss, ms, &us); + WIDGET(totalTime)->PTS(hh, mm, ss, ms, us); return true; } From cc17305ad52370cbb3e59fc09881a9ea398989ce Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 03:39:56 +0000 Subject: [PATCH 79/85] [Q_gui2] Fix typo in function documentation --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 7f073b8bc..3d8f344d2 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -1276,7 +1276,7 @@ bool MainWindow::buildMenu(QMenu *root,MenuEntry *menu, int nb) /** \fn createPopupMenu - \bries Override the application default context menu. + \brief Override the application default context menu. */ QMenu *MainWindow::createPopupMenu() { From b21b8f3f657ce1ab87ca4029a98278fa42e694b4 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 04:59:59 +0000 Subject: [PATCH 80/85] [Q_gui2] Add preference to show extra buttons on time fields Add preference to show only the default action button on time fields or all the buttons. --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 8 +- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 277 +++++++++++++----- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 35 +++ .../ADM_coreUtils/include/prefs2_list.h | 1 + avidemux_core/ADM_coreUtils/src/prefs2.conf | 1 + avidemux_core/ADM_coreUtils/src/prefs2.h | 1 + .../ADM_coreUtils/src/prefs2_desc.cpp | 1 + .../ADM_coreUtils/src/prefs2_json.cpp | 1 + avidemux_core/ADM_coreUtils/src/prefs2_pref.h | 1 + 9 files changed, 256 insertions(+), 70 deletions(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index 8dbb3b67f..c65957e3d 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -48,6 +48,7 @@ uint32_t olddevice,newdevice; uint32_t render; bool useSwap=0; +bool showExtraButtons=0; bool showPTSToolTips=0; uint32_t lavcThreads=0; @@ -262,6 +263,8 @@ std::string currentSdlDriver=getSdlDriverName(); // SWAP A&B if A>B if(!prefs->get(FEATURES_SWAP_IF_A_GREATER_THAN_B, &useSwap)) useSwap=0; + if(!prefs->get(FEATURES_TIME_FIELDS_EXTRA_BUTTONS, &showExtraButtons)) + showExtraButtons=0; if(!prefs->get(FEATURES_PTS_TIMINGS_TOOLTIPS, &showPTSToolTips)) showPTSToolTips=0; // Get level of message verbosity @@ -280,6 +283,7 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemToggle swapUpDownKeys(&swapUpDown,QT_TRANSLATE_NOOP("adm","Re_verse UP and DOWN arrow keys for navigation")); diaElemToggle swapMouseWheel(&swapWheel,QT_TRANSLATE_NOOP("adm","Reverse mouse _wheel for navigation")); diaElemToggle swapMarkers(&useSwap,QT_TRANSLATE_NOOP("adm","_Swap markers if marker A is set past marker B or marker B before A in video")); + diaElemToggle extraButtons(&showExtraButtons,QT_TRANSLATE_NOOP("adm","_Show extra buttons in time fields")); diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","_Show precision timings in time fields tooltips")); diaElemToggle checkForUpdate(&doAutoUpdate,QT_TRANSLATE_NOOP("adm","_Check for new release")); @@ -543,7 +547,7 @@ std::string currentSdlDriver=getSdlDriverName(); //-- #define NB_ELEM(x) sizeof(x)/sizeof(diaElem *) /* User Interface */ - diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &ptsToolTips, &checkForUpdate}; + diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &extraButtons, &ptsToolTips, &checkForUpdate}; diaElemTabs tabUser(QT_TRANSLATE_NOOP("adm","User Interface"),NB_ELEM(diaUser),diaUser); /* Automation */ @@ -816,6 +820,8 @@ std::string currentSdlDriver=getSdlDriverName(); // Auto swap A/B vs reset the other marker prefs->set(FEATURES_SWAP_IF_A_GREATER_THAN_B, useSwap); + // Show extra buttons in time fields + prefs->set(FEATURES_TIME_FIELDS_EXTRA_BUTTONS, showExtraButtons); // Show precision timings in time fields tooltips prefs->set(FEATURES_PTS_TIMINGS_TOOLTIPS, showPTSToolTips); // diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 3d8f344d2..c9e1e8456 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -147,22 +147,6 @@ static bool needsResizing=false; static QAction *findAction(std::vector *list, Action action); static QAction *findActionInToolBar(QToolBar *tb, Action action); -static QAction *pushButtonTime; -static QAction *pushButtonSaveScript; -static QAction *pushButtonRunScript; -static QAction *pushButtonAppend; -static QAction *pushButtonUndo; -static QAction *pushButtonRedo; -static QAction *pushButtonCut; -static QAction *pushButtonCopy; -static QAction *pushButtonPaste; -static QAction *pushButtonEditMarkerA; -static QAction *pushButtonEditMarkerB; -static QAction *pushButtonJumpToMarkerA; -static QAction *pushButtonJumpToMarkerB; -static QAction *pushButtonResetMarkerA; -static QAction *pushButtonResetMarkerB; - #define WIDGET(x) (((MainWindow *)QuiMainWindows)->ui.x) #define CONNECT(object,zzz) connect( (ui.object),SIGNAL(triggered()),this,SLOT(buttonPressed())); @@ -553,6 +537,24 @@ void MainWindow::setRefreshCap(void) prefs->get(FEATURES_CAP_REFRESH_VALUE,&refreshCapValue); } +/** + \brief Update time fields actions buttons. + + Read preference to add only the default button or all buttons to + time fields. +*/ +void MainWindow::updateWidgetActionButtons(void) +{ + showExtraButtons = false; + prefs->get(FEATURES_TIME_FIELDS_EXTRA_BUTTONS, &showExtraButtons); + + currentTimeAddActionButons(showExtraButtons); + totalTimeAddActionButons(showExtraButtons); + selectionDurationAddActionButons(showExtraButtons); + selectionMarkerAAddActionButons(showExtraButtons); + selectionMarkerBAddActionButons(showExtraButtons); +} + /** \fn updatePTSToolTips */ @@ -841,59 +843,8 @@ MainWindow::MainWindow(const vector& scriptEngines) : _scriptEng //QRect ctrect = ui.currentTime->fontMetrics().boundingRect(text); //ui.currentTime->setFixedSize(1.15 * ctrect.width(), ui.currentTime->height()); - // Put an edit time button inside the element - pushButtonTime = ui.currentTime->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); - connect(pushButtonTime,SIGNAL(triggered()),this,SLOT(seekTime())); - - // Put a save script button inside the element - pushButtonSaveScript = ui.currentTime->addAction(QIcon(MKICON(savescript)), QLineEdit::LeadingPosition); - connect(pushButtonSaveScript,SIGNAL(triggered()),this,SLOT(saveScriptAction())); - - // Put a run script button inside the element - pushButtonRunScript = ui.currentTime->addAction(QIcon(MKICON(runscript)), QLineEdit::LeadingPosition); - connect(pushButtonRunScript,SIGNAL(triggered()),this,SLOT(runScriptAction())); - - // Put an append button inside the element - pushButtonAppend = ui.totalTime->addAction(QIcon(MKICON(append)), QLineEdit::LeadingPosition); - connect(pushButtonAppend,SIGNAL(triggered()),this,SLOT(appendAction())); - - // Put an undo button inside the element - pushButtonUndo = ui.totalTime->addAction(QIcon(MKICON(undo)), QLineEdit::LeadingPosition); - connect(pushButtonUndo,SIGNAL(triggered()),this,SLOT(undoAction())); - - // Put a redo button inside the element - pushButtonRedo = ui.totalTime->addAction(QIcon(MKICON(redo)), QLineEdit::LeadingPosition); - connect(pushButtonRedo,SIGNAL(triggered()),this,SLOT(redoAction())); - - // Put a cut button inside the element - pushButtonCut = ui.selectionDuration->addAction(QIcon(MKICON(cut)), QLineEdit::LeadingPosition); - connect(pushButtonCut,SIGNAL(triggered()),this,SLOT(cutSelection())); - - // Put a copy button inside the text element - pushButtonCopy = ui.selectionDuration->addAction(QIcon(MKICON(copy)), QLineEdit::LeadingPosition); - connect(pushButtonCopy,SIGNAL(triggered()),this,SLOT(copySelection())); - - // Put a paste button inside the text element - pushButtonPaste = ui.selectionDuration->addAction(QIcon(MKICON(paste)), QLineEdit::LeadingPosition); - connect(pushButtonPaste,SIGNAL(triggered()),this,SLOT(pasteClipboard())); - - // Put an edit marker button inside the text elements - pushButtonEditMarkerA = ui.selectionMarkerA->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); - connect(pushButtonEditMarkerA,SIGNAL(triggered()),this,SLOT(editMarkerA())); - pushButtonEditMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(time)), QLineEdit::LeadingPosition); - connect(pushButtonEditMarkerB,SIGNAL(triggered()),this,SLOT(editMarkerB())); - - // Put a jump marker button inside the text elements - pushButtonJumpToMarkerA = ui.selectionMarkerA->addAction(QIcon(MKICON(goMarkA)), QLineEdit::LeadingPosition); - connect(pushButtonJumpToMarkerA,SIGNAL(triggered()),this,SLOT(gotoMarkerA())); - pushButtonJumpToMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(goMarkB)), QLineEdit::LeadingPosition); - connect(pushButtonJumpToMarkerB,SIGNAL(triggered()),this,SLOT(gotoMarkerB())); - - // Put a reset marker button inside the text elements - pushButtonResetMarkerA = ui.selectionMarkerA->addAction(QIcon(MKICON(reset_markA)), QLineEdit::LeadingPosition); - connect(pushButtonResetMarkerA,SIGNAL(triggered()),this,SLOT(resetMarkerA())); - pushButtonResetMarkerB = ui.selectionMarkerB->addAction(QIcon(MKICON(reset_markB)), QLineEdit::LeadingPosition); - connect(pushButtonResetMarkerB,SIGNAL(triggered()),this,SLOT(resetMarkerB())); + // initialize time fields action buttons + updateWidgetActionButtons(); // Get the time the user sets directly in the text element connect(ui.currentTime, SIGNAL(editingFinished()), this, SLOT(currentTimeChanged())); @@ -1568,6 +1519,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonJumpToMarkerB->setEnabled(false); pushButtonResetMarkerA->setEnabled(false); pushButtonResetMarkerB->setEnabled(false); + pushButtonResetMarkers->setEnabled(false); return; } @@ -1655,6 +1607,7 @@ void MainWindow::setMenuItemsEnabledState(void) pushButtonJumpToMarkerB->setEnabled(vid); pushButtonResetMarkerA->setEnabled(resetA); pushButtonResetMarkerB->setEnabled(resetB); + pushButtonResetMarkers->setEnabled(resetA || resetB); slider->setEnabled(vid); updateCodecWidgetControlsState(); @@ -1995,6 +1948,10 @@ void MainWindow::widgetsUpdateTooltips(void) tt += SHORTCUT(ACT_ResetMarkerB,Edit) pushButtonResetMarkerB->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Reset Markers"); + tt += SHORTCUT(ACT_ResetMarkers,Edit) + pushButtonResetMarkers->setToolTip(tt); + tt = QT_TRANSLATE_NOOP("qgui2","Save tinyPy script"); pushButtonSaveScript->setToolTip(tt); @@ -2109,6 +2066,179 @@ void MainWindow::widgetsUpdateTooltips(void) } } +/** + \brief Add actions to a QLineEdit widget. + \param[out] widget element where to add actions. + \param[in] actions list of actions for the element (can be empty). + \param[in] all if true add all actions, otherwise add only the first one. + \param[in] first default action to use instead of the first one in actions list (can be NULL). + \return true if the widget's actions list has been modified, otherwise false. + + Add the list of actions to the widget when all is true. + + If all is false, add the first in the actions list to the widget, + or if the parameter first isn't NULL, add that instead. + + Each call to this function will first remove all actions from the + widget. To leave the widget with no actions, set all to true and + give an empty actions list. If all is set to false, to leave the + widget with no actions, in addition to an empty list pass NULL as + the parameter first. + + You may want to call adjustSize(), or setTextMargins(), when this + function returns true. +*/ +static bool enableWidgetActionButtons(QLineEdit *widget, const QList &actions, bool all, QAction* first = NULL) +{ + if(!widget) + return false; + + first = first ? first : actions.first(); + + QListIterator a(widget->actions()); + bool changed = a.hasNext() || (all && actions.first()) || first; + + while(a.hasNext()) + widget->removeAction(a.next()); + + a = actions; + + if(all) + while(a.hasNext()) + widget->addAction(a.next(), QLineEdit::LeadingPosition); + else if(first) + widget->addAction(first, QLineEdit::LeadingPosition); + + return changed; +} + +/** + \brief Add action buttons to the current time field. + \param[in] all if true add all buttons, otherwise add only the default button. +*/ +void MainWindow::currentTimeAddActionButons(bool all) +{ + if(currentTimeActionButtons.isEmpty()) + { + pushButtonTime = new QAction(QIcon(MKICON(time)), "Go to Time", ui.currentTime); + pushButtonSaveScript = new QAction(QIcon(MKICON(savescript)), "Save tinyPy script", ui.currentTime); + pushButtonRunScript = new QAction(QIcon(MKICON(runscript)), "Run script/project", ui.currentTime); + + connect(pushButtonTime,SIGNAL(triggered()),this,SLOT(seekTime())); + connect(pushButtonSaveScript,SIGNAL(triggered()),this,SLOT(saveScriptAction())); + connect(pushButtonRunScript,SIGNAL(triggered()),this,SLOT(runScriptAction())); + + currentTimeActionButtons.append(pushButtonTime); + currentTimeActionButtons.append(pushButtonSaveScript); + currentTimeActionButtons.append(pushButtonRunScript); + } + + if(enableWidgetActionButtons(ui.currentTime, currentTimeActionButtons, all)) + ui.currentTime->setTextMargins(0,0,0,0); +} + +/** + \brief Add action buttons to the total time field. + \param[in] all if true add all buttons, otherwise add only the default button. +*/ +void MainWindow::totalTimeAddActionButons(bool all) +{ + if(totalTimeActionButtons.isEmpty()) + { + pushButtonAppend = new QAction(QIcon(MKICON(append)), "Append media", ui.totalTime); + pushButtonUndo = new QAction(QIcon(MKICON(undo)), "Undo action", ui.totalTime); + pushButtonRedo = new QAction(QIcon(MKICON(redo)), "Redo action", ui.totalTime); + + connect(pushButtonAppend,SIGNAL(triggered()),this,SLOT(appendAction())); + connect(pushButtonUndo,SIGNAL(triggered()),this,SLOT(undoAction())); + connect(pushButtonRedo,SIGNAL(triggered()),this,SLOT(redoAction())); + + totalTimeActionButtons.append(pushButtonAppend); + totalTimeActionButtons.append(pushButtonUndo); + totalTimeActionButtons.append(pushButtonRedo); + } + + if(enableWidgetActionButtons(ui.totalTime, totalTimeActionButtons, all)) + ui.totalTime->setTextMargins(0,0,0,0); +} + +/** + \brief Add action buttons to the selection duration field. + \param[in] all if true add all buttons, otherwise add only the default button. +*/ +void MainWindow::selectionDurationAddActionButons(bool all) +{ + if(selectionDurationActionButtons.isEmpty()) + { + pushButtonCut = new QAction(QIcon(MKICON(cut)), "Cut selection", ui.selectionDuration); + pushButtonCopy = new QAction(QIcon(MKICON(copy)), "Copy selection", ui.selectionDuration); + pushButtonPaste = new QAction(QIcon(MKICON(paste)), "Paste clipboard", ui.selectionDuration); + pushButtonResetMarkers = new QAction(QApplication::style()->standardIcon(QStyle::SP_TrashIcon), "Reset Markers)", ui.selectionDuration); + + connect(pushButtonCut,SIGNAL(triggered()),this,SLOT(cutSelection())); + connect(pushButtonCopy,SIGNAL(triggered()),this,SLOT(copySelection())); + connect(pushButtonPaste,SIGNAL(triggered()),this,SLOT(pasteClipboard())); + connect(pushButtonResetMarkers,SIGNAL(triggered()),this,SLOT(resetMarkers())); + + selectionDurationActionButtons.append(pushButtonCut); + selectionDurationActionButtons.append(pushButtonCopy); + selectionDurationActionButtons.append(pushButtonPaste); + } + + if(enableWidgetActionButtons(ui.selectionDuration, selectionDurationActionButtons, all, pushButtonResetMarkers)) + ui.selectionDuration->setTextMargins(0,0,0,0); +} + +/** + \brief Add action buttons to the marker A field. + \param[in] all if true add all buttons, otherwise add only the default button. +*/ +void MainWindow::selectionMarkerAAddActionButons(bool all) +{ + if(selectionMarkerAActionButtons.isEmpty()) + { + pushButtonEditMarkerA = new QAction(QIcon(MKICON(time)), "Edit Marker A", ui.selectionMarkerA); + pushButtonJumpToMarkerA = new QAction(QIcon(MKICON(goMarkA)), "Go to Marker A", ui.selectionMarkerA); + pushButtonResetMarkerA = new QAction(QIcon(MKICON(reset_markA)), "Reset Marker A (time 0)", ui.selectionMarkerA); + + connect(pushButtonEditMarkerA,SIGNAL(triggered()),this,SLOT(editMarkerA())); + connect(pushButtonJumpToMarkerA,SIGNAL(triggered()),this,SLOT(gotoMarkerA())); + connect(pushButtonResetMarkerA,SIGNAL(triggered()),this,SLOT(resetMarkerA())); + + selectionMarkerAActionButtons.append(pushButtonEditMarkerA); + selectionMarkerAActionButtons.append(pushButtonJumpToMarkerA); + selectionMarkerAActionButtons.append(pushButtonResetMarkerA); + } + + if(enableWidgetActionButtons(ui.selectionMarkerA, selectionMarkerAActionButtons, all, pushButtonJumpToMarkerA)) + ui.selectionMarkerA->setTextMargins(0,0,0,0); +} + +/** + \brief Add action buttons to the marker B field. + \param[in] all if true add all buttons, otherwise add only the default button. +*/ +void MainWindow::selectionMarkerBAddActionButons(bool all) +{ + if(selectionMarkerBActionButtons.isEmpty()) + { + pushButtonEditMarkerB = new QAction(QIcon(MKICON(time)), "Edit Marker B", ui.selectionMarkerB); + pushButtonJumpToMarkerB = new QAction(QIcon(MKICON(goMarkB)), "Go to Marker B", ui.selectionMarkerB); + pushButtonResetMarkerB = new QAction(QIcon(MKICON(reset_markB)), "Reset Marker B (total time)", ui.selectionMarkerB); + + connect(pushButtonEditMarkerB,SIGNAL(triggered()),this,SLOT(editMarkerB())); + connect(pushButtonJumpToMarkerB,SIGNAL(triggered()),this,SLOT(gotoMarkerB())); + connect(pushButtonResetMarkerB,SIGNAL(triggered()),this,SLOT(resetMarkerB())); + + selectionMarkerBActionButtons.append(pushButtonEditMarkerB); + selectionMarkerBActionButtons.append(pushButtonJumpToMarkerB); + selectionMarkerBActionButtons.append(pushButtonResetMarkerB); + } + + if(enableWidgetActionButtons(ui.selectionMarkerB, selectionMarkerBActionButtons, all, pushButtonJumpToMarkerB)) + ui.selectionMarkerB->setTextMargins(0,0,0,0); +} + /** \fn restoreDefaultWidgetState \brief Show all dock widgets and move toolbar to the default area @@ -2544,6 +2674,14 @@ void MainWindow::resetMarkerB(void) { sendAction (ACT_ResetMarkerB) ; } +/** + \fn resetMarkers + \brief Called to reset both marker A and B +*/ +void MainWindow::resetMarkers(void) +{ + sendAction (ACT_ResetMarkers) ; +} /** \fn searchMenu */ @@ -3428,6 +3566,7 @@ void UI_applySettings(void) ((MainWindow *)QuiMainWindows)->updateActionShortcuts(); ((MainWindow *)QuiMainWindows)->volumeWidgetOperational(); ((MainWindow *)QuiMainWindows)->setRefreshCap(); + ((MainWindow *)QuiMainWindows)->updateWidgetActionButtons(); ((MainWindow *)QuiMainWindows)->updatePTSToolTips(); } /** diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index 29d61b7eb..db22b5554 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -133,6 +133,12 @@ class MainWindow : public QMainWindow void setLightTheme(void); void setDarkTheme(void); + void currentTimeAddActionButons(bool all); + void totalTimeAddActionButons(bool all); + void selectionDurationAddActionButons(bool all); + void selectionMarkerAAddActionButons(bool all); + void selectionMarkerBAddActionButons(bool all); + static void updateCheckDone(int version, const std::string &date, const std::string &downloadLink); static MainWindow *mainWindowSingleton; @@ -142,6 +148,10 @@ class MainWindow : public QMainWindow void updatePTSToolTips(void); bool showPTSToolTips; + // Show extra buttons in time fields + void updateWidgetActionButtons(void); + bool showExtraButtons; + #ifdef __APPLE__ void fileOpenWrapper(QList list) { openFiles(list); } #endif @@ -245,6 +255,30 @@ class MainWindow : public QMainWindow LAST=10 // end (for iterations) }; +private: + QList currentTimeActionButtons; + QList totalTimeActionButtons; + QList selectionDurationActionButtons; + QList selectionMarkerAActionButtons; + QList selectionMarkerBActionButtons; + + QAction *pushButtonTime; + QAction *pushButtonSaveScript; + QAction *pushButtonRunScript; + QAction *pushButtonAppend; + QAction *pushButtonUndo; + QAction *pushButtonRedo; + QAction *pushButtonCut; + QAction *pushButtonCopy; + QAction *pushButtonPaste; + QAction *pushButtonEditMarkerA; + QAction *pushButtonEditMarkerB; + QAction *pushButtonJumpToMarkerA; + QAction *pushButtonJumpToMarkerB; + QAction *pushButtonResetMarkerA; + QAction *pushButtonResetMarkerB; + QAction *pushButtonResetMarkers; + private slots: void timeChanged(int); void timeChangeFinished(void); @@ -266,6 +300,7 @@ private slots: void gotoMarkerB(void); void resetMarkerA(void); void resetMarkerB(void); + void resetMarkers(void); void buttonPressed(void); void toolButtonPressed(bool z); diff --git a/avidemux_core/ADM_coreUtils/include/prefs2_list.h b/avidemux_core/ADM_coreUtils/include/prefs2_list.h index b84904345..99ffb558e 100644 --- a/avidemux_core/ADM_coreUtils/include/prefs2_list.h +++ b/avidemux_core/ADM_coreUtils/include/prefs2_list.h @@ -1,5 +1,6 @@ VERSION_APIVERSION, //uint32_t FEATURES_PTS_TIMINGS_TOOLTIPS, //bool +FEATURES_TIME_FIELDS_EXTRA_BUTTONS, //bool FEATURES_SWAP_IF_A_GREATER_THAN_B, //bool FEATURES_SAVEPREFSONEXIT, //bool FEATURES_IGNORESAVEDMARKERS, //bool diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.conf b/avidemux_core/ADM_coreUtils/src/prefs2.conf index 8be30313e..222c95940 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.conf +++ b/avidemux_core/ADM_coreUtils/src/prefs2.conf @@ -18,6 +18,7 @@ version{ } features{ bool:pts_timings_tooltips, 1, 0, 1 +bool:time_fields_extra_buttons, 1, 0, 1 bool:swap_if_A_greater_than_B, 1, 0, 1 bool:saveprefsonexit, 1, 0, 1 bool:ignoresavedmarkers, 0, 0, 1 diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.h b/avidemux_core/ADM_coreUtils/src/prefs2.h index 97208555c..1f868aef0 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2.h @@ -7,6 +7,7 @@ struct { }version; struct { bool pts_timings_tooltips; + bool time_fields_extra_buttons; bool swap_if_A_greater_than_B; bool saveprefsonexit; bool ignoresavedmarkers; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp index 6efcde445..099fa0efd 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp @@ -2,6 +2,7 @@ extern const ADM_paramList my_prefs_struct_param[]={ {"version.apiVersion",offsetof(my_prefs_struct,version.apiVersion),"uint32_t",ADM_param_uint32_t}, {"features.pts_timings_tooltips",offsetof(my_prefs_struct,features.pts_timings_tooltips),"bool",ADM_param_bool}, + {"features.time_fields_extra_buttons",offsetof(my_prefs_struct,features.time_fields_extra_buttons),"bool",ADM_param_bool}, {"features.swap_if_A_greater_than_B",offsetof(my_prefs_struct,features.swap_if_A_greater_than_B),"bool",ADM_param_bool}, {"features.saveprefsonexit",offsetof(my_prefs_struct,features.saveprefsonexit),"bool",ADM_param_bool}, {"features.ignoresavedmarkers",offsetof(my_prefs_struct,features.ignoresavedmarkers),"bool",ADM_param_bool}, diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp index 6b910c17f..29aca1e1d 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp @@ -10,6 +10,7 @@ json.addUint32("apiVersion",key->version.apiVersion); json.endNode(); json.addNode("features"); json.addBool("pts_timings_tooltips",key->features.pts_timings_tooltips); +json.addBool("time_fields_extra_buttons",key->features.time_fields_extra_buttons); json.addBool("swap_if_A_greater_than_B",key->features.swap_if_A_greater_than_B); json.addBool("saveprefsonexit",key->features.saveprefsonexit); json.addBool("ignoresavedmarkers",key->features.ignoresavedmarkers); diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h index 8e88212fc..37b161910 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h @@ -13,6 +13,7 @@ typedef struct static optionDesc myOptions[]={ { VERSION_APIVERSION,"version.apiVersion" ,ADM_param_uint32_t ,"1", 0, 999}, { FEATURES_PTS_TIMINGS_TOOLTIPS,"features.pts_timings_tooltips" ,ADM_param_bool ,"1", 0, 1}, +{ FEATURES_TIME_FIELDS_EXTRA_BUTTONS,"features.time_fields_extra_buttons",ADM_param_bool ,"1", 0, 1}, { FEATURES_SWAP_IF_A_GREATER_THAN_B,"features.swap_if_A_greater_than_B",ADM_param_bool ,"1", 0, 1}, { FEATURES_SAVEPREFSONEXIT,"features.saveprefsonexit" ,ADM_param_bool ,"1", 0, 1}, { FEATURES_IGNORESAVEDMARKERS,"features.ignoresavedmarkers" ,ADM_param_bool ,"0", 0, 1}, From 015faa7529b751819de863d129830f45037a7c00 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 11:10:34 +0000 Subject: [PATCH 81/85] [Q_gui2] Fix precision timings preference mnemonic --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index c65957e3d..385a4aa21 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -284,7 +284,7 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemToggle swapMouseWheel(&swapWheel,QT_TRANSLATE_NOOP("adm","Reverse mouse _wheel for navigation")); diaElemToggle swapMarkers(&useSwap,QT_TRANSLATE_NOOP("adm","_Swap markers if marker A is set past marker B or marker B before A in video")); diaElemToggle extraButtons(&showExtraButtons,QT_TRANSLATE_NOOP("adm","_Show extra buttons in time fields")); - diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","_Show precision timings in time fields tooltips")); + diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","Show _precision timings in time fields tooltips")); diaElemToggle checkForUpdate(&doAutoUpdate,QT_TRANSLATE_NOOP("adm","_Check for new release")); From fa7acef4e5f2251cf147c759581f8a96f700e29b Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 11:11:55 +0000 Subject: [PATCH 82/85] [Q_gui2] Fix extra buttons preference mnemonic --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index 385a4aa21..cb632ce76 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -283,7 +283,7 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemToggle swapUpDownKeys(&swapUpDown,QT_TRANSLATE_NOOP("adm","Re_verse UP and DOWN arrow keys for navigation")); diaElemToggle swapMouseWheel(&swapWheel,QT_TRANSLATE_NOOP("adm","Reverse mouse _wheel for navigation")); diaElemToggle swapMarkers(&useSwap,QT_TRANSLATE_NOOP("adm","_Swap markers if marker A is set past marker B or marker B before A in video")); - diaElemToggle extraButtons(&showExtraButtons,QT_TRANSLATE_NOOP("adm","_Show extra buttons in time fields")); + diaElemToggle extraButtons(&showExtraButtons,QT_TRANSLATE_NOOP("adm","Show e_xtra buttons in time fields")); diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","Show _precision timings in time fields tooltips")); diaElemToggle checkForUpdate(&doAutoUpdate,QT_TRANSLATE_NOOP("adm","_Check for new release")); From 7b16e67b8eaac21bebe6ca5d922b97f92e4923ec Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 11:13:20 +0000 Subject: [PATCH 83/85] [Q_gui2] Fix typo convert code line tab into spaces Fixes typo in 'Start making use of microseconds precision' commit. --- avidemux/common/gui_navigate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 5442249f3..f3c628e3b 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -418,7 +418,7 @@ static int ignore_change=0; mm = *t++; ss = *t++; ms = *t; - us = *t+1; + us = *t+1; A_jumpToTime(hh,mm,ss,ms); // FIXME: missing us stagedActionSuccess = 0; } From 1d14f9e57a809e3de515d6edecab6ba618d05a43 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 11:34:14 +0000 Subject: [PATCH 84/85] [Q_gui2] Add preference to enable time fields keyboard editing Each time field has a preference option to enable direct keyboard editing of the field. --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 41 ++++++++++++++++++- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 38 ++++++++++++++--- .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h | 8 ++++ .../ADM_coreUtils/include/prefs2_list.h | 5 +++ avidemux_core/ADM_coreUtils/src/prefs2.conf | 5 +++ avidemux_core/ADM_coreUtils/src/prefs2.h | 5 +++ .../ADM_coreUtils/src/prefs2_desc.cpp | 5 +++ .../ADM_coreUtils/src/prefs2_json.cpp | 5 +++ avidemux_core/ADM_coreUtils/src/prefs2_pref.h | 5 +++ 9 files changed, 111 insertions(+), 6 deletions(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index cb632ce76..406571977 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -51,6 +51,12 @@ bool useSwap=0; bool showExtraButtons=0; bool showPTSToolTips=0; +bool isCurrentTimeFieldEditable=0; +bool isTotalTimeFieldEditable=0; +bool isSelectionTimeFieldEditable=0; +bool isMarkerATimeFieldEditable=0; +bool isMarkerBTimeFieldEditable=0; + uint32_t lavcThreads=0; uint32_t encodePriority=2; //uint32_t indexPriority=2; @@ -267,6 +273,16 @@ std::string currentSdlDriver=getSdlDriverName(); showExtraButtons=0; if(!prefs->get(FEATURES_PTS_TIMINGS_TOOLTIPS, &showPTSToolTips)) showPTSToolTips=0; + if(!prefs->get(FEATURES_CURRENT_TIME_FIELD_EDITABLE, &isCurrentTimeFieldEditable)) + isCurrentTimeFieldEditable=0; + if(!prefs->get(FEATURES_TOTAL_TIME_FIELD_EDITABLE, &isTotalTimeFieldEditable)) + isTotalTimeFieldEditable=0; + if(!prefs->get(FEATURES_SELECTION_TIME_FIELD_EDITABLE, &isSelectionTimeFieldEditable)) + isSelectionTimeFieldEditable=0; + if(!prefs->get(FEATURES_MARKER_A_TIME_FIELD_EDITABLE, &isMarkerATimeFieldEditable)) + isMarkerATimeFieldEditable=0; + if(!prefs->get(FEATURES_MARKER_B_TIME_FIELD_EDITABLE, &isMarkerBTimeFieldEditable)) + isMarkerBTimeFieldEditable=0; // Get level of message verbosity prefs->get(MESSAGE_LEVEL,&msglevel); // Downmix default @@ -287,6 +303,18 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","Show _precision timings in time fields tooltips")); diaElemToggle checkForUpdate(&doAutoUpdate,QT_TRANSLATE_NOOP("adm","_Check for new release")); + // Time Fields + diaElemFrame frameTimeFields(QT_TRANSLATE_NOOP("adm","Time Fields")); + diaElemToggle currentTimeFieldEdits(&isCurrentTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the c_urrent time field")); + diaElemToggle totalTimeFieldEdits(&isTotalTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the t_otal time field")); + diaElemToggle selectionTimeFieldEdits(&isSelectionTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the selection _duration field")); + diaElemToggle markerATimeFieldEdits(&isMarkerATimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the Marker _A time field")); + diaElemToggle markerBTimeFieldEdits(&isMarkerBTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the Marker _B time field")); + frameTimeFields.swallow(¤tTimeFieldEdits); + frameTimeFields.swallow(&totalTimeFieldEdits); + frameTimeFields.swallow(&selectionTimeFieldEdits); + frameTimeFields.swallow(&markerATimeFieldEdits); + frameTimeFields.swallow(&markerBTimeFieldEdits); diaElemFrame frameSimd(QT_TRANSLATE_NOOP("adm","SIMD")); @@ -547,7 +575,7 @@ std::string currentSdlDriver=getSdlDriverName(); //-- #define NB_ELEM(x) sizeof(x)/sizeof(diaElem *) /* User Interface */ - diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &extraButtons, &ptsToolTips, &checkForUpdate}; + diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &extraButtons, &ptsToolTips, &checkForUpdate, &frameTimeFields}; diaElemTabs tabUser(QT_TRANSLATE_NOOP("adm","User Interface"),NB_ELEM(diaUser),diaUser); /* Automation */ @@ -824,6 +852,17 @@ std::string currentSdlDriver=getSdlDriverName(); prefs->set(FEATURES_TIME_FIELDS_EXTRA_BUTTONS, showExtraButtons); // Show precision timings in time fields tooltips prefs->set(FEATURES_PTS_TIMINGS_TOOLTIPS, showPTSToolTips); + // Allow to keyboard edit the current time field + prefs->set(FEATURES_CURRENT_TIME_FIELD_EDITABLE, isCurrentTimeFieldEditable); + // Allow to keyboard edit the total time field + prefs->set(FEATURES_TOTAL_TIME_FIELD_EDITABLE, isTotalTimeFieldEditable); + // Allow to keyboard edit the selection duration field + prefs->set(FEATURES_SELECTION_TIME_FIELD_EDITABLE, isSelectionTimeFieldEditable); + // Allow to keyboard edit the Marker A time field + prefs->set(FEATURES_MARKER_A_TIME_FIELD_EDITABLE, isMarkerATimeFieldEditable); + // Allow to keyboard edit the Marker B time field + prefs->set(FEATURES_MARKER_B_TIME_FIELD_EDITABLE, isMarkerBTimeFieldEditable); + // prefs->set(MESSAGE_LEVEL,msglevel); // Discard changes to output config on video load diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index c9e1e8456..80c4c1f3f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -537,6 +537,33 @@ void MainWindow::setRefreshCap(void) prefs->get(FEATURES_CAP_REFRESH_VALUE,&refreshCapValue); } +/** + \brief Update time fields keyboard editing ability. + + Read preferences to detect which time field accepts direct + keyboard editing. +*/ +void MainWindow::updateTimeFieldsReadOnly(void) +{ + isCurrentTimeFieldEditable = false; + isTotalTimeFieldEditable = false; + isSelectionTimeFieldEditable = false; + isMarkerATimeFieldEditable = false; + isMarkerBTimeFieldEditable = false; + + prefs->get(FEATURES_CURRENT_TIME_FIELD_EDITABLE, &isCurrentTimeFieldEditable); + prefs->get(FEATURES_TOTAL_TIME_FIELD_EDITABLE, &isTotalTimeFieldEditable); + prefs->get(FEATURES_SELECTION_TIME_FIELD_EDITABLE, &isSelectionTimeFieldEditable); + prefs->get(FEATURES_MARKER_A_TIME_FIELD_EDITABLE, &isMarkerATimeFieldEditable); + prefs->get(FEATURES_MARKER_B_TIME_FIELD_EDITABLE, &isMarkerBTimeFieldEditable); + + ui.currentTime->setReadOnly(!isCurrentTimeFieldEditable); + ui.totalTime->setReadOnly(!isTotalTimeFieldEditable); + ui.selectionDuration->setReadOnly(!isSelectionTimeFieldEditable); + ui.selectionMarkerA->setReadOnly(!isMarkerATimeFieldEditable); + ui.selectionMarkerB->setReadOnly(!isMarkerBTimeFieldEditable); +} + /** \brief Update time fields actions buttons. @@ -1587,11 +1614,11 @@ void MainWindow::setMenuItemsEnabledState(void) ENABLE(Recent, ACT_CLEAR_RECENT, haveRecentItems) ENABLE(Recent, ACT_RESTORE_SESSION, A_checkSavedSession(false)) - ui.currentTime->setReadOnly(!vid); - ui.selectionMarkerA->setReadOnly(!vid); - ui.selectionMarkerB->setReadOnly(!vid); - ui.selectionDuration->setReadOnly(!vid); - ui.totalTime->setReadOnly(!vid); + ui.currentTime->setReadOnly(!vid || !isCurrentTimeFieldEditable); + ui.selectionMarkerA->setReadOnly(!vid || !isMarkerATimeFieldEditable); + ui.selectionMarkerB->setReadOnly(!vid || !isMarkerBTimeFieldEditable); + ui.selectionDuration->setReadOnly(!vid || !isSelectionTimeFieldEditable); + ui.totalTime->setReadOnly(!vid || !isTotalTimeFieldEditable); pushButtonTime->setEnabled(vid); pushButtonSaveScript->setEnabled(vid && tinyPy); pushButtonRunScript->setEnabled(engines); @@ -3566,6 +3593,7 @@ void UI_applySettings(void) ((MainWindow *)QuiMainWindows)->updateActionShortcuts(); ((MainWindow *)QuiMainWindows)->volumeWidgetOperational(); ((MainWindow *)QuiMainWindows)->setRefreshCap(); + ((MainWindow *)QuiMainWindows)->updateTimeFieldsReadOnly(); ((MainWindow *)QuiMainWindows)->updateWidgetActionButtons(); ((MainWindow *)QuiMainWindows)->updatePTSToolTips(); } diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h index db22b5554..080cf804d 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.h @@ -152,6 +152,14 @@ class MainWindow : public QMainWindow void updateWidgetActionButtons(void); bool showExtraButtons; + // Allow time fields editing via keyboard + void updateTimeFieldsReadOnly(void); + bool isCurrentTimeFieldEditable; + bool isTotalTimeFieldEditable; + bool isSelectionTimeFieldEditable; + bool isMarkerATimeFieldEditable; + bool isMarkerBTimeFieldEditable; + #ifdef __APPLE__ void fileOpenWrapper(QList list) { openFiles(list); } #endif diff --git a/avidemux_core/ADM_coreUtils/include/prefs2_list.h b/avidemux_core/ADM_coreUtils/include/prefs2_list.h index 99ffb558e..83abc1994 100644 --- a/avidemux_core/ADM_coreUtils/include/prefs2_list.h +++ b/avidemux_core/ADM_coreUtils/include/prefs2_list.h @@ -1,6 +1,11 @@ VERSION_APIVERSION, //uint32_t FEATURES_PTS_TIMINGS_TOOLTIPS, //bool FEATURES_TIME_FIELDS_EXTRA_BUTTONS, //bool +FEATURES_CURRENT_TIME_FIELD_EDITABLE, //bool +FEATURES_TOTAL_TIME_FIELD_EDITABLE, //bool +FEATURES_SELECTION_TIME_FIELD_EDITABLE, //bool +FEATURES_MARKER_A_TIME_FIELD_EDITABLE, //bool +FEATURES_MARKER_B_TIME_FIELD_EDITABLE, //bool FEATURES_SWAP_IF_A_GREATER_THAN_B, //bool FEATURES_SAVEPREFSONEXIT, //bool FEATURES_IGNORESAVEDMARKERS, //bool diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.conf b/avidemux_core/ADM_coreUtils/src/prefs2.conf index 222c95940..2133032bc 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.conf +++ b/avidemux_core/ADM_coreUtils/src/prefs2.conf @@ -19,6 +19,11 @@ version{ features{ bool:pts_timings_tooltips, 1, 0, 1 bool:time_fields_extra_buttons, 1, 0, 1 +bool:current_time_field_editable, 1, 0, 1 +bool:total_time_field_editable, 1, 0, 1 +bool:selection_time_field_editable, 1, 0, 1 +bool:marker_a_time_field_editable, 1, 0, 1 +bool:marker_b_time_field_editable, 1, 0, 1 bool:swap_if_A_greater_than_B, 1, 0, 1 bool:saveprefsonexit, 1, 0, 1 bool:ignoresavedmarkers, 0, 0, 1 diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.h b/avidemux_core/ADM_coreUtils/src/prefs2.h index 1f868aef0..dd52a4eb6 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2.h @@ -8,6 +8,11 @@ struct { struct { bool pts_timings_tooltips; bool time_fields_extra_buttons; + bool current_time_field_editable; + bool total_time_field_editable; + bool selection_time_field_editable; + bool marker_a_time_field_editable; + bool marker_b_time_field_editable; bool swap_if_A_greater_than_B; bool saveprefsonexit; bool ignoresavedmarkers; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp index 099fa0efd..adc254cbc 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp @@ -3,6 +3,11 @@ extern const ADM_paramList my_prefs_struct_param[]={ {"version.apiVersion",offsetof(my_prefs_struct,version.apiVersion),"uint32_t",ADM_param_uint32_t}, {"features.pts_timings_tooltips",offsetof(my_prefs_struct,features.pts_timings_tooltips),"bool",ADM_param_bool}, {"features.time_fields_extra_buttons",offsetof(my_prefs_struct,features.time_fields_extra_buttons),"bool",ADM_param_bool}, + {"features.current_time_field_editable",offsetof(my_prefs_struct,features.current_time_field_editable),"bool",ADM_param_bool}, + {"features.total_time_field_editable",offsetof(my_prefs_struct,features.total_time_field_editable),"bool",ADM_param_bool}, + {"features.selection_time_field_editable",offsetof(my_prefs_struct,features.selection_time_field_editable),"bool",ADM_param_bool}, + {"features.marker_a_time_field_editable",offsetof(my_prefs_struct,features.marker_a_time_field_editable),"bool",ADM_param_bool}, + {"features.marker_b_time_field_editable",offsetof(my_prefs_struct,features.marker_b_time_field_editable),"bool",ADM_param_bool}, {"features.swap_if_A_greater_than_B",offsetof(my_prefs_struct,features.swap_if_A_greater_than_B),"bool",ADM_param_bool}, {"features.saveprefsonexit",offsetof(my_prefs_struct,features.saveprefsonexit),"bool",ADM_param_bool}, {"features.ignoresavedmarkers",offsetof(my_prefs_struct,features.ignoresavedmarkers),"bool",ADM_param_bool}, diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp index 29aca1e1d..adc8bb9aa 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp @@ -11,6 +11,11 @@ json.endNode(); json.addNode("features"); json.addBool("pts_timings_tooltips",key->features.pts_timings_tooltips); json.addBool("time_fields_extra_buttons",key->features.time_fields_extra_buttons); +json.addBool("current_time_field_editable",key->features.current_time_field_editable); +json.addBool("total_time_field_editable",key->features.total_time_field_editable); +json.addBool("selection_time_field_editable",key->features.selection_time_field_editable); +json.addBool("marker_a_time_field_editable",key->features.marker_a_time_field_editable); +json.addBool("marker_b_time_field_editable",key->features.marker_b_time_field_editable); json.addBool("swap_if_A_greater_than_B",key->features.swap_if_A_greater_than_B); json.addBool("saveprefsonexit",key->features.saveprefsonexit); json.addBool("ignoresavedmarkers",key->features.ignoresavedmarkers); diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h index 37b161910..eeb962b80 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h @@ -14,6 +14,11 @@ static optionDesc myOptions[]={ { VERSION_APIVERSION,"version.apiVersion" ,ADM_param_uint32_t ,"1", 0, 999}, { FEATURES_PTS_TIMINGS_TOOLTIPS,"features.pts_timings_tooltips" ,ADM_param_bool ,"1", 0, 1}, { FEATURES_TIME_FIELDS_EXTRA_BUTTONS,"features.time_fields_extra_buttons",ADM_param_bool ,"1", 0, 1}, +{ FEATURES_CURRENT_TIME_FIELD_EDITABLE,"features.current_time_field_editable",ADM_param_bool ,"1", 0, 1}, +{ FEATURES_TOTAL_TIME_FIELD_EDITABLE,"features.total_time_field_editable",ADM_param_bool ,"1", 0, 1}, +{ FEATURES_SELECTION_TIME_FIELD_EDITABLE,"features.selection_time_field_editable",ADM_param_bool ,"1", 0, 1}, +{ FEATURES_MARKER_A_TIME_FIELD_EDITABLE,"features.marker_a_time_field_editable",ADM_param_bool ,"1", 0, 1}, +{ FEATURES_MARKER_B_TIME_FIELD_EDITABLE,"features.marker_b_time_field_editable",ADM_param_bool ,"1", 0, 1}, { FEATURES_SWAP_IF_A_GREATER_THAN_B,"features.swap_if_A_greater_than_B",ADM_param_bool ,"1", 0, 1}, { FEATURES_SAVEPREFSONEXIT,"features.saveprefsonexit" ,ADM_param_bool ,"1", 0, 1}, { FEATURES_IGNORESAVEDMARKERS,"features.ignoresavedmarkers" ,ADM_param_bool ,"0", 0, 1}, From 7fe08b108f984c93a4c30baa9d988b832b54abfe Mon Sep 17 00:00:00 2001 From: Matthew White Date: Sun, 26 Mar 2023 12:11:44 +0000 Subject: [PATCH 85/85] [Q_gui2] Move extra buttons/tooltip preference in time fields section --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index 406571977..14d992a0a 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -299,17 +299,19 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemToggle swapUpDownKeys(&swapUpDown,QT_TRANSLATE_NOOP("adm","Re_verse UP and DOWN arrow keys for navigation")); diaElemToggle swapMouseWheel(&swapWheel,QT_TRANSLATE_NOOP("adm","Reverse mouse _wheel for navigation")); diaElemToggle swapMarkers(&useSwap,QT_TRANSLATE_NOOP("adm","_Swap markers if marker A is set past marker B or marker B before A in video")); - diaElemToggle extraButtons(&showExtraButtons,QT_TRANSLATE_NOOP("adm","Show e_xtra buttons in time fields")); - diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","Show _precision timings in time fields tooltips")); diaElemToggle checkForUpdate(&doAutoUpdate,QT_TRANSLATE_NOOP("adm","_Check for new release")); // Time Fields diaElemFrame frameTimeFields(QT_TRANSLATE_NOOP("adm","Time Fields")); + diaElemToggle extraButtons(&showExtraButtons,QT_TRANSLATE_NOOP("adm","Show e_xtra buttons in time fields")); + diaElemToggle ptsToolTips(&showPTSToolTips,QT_TRANSLATE_NOOP("adm","Show _precision timings in time fields tooltips")); diaElemToggle currentTimeFieldEdits(&isCurrentTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the c_urrent time field")); diaElemToggle totalTimeFieldEdits(&isTotalTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the t_otal time field")); diaElemToggle selectionTimeFieldEdits(&isSelectionTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the selection _duration field")); diaElemToggle markerATimeFieldEdits(&isMarkerATimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the Marker _A time field")); diaElemToggle markerBTimeFieldEdits(&isMarkerBTimeFieldEditable,QT_TRANSLATE_NOOP("adm","Allow to keyboard edit the Marker _B time field")); + frameTimeFields.swallow(&extraButtons); + frameTimeFields.swallow(&ptsToolTips); frameTimeFields.swallow(¤tTimeFieldEdits); frameTimeFields.swallow(&totalTimeFieldEdits); frameTimeFields.swallow(&selectionTimeFieldEdits); @@ -575,7 +577,7 @@ std::string currentSdlDriver=getSdlDriverName(); //-- #define NB_ELEM(x) sizeof(x)/sizeof(diaElem *) /* User Interface */ - diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &extraButtons, &ptsToolTips, &checkForUpdate, &frameTimeFields}; + diaElem *diaUser[]={&menuMessage, &menuLanguage, &resetEncoder, &enableAltShortcuts, &swapUpDownKeys, &swapMouseWheel, &swapMarkers, &checkForUpdate, &frameTimeFields}; diaElemTabs tabUser(QT_TRANSLATE_NOOP("adm","User Interface"),NB_ELEM(diaUser),diaUser); /* Automation */