1
//=========================================================
4
// $Id: lmaster.cpp,v 1.1 2002/01/30 14:54:03 muse Exp $
5
// (C) Copyright 2000 Werner Schweer (ws@seh.de)
6
//=========================================================
15
#include <qtoolbutton.h>
18
#include <qsizegrip.h>
19
#include <qpopupmenu.h>
21
#include <qlistview.h>
23
//---------------------------------------------------------
25
//---------------------------------------------------------
27
void LMaster::closeEvent(QCloseEvent* e)
29
emit deleted((int)this);
33
//---------------------------------------------------------
35
//---------------------------------------------------------
37
void LMaster::songChanged(int type)
39
if (type & (SC_SIG | SC_TEMPO))
43
//---------------------------------------------------------
45
//---------------------------------------------------------
50
setCaption("MusE: Mastertrack");
51
setMinimumHeight(100);
54
//---------Pulldown Menu----------------------------
55
// QPopupMenu* file = new QPopupMenu(this);
56
// menuBar()->insertItem("&File", file);
58
//---------ToolBar----------------------------------
59
tools = new QToolBar(this, "list-tools");
60
undoRedo->addTo(tools);
62
QToolBar* edit = new QToolBar(this, "edit tools");
63
QToolButton* tempo = new QToolButton(edit);
64
QToolButton* time = new QToolButton(edit);
65
tempo->setText("Tempo");
66
time->setText("Timesig");
67
QToolTip::add(tempo, tr("new tempo"));
68
QToolTip::add(time, tr("new signature"));
70
//---------------------------------------------------
72
//---------------------------------------------------
74
view = new QListView(mainw);
75
view->setAllColumnsShowFocus(true);
76
view->setSelectionMode(QListView::Single);
77
view->addColumn(tr("Meter"), 100);
78
view->addColumn(tr("Time"), 100);
79
view->addColumn(tr("Type"), 100);
80
view->addColumn(tr("Value"), 100);
83
//---------------------------------------------------
85
//---------------------------------------------------
87
// QSizeGrip* corner = new QSizeGrip(mainw);
89
mainGrid->setRowStretch(0, 100);
90
mainGrid->setColStretch(0, 100);
92
mainGrid->addWidget(view, 0, 0);
93
// mainGrid->addWidget(corner, 1, 1, AlignBottom | AlignRight);
96
connect(view, SIGNAL(selectionChanged(QListViewItem*)), SLOT(select(QListViewItem*)));
97
connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
100
//---------------------------------------------------------
102
//---------------------------------------------------------
106
undoRedo->removeFrom(tools);
109
//---------------------------------------------------------
111
//---------------------------------------------------------
113
void LMaster::insertSig(const SigEvent* ev)
116
QString s1, s2, s3, s4;
118
sigmap.tickValues(t, &bar, &beat, &tick);
119
s1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick);
121
double time = tempomap.tick2time(t);
122
int min = int(time) / 60;
123
int sec = int(time) % 60;
124
int msec = int((time - (min*60 + sec)) * 1000.0);
125
s2.sprintf("%03d:%02d:%03d", min, sec, msec);
127
s4.sprintf("%d/%d", ev->z, ev->n);
128
// view->insertItem(new QListViewItem(view, s1, s2, s3, s4));
129
new QListViewItem(view, s1, s2, s3, s4);
132
//---------------------------------------------------------
134
//---------------------------------------------------------
136
void LMaster::insertTempo(const TEvent* ev)
139
QString s1, s2, s3, s4;
141
sigmap.tickValues(t, &bar, &beat, &tick);
142
s1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick);
144
double time = ev->time;
145
int min = int(time) / 60;
146
int sec = int(time) % 60;
147
int msec = int((time - (min*60 + sec)) * 1000.0);
148
s2.sprintf("%03d:%02d:%03d", min, sec, msec);
150
double dt = (1000000.0 * 60.0)/ev->tempo;
151
s4.setNum(dt, 'f', 3);
152
// view->insertItem(new QListViewItem(view, s1, s2, s3, s4));
153
new QListViewItem(view, s1, s2, s3, s4);
156
//---------------------------------------------------------
158
//---------------------------------------------------------
160
void LMaster::updateList()
163
const TempoList* t = &tempomap;
164
const SigList* s = &sigmap;
166
criTEvent it = t->rbegin();
167
criSigEvent is = s->rbegin();
169
if (it == t->rend()) {
170
while(is != s->rend()) {
171
insertSig(is->second);
176
if (is == s->rend()) {
177
while (it != t->rend()) {
178
insertTempo(it->second);
183
if (is->second->tick > it->second->tick) {
184
insertSig(is->second);
188
insertTempo(it->second);
194
//---------------------------------------------------------
196
//---------------------------------------------------------
198
void LMaster::readStatus(Xml& xml)
201
Xml::Token token = xml.parse();
202
const QString& tag = xml.s1();
203
if (token == Xml::Error || token == Xml::End)
207
if (tag == "midieditor")
208
MidiEditor::readStatus(xml);
210
xml.unknown("LMaster");
213
if (tag == "lmaster")
221
//---------------------------------------------------------
223
//---------------------------------------------------------
225
void LMaster::writeStatus(int level, Xml& xml) const
227
xml.tag(level++, "lmaster");
228
MidiEditor::writeStatus(level, xml);
229
xml.tag(level, "/lmaster");
232
void LMaster::select(QListViewItem* item)
234
// printf("select %x\n", unsigned(item));