Changeset 1280
- Timestamp:
- 10/11/07 04:26:57 (12 months ago)
- Location:
- trunk/src/buzelib
- Files:
-
- 10 modified
-
MachineParameterView.cpp (modified) (6 diffs)
-
MachineView.cpp (modified) (4 diffs)
-
MachineView.h (modified) (1 diff)
-
MainFrm.cpp (modified) (1 diff)
-
ParameterSliderCtrl.cpp (modified) (2 diffs)
-
PresetDialog.cpp (modified) (2 diffs)
-
SelectMachine.cpp (modified) (2 diffs)
-
SelectMachine.h (modified) (2 diffs)
-
Utils/utils.cpp (modified) (1 diff)
-
Utils/utils.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/buzelib/MachineParameterView.cpp
r1276 r1280 208 208 defaultPreset.name = "<default>"; 209 209 defaultPreset.parameters = 0; 210 for (size_t i = 0; i<getStateParameters(machine); i++) { 210 pattern conv(machine, 0); 211 for (size_t i = 0; i<conv.getColumns(); i++) { 212 const parameter* param = conv.getColumnParameter(i); 213 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 214 211 215 size_t pgroup = 0, ptrack = 0, pcolumn = 0; 212 stateToPatternSpace(machine,i, pgroup, ptrack, pcolumn);216 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 213 217 if (pgroup == 0) continue; 214 218 … … 255 259 LRESULT CMachineParameterView::OnPresetRandom(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 256 260 257 for (size_t i = 0; i<getStateParameters(machine); i++) { 261 pattern conv(machine, 0); 262 for (size_t i = 0; i<conv.getColumns(); i++) { 263 const parameter* param = conv.getColumnParameter(i); 264 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 265 258 266 size_t pgroup = 0, ptrack = 0, pcolumn = 0; 259 stateToPatternSpace(machine,i, pgroup, ptrack, pcolumn);267 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 260 268 if (pgroup == 0) continue; 261 262 const parameter* param = machine->getMachineParameter(pgroup, ptrack, pcolumn);263 if (!param) continue;264 269 265 270 if (param->type!=parameter_type_note) { … … 367 372 368 373 LRESULT CMachineParameterView::OnSelChange(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 369 int presetIndex=presetDropDown.GetCurSel(); 370 const PresetInfo& pi=*(const PresetInfo*)presetDropDown.GetItemData(presetIndex); 371 372 // TODO: rid getStateParameters from libzzub and handle all that stuff locally 374 int presetIndex = presetDropDown.GetCurSel(); 375 const PresetInfo& pi = *(const PresetInfo*)presetDropDown.GetItemData(presetIndex); 376 377 pattern conv(machine, 0); 378 373 379 int valueIndex = 0; 374 for (size_t i=0; i<pi.parameters; i++) { 375 if (i<getStateParameters(machine)) { 376 size_t pgroup=0, ptrack=0, pcolumn=0; 377 stateToPatternSpace(machine, i, pgroup, ptrack, pcolumn); 378 if (pgroup == 0) continue; 379 380 machine->setParameter(pgroup, ptrack, pcolumn, pi.values[valueIndex], true); 381 valueIndex++; 382 } else 383 break; 380 for (size_t i = 0; i < conv.getColumns(); i++) { 381 const parameter* param = conv.getColumnParameter(i); 382 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 383 if (i >= pi.parameters) break; 384 385 size_t pgroup=0, ptrack=0, pcolumn=0; 386 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 387 if (pgroup == 0) continue; 388 389 machine->setParameter(pgroup, ptrack, pcolumn, pi.values[valueIndex], true); 390 valueIndex++; 384 391 } 385 392 return 0; … … 571 578 } 572 579 573 pluginloader* loader=machine->loader; 574 575 // burde hete getstatecolumn 576 size_t numSliders=0; 577 size_t stateColumns=getStateParameters(machine); 578 for (size_t i=0; i<stateColumns; i++) { 580 pluginloader* loader = machine->loader; 581 582 size_t numSliders = 0; 583 pattern conv(machine, 0); 584 for (size_t i=0; i<conv.getColumns(); i++) { 585 const parameter* param = conv.getColumnParameter(i); 586 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 587 579 588 size_t pgroup=0, ptrack=0, pcolumn=0; 580 stateToPatternSpace(machine, i, pgroup, ptrack, pcolumn); 589 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 590 581 591 if (pgroup != 0) { 582 583 592 bool paramHide=mainFrame->getMachineParameterHidden(machine, pgroup, ptrack, pcolumn); 584 if (paramHide) { 585 continue; 586 } 593 if (paramHide) continue; 594 } else 595 if (pgroup == 0) { 596 zzub::connection* conn = machine->getConnection(ptrack); 597 if (conn->plugin_in->nonSongPlugin) continue; 587 598 } 588 599 numSliders++; … … 600 611 sliders.resize(numSliders); 601 612 size_t sliderIndex=0; 602 for (size_t i=0; i<stateColumns; i++) { 613 for (size_t i = 0; i < conv.getColumns(); i++) { 614 const parameter* param = conv.getColumnParameter(i); 615 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 616 603 617 size_t pgroup=0, ptrack=0, pcolumn=0; 604 stateToPatternSpace(machine,i, pgroup, ptrack, pcolumn);618 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 605 619 606 620 if (pgroup != 0) { 607 621 bool paramHide=mainFrame->getMachineParameterHidden(machine, pgroup, ptrack, pcolumn); 608 622 if (paramHide) continue; 623 } else 624 if (pgroup == 0) { 625 zzub::connection* conn = machine->getConnection(ptrack); 626 if (conn->plugin_in->nonSongPlugin) continue; 609 627 } 610 628 … … 674 692 menu.CreatePopupMenu(); 675 693 676 pluginloader* loader =machine->loader;694 pluginloader* loader = machine->loader; 677 695 678 696 CMenu hiddenMenu; 679 697 hiddenMenu.CreatePopupMenu(); 680 int hiddens=0; 681 for (size_t i=0; i<getStateParameters(machine); i++) { 698 int hiddens = 0; 699 pattern conv(machine, 0); 700 701 for (size_t i=0; i<conv.getColumns(); i++) { 702 const parameter* param = conv.getColumnParameter(i); 703 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 704 682 705 size_t pgroup=0, ptrack=0, pcolumn=0; 683 stateToPatternSpace(machine,i, pgroup, ptrack, pcolumn);706 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 684 707 685 708 if (pgroup == 0) continue; 686 709 687 size_t paramIndex=-1; 688 zzub::pattern conv(machine->loader->plugin_info, machine->getConnections(), machine->getTracks(), 0); 689 conv.patternToLinear(pgroup, ptrack, pcolumn, paramIndex); 690 691 bool paramHide=mainFrame->getMachineParameterHidden(machine, pgroup, ptrack, pcolumn); 710 bool paramHide = mainFrame->getMachineParameterHidden(machine, pgroup, ptrack, pcolumn); 692 711 693 712 if (paramHide) { 694 hiddenMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, (UINT_PTR)ID_PARAMETER_UNHIDE_FIRST+ paramIndex, conv.getColumnParameter(paramIndex)->name);713 hiddenMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, (UINT_PTR)ID_PARAMETER_UNHIDE_FIRST+i, param->name); 695 714 hiddens++; 696 715 } -
trunk/src/buzelib/MachineView.cpp
r1277 r1280 1235 1235 } 1236 1236 1237 1238 void CMachineView::drawMachine(CDC& dc, metaplugin* plugin) { 1237 void CMachineView::drawMachine(CDC& dc, metaplugin* plugin, bool ledOnly) { 1239 1238 1240 1239 int halfWidth=(getMachineWidth(plugin)/2) * scale; … … 1296 1295 dc.TextOut(mRect.left+halfWidth, mRect.top+halfHeight-(fontSize/2)+adjustY, label.c_str(), label.length()); 1297 1296 1298 if (document->isSelectedMachine(plugin)) { 1299 CPen selectPen; 1300 selectPen.CreatePen(PS_DOT, 1, (COLORREF)0); 1301 dc.SelectPen(selectPen); 1302 dc.MoveTo(mRect.left-2, mRect.top-2); 1303 dc.LineTo(mRect.right+1, mRect.top-2); 1304 dc.LineTo(mRect.right+1, mRect.bottom+1); 1305 dc.LineTo(mRect.left-2, mRect.bottom+1); 1306 dc.LineTo(mRect.left-2, mRect.top-2); 1297 if (!ledOnly && document->isSelectedMachine(plugin)) { 1298 RECT fRect = mRect; 1299 fRect.left -= 2; 1300 fRect.top -= 2; 1301 fRect.right += 2; 1302 fRect.bottom += 2; 1303 dc.SetTextColor(0); 1304 dc.DrawFocusRect(&fRect); 1307 1305 } 1308 1306 … … 1384 1382 if (machine->nonSongPlugin) continue; 1385 1383 1386 drawMachine(dc, machine );1384 drawMachine(dc, machine, false); 1387 1385 1388 1386 } … … 1412 1410 } else { 1413 1411 // draw a rectangle from the machine skin where the led is drawn 1414 drawMachine(dc, machine );1412 drawMachine(dc, machine, true); 1415 1413 } 1416 1414 } else { -
trunk/src/buzelib/MachineView.h
r1276 r1280 173 173 CBrush& getMachinePanningBrush(zzub::metaplugin* machine); 174 174 CBrush& getMachineLedBrush(zzub::metaplugin* machine); 175 void drawMachine(CDC& dc, zzub::metaplugin* plugin );175 void drawMachine(CDC& dc, zzub::metaplugin* plugin, bool ledOnly); 176 176 void drawDirectionTriangle(CDC& dc, RECT mRect, RECT sRect, std::string text); 177 177 void drawVolumeSlider(CDC& dc, RECT vsr, int value); -
trunk/src/buzelib/MainFrm.cpp
r1276 r1280 1823 1823 int views = (machineParameters.getViews() % 16); 1824 1824 1825 int params = getStateParameters(m); 1825 int params = 0; 1826 pattern conv(m, 0); 1827 for (size_t i = 0; i < conv.getColumns(); i++) { 1828 const parameter* param = conv.getColumnParameter(i); 1829 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 1830 size_t g = 0, t = 0, c = 0; 1831 conv.linearToPattern(i, g, t, c); 1832 if (g == 0) { 1833 zzub::connection* conn = m->getConnection(t); 1834 if (conn->plugin_in->nonSongPlugin) continue; 1835 } 1836 params++; 1837 } 1826 1838 int parameterHeight = params*CParameterSliderCtrl::sliderHeight + 20; // 22 = toolbarheight 1827 1839 -
trunk/src/buzelib/ParameterSliderCtrl.cpp
r1273 r1280 66 66 if (group == 0) { 67 67 connection* conn = machine->getConnection(track); 68 parameterName = "a-"+conn->plugin_in->getName(); 68 if (column == 0) 69 parameterName = "a-"+conn->plugin_in->getName(); 70 if (column == 1) 71 parameterName = "p-"+conn->plugin_in->getName(); 69 72 } else 70 73 if (group == 2) { … … 143 146 hiddenMenu.CreatePopupMenu(); 144 147 size_t hiddens=0; 145 for (size_t i=0; i<getStateParameters(machine); i++) { 148 pattern conv(machine, 0); 149 for (size_t i=0; i<conv.getColumns(); i++) { 150 const parameter* param = conv.getColumnParameter(i); 151 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 152 146 153 size_t pgroup=0, ptrack=0, pcolumn=0; 147 stateToPatternSpace(machine,i, pgroup, ptrack, pcolumn);154 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 148 155 149 size_t paramIndex=-1;150 zzub::pattern conv(machine, 0);151 conv.patternToLinear(pgroup, ptrack, pcolumn, paramIndex);152 153 // if (!loader || !loader->getExtendedParameterProperty(paramIndex, "Hidden", ¶mHide))154 // paramHide=0;155 156 bool paramHide=mainFrame->getMachineParameterHidden(machine, pgroup, ptrack, pcolumn); 156 157 if (paramHide) { 157 hiddenMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, (UINT_PTR)ID_PARAMETER_UNHIDE_FIRST+ paramIndex, conv.getColumnParameter(paramIndex)->name);158 hiddenMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, (UINT_PTR)ID_PARAMETER_UNHIDE_FIRST+i, param->name); 158 159 hiddens++; 159 160 } -
trunk/src/buzelib/PresetDialog.cpp
r1274 r1280 6 6 7 7 CPresetDialog::CPresetDialog(PresetManager* prs, zzub::metaplugin* plug) { 8 presets = prs;9 plugin = plug;8 presets = prs; 9 plugin = plug; 10 10 } 11 11 12 12 13 13 LRESULT CPresetDialog::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { 14 commentBox.Attach(GetDlgItem(IDC_PRESET_COMMENT_EDIT));15 deleteButton.Attach(GetDlgItem(IDC_PRESET_DELETE_BUTTON));16 presetList.Attach(GetDlgItem(IDC_PRESET_LIST));17 nameBox.Attach(GetDlgItem(IDC_PRESET_NAME));14 commentBox.Attach(GetDlgItem(IDC_PRESET_COMMENT_EDIT)); 15 deleteButton.Attach(GetDlgItem(IDC_PRESET_DELETE_BUTTON)); 16 presetList.Attach(GetDlgItem(IDC_PRESET_LIST)); 17 nameBox.Attach(GetDlgItem(IDC_PRESET_NAME)); 18 18 19 19 for (size_t i=0; i<presets->getPresetCount(); i++) { 20 PresetInfo* pi=presets->getPreset(i);20 PresetInfo* pi=presets->getPreset(i); 21 21 presetList.InsertString(i, pi->name.c_str()); 22 22 } 23 24 return TRUE;23 24 return TRUE; 25 25 } 26 26 … … 31 31 32 32 LRESULT CPresetDialog::OnBnClickedOk(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 33 char pc[4096];34 nameBox.GetWindowText(pc, 4096);33 char pc[4096]; 34 nameBox.GetWindowText(pc, 4096); 35 35 36 // overwrite existing preset?37 PresetInfo* pi = presets->getPreset(pc);38 bool newpreset = false;36 // overwrite existing preset? 37 PresetInfo* pi = presets->getPreset(pc); 38 bool newpreset = false; 39 39 40 if (!pi) {41 // no - create a new42 pi = new PresetInfo();43 pi->name = pc;44 newpreset = true;45 }40 if (!pi) { 41 // no - create a new 42 pi = new PresetInfo(); 43 pi->name = pc; 44 newpreset = true; 45 } 46 46 47 commentBox.GetWindowText(pc, 4096); 48 pi->comment = pc; 49 pi->parameters = getStateParameters(plugin); 50 for (size_t i = 0; i<pi->parameters; i++) { 47 commentBox.GetWindowText(pc, 4096); 48 pi->comment = pc; 49 50 zzub::pattern conv(plugin, 0); 51 for (size_t i = 0; i < conv.getColumns(); i++) { 52 const zzub::parameter* param = conv.getColumnParameter(i); 53 if ((param->flags & zzub::parameter_flag_state) == 0) continue; 54 51 55 size_t pgroup=0, ptrack=0, pcolumn=0; 52 stateToPatternSpace(plugin,i, pgroup, ptrack, pcolumn);56 conv.linearToPattern(i, pgroup, ptrack, pcolumn); 53 57 54 pi->values[i] = plugin->getParameter(pgroup, ptrack, pcolumn); 55 } 58 pi->values[i] = plugin->getParameter(pgroup, ptrack, pcolumn); 59 pi->parameters++; 60 } 56 61 57 if (newpreset)58 presets->add(*pi);62 if (newpreset) 63 presets->add(*pi); 59 64 60 65 EndDialog(wID); 61 66 62 return 0;67 return 0; 63 68 } 64 69 65 70 LRESULT CPresetDialog::OnPresetChange(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 66 int sel = presetList.GetCurSel();71 int sel = presetList.GetCurSel(); 67 72 68 if (sel != -1) {69 PresetInfo* pi = presets->getPreset(sel);70 nameBox.SetWindowText(pi->name.c_str());71 commentBox.SetWindowText(pi->comment.c_str());72 }73 if (sel != -1) { 74 PresetInfo* pi = presets->getPreset(sel); 75 nameBox.SetWindowText(pi->name.c_str()); 76 commentBox.SetWindowText(pi->comment.c_str()); 77 } 73 78 74 return 0;79 return 0; 75 80 } 76 81 77 82 LRESULT CPresetDialog::OnPresetDelete(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 78 int sel = presetList.GetCurSel();83 int sel = presetList.GetCurSel(); 79 84 80 if (sel != -1) {81 presets->remove(sel);82 EndDialog(IDOK);83 }85 if (sel != -1) { 86 presets->remove(sel); 87 EndDialog(IDOK); 88 } 84 89 85 return 0;90 return 0; 86 91 } -
trunk/src/buzelib/SelectMachine.cpp
r1218 r1280 1 1 #include "StdAfx.h" 2 2 #include "resource.h" 3 4 #include ".\selectmachine.h" 3 #include "SelectMachine.h" 5 4 6 5 using namespace zzub; … … 12 11 } 13 12 14 CSelectMachineDialog::~CSelectMachineDialog(void) 15 { 13 CSelectMachineDialog::~CSelectMachineDialog(void) { 14 } 15 16 LRESULT CSelectMachineDialog::OnChar(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) { 17 if (wParam=='\n') return SendMessage(WM_COMMAND, IDOK); 18 return TRUE; 19 } 20 21 LRESULT CSelectMachineDialog::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { 22 using namespace std; 23 CenterWindow(GetParent()); 24 list.Attach(GetDlgItem(IDC_MACHINELIST)); 25 26 for (size_t i=0; i<player->getMachines(); i++) { 27 zzub::metaplugin* plugin = player->getMachine(i); 28 if (plugin->nonSongPlugin) continue; 29 list.AddString(plugin->getName().c_str()); 30 } 31 32 list.SetCurSel(0); 33 list.SetFocus(); 34 35 return TRUE; 36 } 37 38 LRESULT CSelectMachineDialog::OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 39 EndDialog(wID); 40 return 0; 16 41 } 17 42 -
trunk/src/buzelib/SelectMachine.h
r1218 r1280 13 13 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 14 14 MESSAGE_HANDLER(WM_CHAR, OnChar) 15 //COMMAND_ID_HANDLER(IDOK, OnCloseCmd)16 15 COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) 17 16 COMMAND_ID_HANDLER(IDOK, OnBnClickedOk) … … 22 21 ~CSelectMachineDialog(void); 23 22 24 LRESULT OnChar(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) { 25 if (wParam=='\n') return SendMessage(WM_COMMAND, IDOK); 26 return TRUE; 27 } 28 29 LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { 30 using namespace std; 31 CenterWindow(GetParent()); 32 list.Attach(GetDlgItem(IDC_MACHINELIST)); 33 34 for (size_t i=0; i<player->getMachines(); i++) { 35 list.AddString(player->getMachine(i)->getName().c_str()); 36 } 37 38 list.SetCurSel(0); 39 list.SetFocus(); 40 41 return TRUE; 42 } 43 44 LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { 45 EndDialog(wID); 46 return 0; 47 } 23 LRESULT OnChar(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/); 24 LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); 25 LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 48 26 LRESULT OnBnClickedOk(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 49 27 LRESULT OnLbnSelchangeMachinelist(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); -
trunk/src/buzelib/Utils/utils.cpp
r1273 r1280 84 84 return ((zzub::audio_connection*)conn)->values.pan; 85 85 return 0xffff; 86 }87 88 89 /*90 91 metaplugin column space conversion helpers92 93 */94 size_t getStateParameters(zzub::metaplugin* self) {95 size_t count = self->getConnections(); // volume are state parameters96 count += self->globalState.getStateTrack()->getStateParams();97 for (size_t i = 0; i < self->trackStates.size(); i++)98 count += self->trackStates[i]->getStateTrack()->getStateParams();99 100 return count;101 }102 103 bool stateToPatternSpace(zzub::metaplugin* self, size_t index, size_t& group, size_t& track, size_t& column) {104 size_t currentParameter = 0;105 106 for (size_t i = 0; i < self->getConnections(); i++) {107 if (index == currentParameter) {108 group = 0;109 track = i;110 column = 0;111 return true;112 }113 currentParameter++;114 }115 116 for (size_t i = 0; i < self->loader->plugin_info->global_parameters.size(); i++) {117 if (self->loader->plugin_info->global_parameters[i]->flags & zzub::parameter_flag_state) {118 if (index == currentParameter) {119 group = 1;120 track = 0;121 column = i;122 return true;123 }124 currentParameter++;125 }126 }127 128 for (size_t j=0; j<self->getTracks(); j++) {129 for (size_t i = 0; i < self->loader->plugin_info->track_parameters.size(); i++) {130 if (self->loader->plugin_info->track_parameters[i]->flags & zzub::parameter_flag_state) {131 if (index == currentParameter) {132 group = 2;133 track = j;134 column = i;135 return true;136 }137 currentParameter++;138 }139 }140 }141 return false;142 86 } 143 87 -
trunk/src/buzelib/Utils/utils.h
r1273 r1280 34 34 int getConnectionPan(const zzub::connection* conn); 35 35 36 bool stateToPatternSpace(zzub::metaplugin* self, size_t index, size_t& group, size_t& track, size_t& column);37 size_t getStateParameters(zzub::metaplugin* self);38 39 40 36 // taken from comment on http://www.codeproject.com/string/stringsplit.asp?df=100&forumid=2167&exp=0&select=1062827#xx1062827xx 41 37 template<typename _Cont>
