From 2b6b35d94ace955c3a2d468ee761fa3afe59d5d9 Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Sun, 2 Jan 2011 07:53:30 +0000 Subject: Focussing, shortcuts, transport position snapping. --- muse2/ChangeLog | 5 +++ muse2/muse/app.cpp | 46 +++++++++++++++++++++++----- muse2/muse/app.h | 1 + muse2/muse/arranger/arranger.cpp | 12 +++++--- muse2/muse/arranger/pcanvas.cpp | 29 +++++++++++++++--- muse2/muse/arranger/tlist.cpp | 8 +++-- muse2/muse/main.cpp | 4 +-- muse2/muse/midiedit/cmd.h | 2 ++ muse2/muse/midiedit/dcanvas.cpp | 33 +++++++++++++++++--- muse2/muse/midiedit/dcanvas.h | 2 +- muse2/muse/midiedit/drumedit.cpp | 9 ++++++ muse2/muse/midiedit/pianoroll.cpp | 10 +++++- muse2/muse/midiedit/prcanvas.cpp | 31 ++++++++++++++++--- muse2/muse/shortcuts.cpp | 38 ++++++++++++++++++++++- muse2/muse/shortcuts.h | 36 +++++++++++++++++++++- muse2/muse/song.cpp | 8 ++--- muse2/muse/song.h | 6 ++-- muse2/muse/wave.cpp | 4 +-- muse2/muse/widgets/bigtime.cpp | 1 + muse2/muse/widgets/scrollscale.cpp | 4 +++ muse2/muse/widgets/shortcutcapturedialog.cpp | 16 ++++++++-- muse2/muse/widgets/view.cpp | 2 +- 22 files changed, 259 insertions(+), 48 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index f9f914ea..4619dc91 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,4 +1,9 @@ 02.01.2011: + - Fixed arranger focussing problems again. (Tim) + Scratch setFocusProxy() fix of 31.12. Gave MusE a keyPress handler and pass it on to canvas. + - Fixed transport +/- position snapping. Works globally now too. (Tim) + Moves by, and snaps to, snap setting of either an editor, or globally to arranger by default. + - Added transport position "Shift + +/-" keys, for no snapping. (Tim) - Removed (hopefully) the last bits of Qt3sepport functions from .ui files. (Orcan) 31.12.2010: - Possible fix for arranger focussing problems. (Tim) diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 3758bcb9..f988a4b7 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -3385,6 +3385,16 @@ void MusE::ctrlChanged() } #endif +//--------------------------------------------------------- +// keyPressEvent +//--------------------------------------------------------- + +void MusE::keyPressEvent(QKeyEvent* event) + { + // Pass it on to arranger part canvas. + arranger->getCanvas()->redirKeypress(event); + } + //--------------------------------------------------------- // kbAccel //--------------------------------------------------------- @@ -3419,22 +3429,42 @@ void MusE::kbAccel(int key) song->setPlay(true); } - /* + // p4.0.10 Tim. Normally each editor window handles these, to inc by the editor's raster snap value. + // But users were asking for a global version - "they don't work when I'm in mixer or transport". + // Since no editor claimed the key event, we don't know a specific editor's snap setting, + // so adopt a policy where the arranger is the 'main' raster reference, I guess... else if (key == shortcuts[SHRT_POS_DEC].key) { - int pos = song->pos(); - int frames = pos - AL::sigmap.rasterStep(pos, *_raster); - if (frames < 0) - frames = 0; - Pos p(frames,true); + int spos = song->cpos(); + if(spos > 0) + { + spos -= 1; // Nudge by -1, then snap down with raster1. + spos = AL::sigmap.raster1(spos, song->arrangerRaster()); + } + if(spos < 0) + spos = 0; + Pos p(spos,true); song->setPos(0, p, true, true, true); return; } else if (key == shortcuts[SHRT_POS_INC].key) { - Pos p(pos[0] + AL::sigmap.rasterStep(pos[0], *_raster), true); + int spos = AL::sigmap.raster2(song->cpos() + 1, song->arrangerRaster()); // Nudge by +1, then snap up with raster2. + Pos p(spos,true); song->setPos(0, p, true, true, true); //CDW return; } - */ + else if (key == shortcuts[SHRT_POS_DEC_NOSNAP].key) { + int spos = song->cpos() - AL::sigmap.rasterStep(song->cpos(), song->arrangerRaster()); + if(spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); + return; + } + else if (key == shortcuts[SHRT_POS_INC_NOSNAP].key) { + Pos p(song->cpos() + AL::sigmap.rasterStep(song->cpos(), song->arrangerRaster()), true); + song->setPos(0, p, true, true, true); + return; + } else if (key == shortcuts[SHRT_GOTO_LEFT].key) { if (!song->record()) diff --git a/muse2/muse/app.h b/muse2/muse/app.h index 3a9925aa..a270a599 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -210,6 +210,7 @@ class MusE : public QMainWindow void updateConfiguration(); virtual void focusInEvent(QFocusEvent*); + virtual void keyPressEvent(QKeyEvent*); // p4.0.10 Tim. QSignalMapper *editSignalMapper; QSignalMapper *midiPluginSignalMapper; diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp index 6d722f34..b27a47d1 100644 --- a/muse2/muse/arranger/arranger.cpp +++ b/muse2/muse/arranger/arranger.cpp @@ -138,6 +138,8 @@ Arranger::Arranger(QMainWindow* parent, const char* name) for (int i = 0; i < 6; i++) raster->insertItem(i, tr(rastval[i])); raster->setCurrentIndex(1); + // Set the audio record part snapping. Set to 0 (bar), the same as this combo box intial raster. + song->setArrangerRaster(0); toolbar->addWidget(raster); connect(raster, SIGNAL(activated(int)), SLOT(_setRaster(int))); ///raster->setFocusPolicy(Qt::NoFocus); @@ -266,6 +268,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name) ib->setText(tr("TrackInfo")); ib->setCheckable(true); ib->setChecked(showTrackinfoFlag); + ib->setFocusPolicy(Qt::NoFocus); connect(ib, SIGNAL(toggled(bool)), SLOT(showTrackInfo(bool))); header = new Header(tracklist, "header"); @@ -337,6 +340,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name) int offset = AL::sigmap.ticksMeasure(0); hscroll = new ScrollScale(-1000, -10, xscale, song->len(), Qt::Horizontal, editor, -offset); + hscroll->setFocusPolicy(Qt::NoFocus); ib->setFixedHeight(hscroll->sizeHint().height()); // Changed p3.3.43 Too small steps for me... @@ -370,7 +374,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name) canvas->setCanvasTools(arrangerTools); canvas->setOrigin(-offset, 0); canvas->setFocus(); - parent->setFocusProxy(canvas); // Tim. + //parent->setFocusProxy(canvas); // Tim. connect(canvas, SIGNAL(setUsedTool(int)), this, SIGNAL(setUsedTool(int))); connect(canvas, SIGNAL(trackChanged(Track*)), list, SLOT(selectTrack(Track*))); @@ -430,8 +434,8 @@ Arranger::Arranger(QMainWindow* parent, const char* name) setTabOrder(trackInfo, infoScroll); setTabOrder(infoScroll, list); setTabOrder(list, canvas); - setTabOrder(canvas, ib); - setTabOrder(ib, hscroll); + //setTabOrder(canvas, ib); + //setTabOrder(ib, hscroll); } //--------------------------------------------------------- @@ -698,7 +702,7 @@ void Arranger::_setRaster(int index) }; _raster = rasterTable[index]; // Set the audio record part snapping. - song->setRecRaster(_raster); + song->setArrangerRaster(_raster); canvas->redraw(); } diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index ae0392d8..b57f524f 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -1103,16 +1103,35 @@ void PartCanvas::keyPress(QKeyEvent* event) return; } else if (key == shortcuts[SHRT_POS_DEC].key) { - int frames = pos[0] - AL::sigmap.rasterStep(pos[0], *_raster); - if (frames < 0) - frames = 0; - Pos p(frames,true); + int spos = pos[0]; + if(spos > 0) + { + spos -= 1; // Nudge by -1, then snap down with raster1. + spos = AL::sigmap.raster1(spos, *_raster); + } + if(spos < 0) + spos = 0; + Pos p(spos,true); song->setPos(0, p, true, true, true); return; } else if (key == shortcuts[SHRT_POS_INC].key) { + int spos = AL::sigmap.raster2(pos[0] + 1, *_raster); // Nudge by +1, then snap up with raster2. + Pos p(spos,true); + song->setPos(0, p, true, true, true); + return; + } + else if (key == shortcuts[SHRT_POS_DEC_NOSNAP].key) { + int spos = pos[0] - AL::sigmap.rasterStep(pos[0], *_raster); + if(spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); + return; + } + else if (key == shortcuts[SHRT_POS_INC_NOSNAP].key) { Pos p(pos[0] + AL::sigmap.rasterStep(pos[0], *_raster), true); - song->setPos(0, p, true, true, true); //CDW + song->setPos(0, p, true, true, true); return; } else if (key == shortcuts[SHRT_TOOL_POINTER].key) { diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index d419866a..4c104e0b 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -679,7 +679,11 @@ void TList::keyPressEvent(QKeyEvent* e) } } emit keyPressExt(e); //redirect keypress events to main app - e->ignore(); + + // p4.0.10 Removed by Tim. keyPressExt are sent to part canvas, where they are + // ignored *only* if necessary. + //e->ignore(); + /* int key = e->key(); switch (key) { @@ -1402,7 +1406,7 @@ void TList::setYPos(int y) // resizeEvent //--------------------------------------------------------- -void TList::resizeEvent(QResizeEvent* ev) +void TList::resizeEvent(QResizeEvent* /*ev*/) { } diff --git a/muse2/muse/main.cpp b/muse2/muse/main.cpp index fccf801d..936a8aa3 100644 --- a/muse2/muse/main.cpp +++ b/muse2/muse/main.cpp @@ -107,10 +107,10 @@ class MuseApplication : public QApplication { bool notify(QObject* receiver, QEvent* event) { //if (event->type() == QEvent::KeyPress) - // printf("notify key press before app::notify accepted:%d\n", event->isAccepted()); + // printf("notify key press before app::notify accepted:%d\n", event->isAccepted()); // REMOVE Tim bool flag = QApplication::notify(receiver, event); if (event->type() == QEvent::KeyPress) { - //printf("notify key press after app::notify accepted:%d\n", event->isAccepted()); + //printf("notify key press after app::notify accepted:%d\n", event->isAccepted()); // REMOVE Tim QKeyEvent* ke = (QKeyEvent*)event; ///globalKeyState = ke->stateAfter(); globalKeyState = ke->modifiers(); diff --git a/muse2/muse/midiedit/cmd.h b/muse2/muse/midiedit/cmd.h index abbcdcf3..8339b7ae 100644 --- a/muse2/muse/midiedit/cmd.h +++ b/muse2/muse/midiedit/cmd.h @@ -21,6 +21,8 @@ #define CMD_7 10 #define CMD_T 11 #define CMD_period 12 +#define CMD_LEFT_NOSNAP 13 +#define CMD_RIGHT_NOSNAP 14 #endif diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp index a8c133e4..34622296 100644 --- a/muse2/muse/midiedit/dcanvas.cpp +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -748,17 +748,40 @@ void DrumCanvas::cmd(int cmd) break; case CMD_LEFT: { - int frames = pos[0] - editor->rasterStep(pos[0]); - if (frames < 0) - frames = 0; - Pos p(frames,true); + int spos = pos[0]; + if(spos > 0) + { + spos -= 1; // Nudge by -1, then snap down with raster1. + spos = AL::sigmap.raster1(spos, editor->rasterStep(pos[0])); + } + if(spos < 0) + spos = 0; + Pos p(spos,true); song->setPos(0, p, true, true, true); } break; case CMD_RIGHT: + { + int spos = AL::sigmap.raster2(pos[0] + 1, editor->rasterStep(pos[0])); // Nudge by +1, then snap up with raster2. + Pos p(spos,true); + song->setPos(0, p, true, true, true); + } + break; + case CMD_LEFT_NOSNAP: + { + int spos = pos[0] - editor->rasterStep(pos[0]); + if (spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); //CDW + } + break; + case CMD_RIGHT_NOSNAP: { Pos p(pos[0] + editor->rasterStep(pos[0]), true); - song->setPos(0, p, true, true, true); + //if (p > part->tick()) + // p = part->tick(); + song->setPos(0, p, true, true, true); //CDW } break; case CMD_MODIFY_VELOCITY: diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h index 996608bd..0b81df68 100644 --- a/muse2/muse/midiedit/dcanvas.h +++ b/muse2/muse/midiedit/dcanvas.h @@ -79,7 +79,7 @@ class DrumCanvas : public EventCanvas { CMD_CUT, CMD_COPY, CMD_PASTE, CMD_SAVE, CMD_LOAD, CMD_RESET, CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PREV_PART, CMD_SELECT_NEXT_PART, - CMD_DEL, CMD_FIXED_LEN, CMD_RIGHT, CMD_LEFT, CMD_MODIFY_VELOCITY + CMD_DEL, CMD_FIXED_LEN, CMD_RIGHT, CMD_LEFT, CMD_RIGHT_NOSNAP, CMD_LEFT_NOSNAP, CMD_MODIFY_VELOCITY }; DrumCanvas(MidiEditor*, QWidget*, int, int, const char* name = 0); diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index d4940c86..80eb1b6b 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -1066,6 +1066,15 @@ void DrumEdit::keyPressEvent(QKeyEvent* event) return; } + else if (key == shortcuts[SHRT_POS_INC_NOSNAP].key) { + dc->cmd(DrumCanvas::CMD_RIGHT_NOSNAP); + return; + } + else if (key == shortcuts[SHRT_POS_DEC_NOSNAP].key) { + dc->cmd(DrumCanvas::CMD_LEFT_NOSNAP); + return; + } + else if (key == shortcuts[SHRT_TOOL_POINTER].key) { tools2->set(PointerTool); return; diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp index 56507466..c9c5632d 100644 --- a/muse2/muse/midiedit/pianoroll.cpp +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -410,7 +410,7 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i canvas = new PianoCanvas(this, split1, xscale, yscale); vscroll = new ScrollScale(-3, 7, yscale, KH * 75, Qt::Vertical, split1); - setFocusProxy(canvas); // Tim. + //setFocusProxy(canvas); // Tim. int offset = -(config.division/4); canvas->setOrigin(offset, 0); @@ -1081,6 +1081,14 @@ void PianoRoll::keyPressEvent(QKeyEvent* event) pc->pianoCmd(CMD_LEFT); return; } + else if (key == shortcuts[SHRT_POS_INC_NOSNAP].key) { + pc->pianoCmd(CMD_RIGHT_NOSNAP); + return; + } + else if (key == shortcuts[SHRT_POS_DEC_NOSNAP].key) { + pc->pianoCmd(CMD_LEFT_NOSNAP); + return; + } else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) { pc->pianoCmd(CMD_INSERT); return; diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 9489c4ab..84e19e86 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -658,14 +658,35 @@ void PianoCanvas::pianoCmd(int cmd) switch(cmd) { case CMD_LEFT: { - int frames = pos[0] - editor->rasterStep(pos[0]); - if (frames < 0) - frames = 0; - Pos p(frames,true); - song->setPos(0, p, true, true, true); //CDW + int spos = pos[0]; + if(spos > 0) + { + spos -= 1; // Nudge by -1, then snap down with raster1. + spos = AL::sigmap.raster1(spos, editor->rasterStep(pos[0])); + } + if(spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); } break; case CMD_RIGHT: + { + int spos = AL::sigmap.raster2(pos[0] + 1, editor->rasterStep(pos[0])); // Nudge by +1, then snap up with raster2. + Pos p(spos,true); + song->setPos(0, p, true, true, true); + } + break; + case CMD_LEFT_NOSNAP: + { + int spos = pos[0] - editor->rasterStep(pos[0]); + if (spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); //CDW + } + break; + case CMD_RIGHT_NOSNAP: { Pos p(pos[0] + editor->rasterStep(pos[0]), true); //if (p > part->tick()) diff --git a/muse2/muse/shortcuts.cpp b/muse2/muse/shortcuts.cpp index 3a1f5eb9..a02b9ea4 100644 --- a/muse2/muse/shortcuts.cpp +++ b/muse2/muse/shortcuts.cpp @@ -214,8 +214,44 @@ void initShortCuts() defShrt(SHRT_TOOL_MUTE, 0, "Tool: Mute", ARRANG_SHRT, "mute_tool"); //Increase/decrease current position, is going to be in arranger & drumeditor as well + // p4.0.10 Editors and arranger handle these by themselves, otherwise global handler will now use them, too. defShrt(SHRT_POS_INC, Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase"); - defShrt(SHRT_POS_DEC, Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease"); + defShrt(SHRT_POS_DEC, Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease"); + + defShrt(SHRT_POS_INC_NOSNAP, Qt::SHIFT + Qt::Key_Plus, "Transport: Increase current position, no snap", GLOBAL_SHRT, "curpos_increase_nosnap"); + defShrt(SHRT_POS_DEC_NOSNAP, Qt::SHIFT + Qt::Key_Minus, "Transport: Increase current position, no snap", GLOBAL_SHRT, "curpos_decrease_nosnap"); + + /* + defShrt(SHRT_POS_INC_BAR, Qt::CTRL + Qt::ALT + Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_bar"); + defShrt(SHRT_POS_DEC_BAR, Qt::CTRL + Qt::ALT + Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_bar"); + defShrt(SHRT_POS_INC_BAR_NOSNAP, Qt::SHIFT + Qt::CTRL + Qt::ALT + Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_bar_nosnap"); + defShrt(SHRT_POS_DEC_BAR_NOSNAP, Qt::SHIFT + Qt::CTRL + Qt::ALT + Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_bar_nosnap"); + + defShrt(SHRT_POS_INC_BEAT, Qt::ALT + Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_beat"); + defShrt(SHRT_POS_DEC_BEAT, Qt::ALT + Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_beat"); + defShrt(SHRT_POS_INC_BEAT_NOSNAP, Qt::SHIFT + Qt::ALT + Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_beat_nosnap"); + defShrt(SHRT_POS_DEC_BEAT_NOSNAP, Qt::SHIFT + Qt::ALT + Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_beat_nosnap"); + + defShrt(SHRT_POS_INC_TICK, Qt::CTRL + Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_tick"); + defShrt(SHRT_POS_DEC_TICK, Qt::CTRL + Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_tick"); + defShrt(SHRT_POS_INC_TICK_NOSNAP, Qt::SHIFT + Qt::CTRL + Qt::Key_Plus, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_tick"); + defShrt(SHRT_POS_DEC_TICK_NOSNAP, Qt::SHIFT + Qt::CTRL + Qt::Key_Minus, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_tick"); + + defShrt(SHRT_POS_INC_FRAME, Qt::Key_N, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_frame"); + defShrt(SHRT_POS_DEC_FRAME, Qt::Key_B, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_frame"); + + defShrt(SHRT_POS_INC_SECOND, Qt::CTRL + Qt::Key_N, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_second"); + defShrt(SHRT_POS_DEC_SECOND, Qt::CTRL + Qt::Key_B, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_second"); + defShrt(SHRT_POS_INC_SECOND_NOSNAP, Qt::SHIFT + Qt::CTRL + Qt::Key_N, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_second_nosnap"); + defShrt(SHRT_POS_DEC_SECOND_NOSNAP, Qt::SHIFT + Qt::CTRL + Qt::Key_B, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_second_nosnap"); + + defShrt(SHRT_POS_INC_MINUTE, Qt::ALT + Qt::Key_N, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_minute"); + defShrt(SHRT_POS_DEC_MINUTE, Qt::ALT + Qt::Key_B, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_minute"); + defShrt(SHRT_POS_INC_MINUTE_NOSNAP, Qt::SHIFT + Qt::ALT + Qt::Key_N, "Transport: Increase current position", GLOBAL_SHRT, "curpos_increase_minute_nosnap"); + defShrt(SHRT_POS_DEC_MINUTE_NOSNAP, Qt::SHIFT + Qt::ALT + Qt::Key_B, "Transport: Decrease current position", GLOBAL_SHRT, "curpos_decrease_minute_nosnap"); + */ + + defShrt(SHRT_SET_QUANT_1, Qt::Key_1, "Quantize: Set quantize to 1/1 note", PROLL_SHRT, "midi_quant_1"); defShrt(SHRT_SET_QUANT_2, Qt::Key_2, "Quantize: Set quantize to 1/2 note", PROLL_SHRT, "midi_quant_2"); defShrt(SHRT_SET_QUANT_3, Qt::Key_3, "Quantize: Set quantize to 1/4 note", PROLL_SHRT, "midi_quant_3"); diff --git a/muse2/muse/shortcuts.h b/muse2/muse/shortcuts.h index d39532de..7cd47bd5 100644 --- a/muse2/muse/shortcuts.h +++ b/muse2/muse/shortcuts.h @@ -175,7 +175,7 @@ enum { SHRT_SEL_TRACK_BELOW, SHRT_SEL_TRACK_ABOVE, - //To be in arranger, pianoroll & drumeditor + //To be in arranger, pianoroll & drumeditor. p4.0.10 now globally handled, too. SHRT_SELECT_ALL, //Ctrl+A SHRT_SELECT_NONE, //Ctrl+Shift+A SHRT_SELECT_INVERT, //Ctrl+I @@ -191,6 +191,40 @@ enum { SHRT_DEC_PITCH, SHRT_INC_POS, SHRT_DEC_POS, + + SHRT_POS_INC_NOSNAP, + SHRT_POS_DEC_NOSNAP, + + /* + SHRT_POS_INC_BAR, + SHRT_POS_DEC_BAR, + SHRT_POS_INC_BAR_NOSNAP, + SHRT_POS_DEC_BAR_NOSNAP, + + SHRT_POS_INC_BEAT, + SHRT_POS_DEC_BEAT, + SHRT_POS_INC_BEAT_NOSNAP, + SHRT_POS_DEC_BEAT_NOSNAP, + + SHRT_POS_INC_TICK, + SHRT_POS_DEC_TICK, + SHRT_POS_INC_TICK_NOSNAP, + SHRT_POS_DEC_TICK_NOSNAP, + + SHRT_POS_INC_MINUTE, + SHRT_POS_DEC_MINUTE, + SHRT_POS_INC_MINUTE_NOSNAP, + SHRT_POS_DEC_MINUTE_NOSNAP, + + SHRT_POS_INC_SECOND, + SHRT_POS_DEC_SECOND, + SHRT_POS_INC_SECOND_NOSNAP, + SHRT_POS_DEC_SECOND_NOSNAP, + + SHRT_POS_INC_FRAME, + SHRT_POS_DEC_FRAME, + */ + SHRT_LOCATORS_TO_SELECTION, //Alt+P, currently in arranger & pianoroll SHRT_INSERT_AT_LOCATION, //Shift+CrsrRight SHRT_INCREASE_LEN, diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp index 4feda40f..3ac818e5 100644 --- a/muse2/muse/song.cpp +++ b/muse2/muse/song.cpp @@ -76,7 +76,7 @@ Song::Song(const char* name) :QObject(0) { setObjectName(name); - _recRaster = 0; // Set to measure, the same as Arranger intial value. Arranger snap combo will set this. + _arrangerRaster = 0; // Set to measure, the same as Arranger intial value. Arranger snap combo will set this. noteFifoSize = 0; noteFifoWindex = 0; noteFifoRindex = 0; @@ -798,9 +798,9 @@ void Song::cmdAddRecordedEvents(MidiTrack* mt, EventList* events, unsigned start //startTick = roundDownBar(startTick); //endTick = roundUpBar(endTick); // Round the start down using the Arranger part snap raster value. - startTick = AL::sigmap.raster1(startTick, recRaster()); + startTick = AL::sigmap.raster1(startTick, arrangerRaster()); // Round the end up using the Arranger part snap raster value. - endTick = AL::sigmap.raster2(endTick, recRaster()); + endTick = AL::sigmap.raster2(endTick, arrangerRaster()); part->setTick(startTick); part->setLenTick(endTick - startTick); @@ -835,7 +835,7 @@ void Song::cmdAddRecordedEvents(MidiTrack* mt, EventList* events, unsigned start // Added by Tim. p3.3.8 // Round the end up (again) using the Arranger part snap raster value. - endTick = AL::sigmap.raster2(endTick, recRaster()); + endTick = AL::sigmap.raster2(endTick, arrangerRaster()); // Remove all of the part's port controller values. Indicate do not do clone parts. removePortCtrlEvents(part, false); diff --git a/muse2/muse/song.h b/muse2/muse/song.h index 632d60c4..90dc3205 100644 --- a/muse2/muse/song.h +++ b/muse2/muse/song.h @@ -131,7 +131,7 @@ class Song : public QObject { int _cycleMode; bool _click; bool _quantize; - int _recRaster; // Used for audio rec new part snapping. Set by Arranger snap combo box. + int _arrangerRaster; // Used for audio rec new part snapping. Set by Arranger snap combo box. unsigned _len; // song len in ticks FollowMode _follow; int _globalPitchShift; @@ -263,8 +263,8 @@ class Song : public QObject { void cmdChangePart(Part* oldPart, Part* newPart, bool doCtrls, bool doClones); void cmdRemovePart(Part* part); void cmdAddPart(Part* part); - int recRaster() { return _recRaster; } // Used by Song::cmdAddRecordedWave to snap new wave parts - void setRecRaster(int r) { _recRaster = r; } // Used by Arranger snap combo box + int arrangerRaster() { return _arrangerRaster; } // Used by Song::cmdAddRecordedWave to snap new wave parts + void setArrangerRaster(int r) { _arrangerRaster = r; } // Used by Arranger snap combo box //----------------------------------------- // track manipulations diff --git a/muse2/muse/wave.cpp b/muse2/muse/wave.cpp index b3f7b091..b519ca70 100644 --- a/muse2/muse/wave.cpp +++ b/muse2/muse/wave.cpp @@ -1078,9 +1078,9 @@ void Song::cmdAddRecordedWave(WaveTrack* track, Pos s, Pos e) return; } // Round the start down using the Arranger part snap raster value. - unsigned startTick = AL::sigmap.raster1(s.tick(), song->recRaster()); + unsigned startTick = AL::sigmap.raster1(s.tick(), song->arrangerRaster()); // Round the end up using the Arranger part snap raster value. - unsigned endTick = AL::sigmap.raster2(e.tick(), song->recRaster()); + unsigned endTick = AL::sigmap.raster2(e.tick(), song->arrangerRaster()); f->update(); diff --git a/muse2/muse/widgets/bigtime.cpp b/muse2/muse/widgets/bigtime.cpp index ba9defa9..479f4103 100644 --- a/muse2/muse/widgets/bigtime.cpp +++ b/muse2/muse/widgets/bigtime.cpp @@ -34,6 +34,7 @@ BigTime::BigTime(QWidget* parent) fmtButton->resize(18,18); fmtButton->setChecked(true); fmtButton->setToolTip(tr("format display")); + fmtButton->setFocusPolicy(Qt::NoFocus); barLabel = new QLabel(dwin); beatLabel = new QLabel(dwin); tickLabel = new QLabel(dwin); diff --git a/muse2/muse/widgets/scrollscale.cpp b/muse2/muse/widgets/scrollscale.cpp index f279e6ce..de383deb 100644 --- a/muse2/muse/widgets/scrollscale.cpp +++ b/muse2/muse/widgets/scrollscale.cpp @@ -241,12 +241,16 @@ ScrollScale::ScrollScale ( int s1, int s2, int cs, int max_, Qt::Orientation o, } scale = new QSlider (o); + // Added by Tim. For some reason focus was on. + // It messes up tabbing, and really should have a shortcut instead. + scale->setFocusPolicy(Qt::NoFocus); scale->setMinimum(0); scale->setMaximum(1024); scale->setPageStep(1); scale->setValue(cur); scroll = new QScrollBar ( o ); + //scroll->setFocusPolicy(Qt::NoFocus); // Tim. setScale ( cur ); if ( o == Qt::Horizontal ) diff --git a/muse2/muse/widgets/shortcutcapturedialog.cpp b/muse2/muse/widgets/shortcutcapturedialog.cpp index 5a76d1d9..0b2b66d2 100644 --- a/muse2/muse/widgets/shortcutcapturedialog.cpp +++ b/muse2/muse/widgets/shortcutcapturedialog.cpp @@ -15,6 +15,7 @@ #include #include #include +#include ShortcutCaptureDialog::ShortcutCaptureDialog(QWidget* parent, int index) : QDialog(parent) @@ -40,11 +41,19 @@ void ShortcutCaptureDialog::keyPressEvent(QKeyEvent* e) bool shift, alt, ctrl, conflict = false, realkey = false; QString msgString = ""; int temp_key; - shift = ((QInputEvent*)e)->modifiers() & Qt::ShiftModifier; - ctrl = ((QInputEvent*)e)->modifiers() & Qt::ControlModifier; - alt = ((QInputEvent*)e)->modifiers() & Qt::AltModifier; + Qt::KeyboardModifiers mods = ((QInputEvent*)e)->modifiers(); + shift = mods & Qt::ShiftModifier; + ctrl = mods & Qt::ControlModifier; + alt = mods & Qt::AltModifier; //printf("Key total: %d, alt: %d, ctrl: %d shift: %d\n",e->key(), alt, ctrl, shift); temp_key = e->key(); + + QChar keychar(temp_key); + bool ispunct = keychar.isPunct(); + bool issymbol = keychar.isSymbol(); + //printf("Key:%x, alt:%d, ctrl:%d shift:%d ispunct:%d issymbol:%d text:%s\n", + // e->key(), alt, ctrl, shift, ispunct, issymbol, e->text().toLatin1().constData()); // REMOVE Tim. + temp_key += (shift ? (int)Qt::SHIFT : 0); // (int) Tim temp_key += (ctrl ? (int)Qt::CTRL : 0); // temp_key += (alt ? (int)Qt::ALT : 0); // @@ -58,6 +67,7 @@ void ShortcutCaptureDialog::keyPressEvent(QKeyEvent* e) key = temp_key; realkey = true; QKeySequence q = QKeySequence(key); + //QKeySequence q = QKeySequence(k, mods); QString keyString = q; if (keyString != QString::null) nshrtLabel->setText(q); diff --git a/muse2/muse/widgets/view.cpp b/muse2/muse/widgets/view.cpp index 5bf63dc8..31cc212e 100644 --- a/muse2/muse/widgets/view.cpp +++ b/muse2/muse/widgets/view.cpp @@ -235,7 +235,7 @@ void View::paintEvent(QPaintEvent* ev) //bitBlt(this, ev->rect().topLeft(), &pm, ev->rect(), CopyROP, true); QPainter p(this); - p.setCompositionMode(QPainter::CompositionMode_Source); + //p.setCompositionMode(QPainter::CompositionMode_Source); p.drawPixmap(ev->rect().topLeft(), pm, ev->rect()); #else -- cgit v1.2.3