~ubuntu-branches/ubuntu/karmic/muse/karmic-proposed

« back to all changes in this revision

Viewing changes to master/lmaster.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Kobras
  • Date: 2002-04-23 17:28:23 UTC
  • Revision ID: james.westby@ubuntu.com-20020423172823-w8yplzr81a759xa3
Tags: upstream-0.5.2
ImportĀ upstreamĀ versionĀ 0.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//=========================================================
 
2
//  MusE
 
3
//  Linux Music Editor
 
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
//=========================================================
 
7
 
 
8
#include "lmaster.h"
 
9
#include "seq.h"
 
10
#include "xml.h"
 
11
#include "song.h"
 
12
#include "globals.h"
 
13
 
 
14
#include <qtoolbar.h>
 
15
#include <qtoolbutton.h>
 
16
#include <qtooltip.h>
 
17
#include <qlayout.h>
 
18
#include <qsizegrip.h>
 
19
#include <qpopupmenu.h>
 
20
#include <qmenubar.h>
 
21
#include <qlistview.h>
 
22
 
 
23
//---------------------------------------------------------
 
24
//   closeEvent
 
25
//---------------------------------------------------------
 
26
 
 
27
void LMaster::closeEvent(QCloseEvent* e)
 
28
      {
 
29
      emit deleted((int)this);
 
30
      e->accept();
 
31
      }
 
32
 
 
33
//---------------------------------------------------------
 
34
//   songChanged
 
35
//---------------------------------------------------------
 
36
 
 
37
void LMaster::songChanged(int type)
 
38
      {
 
39
      if (type & (SC_SIG | SC_TEMPO))
 
40
            updateList();
 
41
      }
 
42
 
 
43
//---------------------------------------------------------
 
44
//   LMaster
 
45
//---------------------------------------------------------
 
46
 
 
47
LMaster::LMaster()
 
48
   : MidiEditor(0, 0, 0)
 
49
      {
 
50
      setCaption("MusE: Mastertrack");
 
51
      setMinimumHeight(100);
 
52
      setFixedWidth(400);
 
53
 
 
54
      //---------Pulldown Menu----------------------------
 
55
//      QPopupMenu* file = new QPopupMenu(this);
 
56
//      menuBar()->insertItem("&File", file);
 
57
 
 
58
      //---------ToolBar----------------------------------
 
59
      tools = new QToolBar(this, "list-tools");
 
60
      undoRedo->addTo(tools);
 
61
 
 
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"));
 
69
 
 
70
      //---------------------------------------------------
 
71
      //    master
 
72
      //---------------------------------------------------
 
73
 
 
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);
 
81
      view->setSorting(-1);
 
82
 
 
83
      //---------------------------------------------------
 
84
      //    Rest
 
85
      //---------------------------------------------------
 
86
 
 
87
//      QSizeGrip* corner = new QSizeGrip(mainw);
 
88
 
 
89
      mainGrid->setRowStretch(0, 100);
 
90
      mainGrid->setColStretch(0, 100);
 
91
 
 
92
      mainGrid->addWidget(view,  0, 0);
 
93
//      mainGrid->addWidget(corner,  1, 1, AlignBottom | AlignRight);
 
94
      updateList();
 
95
 
 
96
      connect(view, SIGNAL(selectionChanged(QListViewItem*)), SLOT(select(QListViewItem*)));
 
97
      connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
 
98
      }
 
99
 
 
100
//---------------------------------------------------------
 
101
//   ~LMaster
 
102
//---------------------------------------------------------
 
103
 
 
104
LMaster::~LMaster()
 
105
      {
 
106
      undoRedo->removeFrom(tools);
 
107
      }
 
108
 
 
109
//---------------------------------------------------------
 
110
//   insertSig
 
111
//---------------------------------------------------------
 
112
 
 
113
void LMaster::insertSig(const SigEvent* ev)
 
114
      {
 
115
      int t = ev->tick;
 
116
      QString s1, s2, s3, s4;
 
117
      int bar, beat, tick;
 
118
      sigmap.tickValues(t, &bar, &beat, &tick);
 
119
      s1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick);
 
120
 
 
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);
 
126
      s3 = "Timesig";
 
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);
 
130
      }
 
131
 
 
132
//---------------------------------------------------------
 
133
//   insertTempo
 
134
//---------------------------------------------------------
 
135
 
 
136
void LMaster::insertTempo(const TEvent* ev)
 
137
      {
 
138
      int t = ev->tick;
 
139
      QString s1, s2, s3, s4;
 
140
      int bar, beat, tick;
 
141
      sigmap.tickValues(t, &bar, &beat, &tick);
 
142
      s1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick);
 
143
 
 
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);
 
149
      s3 = "Tempo";
 
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);
 
154
      }
 
155
 
 
156
//---------------------------------------------------------
 
157
//   updateList
 
158
//---------------------------------------------------------
 
159
 
 
160
void LMaster::updateList()
 
161
      {
 
162
      view->clear();
 
163
      const TempoList* t   = &tempomap;
 
164
      const SigList* s   = &sigmap;
 
165
 
 
166
      criTEvent it   = t->rbegin();
 
167
      criSigEvent is = s->rbegin();
 
168
      for (;;) {
 
169
            if (it == t->rend()) {
 
170
                  while(is != s->rend()) {
 
171
                        insertSig(is->second);
 
172
                        ++is;
 
173
                        }
 
174
                  break;
 
175
                  }
 
176
            if (is == s->rend()) {
 
177
                  while (it != t->rend()) {
 
178
                        insertTempo(it->second);
 
179
                        ++it;
 
180
                        }
 
181
                  break;
 
182
                  }
 
183
            if (is->second->tick > it->second->tick) {
 
184
                  insertSig(is->second);
 
185
                  ++is;
 
186
                  }
 
187
            else {
 
188
                  insertTempo(it->second);
 
189
                  ++it;
 
190
                  }
 
191
            }
 
192
      }
 
193
 
 
194
//---------------------------------------------------------
 
195
//   readStatus
 
196
//---------------------------------------------------------
 
197
 
 
198
void LMaster::readStatus(Xml& xml)
 
199
      {
 
200
      for (;;) {
 
201
            Xml::Token token = xml.parse();
 
202
            const QString& tag = xml.s1();
 
203
            if (token == Xml::Error || token == Xml::End)
 
204
                  break;
 
205
            switch (token) {
 
206
                  case Xml::TagStart:
 
207
                        if (tag == "midieditor")
 
208
                              MidiEditor::readStatus(xml);
 
209
                        else
 
210
                              xml.unknown("LMaster");
 
211
                        break;
 
212
                  case Xml::TagEnd:
 
213
                        if (tag == "lmaster")
 
214
                              return;
 
215
                  default:
 
216
                        break;
 
217
                  }
 
218
            }
 
219
      }
 
220
 
 
221
//---------------------------------------------------------
 
222
//   writeStatus
 
223
//---------------------------------------------------------
 
224
 
 
225
void LMaster::writeStatus(int level, Xml& xml) const
 
226
      {
 
227
      xml.tag(level++, "lmaster");
 
228
      MidiEditor::writeStatus(level, xml);
 
229
      xml.tag(level, "/lmaster");
 
230
      }
 
231
 
 
232
void LMaster::select(QListViewItem* item)
 
233
      {
 
234
//      printf("select %x\n", unsigned(item));
 
235
      }
 
236
 
 
237