Changeset 1319

Show
Ignore:
Timestamp:
12/21/07 18:03:17 (10 months ago)
Author:
calvin
Message:

zoner: pattern editor updates: unselect, stickySelection mode fixes, select bunchacolumns and select buncharows uncommented and slightly modified so they work
calvin: moved keyjazz back to zzub, removed silly messageboxes in exception dialog, updated pattern editor help

Location:
trunk/src
Files:
12 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/buze/ExceptionDialog.cpp

    r1251 r1319  
    5959                zzub::BuzzWriter writer(&outf); 
    6060                std::vector<zzub::metaplugin*> plugins; 
    61                 MessageBox("SAVE SONG HERE1"); 
    6261                if (writer.writePlayer(player, plugins, true)) { 
    6362                        sprintf(szScratch, "Successfully saved current song to %s.", szDumpPath); 
     
    6564                        sprintf(szScratch, "Error while saving song to %s.", szDumpPath); 
    6665                } 
    67                 MessageBox("SAVE SONG HERE2"); 
    6866                outf.close(); 
    6967                szResult = szScratch; 
    7068        } else { 
    71                 MessageBox("SAVE SONG HERE3"); 
    7269                szResult = "Could not create temp file."; 
    7370        } 
    74                 MessageBox("SAVE SONG HERE4"); 
    7571 
    7672        if (szResult) 
  • trunk/src/buzelib/Document.cpp

    r1316 r1319  
    7070 
    7171void CDocument::selectMachine(metaplugin* machine) { 
    72         resetKeyjazz(); 
     72        player->resetKeyjazz(); 
    7373        player->midiNoteMachine = machine; 
    7474 
     
    728728 
    729729 
    730 void CDocument::resetKeyjazz() { 
    731         // todo: set note off for all current playing keys 
    732         keyjazz.clear(); 
    733 } 
    734  
    735  
    736  
    737  
    738  
    739  
    740730// machine properties (working on selected machine) 
    741731void CDocument::setMachineName(metaplugin* machine, std::string name) { 
     
    12871277        if (mit == m_pFocusedPattern.end()) return 0; 
    12881278        return mit->second; 
    1289 } 
    1290  
    1291  
    1292 bool CDocument::isNotePlaying(metaplugin* m, int note) { 
    1293         for (size_t i = 0; i<keyjazz.size(); i++) 
    1294                 if (keyjazz[i].note == note) return true; 
    1295         return false; 
    12961279} 
    12971280 
     
    13101293 
    13111294void CDocument::playMachineNote(metaplugin* m, int note, int prevNote) { 
    1312         // create a blank 1-row pattern we're going to play 
    1313         zzub::pattern* p = new zzub::pattern(m->loader->plugin_info, m->getConnections(), m->getTracks(), 1); 
    1314  
    1315         bool multiChannel; 
    1316         size_t noteGroup = -1; 
    1317         size_t noteParameter = -1; 
    1318         m->findNoteColumn(noteParameter, noteGroup, multiChannel); 
    1319         if (noteParameter == -1) return ; 
    1320  
    1321         if (multiChannel) { 
    1322                 // play note on track 
    1323                 if (note == note_value_off) { 
    1324                         // find which track this note was played in and play a note-stop 
    1325                         for (size_t i = 0; i<keyjazz.size(); i++) { 
    1326                                 if (keyjazz[i].note == prevNote || prevNote == -1) { 
    1327                                         patterntrack* pt = p->getPatternTrack(keyjazz[i].group, keyjazz[i].track); 
    1328                                         pt->setValue(0, noteParameter, note_value_off); 
    1329                                         keyjazz.erase(keyjazz.begin() + i); 
    1330                                         i--; 
    1331                                         if (prevNote != -1) break; 
    1332                                 } 
    1333                         } 
    1334                 } else { 
    1335                         size_t lowestTime = UINT_MAX; 
    1336                         int lowestTrack = -1; 
    1337                         int foundTrack = -1; 
    1338                         size_t lowestIndex; 
    1339  
    1340                         vector<bool> foundTracks(m->getTracks()); 
    1341                         for (size_t i = 0; i < foundTracks.size(); i++) 
    1342                                 foundTracks[i] = false; 
    1343  
    1344                         for (size_t j = 0; j < keyjazz.size(); j++) { 
    1345                                 foundTracks[keyjazz[j].track] = true; 
    1346                                 if (keyjazz[j].timestamp < lowestTime) { 
    1347                                         lowestTime = keyjazz[j].timestamp; 
    1348                                         lowestTrack = keyjazz[j].track; 
    1349                                         lowestIndex = j; 
    1350                                 } 
    1351                         } 
    1352  
    1353                         for (size_t i = 0; i < foundTracks.size(); i++) { 
    1354                                 if (foundTracks[i] == false) { 
    1355                                         foundTrack = i; 
    1356                                         break; 
    1357                                 } 
    1358                         } 
    1359                         if (foundTrack == -1) { 
    1360                                 foundTrack = lowestTrack; 
    1361                                 keyjazz.erase(keyjazz.begin()+lowestIndex); 
    1362                         } 
    1363  
    1364                         patterntrack* pt = p->getPatternTrack(noteGroup, foundTrack); 
    1365                         pt->setValue(0, noteParameter, note); 
    1366  
    1367                         // find an available track or the one with lowest timestamp 
    1368                         KeyjazzInfo ki = {player->workPos, noteGroup, foundTrack, note }; 
    1369                         keyjazz.push_back(ki); 
    1370                 } 
    1371         } else { 
    1372                 // play global note - no need for track counting 
    1373                 if (note == note_value_off) { 
    1374                         for (int i = 0; i<keyjazz.size(); i++) { 
    1375                                 if (keyjazz[i].note == prevNote) { 
    1376                                         keyjazz.clear(); 
    1377  
    1378                                         patterntrack* pt = p->getPatternTrack(noteGroup, 0); 
    1379                                         pt->setValue(0, noteParameter, note); 
    1380                                         break; 
    1381                                 } 
    1382                         } 
    1383                 } else { 
    1384                         KeyjazzInfo ki = {player->workPos, 1, 0, note }; 
    1385                         keyjazz.clear(); 
    1386                         keyjazz.push_back(ki); 
    1387                          
    1388                         patterntrack* pt = p->getPatternTrack(noteGroup, 0); 
    1389                         pt->setValue(0, noteParameter, note); 
    1390                 } 
    1391         } 
    1392  
    1393         player->lock(); 
    1394         m->playPatternRow(p, 0, true); 
    1395         m->tickAsync(); 
    1396         player->unlock(); 
    1397  
    1398         delete p; 
    1399 } 
     1295        player->playMachineNote(m, note, prevNote, 0); 
     1296} 
     1297 
     1298// from player.cpp: 
     1299namespace zzub { 
     1300        extern bool isNotePlaying(zzub::metaplugin* plugin, const std::vector<zzub::keyjazz_note>& keyjazz, int note); 
     1301}; 
    14001302 
    14011303void CDocument::playStream(int note, std::string pluginUri, std::string dataUrl) { 
    14021304        if (!streamplayer) return ; 
     1305        if (isNotePlaying(streamplayer, player->keyjazz, note)) { 
     1306                return ; 
     1307        } 
    14031308 
    14041309        zzub::mem_archive archive; 
     
    14091314        player->lock(); 
    14101315        streamplayer->machine->init(&archive); 
     1316 
    14111317        playMachineNote(streamplayer, note, 0); 
    14121318/*      streamplayer->setParameter(1, 0, 0, note, false);       // note 
  • trunk/src/buzelib/Document.h

    r1318 r1319  
    33class CPropertyProvider; 
    44class CConfiguration; 
    5  
    6 struct KeyjazzInfo { 
    7     size_t timestamp; 
    8     size_t group, track; 
    9         int note; 
    10 }; 
    11  
    125 
    136struct pattern_position { 
     
    10194        int lastSaveUndoPosition;       // use to display "Are you sure you want to quit"-message 
    10295 
    103     std::vector<KeyjazzInfo> keyjazz; 
    104     void resetKeyjazz(); 
    105  
    10696        std::string currentFileName; 
    10797        std::string currentDirectory; 
     
    275265 
    276266        void setCurrentFile(std::string fileName); 
    277         bool isNotePlaying(zzub::metaplugin* m, int note); 
     267 
    278268        // note = buzz note or NOTE_OFF, prevNote = note for which NOTE_OFF is set or -1 
    279269        void playMachineNote(zzub::metaplugin* m, int note, int prevNote); 
  • trunk/src/buzelib/FileBrowserView.cpp

    r1297 r1319  
    207207 
    208208        CFileInfo* fileInfo = selectedFiles[0]; 
    209         if (mainFrame->document->isNotePlaying(mainFrame->document->streamplayer, note)) return 0; 
    210209         
    211210        std::string file = fileInfo->fullName; 
  • trunk/src/buzelib/MachineParameterView.cpp

    r1306 r1319  
    149149                if (!plugin || ((plugin->getFlags() & PLUGIN_FLAGS_MASK) != GENERATOR_PLUGIN_FLAGS)) return 0; 
    150150        } 
    151  
    152         if (document->isNotePlaying(plugin, note)) return 0; 
    153151 
    154152        document->playMachineNote(plugin, note, 0); 
  • trunk/src/buzelib/MachineView.cpp

    r1318 r1319  
    201201        if (m == 0) return 0; 
    202202 
    203         if (document->isNotePlaying(m, note)) return 0; 
    204  
    205         //if (m->getType() != plugin_type_generator) return 0;  // only generators 
    206  
    207203        document->playMachineNote(m, note, 0); 
    208204        return 0; 
     
    215211        metaplugin* m = document->getSelectedMachine(0); 
    216212        if (m == 0) return 0; 
    217  
    218         //if (m->getType() != plugin_type_generator) return 0;  // only generators 
    219  
    220         if (!document->isNotePlaying(m, note)) return 0; 
    221213 
    222214        document->playMachineNote(m, zzub::note_value_off, note); 
  • trunk/src/buzelib/PatternView.cpp

    r1318 r1319  
    13981398        size_t index; 
    13991399        pattern_position pos = document->getPatternPosition(machine, pattern); 
    1400         pattern->patternToLinear(pos.group, pos.track, pos.column, index); 
     1400        index = patternEditor.GetColumnIndex(pos.group, pos.track, pos.column); 
    14011401        patternEditor.GetSelectionRect(&sel); 
    14021402 
     
    14131413        size_t index; 
    14141414        pattern_position pos = document->getPatternPosition(machine, pattern); 
    1415         pattern->patternToLinear(pos.group, pos.track, pos.column, index); 
     1415        index = patternEditor.GetColumnIndex(pos.group, pos.track, pos.column); 
    14161416        patternEditor.GetSelectionRect(&sel); 
    14171417 
     
    14211421                patternEditor.SelectRange(sel.left, sel.top, index, pos.row); 
    14221422        } 
     1423        return 0; 
     1424} 
     1425 
     1426LRESULT CPatternView::OnUnSelect(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { 
     1427        patternEditor.SelectRange(-1, -1, -1, -1); 
    14231428        return 0; 
    14241429} 
     
    14291434        // 2. is the current selection length dividable with our beat highlight, if not, start new selection 
    14301435        // 3. set or double existing selection 
    1431 /*      RECT sel; 
     1436        RECT sel; 
    14321437        size_t index; 
    14331438        pattern_position pos = document->getPatternPosition(machine, pattern); 
    1434         pattern->patternToLinear(pos.group, pos.track, pos.column, index); 
    1435         patternEditor.getSelectionRect(&sel); 
     1439        index = patternEditor.GetColumnIndex(pos.group, pos.track, pos.column); 
     1440        patternEditor.GetSelectionRect(&sel); 
    14361441 
    14371442        if (sel.left == -1) { 
     
    14541459 
    14551460        patternEditor.SelectRange(sel.left, pos.row, sel.right, targetLength); 
    1456         */ 
     1461         
    14571462        return 0; 
    14581463} 
     
    14601465LRESULT CPatternView::OnSelectColumns(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { 
    14611466        // select column, track, group or all 
    1462 /*      RECT sel; 
     1467        RECT sel; 
    14631468        size_t index; 
    14641469        pattern_position pos = document->getPatternPosition(machine, pattern); 
    1465         pattern->patternToLinear(pos.group, pos.track, pos.column, index); 
    1466         patternEditor.getSelectionRect(&sel); 
     1470        index = patternEditor.GetColumnIndex(pos.group, pos.track, pos.column); 
     1471        patternEditor.GetSelectionRect(&sel); 
    14671472 
    14681473        int firstColumn = index; 
     
    14711476        if (sel.top == 0 && sel.bottom == pattern->getRows()-1) { 
    14721477                size_t thisTrackFirstColumn, thisGroupFirstColumn; 
    1473                 pattern->patternToLinear(pos.group, pos.track, 0, thisTrackFirstColumn); 
    1474                 pattern->patternToLinear(pos.group, 0, 0, thisGroupFirstColumn); 
     1478                thisTrackFirstColumn = patternEditor.GetColumnIndex(pos.group, pos.track, 0); 
     1479                thisGroupFirstColumn = patternEditor.GetColumnIndex(pos.group, 0, 0); 
    14751480                size_t thisTrackNumColumns = 1; 
    14761481                size_t thisGroupNumColumns = 1; 
     
    15151520 
    15161521        patternEditor.SelectRange(firstColumn, 0, lastColumn, pattern->getRows()-1); 
    1517 */ 
     1522 
    15181523        return 0; 
    15191524} 
  • trunk/src/buzelib/PatternView.h

    r1318 r1319  
    177177                COMMAND_ID_HANDLER(ID_PATTERNEDITOR_SELECT_BEGIN, OnSelectBegin) 
    178178                COMMAND_ID_HANDLER(ID_PATTERNEDITOR_SELECT_END, OnSelectEnd) 
     179                COMMAND_ID_HANDLER(ID_PATTERNEDITOR_SELECT_UN, OnUnSelect) 
    179180                COMMAND_ID_HANDLER(ID_PATTERNEDITOR_SELECT_COLUMNS, OnSelectColumns) 
    180181                COMMAND_ID_HANDLER(ID_PATTERNEDITOR_SELECT_ROWS, OnSelectRows) 
     
    302303        LRESULT OnSelectBegin(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
    303304        LRESULT OnSelectEnd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
     305        LRESULT OnUnSelect(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
    304306        LRESULT OnSelectRows(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
    305307        LRESULT OnSelectColumns(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
  • trunk/src/buzelib/WaveTableView.cpp

    r1312 r1319  
    448448 
    449449        if (!document->streamplayer) return 0; 
    450         if (document->isNotePlaying(document->streamplayer, note)) return 0; 
    451450 
    452451        document->playStream(note, "@zzub.org/stream/wavetable;1", stringFromInt(index+1)); 
    453452        return 0; 
    454         //return this->waveEditorCtrl.OnKeyDown(uMsg, wParam, lParam, bHandled); 
    455453} 
    456454 
     
    479477 
    480478LRESULT CWaveTableView::OnLoadWave(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 
    481         MessageBox("Load wave not implemented"); 
     479        MessageBox("Load wave not implemented. Instead, try to drag + drop files onto the wave table."); 
    482480        return 0; 
    483481} 
  • trunk/src/buzelib/buze.rc

    r1317 r1319  
    835835    "E",            ID_PATTERNEDITOR_SELECT_END, VIRTKEY, SHIFT, CONTROL,  
    836836                                                    NOINVERT 
     837    "U",            ID_PATTERNEDITOR_SELECT_UN, VIRTKEY, SHIFT, CONTROL,  
     838                                                    NOINVERT 
    837839    "L",            ID_PATTERNEDITOR_SELECT_COLUMNS, VIRTKEY, SHIFT, CONTROL,  
    838840                                                    NOINVERT 
     
    12471249 
    12481250 
     1251 
  • trunk/src/buzelib/res/keyboard_patterneditor.txt

    r1292 r1319  
    6060        Ctrl+L                          Solo/unsolo current machine  
    6161        Ctrl+R                          Randomize selection  
     62        Ctrl+T                          Toggle column editor for number columns 
     63        Ctrl+U                          Unselect 
    6264        Ctrl+Up                         Show pattern for next machine  
    6365        Ctrl+Down                       Show pattern for previous machine  
     
    6870        Space                           Paste current parameter value 
    6971        Ctrl+Space                      Paste current group values 
    70         Ctrl+T                          Toggle column editor for number columns 
    7172        (keyboard notes)                Edit notes  
  • trunk/src/buzelib/resource.h

    r1318 r1319  
    407407#define ID_ANALYZER_MODE_FIRST                  53539 
    408408#define ID_ANALYZER_MODE_LAST                   53559 
    409  
     409#define ID_PATTERNEDITOR_SELECT_UN     53560 
    410410// Next default values for new objects 
    411411//