From: <sag...@us...> - 2009-11-27 19:18:03
|
Revision: 424 http://modplug.svn.sourceforge.net/modplug/?rev=424&view=rev Author: saga-games Date: 2009-11-27 19:17:19 +0000 (Fri, 27 Nov 2009) Log Message: ----------- [Imp] Orderlist: Using the keyboard manager for shortcuts. The selection code in the keyboard manager always was and still IS very dirty and all those hacks should be rewritten at some point. [Fix] Treeview: Sequence context menu was slightly buggy. [Mod] Default keymaps have been updated to contain the orderlist shortcuts. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_pat.cpp trunk/OpenMPT/mptrack/Ctrl_pat.h trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2009-11-27 19:17:19 UTC (rev 424) @@ -2350,6 +2350,66 @@ commands[kcEditPasteFlood].isHidden = false; commands[kcEditPasteFlood].isDummy = false; + commands[kcOrderlistNavigateLeft].UID = 1794; + commands[kcOrderlistNavigateLeft].Message = "Previous Order"; + commands[kcOrderlistNavigateLeft].isHidden = false; + commands[kcOrderlistNavigateLeft].isDummy = false; + + commands[kcOrderlistNavigateRight].UID = 1795; + commands[kcOrderlistNavigateRight].Message = "Next Order"; + commands[kcOrderlistNavigateRight].isHidden = false; + commands[kcOrderlistNavigateRight].isDummy = false; + + commands[kcOrderlistNavigateFirst].UID = 1796; + commands[kcOrderlistNavigateFirst].Message = "First Order"; + commands[kcOrderlistNavigateFirst].isHidden = false; + commands[kcOrderlistNavigateFirst].isDummy = false; + + commands[kcOrderlistNavigateLast].UID = 1797; + commands[kcOrderlistNavigateLast].Message = "Last Order"; + commands[kcOrderlistNavigateLast].isHidden = false; + commands[kcOrderlistNavigateLast].isDummy = false; + + commands[kcOrderlistNavigateLeftSelect].UID = 1798; + commands[kcOrderlistNavigateLeftSelect].Message = "kcOrderlistNavigateLeftSelect"; + commands[kcOrderlistNavigateLeftSelect].isHidden = true; + commands[kcOrderlistNavigateLeftSelect].isDummy = false; + + commands[kcOrderlistNavigateRightSelect].UID = 1799; + commands[kcOrderlistNavigateRightSelect].Message = "kcOrderlistNavigateRightSelect"; + commands[kcOrderlistNavigateRightSelect].isHidden = true; + commands[kcOrderlistNavigateRightSelect].isDummy = false; + + commands[kcOrderlistNavigateFirstSelect].UID = 1800; + commands[kcOrderlistNavigateFirstSelect].Message = "kcOrderlistNavigateFirstSelect"; + commands[kcOrderlistNavigateFirstSelect].isHidden = true; + commands[kcOrderlistNavigateFirstSelect].isDummy = false; + + commands[kcOrderlistNavigateLastSelect].UID = 1801; + commands[kcOrderlistNavigateLastSelect].Message = "kcOrderlistNavigateLastSelect"; + commands[kcOrderlistNavigateLastSelect].isHidden = true; + commands[kcOrderlistNavigateLastSelect].isDummy = false; + + commands[kcOrderlistEditDelete].UID = 1802; + commands[kcOrderlistEditDelete].Message = "Delete Order"; + commands[kcOrderlistEditDelete].isHidden = false; + commands[kcOrderlistEditDelete].isDummy = false; + + commands[kcOrderlistEditInsert].UID = 1803; + commands[kcOrderlistEditInsert].Message = "Insert Order"; + commands[kcOrderlistEditInsert].isHidden = false; + commands[kcOrderlistEditInsert].isDummy = false; + + commands[kcOrderlistEditPattern].UID = 1804; + commands[kcOrderlistEditPattern].Message = "Edit Pattern"; + commands[kcOrderlistEditPattern].isHidden = false; + commands[kcOrderlistEditPattern].isDummy = false; + + commands[kcOrderlistSwitchToPatternView].UID = 1805; + commands[kcOrderlistSwitchToPatternView].Message = "Switch to pattern editor"; + commands[kcOrderlistSwitchToPatternView].isHidden = false; + commands[kcOrderlistSwitchToPatternView].isDummy = false; + #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs @@ -2508,7 +2568,28 @@ } } } - // When we get a new slection key, we need to make sure that + // Same applies for orderlist navigation + else if (inCmd>=kcStartOrderlistCommands&& inCmd<=kcEndOrderlistNavigationSelect) + {//Check that it is a nav cmd + CommandID cmdNavSelection = (CommandID)(kcStartOrderlistNavigationSelect+ (inCmd-kcStartOrderlistNavigation)); + for (int kSel=0; kSel<commands[kcSelect].kcList.GetSize(); kSel++) + {//for all selection modifiers + curKc=commands[kcSelect].kcList[kSel]; + newKc=inKc; + newKc.mod|=curKc.mod; //Add selection modifier's modifiers to this command + if (adding) + { + Log("Enforcing rule krAllowNavigationWithSelection - adding key:%d with modifier:%d to command: %d\n", kSel, newKc.mod, cmdNavSelection); + Add(newKc, cmdNavSelection, false); + } + else + { + Log("Enforcing rule krAllowNavigationWithSelection - removing key:%d with modifier:%d to command: %d\n", kSel, newKc.mod, cmdNavSelection); + Remove(newKc, cmdNavSelection); + } + } + } + // When we get a new selection key, we need to make sure that // all navigation commands will work with this selection key pressed else if (inCmd==kcSelect) {// check that is is a selection @@ -2531,6 +2612,25 @@ } } } // end all nav commands + for (int curCmd=kcStartOrderlistNavigation; curCmd<=kcEndOrderlistNavigation; curCmd++) + {// for all nav commands + for (int k=0; k<commands[curCmd].kcList.GetSize(); k++) + {// for all keys for this command + CommandID cmdNavSelection = (CommandID)(kcStartOrderlistNavigationSelect+ (curCmd-kcStartOrderlistNavigation)); + newKc=commands[curCmd].kcList[k]; // get all properties from the current nav cmd key + newKc.mod|=inKc.mod; // and the new selection modifier + if (adding) + { + Log("Enforcing rule krAllowNavigationWithSelection - adding key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, cmdNavSelection); + Add(newKc, cmdNavSelection, false); + } + else + { + Log("Enforcing rule krAllowNavigationWithSelection - removing key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, cmdNavSelection); + Remove(newKc, cmdNavSelection); + } + } + } // end all nav commands } } // end krAllowNavigationWithSelection @@ -2556,6 +2656,23 @@ } } } + // Same for orderlist navigation + if (inCmd>=kcStartOrderlistNavigation&& inCmd<=kcEndOrderlistNavigation) + {//if this is a navigation command + for (int kSel=0; kSel<commands[kcSelect].kcList.GetSize(); kSel++) + {//for all deselection modifiers + newKcSel=commands[kcSelect].kcList[kSel]; // get all properties from the selection key + newKcSel.mod|=inKc.mod; // add modifiers from the new nav command + if (adding) { + Log("Enforcing rule krAllowSelectionWithNavigation: adding removing kcSelectWithNav and kcSelectOffWithNav\n"); + Add(newKcSel, kcSelectWithNav, false); + } + else { + Log("Enforcing rule krAllowSelectionWithNavigation: removing kcSelectWithNav and kcSelectOffWithNav\n"); + Remove(newKcSel, kcSelectWithNav); + } + } + } // When we get a new selection key, we need to ensure it will work even when // any navigation key is pressed else if (inCmd==kcSelect) @@ -2576,6 +2693,22 @@ } } } // end all nav commands + for (int curCmd=kcStartOrderlistNavigation; curCmd<=kcEndOrderlistNavigation; curCmd++) + {//for all nav commands + for (int k=0; k<commands[curCmd].kcList.GetSize(); k++) + {// for all keys for this command + newKcSel=inKc; // get all properties from the selection key + newKcSel.mod|=commands[curCmd].kcList[k].mod; //add the nav keys' modifiers + if (adding) { + Log("Enforcing rule krAllowSelectionWithNavigation - adding key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, kcSelectWithNav); + Add(newKcSel, kcSelectWithNav, false); + } + else { + Log("Enforcing rule krAllowSelectionWithNavigation - removing key:%d with modifier:%d to command: %d\n", curCmd, inKc.mod, kcSelectWithNav); + Remove(newKcSel, kcSelectWithNav); + } + } + } // end all nav commands } } @@ -2999,14 +3132,20 @@ //ASSERT(eventTypes.GetSize()>0); //Handle super-contexts (contexts that represent a set of sub contexts) - if (curKc.ctx == kCtxViewPatterns) { + if (curKc.ctx == kCtxViewPatterns) + { contexts.Add(kCtxViewPatternsNote); contexts.Add(kCtxViewPatternsIns); contexts.Add(kCtxViewPatternsVol); contexts.Add(kCtxViewPatternsFX); contexts.Add(kCtxViewPatternsFXparam); } - else { + else if(curKc.ctx == kCtxCtrlPatterns) + { + contexts.Add(kCtxCtrlOrderlist); + } + else + { contexts.Add(curKc.ctx); } @@ -3259,6 +3398,7 @@ case kCtxCtrlSamples: return "Sample Context [top]"; case kCtxCtrlInstruments: return "Instrument Context [top]"; case kCtxCtrlComments: return "Comments Context [top]"; + case kCtxCtrlOrderlist: return "Orderlist"; case kCtxVSTGUI: return "Plugin GUI Context"; case kCtxUnknownContext: default: return "Unknown Context"; @@ -3494,12 +3634,14 @@ m_isParentContext[kCtxCtrlInstruments][kCtxAllContexts] = true; m_isParentContext[kCtxCtrlComments][kCtxAllContexts] = true; m_isParentContext[kCtxCtrlSamples][kCtxAllContexts] = true; + m_isParentContext[kCtxCtrlOrderlist][kCtxAllContexts] = true; m_isParentContext[kCtxViewPatternsNote][kCtxViewPatterns] = true; m_isParentContext[kCtxViewPatternsIns][kCtxViewPatterns] = true; m_isParentContext[kCtxViewPatternsVol][kCtxViewPatterns] = true; m_isParentContext[kCtxViewPatternsFX][kCtxViewPatterns] = true; m_isParentContext[kCtxViewPatternsFXparam][kCtxViewPatterns] = true; + m_isParentContext[kCtxCtrlOrderlist][kCtxCtrlPatterns] = true; } Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/CommandSet.h 2009-11-27 19:17:19 UTC (rev 424) @@ -962,6 +962,27 @@ kcVSTGUIRandParams, kcEndVSTGUICommands=kcVSTGUIRandParams, + kcStartOrderlistCommands, + kcStartOrderlistNavigation=kcStartOrderlistCommands, + kcOrderlistNavigateLeft=kcStartOrderlistNavigation, + kcOrderlistNavigateRight, + kcOrderlistNavigateFirst, + kcOrderlistNavigateLast, + kcEndOrderlistNavigation= kcOrderlistNavigateLast, + // with selection key(must match order above) + kcStartOrderlistNavigationSelect, + kcOrderlistNavigateLeftSelect=kcStartOrderlistNavigationSelect, + kcOrderlistNavigateRightSelect, + kcOrderlistNavigateFirstSelect, + kcOrderlistNavigateLastSelect, + kcEndOrderlistNavigationSelect = kcOrderlistNavigateLastSelect, + + kcOrderlistEditDelete, + kcOrderlistEditInsert, + kcOrderlistEditPattern, + kcOrderlistSwitchToPatternView, + kcEndOrderlistCommands=kcOrderlistSwitchToPatternView, + kcNumCommands, }; Modified: trunk/OpenMPT/mptrack/Ctrl_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/Ctrl_pat.cpp 2009-11-27 19:17:19 UTC (rev 424) @@ -699,10 +699,7 @@ void CCtrlPatterns::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) //------------------------------------------------------------------ { - if (!m_OrderList.ProcessKeyDown(nChar)) - { - CModControlDlg::OnKeyDown(nChar, nRepCnt, nFlags); - } + CModControlDlg::OnKeyDown(nChar, nRepCnt, nFlags); } Modified: trunk/OpenMPT/mptrack/Ctrl_pat.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/Ctrl_pat.h 2009-11-27 19:17:19 UTC (rev 424) @@ -26,7 +26,7 @@ //m_nScrollPos2nd: 2nd selection point if multiple orders are selected // (not neccessarily the higher order - GetCurSel() is taking care of that.) ORDERINDEX m_nXScroll, m_nScrollPos, m_nScrollPos2nd, m_nDropPos; - bool m_bScrolling, m_bDragging, m_bShift; + bool m_bScrolling, m_bDragging; ORDERINDEX m_nDragOrder; //To tell how many orders('orderboxes') to show at least //on both sides of current order(when updating orderslist position). @@ -46,10 +46,11 @@ UINT GetCurrentPattern() const; ORD_SELECTION GetCurSel(bool bIgnoreSelection) const; // make the current selection the secondary selection (used for keyboard orderlist navigation) - inline void SetCurSelTo2ndSel() - {if(m_bShift && m_nScrollPos2nd == ORDERINDEX_INVALID) m_nScrollPos2nd = m_nScrollPos; else if(!m_bShift && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID;}; + inline void SetCurSelTo2ndSel(bool isSelectionKeyPressed) + { if(isSelectionKeyPressed && m_nScrollPos2nd == ORDERINDEX_INVALID) m_nScrollPos2nd = m_nScrollPos; + else if(!isSelectionKeyPressed && m_nScrollPos2nd != ORDERINDEX_INVALID) m_nScrollPos2nd = ORDERINDEX_INVALID; + }; bool SetCurSel(ORDERINDEX sel, bool bEdit = true, bool bShiftClick = false, bool bIgnoreCurSel = false); - BOOL ProcessKeyDown(UINT nChar); BOOL ProcessChar(UINT nChar); BOOL UpdateScrollInfo(); void UpdateInfoText(); @@ -86,6 +87,9 @@ // Set given sqeuence and update orderlist display. void SelectSequence(const SEQUENCEINDEX nSeq); + // Little helper function to avoid copypasta + bool IsSelectionKeyPressed() {return CMainFrame::GetInputHandler()->SelectionPressed();} + // Clipboard. void OnEditCopy(); void OnEditCut(); @@ -245,6 +249,7 @@ afx_msg void TogglePluginEditor(); //rewbs.instroVST afx_msg void ToggleSplitPluginEditor(); //rewbs.instroVST afx_msg void OnToggleOverflowPaste(); + afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM); //}}AFX_MSG DECLARE_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-11-27 19:17:19 UTC (rev 424) @@ -91,7 +91,6 @@ m_nOrderlistMargins = s_nDefaultMargins; m_bScrolling = false; m_bDragging = false; - m_bShift = false; } @@ -319,48 +318,6 @@ } -BOOL COrderList::ProcessKeyDown(UINT nChar) -//----------------------------------------- -{ - switch(nChar) - { - case VK_UP: - case VK_LEFT: SetCurSelTo2ndSel(); SetCurSel(m_nScrollPos - 1); break; - case VK_DOWN: - case VK_RIGHT: SetCurSelTo2ndSel(); SetCurSel(m_nScrollPos + 1); break; - case VK_HOME: SetCurSelTo2ndSel(); SetCurSel(0); break; - case VK_END: - if (m_pModDoc) - { - CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); - ORDERINDEX nLast = pSndFile->Order.GetLengthFirstEmpty(); - if (nLast) - nLast--; - SetCurSelTo2ndSel(); - SetCurSel(nLast); - } - break; - case VK_DELETE: OnDeleteOrder(); break; - case VK_INSERT: OnInsertOrder(); break; - case VK_TAB: OnSwitchToView(); break; - case VK_RETURN: OnLButtonDblClk(0, CPoint(0,0)); OnSwitchToView(); break; - - //rewbs.customKeys: these are now global commands handled via the inputInhandler -/* case VK_F5: OnPlayerPlay(); break; - case VK_F6: OnPlayerPlayFromStart(); break; - case VK_F7: OnPatternPlayFromStart(); break; - case VK_ESCAPE: - case VK_F8: OnPlayerPause(); break; -*/ - default: - return FALSE; - } - - return TRUE; - -} - - BOOL COrderList::ProcessChar(UINT nChar) //-------------------------------------- { @@ -425,45 +382,92 @@ UINT nRepCnt = LOWORD(pMsg->lParam); UINT nFlags = HIWORD(pMsg->lParam); KeyEventType kT = ih->GetKeyEventType(nFlags); + + InputTargetContext ctx = (InputTargetContext)(kCtxCtrlOrderlist); + if (ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT) != kcNull) + return true; // Mapped to a command, no need to pass message on. + //HACK: masquerade as kCtxViewPatternsNote context until we implement appropriate // command propagation to kCtxCtrlOrderlist context. - //InputTargetContext ctx = (InputTargetContext)(kCtxCtrlOrderlist); - InputTargetContext ctx = (InputTargetContext)(kCtxViewPatternsNote); - - CommandID kc = ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT); - switch (kc) - { - case kcSwitchToOrderList: OnSwitchToView(); return true; - case kcChangeLoopStatus: m_pParent->OnModCtrlMsg(CTRLMSG_PAT_LOOP, -1); return true; - case kcToggleFollowSong: m_pParent->OnFollowSong(); return true; + ctx = (InputTargetContext)(kCtxViewPatternsNote); + if (ih->KeyEvent(ctx, nChar, nRepCnt, nFlags, kT) != kcNull) + return true; // Mapped to a command, no need to pass message on. - case kcChannelUnmuteAll: - case kcUnmuteAllChnOnPatTransition: - ::PostMessage(m_pParent->GetViewWnd(), WM_MOD_KEYCOMMAND, kc, 0); - return true; - } } //end rewbs.customKeys switch(pMsg->message) { - case WM_KEYUP: - if ((pMsg->wParam == VK_SHIFT) || (pMsg->wParam == VK_LSHIFT) || (pMsg->wParam == VK_RSHIFT)) m_bShift = FALSE; - break; - case WM_KEYDOWN: - if ((pMsg->wParam == VK_SHIFT) || (pMsg->wParam == VK_LSHIFT) || (pMsg->wParam == VK_RSHIFT)) m_bShift = TRUE; - if (ProcessKeyDown(pMsg->wParam)) return TRUE; - break; case WM_CHAR: - if (ProcessChar(pMsg->wParam)) return TRUE; + if (ProcessChar(pMsg->wParam)) return true; break; } return CWnd::PreTranslateMessage(pMsg); } +LRESULT COrderList::OnCustomKeyMsg(WPARAM wParam, LPARAM) +//------------------------------------------------------- +{ + if (wParam == kcNull) + return 0; + + switch(wParam) + { + case kcEditCopy: + OnEditCopy(); return wParam; + case kcEditCut: + OnEditCut(); return wParam; + case kcEditPaste: + OnEditPaste(); return wParam; + + case kcOrderlistNavigateLeftSelect: + case kcOrderlistNavigateLeft: + SetCurSelTo2ndSel(wParam == kcOrderlistNavigateLeftSelect); SetCurSel(m_nScrollPos - 1); return wParam; + case kcOrderlistNavigateRightSelect: + case kcOrderlistNavigateRight: + SetCurSelTo2ndSel(wParam == kcOrderlistNavigateRightSelect); SetCurSel(m_nScrollPos + 1); return wParam; + case kcOrderlistNavigateFirstSelect: + case kcOrderlistNavigateFirst: + SetCurSelTo2ndSel(wParam == kcOrderlistNavigateFirstSelect); SetCurSel(0); return wParam; + case kcOrderlistNavigateLastSelect: + case kcOrderlistNavigateLast: + if((m_pModDoc != nullptr) && (m_pModDoc->GetSoundFile() != nullptr)) + { + SetCurSelTo2ndSel(wParam == kcOrderlistNavigateLast); + ORDERINDEX nLast = m_pModDoc->GetSoundFile()->Order.GetLengthTailTrimmed(); + if(nLast > 0) nLast--; + SetCurSel(nLast); + } + return wParam; + case kcOrderlistEditDelete: + OnDeleteOrder(); return wParam; + case kcOrderlistEditInsert: + OnInsertOrder(); return wParam; + case kcOrderlistSwitchToPatternView: + OnSwitchToView(); return wParam; + case kcOrderlistEditPattern: + OnLButtonDblClk(0, CPoint(0,0)); OnSwitchToView(); return wParam; + + // kCtxViewPatternsNote messages + case kcSwitchToOrderList: + OnSwitchToView(); + return wParam; + case kcChangeLoopStatus: + m_pParent->OnModCtrlMsg(CTRLMSG_PAT_LOOP, -1); return wParam; + case kcToggleFollowSong: m_pParent->OnFollowSong(); return wParam; + + case kcChannelUnmuteAll: + case kcUnmuteAllChnOnPatTransition: + ::PostMessage(m_pParent->GetViewWnd(), WM_MOD_KEYCOMMAND, wParam, 0); return wParam; + } + + return 0; +} + + static const char szClipboardOrdersHdr[] = "OpenMPT %3s\x0D\x0A"; static const char szClipboardOrdCountFieldHdr[] = "OrdNum: %u\x0D\x0A"; static const char szClipboardOrdersFieldHdr[] = "OrdLst: "; @@ -613,23 +617,6 @@ } -LRESULT COrderList::OnCustomKeyMsg(WPARAM wParam, LPARAM) -//------------------------------------------------------- -{ - if (wParam == kcNull) - return 0; - - switch(wParam) - { - case kcEditCopy: OnEditCopy(); return wParam; - case kcEditCut: OnEditCut(); return wParam; - case kcEditPaste: OnEditPaste(); return wParam; - } - - return 0; -} - - void COrderList::UpdateView(DWORD dwHintMask, CObject *pObj) //---------------------------------------------------------- { @@ -645,7 +632,6 @@ //------------------------------- { if (m_pParent) m_pParent->PostViewMessage(VIEWMSG_SETFOCUS); - m_bShift = FALSE; } @@ -788,7 +774,6 @@ { CWnd::OnKillFocus(pWnd); InvalidateSelection(); - m_bShift = FALSE; CMainFrame::GetMainFrame()->m_pOrderlistHasFocus = nullptr; } @@ -842,6 +827,7 @@ { CRect rect; GetClientRect(&rect); + bool bSelection = IsSelectionKeyPressed(); if (m_bDragging) { @@ -865,13 +851,13 @@ for(int i = 0; i <= nMoveCount; i++) { - if(!m_pModDoc->MoveOrder(nMovePos, m_nDropPos, true, m_bShift)) return; - if((bMoveBack ^ m_bShift) == true && bMultiSelection) + if(!m_pModDoc->MoveOrder(nMovePos, m_nDropPos, true, bSelection)) return; + if((bMoveBack ^ bSelection) == true && bMultiSelection) { nMovePos++; m_nDropPos++; } - if(bMoveBack && m_bShift && bMultiSelection) { + if(bMoveBack && bSelection && bMultiSelection) { nMovePos += 2; m_nDropPos++; } @@ -881,10 +867,10 @@ // adjust selection m_nScrollPos2nd = m_nDropPos - 1; m_nDropPos -= nMoveCount + (bMoveBack ? 0 : 1); - SetCurSel((bMoveBack && (!m_bShift)) ? m_nDropPos - 1 : m_nDropPos); + SetCurSel((bMoveBack && (!bSelection)) ? m_nDropPos - 1 : m_nDropPos); } else { - SetCurSel(((m_nDragOrder < (UINT)m_nDropPos) && (!m_bShift)) ? m_nDropPos - 1 : m_nDropPos); + SetCurSel(((m_nDragOrder < (UINT)m_nDropPos) && (!bSelection)) ? m_nDropPos - 1 : m_nDropPos); } m_pModDoc->SetModified(); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-11-27 19:17:19 UTC (rev 424) @@ -204,10 +204,18 @@ commandCategories.Add(*newCat); delete newCat; - newCat = new CommandCategory(" Pattern [Top]", kCtxCtrlPatterns); + newCat = new CommandCategory(" Pattern Editor [Top]", kCtxCtrlPatterns); commandCategories.Add(*newCat); delete newCat; + newCat = new CommandCategory(" Pattern Editor - Orderlist", kCtxCtrlOrderlist); + + for (int c=kcStartOrderlistCommands; c<=kcEndOrderlistCommands; c++) + newCat->commands.Add(c); + + commandCategories.Add(*newCat); + delete newCat; + newCat = new CommandCategory(" Pattern Editor - General", kCtxViewPatterns); for (int c=kcStartPlainNavigate; c<=kcEndPlainNavigate; c++) Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2009-11-27 19:17:19 UTC (rev 424) @@ -1081,15 +1081,10 @@ // find sequence this item belongs to for(SEQUENCEINDEX nSeq = 0; nSeq < pSong->tiOrders.size(); nSeq++) { + if(hItem == pSong->tiSequences[nSeq]) return (MODITEM_SEQUENCE | (nSeq << 16)); for(ORDERINDEX nOrd = 0; nOrd < pSong->tiOrders[nSeq].size(); nOrd++) { - if (hItem == pSong->tiOrders[nSeq][nOrd]) - { - return (MODITEM_ORDER | (nOrd << 16) | (((uint64)nSeq) << 32)); - } else if(hItem == pSong->tiSequences[nSeq]) - { - return (MODITEM_SEQUENCE | (nSeq << 16)); - } + if (hItem == pSong->tiOrders[nSeq][nOrd]) return (MODITEM_ORDER | (nOrd << 16) | (((uint64)nSeq) << 32)); } } } @@ -2319,9 +2314,12 @@ case MODITEM_HDR_ORDERS: { CModDoc *pModDoc = GetDocumentFromItem(hItem); - if(pModDoc && (pModDoc->GetModType() == MOD_TYPE_MPT)) + CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; + if(pModDoc && pSndFile && (pModDoc->GetModType() == MOD_TYPE_MPT)) { AppendMenu(hMenu, MF_STRING, ID_MODTREE_INSERT, "&Insert Sequence"); + if(pSndFile->Order.GetNumSequences() == 1) // this is a sequence + AppendMenu(hMenu, MF_STRING, ID_MODTREE_DUPLICATE, "D&uplicate Sequence"); } } break; @@ -2832,7 +2830,7 @@ pModDoc = GetDocumentFromItem(hItem); CSoundFile *pSndFile = (pModDoc) ? pModDoc->GetSoundFile() : nullptr; - if (pModDoc && pSndFile && (qwItemType == MODITEM_SEQUENCE)) + if (pModDoc && pSndFile && ((qwItemType == MODITEM_SEQUENCE) || (qwItemType == MODITEM_HDR_ORDERS))) { pSndFile->Order.SetSequence((SEQUENCEINDEX)dwItemNo); pSndFile->Order.AddSequence(true); Modified: trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb =================================================================== --- trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/mptrack/res/defaultKeybindings.mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -277,4 +277,14 @@ //----( Comments Context [top] (18) )------------ -//----( Unknown Context (19) )------------ +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -24,7 +24,7 @@ 0:1361:2:45:1 //Copy: Ctrl+EINFG (KeyDown) 0:1362:2:86:1 //Paste: Ctrl+V (KeyDown) 0:1363:3:86:1 //Mix Paste: Shift+Ctrl+V (KeyDown) -0:1686:1:86:1 //Mix Paste (old IT Style): Shift+V (KeyDown) +0:1793:1:86:1 //Paste Flood: Shift+V (KeyDown) 0:1364:2:53:1 //SelectAll: Ctrl+5 (KeyDown) 0:1365:2:70:1 //Find: Ctrl+F (KeyDown) 0:1366:0:114:1 //Find Next: F3 (KeyDown) @@ -292,4 +292,14 @@ //----( Comments Context [top] (18) )------------ -//----( Unknown Context (19) )------------ +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: NACH-LINKS (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: NACH-OBEN (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: NACH-RECHTS (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: NACH-UNTEN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: POS1 (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: ENDE (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: ENTF (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: EINFG (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: EINGABE (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TABULATOR (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_FT2Style_(goor00).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -264,12 +264,26 @@ //----( Unknown Context (12) )------------ -//----( General Context [top] (13) )------------ +//----( Plugin GUI Context (13) )------------ -//----( Pattern Context [top] (14) )------------ +//----( General Context [top] (14) )------------ -//----( Sample Context [top] (15) )------------ +//----( Pattern Context [top] (15) )------------ -//----( Instrument Context [top] (16) )------------ +//----( Sample Context [top] (16) )------------ -//----( Comments Context [top] (17) )------------ +//----( Instrument Context [top] (17) )------------ + +//----( Comments Context [top] (18) )------------ + +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/FR_mpt_classic_(vanisherIII).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -250,12 +250,26 @@ //----( Unknown Context (12) )------------ -//----( General Context [top] (13) )------------ +//----( Plugin GUI Context (13) )------------ -//----( Pattern Context [top] (14) )------------ +//----( General Context [top] (14) )------------ -//----( Sample Context [top] (15) )------------ +//----( Pattern Context [top] (15) )------------ -//----( Instrument Context [top] (16) )------------ +//----( Sample Context [top] (16) )------------ -//----( Comments Context [top] (17) )------------ +//----( Instrument Context [top] (17) )------------ + +//----( Comments Context [top] (18) )------------ + +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/SE_laptop_(ganja).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -174,12 +174,26 @@ //----( Unknown Context (12) )------------ -//----( General Context [top] (13) )------------ +//----( Plugin GUI Context (13) )------------ -//----( Pattern Context [top] (14) )------------ +//----( General Context [top] (14) )------------ -//----( Sample Context [top] (15) )------------ +//----( Pattern Context [top] (15) )------------ -//----( Instrument Context [top] (16) )------------ +//----( Sample Context [top] (16) )------------ -//----( Comments Context [top] (17) )------------ +//----( Instrument Context [top] (17) )------------ + +//----( Comments Context [top] (18) )------------ + +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/UK_mpt_it2_hybrid_(rewbs).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -281,4 +281,14 @@ //----( Comments Context [top] (18) )------------ -//----( Unknown Context (19) )------------ +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/US_it2_(lpchip).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -242,12 +242,26 @@ //----( Unknown Context (12) )------------ -//----( General Context [top] (13) )------------ +//----( Plugin GUI Context (13) )------------ -//----( Pattern Context [top] (14) )------------ +//----( General Context [top] (14) )------------ -//----( Sample Context [top] (15) )------------ +//----( Pattern Context [top] (15) )------------ -//----( Instrument Context [top] (16) )------------ +//----( Sample Context [top] (16) )------------ -//----( Comments Context [top] (17) )------------ +//----( Instrument Context [top] (17) )------------ + +//----( Comments Context [top] (18) )------------ + +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/US_mpt_classic_(diamond).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -257,13 +257,26 @@ //----( Unknown Context (12) )------------ -//----( General Context [top] (13) )------------ +//----( Plugin GUI Context (13) )------------ -//----( Pattern Context [top] (14) )------------ +//----( General Context [top] (14) )------------ -//----( Sample Context [top] (15) )------------ +//----( Pattern Context [top] (15) )------------ -//----( Instrument Context [top] (16) )------------ +//----( Sample Context [top] (16) )------------ -//----( Comments Context [top] (17) )------------ +//----( Instrument Context [top] (17) )------------ +//----( Comments Context [top] (18) )------------ + +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb 2009-11-27 18:52:15 UTC (rev 423) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/dvorak_(snu).mkb 2009-11-27 19:17:19 UTC (rev 424) @@ -256,3 +256,15 @@ //----( Instrument Context [top] (17) )------------ //----( Comments Context [top] (18) )------------ + +//----( Orderlist (19) )------------ +19:1794:0:37:5 //Previous Order: LEFT (KeyDown|KeyHold) +19:1794:0:38:5 //Previous Order: UP (KeyDown|KeyHold) +19:1795:0:39:5 //Next Order: RIGHT (KeyDown|KeyHold) +19:1795:0:40:5 //Next Order: DOWN (KeyDown|KeyHold) +19:1796:0:36:5 //First Order: HOME (KeyDown|KeyHold) +19:1797:0:35:5 //Last Order: END (KeyDown|KeyHold) +19:1802:0:46:5 //Delete Order: DELETE (KeyDown|KeyHold) +19:1803:0:45:5 //Insert Order: INSERT (KeyDown|KeyHold) +19:1804:0:13:5 //Edit Pattern: ENTER (KeyDown|KeyHold) +19:1805:0:9:5 //Switch to pattern editor: TAB (KeyDown|KeyHold) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |