Changeset 1293

Show
Ignore:
Timestamp:
10/29/07 21:05:04 (10 months ago)
Author:
calvin
Message:

zoners patch: remember preset in parameter view.
also changed the wave list into a CListViewCtrl (fixes a small redraw problem) and fixed a couple CListViewCtrl-mistakes

Location:
trunk/src/buzelib
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/buzelib/Document.cpp

    r1283 r1293  
    11251125} 
    11261126 
     1127void CDocument::setMachinePreset(zzub::metaplugin* plugin, std::string name) { 
     1128        lastPreset[plugin] = name; 
     1129} 
     1130 
     1131std::string CDocument::getMachinePreset(zzub::metaplugin* plugin) { 
     1132        map<metaplugin*, std::string>::iterator name = lastPreset.find(plugin); 
     1133        if (name == lastPreset.end()) 
     1134                return ""; 
     1135        return name->second; 
     1136} 
     1137 
    11271138pattern_position CDocument::getPatternPosition(zzub::metaplugin* plugin, zzub::pattern* pattern) { 
    11281139        pattern_position pos; 
  • trunk/src/buzelib/Document.h

    r1268 r1293  
    9292 
    9393        std::map<zzub::metaplugin*, zzub::pattern*> m_pFocusedPattern; 
     94        std::map<zzub::metaplugin*, std::string> lastPreset; 
    9495 
    9596    std::vector<CView*> views; 
     
    273274        // play back the specified pattern 
    274275        void playPattern(zzub::metaplugin* machine, zzub::pattern* pattern, int row=0); 
     276        void setMachinePreset(zzub::metaplugin* plugin, std::string name); 
     277        std::string getMachinePreset(zzub::metaplugin* plugin); 
    275278 
    276279        void playStream(int note, std::string dataUrl, std::string pluginUri); 
  • trunk/src/buzelib/FileBrowserView.cpp

    r1275 r1293  
    147147 
    148148        fileList.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL | LBS_NOTIFY | LVS_SHOWSELALWAYS, 0, IDC_FILELIST); 
    149         fileList.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT|WS_EX_CLIENTEDGE,LVS_EX_FULLROWSELECT|WS_EX_CLIENTEDGE); 
     149        fileList.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT); 
    150150        updateFiles(); 
    151151 
  • trunk/src/buzelib/MachineParameterView.cpp

    r1282 r1293  
    9696        bindPresets(); 
    9797 
     98        // default to the last preset 
     99 
     100        std::string lastPreset = document->getMachinePreset(machine); 
     101        if (lastPreset.size()) { 
     102                int index = presetDropDown.FindStringExact(0, lastPreset.c_str()); 
     103                if (index > 0) { 
     104                        presetDropDown.SetCurSel(index); 
     105                } 
     106        } 
     107 
    98108        document->addView(this); 
    99109        return lres; 
     
    390400                valueIndex++; 
    391401        } 
     402        document->setMachinePreset(machine, pi.name); 
     403        /*  machine->setLastPreset((char*)pi.name.c_str()); */ 
    392404        return 0; 
    393405} 
  • trunk/src/buzelib/WaveEntryList.cpp

    r1241 r1293  
    5151LRESULT CWaveEntryList::OnDropFiles(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { 
    5252        MessageBox("Wave level drop", "Wave level", MB_OK); 
    53     int waveIndex = view->waveTableList.GetCurSel(); 
     53    int waveIndex = view->waveTableList.GetSelectedIndex(); 
    5454        if (waveIndex == -1) return 0; 
    5555 
     
    8282LRESULT CWaveEntryList::OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { 
    8383 
    84     int waveIndex = view->waveTableList.GetCurSel(); 
     84    int waveIndex = view->waveTableList.GetSelectedIndex(); 
    8585        if (waveIndex == -1) return 0; 
    8686 
  • trunk/src/buzelib/WaveTableList.cpp

    r1279 r1293  
    2727 
    2828LRESULT CWaveTableList::OnDropFiles(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { 
    29         BOOL bOutside; 
    3029        POINT pt; 
    3130        GetCursorPos(&pt); 
    3231        ScreenToClient(&pt); 
    33         int curWave = this->ItemFromPoint(pt, bOutside); 
     32        int curWave = this->HitTest(pt, 0); 
    3433 
    3534        SetRedraw(FALSE); 
    36         SetCurSel(curWave); 
     35        SelectItem(curWave); 
    3736 
    3837        HDROP hDropInfo=(HDROP)wParam; 
     
    110109 
    111110        POINT pt={LOWORD(lParam), HIWORD(lParam) }; 
    112         BOOL outside; 
    113         int waveIndex = ItemFromPoint(pt, outside); 
     111 
     112        int waveIndex = HitTest(pt, 0); 
    114113        if (waveIndex == -1) return 0; 
    115114 
    116         SetCurSel(waveIndex); 
     115        SelectItem(waveIndex); 
    117116 
    118117        CMenu menu;  
     
    132131        return 0; 
    133132} 
     133 
     134LRESULT CWaveTableList::OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) { 
     135        RECT rcClient; 
     136        GetClientRect(&rcClient); 
     137        SetColumnWidth(0, rcClient.right - rcClient.left - 2); 
     138        return 0; 
     139} 
     140 
  • trunk/src/buzelib/WaveTableList.h

    r1273 r1293  
    55class CWaveTableView; 
    66 
    7 class CWaveTableList : public CWindowImpl<CWaveTableList, CListBox> { 
     7class CWaveTableList : public CWindowImpl<CWaveTableList, CListViewCtrl> { 
    88        CWaveTableView* view; 
    99public: 
    10         DECLARE_WND_SUPERCLASS("WaveTableList", CListBox::GetWndClassName()) 
     10        DECLARE_WND_SUPERCLASS("WaveTableList", CListViewCtrl::GetWndClassName()) 
    1111 
    1212   BEGIN_MSG_MAP(CWaveTableList) 
     
    1717                MESSAGE_HANDLER(WM_DROPFILES, OnDropFiles) 
    1818                MESSAGE_HANDLER(WM_RBUTTONDOWN, OnRButtonDown) 
     19                MESSAGE_HANDLER(WM_SIZE, OnSize) 
    1920   END_MSG_MAP() 
    2021 
     
    3031        LRESULT OnDropFiles(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 
    3132        LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 
     33        LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 
    3234}; 
  • trunk/src/buzelib/WaveTableView.cpp

    r1286 r1293  
    239239        mainSplitter.SetSplitterPanes(waveLevelSplitter, waveTabSplitter); 
    240240 
    241         waveTableList.Create(waveLevelSplitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL | LBS_NOTIFY, WS_EX_CLIENTEDGE, IDC_WAVELIST); 
     241        waveTableList.Create(waveLevelSplitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_REPORT | LVS_SHOWSELALWAYS, 0, IDC_WAVELIST); 
     242        waveTableList.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT); 
     243        waveTableList.AddColumn("Instrument", 0); 
     244 
    242245        waveEntryList.Create(waveLevelSplitter, rcDefault, 0, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS |WS_CLIPCHILDREN | WS_VSCROLL | LVS_SINGLESEL | LVS_REPORT | LVS_SHOWSELALWAYS, 0, IDC_ENTRYLIST); 
    243         waveEntryList.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT|WS_EX_CLIENTEDGE,LVS_EX_FULLROWSELECT|WS_EX_CLIENTEDGE); 
     246        waveEntryList.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT); 
    244247 
    245248        waveLevelSplitter.SetSplitterPanes(waveTableList, waveEntryList); 
     
    247250        waveEditorCtrl.Create(waveTabSplitter, rcDefault, 0, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS |WS_CLIPCHILDREN | WS_HSCROLL, WS_EX_CLIENTEDGE, IDC_FILELIST); 
    248251 
    249         waveTabs.Create(waveTabSplitter, rcDefault, 0, 0, 0, IDC_WAVETABS); 
     252        waveTabs.Create(waveTabSplitter, rcDefault, 0, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN, 0, IDC_WAVETABS); 
    250253 
    251254        //editTab.Create(waveTabs);//, rcDefault, 0, WS_CHILD); 
     
    266269        waveTabSplitter.SetSplitterPos(rcClient.bottom - 200); 
    267270 
    268         waveTableList.SetCurSel(0); 
    269271 
    270272        updateFromWaveTable(); 
     273 
     274        waveTableList.SelectItem(0); 
    271275 
    272276        updateToolbar(); 
     
    348352        int note = midi_to_buzz_note(keyboard_mapper::map_code_to_note(document->octave, wParam)); 
    349353        if (note == -1) return 0; 
    350         int index = waveTableList.GetCurSel(); 
     354        int index = waveTableList.GetSelectedIndex(); 
    351355        if (index >= player->getWaves()) return 0; 
    352356        if (index < 0) return 0; 
     
    397401 
    398402LRESULT CWaveTableView::OnPlayWave(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 
    399         int wavePos=waveTableList.GetCurSel(); 
     403        int wavePos=waveTableList.GetSelectedIndex(); 
    400404        if (wavePos==LB_ERR) return 0;                  // nothing selected 
    401405 
     
    409413 
    410414LRESULT CWaveTableView::OnClearWave(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 
    411         int index=waveTableList.GetCurSel(); 
     415        int index=waveTableList.GetSelectedIndex(); 
    412416        if (index>=player->getWaves()) return 0; 
    413417        if (index<0) return 0; 
     
    423427} 
    424428 
    425 LRESULT CWaveTableView::OnLbnDblClkWaveList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 
    426         int index = waveTableList.GetCurSel(); 
     429LRESULT CWaveTableView::OnLbnDblClkWaveList(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) { 
     430        int index = waveTableList.GetSelectedIndex(); 
    427431        if (index >= player->getWaves()) return 0; 
    428432        if (index < 0) return 0; 
     
    438442 
    439443void CWaveTableView::updateEntry() { 
    440         int index=waveTableList.GetCurSel(); 
     444        int index=waveTableList.GetSelectedIndex(); 
    441445        if (index<0 || index>=player->getWaves()) return ; 
    442446 
     
    475479 
    476480void CWaveTableView::updateSelection() { 
    477         int index=waveTableList.GetCurSel(); 
     481        int index=waveTableList.GetSelectedIndex(); 
    478482        if (index==LB_ERR) return ;                     // nothing selected 
    479483 
     
    489493        mainFrame->document->selectWave(entry); 
    490494 
    491 //    recordTab.bindWavePlugins(); 
    492495} 
    493496 
    494497void CWaveTableView::updateFromWaveTable() { 
    495         int sel = waveTableList.GetCurSel(); 
    496         int scroll = waveTableList.GetScrollPos(SB_VERT); 
    497  
    498         waveTableList.ResetContent(); 
     498        int sel = waveTableList.GetSelectedIndex(); 
     499        POINT zeroPt = { 0, 0 }; 
     500        int first = waveTableList.HitTest(zeroPt, 0); 
     501 
     502        waveTableList.DeleteAllItems(); 
    499503 
    500504        size_t wavecount = player->getWaves(); 
     
    503507                char pc[256]; 
    504508                sprintf(pc, "%02x %s", i+1, wave->name.c_str()); 
    505                 waveTableList.AddString(pc); 
     509                waveTableList.InsertItem(i, pc); 
    506510        } 
    507511 
    508512        if (sel != -1) 
    509                 waveTableList.SetCurSel(sel); 
    510  
    511         waveTableList.SendMessage(WM_VSCROLL, MAKEWPARAM(SB_THUMBPOSITION, scroll), 0); 
    512 } 
    513  
    514 LRESULT CWaveTableView::OnLbnSelChangeWaveList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 
     513                waveTableList.SelectItem(sel); 
     514 
     515        int first2 = waveTableList.HitTest(zeroPt, 0); 
     516 
     517        RECT rcItem; 
     518        waveTableList.GetSubItemRect(0, 0, LVIR_BOUNDS, &rcItem); 
     519        int itemHeight = rcItem.bottom - rcItem.top; 
     520        SIZE scrollSize = { 0, (first - first2) * itemHeight }; 
     521        waveTableList.Scroll(scrollSize); 
     522} 
     523 
     524LRESULT CWaveTableView::OnLbnSelChangeWaveList(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) { 
    515525        updateSelection(); 
    516526        return 0; 
     
    528538 
    529539int CWaveTableView::getSelectedWaveIndex() { 
    530         int index=waveTableList.GetCurSel(); 
     540        int index=waveTableList.GetSelectedIndex(); 
    531541        if (index==LB_ERR) return -1;                   // nothing selected 
    532542        if (index>=player->getWaves()) return -1; 
     
    537547 
    538548wave_info_ex* CWaveTableView::getSelectedWave() { 
    539         int index=waveTableList.GetCurSel(); 
     549        int index=waveTableList.GetSelectedIndex(); 
    540550        if (index==LB_ERR) return 0;                    // nothing selected 
    541551        if (index>=player->getWaves()) return 0; 
  • trunk/src/buzelib/WaveTableView.h

    r1285 r1293  
    6868{ 
    6969        ClientViewListener* clientViewListener; 
    70         CListBox sampleList; 
    7170        CTrackBarCtrl waveVolumeSlider; 
    7271        CWaveEntryList waveEntryList; 
     
    112111                MESSAGE_HANDLER(WM_DESTROY, OnDestroy) 
    113112 
    114                 COMMAND_HANDLER(IDC_WAVELIST, LBN_DBLCLK, OnLbnDblClkWaveList) 
    115                 COMMAND_HANDLER(IDC_WAVELIST, LBN_SELCHANGE, OnLbnSelChangeWaveList) 
     113                NOTIFY_HANDLER(IDC_WAVELIST, LVN_ITEMCHANGED, OnLbnSelChangeWaveList) 
     114                NOTIFY_HANDLER(IDC_WAVELIST, NM_DBLCLK, OnLbnDblClkWaveList) 
     115 
    116116                NOTIFY_HANDLER(IDC_ENTRYLIST, LVN_ITEMCHANGED, OnLbnItemChangedEntryList) 
     117                 
    117118                COMMAND_HANDLER(IDC_PLAYWAVEBUTTON, BN_CLICKED, OnPlayWave) 
    118119                COMMAND_HANDLER(IDC_STOPWAVEBUTTON, BN_CLICKED, OnStopWave) 
     
    142143                NOTIFY_HANDLER(IDC_WAVETABS, TCN_SELCHANGE, OnTcnSelchangeWavetab) 
    143144 
     145                // From CWTLTabViewCtrl:  
     146                // Parent windows must have REFLECT_NOTIFICATIONS() in the message map 
     147                // to pass along the TCN_SELCHANGE message to  
    144148        END_MSG_MAP() 
    145149 
     
    179183        LRESULT OnZoomSelection(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 
    180184        LRESULT OnZoomAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 
    181         LRESULT OnLbnDblClkWaveList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 
    182         LRESULT OnLbnSelChangeWaveList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 
     185        LRESULT OnLbnDblClkWaveList(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/); 
     186        LRESULT OnLbnSelChangeWaveList(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/); 
    183187        LRESULT OnLbnItemChangedEntryList(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/); 
    184188        LRESULT OnTcnSelchangeWavetab(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);