summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit/scoreedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/midiedit/scoreedit.cpp')
-rw-r--r--muse2/muse/midiedit/scoreedit.cpp108
1 files changed, 69 insertions, 39 deletions
diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp
index 2077b202..0e164a2a 100644
--- a/muse2/muse/midiedit/scoreedit.cpp
+++ b/muse2/muse/midiedit/scoreedit.cpp
@@ -159,24 +159,30 @@ bool pixmaps_loaded=false;
ScoreEdit::ScoreEdit(PartList* pl, QWidget* parent, const char* name, unsigned initPos)
: MidiEditor(0, 0, pl, parent, name)
{
- ScoreCanvas* test=new ScoreCanvas(this, mainw, 1, 1);
+ score_canvas=new ScoreCanvas(this, mainw, 1, 1);
hscroll = new QScrollBar(Qt::Horizontal, mainw);
+ connect(hscroll, SIGNAL(valueChanged(int)), score_canvas, SLOT(scroll_event(int)));
+ connect(score_canvas, SIGNAL(xpos_changed(int)), hscroll, SLOT(setValue(int)));
+ connect(score_canvas, SIGNAL(canvas_width_changed(int)), SLOT(canvas_width_changed(int)));
+ connect(score_canvas, SIGNAL(viewport_width_changed(int)), SLOT(viewport_width_changed(int)));
+ connect(song, SIGNAL(songChanged(int)), score_canvas, SLOT(song_changed(int)));
-connect(hscroll, SIGNAL(valueChanged(int)), test, SLOT(scroll_event(int)));
-connect(test, SIGNAL(xpos_changed(int)), hscroll, SLOT(setValue(int)));connect(song, SIGNAL(songChanged(int)), test, SLOT(song_changed(int)));
-connect(test, SIGNAL(canvas_width_changed(int)), SLOT(canvas_width_changed(int)));
-connect(test, SIGNAL(viewport_width_changed(int)), SLOT(viewport_width_changed(int)));
+ mainGrid->addWidget(score_canvas, 0, 0);
+ mainGrid->addWidget(hscroll,1,0);
- mainGrid->addWidget(test, 0, 0);
- mainGrid->addWidget(hscroll,1,0);
+ hscroll->setMinimum(0);
-hscroll->setMinimum(0);
-test->song_changed(0);
-test->goto_tick(initPos,true);
+ score_canvas->song_changed(0);
+ score_canvas->goto_tick(initPos,true);
}
+void ScoreEdit::add_parts(PartList* pl, bool all_in_one)
+{
+ score_canvas->add_staves(pl, all_in_one);
+}
+
//---------------------------------------------------------
// ~ScoreEdit
//---------------------------------------------------------
@@ -208,7 +214,55 @@ void ScoreEdit::closeEvent(QCloseEvent* e)
+void ScoreCanvas::add_staves(PartList* pl, bool all_in_one)
+{
+ staff_t staff;
+
+ if (all_in_one)
+ {
+ staff.parts.clear();
+ for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++)
+ staff.parts.insert(part_it->second);
+
+ staff.split_note=SPLIT_NOTE;
+
+ staff.type=GRAND_TOP; //FINDMICH
+ staff.clef=VIOLIN;
+ staffs.push_back(staff);
+
+ staff.type=GRAND_BOTTOM;
+ staff.clef=BASS;
+ staffs.push_back(staff);
+ }
+ else
+ {
+ set<Track*> tracks;
+
+ for (ciPart it=pl->begin(); it!=pl->end(); it++)
+ tracks.insert(it->second->track());
+
+ for (set<Track*>::iterator it=tracks.begin(); it!=tracks.end(); it++)
+ {
+ staff.parts.clear();
+ for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++)
+ if (part_it->second->track() == *it)
+ staff.parts.insert(part_it->second);
+
+ staff.split_note=SPLIT_NOTE;
+
+ staff.type=GRAND_TOP; //FINDMICH
+ staff.clef=VIOLIN;
+ staffs.push_back(staff);
+ staff.type=GRAND_BOTTOM;
+ staff.clef=BASS;
+ staffs.push_back(staff);
+ }
+ }
+
+ recalc_staff_pos();
+ song_changed(0);
+}
ScoreCanvas::ScoreCanvas(MidiEditor* pr, QWidget* parent,
@@ -228,39 +282,12 @@ ScoreCanvas::ScoreCanvas(MidiEditor* pr, QWidget* parent,
mouse_erases_notes=false;
mouse_inserts_notes=true;
- curr_part=editor->parts()->begin()->second;
+ curr_part=editor->parts()->begin()->second; //TODO FINDMICH
last_len=384;
new_len=-1;
dragging_staff=false;
-
- //each track gets its own staff
- staff_t staff;
- set<Track*> tracks;
-
- for (ciPart it=editor->parts()->begin(); it!=editor->parts()->end(); it++)
- tracks.insert(it->second->track());
-
- for (set<Track*>::iterator it=tracks.begin(); it!=tracks.end(); it++)
- {
- staff.parts.clear();
- for (ciPart part_it=editor->parts()->begin(); part_it!=editor->parts()->end(); part_it++)
- if (part_it->second->track() == *it)
- staff.parts.insert(part_it->second);
-
- staff.split_note=SPLIT_NOTE;
-
- staff.type=GRAND_TOP;
- staff.clef=VIOLIN;
- staffs.push_back(staff);
-
- staff.type=GRAND_BOTTOM;
- staff.clef=BASS;
- staffs.push_back(staff);
- }
-
- recalc_staff_pos();
scroll_speed=0;
@@ -2861,7 +2888,8 @@ list<staff_t>::iterator ScoreCanvas::staff_at_y(int y)
* o when pressing "STOP", the active note isn't redrawn "normally"
*
* CURRENT TODO
- * > o menu entries etc for creating new staves etc.
+ * o use correct names in score-menus
+ * o must add_parts() update the part-list?
*
* IMPORTANT TODO
* o support adding staves to existing score window
@@ -2891,6 +2919,8 @@ list<staff_t>::iterator ScoreCanvas::staff_at_y(int y)
* o redraw is called too often
* for example, when scroll is continuous, and note-hilighting has
* changed, redraw() is called twice
+ * o song_changed() should distinguish between relevant and
+ * irrelevant changes. (for example controllers can be ignored)
* o ties aren't always drawn correctly when the destination note
* is out of view
* o tied notes don't work properly when there's a key-change in