diff options
Diffstat (limited to 'muse2')
-rw-r--r-- | muse2/muse/midiedit/scoreedit.cpp | 29 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.h | 5 |
2 files changed, 31 insertions, 3 deletions
diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 143daac5..641f3b5f 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -247,6 +247,14 @@ ScoreEdit::ScoreEdit(PartList* pl, QWidget* parent, const char* name, unsigned i quant_len_toolbar->addWidget(quant_combobox); quant_combobox->setCurrentIndex(2); + quant_len_toolbar->addWidget(new QLabel(tr("Pixels per whole:"), quant_len_toolbar)); + QSpinBox* px_per_whole_spinbox = new QSpinBox(this); + px_per_whole_spinbox->setRange(10, 1000); + px_per_whole_spinbox->setSingleStep(50); + connect(px_per_whole_spinbox, SIGNAL(valueChanged(int)), score_canvas, SLOT(set_pixels_per_whole(int))); + connect(score_canvas, SIGNAL(pixels_per_whole_changed(int)), px_per_whole_spinbox, SLOT(setValue(int))); + quant_len_toolbar->addWidget(px_per_whole_spinbox); + px_per_whole_spinbox->setValue(300); QMenu* settings_menu = menuBar()->addMenu(tr("&Settings")); @@ -492,6 +500,7 @@ ScoreCanvas::ScoreCanvas(MidiEditor* pr, QWidget* parent_widget, set_quant(2); //this is actually unneccessary, as while //initalizing the quant_combobox, this gets //called again. but for safety... + set_pixels_per_whole(300); //same as above. but safety rocks dragging_staff=false; @@ -3215,7 +3224,11 @@ void ScoreCanvas::set_quant(int val) if ((val>=0) && (val<signed(sizeof(quant_mapper)/sizeof(*quant_mapper)))) { + int old_len=quant_len(); + _quant_power2=quant_mapper[val]; + + set_pixels_per_whole(pixels_per_whole() * quant_len() / old_len ); song_changed(SC_EVENT_INSERTED); } @@ -3225,6 +3238,19 @@ void ScoreCanvas::set_quant(int val) } } +void ScoreCanvas::set_pixels_per_whole(int val) +{ + cout << "DEBUG: setting px per whole to " << val << endl; + _pixels_per_whole=val; + + for (list<staff_t>::iterator it=staves.begin(); it!=staves.end(); it++) + it->calc_item_pos(); + + emit pixels_per_whole_changed(val); + + redraw(); +} + void ScoreCanvas::cleanup_staves() { for (list<staff_t>::iterator it=staves.begin(); it!=staves.end();) @@ -3307,10 +3333,9 @@ bool staff_t::cleanup_parts() * the problem is: there's always the first part selected * * CURRENT TODO - * o automatically set x-raster (by quant. strength) + * o let the user select the currently edited part * * IMPORTANT TODO - * o let the user select the currently edited part * o support selections * o check if "moving away" works for whole notes [seems to NOT work properly] * diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index f512f7a0..2c7cdaf0 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -544,6 +544,7 @@ class ScoreCanvas : public View // member variables --------------------------------------------------- int _quant_power2; + int _pixels_per_whole; std::map<int,int> pos_add_list; @@ -632,6 +633,7 @@ class ScoreCanvas : public View void menu_command(int); void preamble_keysig_slot(bool); void preamble_timesig_slot(bool); + void set_pixels_per_whole(int); signals: void xscroll_changed(int); @@ -640,6 +642,7 @@ class ScoreCanvas : public View void canvas_width_changed(int); void viewport_height_changed(int); void canvas_height_changed(int); + void pixels_per_whole_changed(int); protected: virtual void draw(QPainter& p, const QRect& rect); @@ -664,7 +667,7 @@ class ScoreCanvas : public View int quant_power2() { return _quant_power2; } int quant_len() { return (1<<_quant_power2); } int quant_ticks() { return TICKS_PER_WHOLE / (1<<_quant_power2); } - int pixels_per_whole() { return 320; } //TODO FINDMICHJETZT + int pixels_per_whole() { return _pixels_per_whole; } int note_x_indent() { return pixels_per_whole()/quant_len()/2; } }; |