added setting for focus on hover for #161

This commit is contained in:
itsmattkc
2018-12-17 21:53:42 +11:00
parent 302310ab7b
commit 467d271d5c
8 changed files with 90 additions and 30 deletions
+6 -1
View File
@@ -31,7 +31,8 @@ Config::Config()
drop_on_media_to_replace(true),
autoscroll(AUTOSCROLL_PAGE_SCROLL),
audio_rate(48000),
fast_seeking(false)
fast_seeking(false),
hover_focus(false)
{}
void Config::load(QString path) {
@@ -111,6 +112,9 @@ void Config::load(QString path) {
} else if (stream.name() == "FastSeeking") {
stream.readNext();
fast_seeking = (stream.text() == "1");
} else if (stream.name() == "HoverFocus") {
stream.readNext();
hover_focus = (stream.text() == "1");
}
}
}
@@ -158,6 +162,7 @@ void Config::save(QString path) {
stream.writeTextElement("Autoscroll", QString::number(autoscroll));
stream.writeTextElement("AudioRate", QString::number(audio_rate));
stream.writeTextElement("FastSeeking", QString::number(fast_seeking));
stream.writeTextElement("HoverFocus", QString::number(hover_focus));
stream.writeEndElement(); // configuration
stream.writeEndDocument(); // doc
+1
View File
@@ -43,6 +43,7 @@ struct Config {
int autoscroll;
int audio_rate;
bool fast_seeking;
bool hover_focus;
void load(QString path);
void save(QString path);
+26 -19
View File
@@ -311,34 +311,33 @@ void MainWindow::on_actionSequence_triggered()
nsd.exec();
}
void MainWindow::on_actionZoom_In_triggered()
{
if (panel_timeline->focused()) {
void MainWindow::on_actionZoom_In_triggered() {
QDockWidget* focused_panel = get_focused_panel();
if (focused_panel == panel_timeline) {
panel_timeline->set_zoom(true);
} else if (panel_effect_controls->keyframe_focus()) {
} else if (focused_panel == panel_effect_controls) {
panel_effect_controls->set_zoom(true);
} else if (panel_footage_viewer->is_focused()) {
} else if (focused_panel == panel_footage_viewer) {
panel_footage_viewer->set_zoom(true);
} else if (panel_sequence_viewer->is_focused()) {
} else if (focused_panel == panel_sequence_viewer) {
panel_sequence_viewer->set_zoom(true);
}
}
void MainWindow::on_actionZoom_out_triggered()
{
if (panel_timeline->focused()) {
void MainWindow::on_actionZoom_out_triggered() {
QDockWidget* focused_panel = get_focused_panel();
if (focused_panel == panel_timeline) {
panel_timeline->set_zoom(false);
} else if (panel_effect_controls->keyframe_focus()) {
} else if (focused_panel == panel_effect_controls) {
panel_effect_controls->set_zoom(false);
} else if (panel_footage_viewer->is_focused()) {
} else if (focused_panel == panel_footage_viewer) {
panel_footage_viewer->set_zoom(false);
} else if (panel_sequence_viewer->is_focused()) {
} else if (focused_panel == panel_sequence_viewer) {
panel_sequence_viewer->set_zoom(false);
}
}
void MainWindow::on_actionExport_triggered()
{
void MainWindow::on_actionExport_triggered() {
if (sequence == NULL) {
QMessageBox::information(this, "No active sequence", "Please open the sequence you wish to export.", QMessageBox::Ok);
} else {
@@ -400,9 +399,10 @@ void MainWindow::openSpeedDialog() {
void MainWindow::cut() {
if (sequence != NULL) {
if (panel_timeline->focused()) {
QDockWidget* focused_panel = get_focused_panel();
if (panel_timeline == focused_panel) {
panel_timeline->copy(true);
} else if (panel_effect_controls->is_focused()) {
} else if (panel_effect_controls == focused_panel) {
panel_effect_controls->copy(true);
}
}
@@ -410,16 +410,18 @@ void MainWindow::cut() {
void MainWindow::copy() {
if (sequence != NULL) {
if (panel_timeline->focused()) {
QDockWidget* focused_panel = get_focused_panel();
if (panel_timeline == focused_panel) {
panel_timeline->copy(false);
} else if (panel_effect_controls->is_focused()) {
} else if (panel_effect_controls == focused_panel) {
panel_effect_controls->copy(false);
}
}
}
void MainWindow::paste() {
if ((panel_timeline->focused() || panel_effect_controls->is_focused()) && sequence != NULL) {
QDockWidget* focused_panel = get_focused_panel();
if ((panel_timeline == focused_panel || panel_effect_controls == focused_panel) && sequence != NULL) {
panel_timeline->paste(false);
}
}
@@ -708,6 +710,7 @@ void MainWindow::toolMenu_About_To_Be_Shown() {
ui->actionEnable_Seek_to_Import->setChecked(config.enable_seek_to_import);
ui->actionAudio_Scrubbing->setChecked(config.enable_audio_scrubbing);
ui->actionEnable_Drop_on_Media_to_Replace->setChecked(config.drop_on_media_to_replace);
ui->actionEnable_Hover_Focus->setChecked(config.hover_focus);
ui->actionNo_autoscroll->setChecked(config.autoscroll == AUTOSCROLL_NO_SCROLL);
ui->actionPage_Autoscroll->setChecked(config.autoscroll == AUTOSCROLL_PAGE_SCROLL);
@@ -1039,3 +1042,7 @@ void MainWindow::on_actionMilliseconds_triggered() {
config.timecode_view = TIMECODE_MILLISECONDS;
update_ui(false);
}
void MainWindow::on_actionEnable_Hover_Focus_triggered() {
config.hover_focus = !config.hover_focus;
}
+2
View File
@@ -211,6 +211,8 @@ private slots:
void on_actionMilliseconds_triggered();
void on_actionEnable_Hover_Focus_triggered();
private:
Ui::MainWindow *ui;
void setup_layout(bool reset);
+9
View File
@@ -187,6 +187,7 @@
<addaction name="actionEnable_Seek_to_Import"/>
<addaction name="actionAudio_Scrubbing"/>
<addaction name="actionEnable_Drop_on_Media_to_Replace"/>
<addaction name="actionEnable_Hover_Focus"/>
<addaction name="separator"/>
<addaction name="actionNo_autoscroll"/>
<addaction name="actionPage_Autoscroll"/>
@@ -925,6 +926,14 @@
<string>Milliseconds</string>
</property>
</action>
<action name="actionEnable_Hover_Focus">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Enable Hover Focus for Zooming</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
+32
View File
@@ -7,6 +7,7 @@
#include "project/sequence.h"
#include "project/clip.h"
#include "project/transition.h"
#include "io/config.h"
#include "debug.h"
Project* panel_project = 0;
@@ -105,3 +106,34 @@ void update_ui(bool modified) {
panel_timeline->repaint_timeline();
panel_sequence_viewer->update_viewer();
}
QDockWidget *get_focused_panel() {
QDockWidget* w = NULL;
if (config.hover_focus) {
if (panel_project->rect().contains(panel_project->mapFromGlobal(QCursor::pos()))) {
w = panel_project;
} else if (panel_effect_controls->rect().contains(panel_effect_controls->mapFromGlobal(QCursor::pos()))) {
w = panel_effect_controls;
} else if (panel_sequence_viewer->rect().contains(panel_sequence_viewer->mapFromGlobal(QCursor::pos()))) {
w = panel_sequence_viewer;
} else if (panel_footage_viewer->rect().contains(panel_footage_viewer->mapFromGlobal(QCursor::pos()))) {
w = panel_footage_viewer;
} else if (panel_timeline->rect().contains(panel_timeline->mapFromGlobal(QCursor::pos()))) {
w = panel_timeline;
}
}
if (w == NULL) {
if (panel_project->is_focused()) {
w = panel_project;
} else if (panel_effect_controls->keyframe_focus()) {
w = panel_effect_controls;
} else if (panel_sequence_viewer->is_focused()) {
w = panel_sequence_viewer;
} else if (panel_footage_viewer->is_focused()) {
w = panel_footage_viewer;
} else if (panel_timeline->focused()) {
w = panel_timeline;
}
}
return w;
}
+2
View File
@@ -5,6 +5,7 @@ class Project;
class EffectControls;
class Viewer;
class Timeline;
class QDockWidget;
extern Project* panel_project;
extern EffectControls* panel_effect_controls;
@@ -13,5 +14,6 @@ extern Viewer* panel_footage_viewer;
extern Timeline* panel_timeline;
void update_ui(bool modified);
QDockWidget* get_focused_panel();
#endif // PANELS_H
+12 -10
View File
@@ -416,17 +416,19 @@ void Viewer::set_out_point() {
}
void Viewer::set_zoom(bool in) {
if (in) {
ui->headers->update_zoom(ui->headers->get_zoom()*2);
} else {
ui->headers->update_zoom(qMax(minimum_zoom, ui->headers->get_zoom()*0.5));
if (seq != NULL) {
if (in) {
ui->headers->update_zoom(ui->headers->get_zoom()*2);
} else {
ui->headers->update_zoom(qMax(minimum_zoom, ui->headers->get_zoom()*0.5));
}
if (ui->openGLWidget->waveform) {
ui->openGLWidget->waveform_zoom = ui->headers->get_zoom();
ui->openGLWidget->update();
}
ui->headers->set_scrollbar_max(ui->horizontalScrollBar, seq->getEndFrame(), ui->headers->width());
center_scroll_to_playhead(ui->horizontalScrollBar, ui->headers->get_zoom(), seq->playhead);
}
if (ui->openGLWidget->waveform) {
ui->openGLWidget->waveform_zoom = ui->headers->get_zoom();
ui->openGLWidget->update();
}
ui->headers->set_scrollbar_max(ui->horizontalScrollBar, seq->getEndFrame(), ui->headers->width());
center_scroll_to_playhead(ui->horizontalScrollBar, ui->headers->get_zoom(), seq->playhead);
}
void Viewer::set_media(Media* m) {