~ubuntu-branches/ubuntu/raring/muse/raring-proposed

« back to all changes in this revision

Viewing changes to muse/waveedit/waveedit.cpp

  • Committer: Package Import Robot
  • Author(s): Alessio Treglia
  • Date: 2012-11-22 01:16:59 UTC
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: package-import@ubuntu.com-20121122011659-a2fwbf33ceqe1s0t
Tags: upstream-2.1~rc1
ImportĀ upstreamĀ versionĀ 2.1~rc1

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
//  Linux Music Editor
4
4
//    $Id: waveedit.cpp,v 1.5.2.12 2009/04/06 01:24:54 terminator356 Exp $
5
5
//  (C) Copyright 2000 Werner Schweer (ws@seh.de)
 
6
//  (C) Copyright 2012 Tim E. Real (terminator356 on users dot sourceforge dot net)
6
7
//
7
8
//  This program is free software; you can redistribute it and/or
8
9
//  modify it under the terms of the GNU General Public License
20
21
//
21
22
//=========================================================
22
23
 
 
24
#include <limits.h>
 
25
 
23
26
#include <QMenu>
24
27
#include <QSignalMapper>
25
28
#include <QToolBar>
41
44
#include "waveedit.h"
42
45
#include "mtscale.h"
43
46
#include "scrollscale.h"
44
 
#include "waveview.h"
 
47
//#include "waveview.h"
 
48
#include "wavecanvas.h"
45
49
#include "ttoolbar.h"
46
50
#include "globals.h"
47
51
#include "audio.h"
51
55
#include "gconfig.h"
52
56
#include "icons.h"
53
57
#include "shortcuts.h"
 
58
#include "cmd.h"
54
59
 
55
60
namespace MusECore {
56
61
extern QColor readColor(MusECore::Xml& xml);
58
63
 
59
64
namespace MusEGui {
60
65
 
 
66
static int waveEditTools = MusEGui::PointerTool | MusEGui::PencilTool | MusEGui::RubberTool | 
 
67
                           MusEGui::CutTool | MusEGui::CursorTool;
 
68
 
 
69
int WaveEdit::_rasterInit = 96;
 
70
int WaveEdit::colorModeInit = 0;
 
71
  
61
72
//---------------------------------------------------------
62
73
//   closeEvent
63
74
//---------------------------------------------------------
81
92
   : MidiEditor(TopWin::WAVE, 1, pl)
82
93
      {
83
94
      setFocusPolicy(Qt::NoFocus);
 
95
      colorMode      = colorModeInit;
84
96
 
85
97
      QSignalMapper* mapper = new QSignalMapper(this);
 
98
      QSignalMapper* colorMapper = new QSignalMapper(this);
86
99
      QAction* act;
87
100
      
88
101
      //---------Pulldown Menu----------------------------
95
108
      menuGain = menuFunctions->addMenu(tr("&Gain"));
96
109
      
97
110
      act = menuGain->addAction("200%");
98
 
      mapper->setMapping(act, CMD_GAIN_200);
 
111
      mapper->setMapping(act, WaveCanvas::CMD_GAIN_200);
99
112
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
100
113
      
101
114
      act = menuGain->addAction("150%");
102
 
      mapper->setMapping(act, CMD_GAIN_150);
 
115
      mapper->setMapping(act, WaveCanvas::CMD_GAIN_150);
103
116
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
104
117
      
105
118
      act = menuGain->addAction("75%");
106
 
      mapper->setMapping(act, CMD_GAIN_75);
 
119
      mapper->setMapping(act, WaveCanvas::CMD_GAIN_75);
107
120
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
108
121
      
109
122
      act = menuGain->addAction("50%");
110
 
      mapper->setMapping(act, CMD_GAIN_50);
 
123
      mapper->setMapping(act, WaveCanvas::CMD_GAIN_50);
111
124
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
112
125
      
113
126
      act = menuGain->addAction("25%");
114
 
      mapper->setMapping(act, CMD_GAIN_25);
 
127
      mapper->setMapping(act, WaveCanvas::CMD_GAIN_25);
115
128
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
116
129
      
117
130
      act = menuGain->addAction(tr("Other"));
118
 
      mapper->setMapping(act, CMD_GAIN_FREE);
 
131
      mapper->setMapping(act, WaveCanvas::CMD_GAIN_FREE);
119
132
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
120
133
      
121
134
      connect(mapper, SIGNAL(mapped(int)), this, SLOT(cmd(int)));
123
136
      menuFunctions->addSeparator();
124
137
 
125
138
      copyAction = menuEdit->addAction(tr("&Copy"));
126
 
      mapper->setMapping(copyAction, CMD_EDIT_COPY);
 
139
      mapper->setMapping(copyAction, WaveCanvas::CMD_EDIT_COPY);
127
140
      connect(copyAction, SIGNAL(triggered()), mapper, SLOT(map()));
128
141
 
 
142
      copyPartRegionAction = menuEdit->addAction(tr("&Create Part from Region"));
 
143
      mapper->setMapping(copyPartRegionAction, WaveCanvas::CMD_CREATE_PART_REGION);
 
144
      connect(copyPartRegionAction, SIGNAL(triggered()), mapper, SLOT(map()));
 
145
 
129
146
      cutAction = menuEdit->addAction(tr("C&ut"));
130
 
      mapper->setMapping(cutAction, CMD_EDIT_CUT);
 
147
      mapper->setMapping(cutAction, WaveCanvas::CMD_EDIT_CUT);
131
148
      connect(cutAction, SIGNAL(triggered()), mapper, SLOT(map()));
132
149
 
133
150
      pasteAction = menuEdit->addAction(tr("&Paste"));
134
 
      mapper->setMapping(pasteAction, CMD_EDIT_PASTE);
 
151
      mapper->setMapping(pasteAction, WaveCanvas::CMD_EDIT_PASTE);
135
152
      connect(pasteAction, SIGNAL(triggered()), mapper, SLOT(map()));
136
153
 
137
154
 
138
155
      act = menuEdit->addAction(tr("Edit in E&xternal Editor"));
139
 
      mapper->setMapping(act, CMD_EDIT_EXTERNAL);
 
156
      mapper->setMapping(act, WaveCanvas::CMD_EDIT_EXTERNAL);
140
157
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
141
158
      
 
159
      menuEdit->addSeparator();
 
160
 
 
161
      adjustWaveOffsetAction = menuEdit->addAction(tr("Adjust wave offset..."));
 
162
      mapper->setMapping(adjustWaveOffsetAction, WaveCanvas::CMD_ADJUST_WAVE_OFFSET);
 
163
      connect(adjustWaveOffsetAction, SIGNAL(triggered()), mapper, SLOT(map()));
 
164
      
142
165
      act = menuFunctions->addAction(tr("Mute Selection"));
143
 
      mapper->setMapping(act, CMD_MUTE);
 
166
      mapper->setMapping(act, WaveCanvas::CMD_MUTE);
144
167
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
145
168
      
146
169
      act = menuFunctions->addAction(tr("Normalize Selection"));
147
 
      mapper->setMapping(act, CMD_NORMALIZE);
 
170
      mapper->setMapping(act, WaveCanvas::CMD_NORMALIZE);
148
171
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
149
172
      
150
173
      act = menuFunctions->addAction(tr("Fade In Selection"));
151
 
      mapper->setMapping(act, CMD_FADE_IN);
 
174
      mapper->setMapping(act, WaveCanvas::CMD_FADE_IN);
152
175
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
153
176
      
154
177
      act = menuFunctions->addAction(tr("Fade Out Selection"));
155
 
      mapper->setMapping(act, CMD_FADE_OUT);
 
178
      mapper->setMapping(act, WaveCanvas::CMD_FADE_OUT);
156
179
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
157
180
      
158
181
      act = menuFunctions->addAction(tr("Reverse Selection"));
159
 
      mapper->setMapping(act, CMD_REVERSE);
 
182
      mapper->setMapping(act, WaveCanvas::CMD_REVERSE);
160
183
      connect(act, SIGNAL(triggered()), mapper, SLOT(map()));
161
184
      
162
185
      select = menuEdit->addMenu(QIcon(*selectIcon), tr("Select"));
163
186
      
164
187
      selectAllAction = select->addAction(QIcon(*select_allIcon), tr("Select &All"));
165
 
      mapper->setMapping(selectAllAction, CMD_SELECT_ALL);
 
188
      mapper->setMapping(selectAllAction, WaveCanvas::CMD_SELECT_ALL);
166
189
      connect(selectAllAction, SIGNAL(triggered()), mapper, SLOT(map()));
167
190
      
168
191
      selectNoneAction = select->addAction(QIcon(*select_allIcon), tr("&Deselect All"));
169
 
      mapper->setMapping(selectNoneAction, CMD_SELECT_NONE);
 
192
      mapper->setMapping(selectNoneAction, WaveCanvas::CMD_SELECT_NONE);
170
193
      connect(selectNoneAction, SIGNAL(triggered()), mapper, SLOT(map()));
171
194
      
 
195
      select->addSeparator();
 
196
      
 
197
      selectPrevPartAction = select->addAction(QIcon(*select_all_parts_on_trackIcon), tr("&Previous Part"));
 
198
      mapper->setMapping(selectPrevPartAction, WaveCanvas::CMD_SELECT_PREV_PART);
 
199
      connect(selectPrevPartAction, SIGNAL(triggered()), mapper, SLOT(map()));
 
200
      
 
201
      selectNextPartAction = select->addAction(QIcon(*select_all_parts_on_trackIcon), tr("&Next Part"));
 
202
      mapper->setMapping(selectNextPartAction, WaveCanvas::CMD_SELECT_NEXT_PART);
 
203
      connect(selectNextPartAction, SIGNAL(triggered()), mapper, SLOT(map()));
 
204
 
172
205
      
173
206
      QMenu* settingsMenu = menuBar()->addMenu(tr("Window &Config"));
 
207
 
 
208
      eventColor = settingsMenu->addMenu(tr("&Event Color"));      
 
209
      
 
210
      QActionGroup* actgrp = new QActionGroup(this);
 
211
      actgrp->setExclusive(true);
 
212
      
 
213
      evColorNormalAction = actgrp->addAction(tr("&Part colors"));
 
214
      evColorNormalAction->setCheckable(true);
 
215
      colorMapper->setMapping(evColorNormalAction, 0);
 
216
      
 
217
      evColorPartsAction = actgrp->addAction(tr("&Gray"));
 
218
      evColorPartsAction->setCheckable(true);
 
219
      colorMapper->setMapping(evColorPartsAction, 1);
 
220
      
 
221
      connect(evColorNormalAction, SIGNAL(triggered()), colorMapper, SLOT(map()));
 
222
      connect(evColorPartsAction, SIGNAL(triggered()), colorMapper, SLOT(map()));
 
223
      
 
224
      eventColor->addActions(actgrp->actions());
 
225
      
 
226
      connect(colorMapper, SIGNAL(mapped(int)), this, SLOT(eventColorModeChanged(int)));
 
227
      
 
228
      settingsMenu->addSeparator();
174
229
      settingsMenu->addAction(subwinAction);
175
230
      settingsMenu->addAction(shareAction);
176
231
      settingsMenu->addAction(fullscreenAction);
177
232
 
178
 
 
179
233
      connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(configChanged()));
180
234
 
181
235
 
182
236
      //--------------------------------------------------
183
237
      //    ToolBar:   Solo  Cursor1 Cursor2
184
238
 
 
239
      tools2 = new MusEGui::EditToolBar(this, waveEditTools);
 
240
      addToolBar(tools2);
 
241
      
185
242
      addToolBarBreak();
186
243
      tb1 = addToolBar(tr("WaveEdit tools"));
187
244
      tb1->setObjectName("WaveEdit tools");
222
279
            }
223
280
 
224
281
      hscroll = new ScrollScale(-32768, 1, xscale, 10000, Qt::Horizontal, mainw, 0, false, 10000.0);
225
 
      view    = new WaveView(this, mainw, xscale, yscale);
226
 
      wview   = view;   // HACK!
 
282
      //view    = new WaveView(this, mainw, xscale, yscale);
 
283
      canvas    = new WaveCanvas(this, mainw, xscale, yscale);
 
284
      //wview   = canvas;   // HACK!
227
285
 
228
286
      QSizeGrip* corner    = new QSizeGrip(mainw);
229
287
      ymag                 = new QSlider(Qt::Vertical, mainw);
235
293
 
236
294
      time                 = new MTScale(&_raster, mainw, xscale, true);
237
295
      ymag->setFixedWidth(16);
238
 
      connect(view, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int)));
239
 
      connect(ymag, SIGNAL(valueChanged(int)), view, SLOT(setYScale(int)));
240
 
      connect(view, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
241
 
      connect(view, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
 
296
      connect(canvas, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int)));
 
297
      connect(ymag, SIGNAL(valueChanged(int)), canvas, SLOT(setYScale(int)));
 
298
      connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
 
299
      connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
242
300
 
243
301
      time->setOrigin(0, 0);
244
302
 
247
305
 
248
306
      mainGrid->addWidget(time,   0, 0, 1, 2);
249
307
      mainGrid->addWidget(MusECore::hLine(mainw),    1, 0, 1, 2);
250
 
      mainGrid->addWidget(view,    2, 0);
 
308
      mainGrid->addWidget(canvas,    2, 0);
251
309
      mainGrid->addWidget(ymag,    2, 1);
252
310
      mainGrid->addWidget(hscroll, 3, 0);
253
311
      mainGrid->addWidget(corner,  3, 1, Qt::AlignBottom | Qt::AlignRight);
254
312
 
255
 
      view->setFocus();  
256
 
      
257
 
      connect(hscroll, SIGNAL(scrollChanged(int)), view, SLOT(setXPos(int)));
258
 
      connect(hscroll, SIGNAL(scaleChanged(int)),  view, SLOT(setXMag(int)));
259
 
      setWindowTitle(view->getCaption());
260
 
      connect(view, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int)));
 
313
      canvas->setFocus();  
 
314
      
 
315
      connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int)));
 
316
      connect(tools2, SIGNAL(toolChanged(int)), canvas,   SLOT(setTool(int)));
 
317
      
 
318
      connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int)));
 
319
      connect(hscroll, SIGNAL(scaleChanged(int)),  canvas, SLOT(setXMag(int)));
 
320
      setWindowTitle(canvas->getCaption());
 
321
      connect(canvas, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int)));
261
322
 
262
323
      connect(hscroll, SIGNAL(scrollChanged(int)), time,  SLOT(setXPos(int)));
263
324
      connect(hscroll, SIGNAL(scaleChanged(int)),  time,  SLOT(setXMag(int)));
264
 
//      connect(time,    SIGNAL(timeChanged(unsigned)),  SLOT(setTime(unsigned)));
265
 
      connect(view,    SIGNAL(timeChanged(unsigned)),  SLOT(setTime(unsigned)));
 
325
      connect(time,    SIGNAL(timeChanged(unsigned)),  SLOT(timeChanged(unsigned)));
 
326
      connect(canvas,    SIGNAL(timeChanged(unsigned)),  SLOT(setTime(unsigned)));
266
327
 
267
 
      connect(view,  SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned)));
 
328
      connect(canvas,  SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned)));
 
329
      connect(canvas,  SIGNAL(horizontalScrollNoLimit(unsigned)),hscroll, SLOT(setPosNoLimit(unsigned))); 
268
330
 
269
331
      connect(hscroll, SIGNAL(scaleChanged(int)),  SLOT(updateHScrollRange()));
270
 
      connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged1(int)));
 
332
      connect(MusEGlobal::song, SIGNAL(songChanged(MusECore::SongChangedFlags_t)), SLOT(songChanged1(MusECore::SongChangedFlags_t)));
271
333
 
 
334
      // For the wave editor, let's start with the operation range selection tool.
 
335
      canvas->setTool(MusEGui::CursorTool);
 
336
      tools2->set(MusEGui::CursorTool);
 
337
      
 
338
      setEventColorMode(colorMode);
 
339
      
272
340
      initShortcuts();
273
341
      
274
342
      updateHScrollRange();
291
359
      pasteAction->setShortcut(shortcuts[SHRT_PASTE].key);
292
360
      selectAllAction->setShortcut(shortcuts[SHRT_SELECT_ALL].key);
293
361
      selectNoneAction->setShortcut(shortcuts[SHRT_SELECT_NONE].key);
 
362
      
 
363
      //selectInvertAction->setShortcut(shortcuts[SHRT_SELECT_INVERT].key);
 
364
      //selectInsideLoopAction->setShortcut(shortcuts[SHRT_SELECT_ILOOP].key);
 
365
      //selectOutsideLoopAction->setShortcut(shortcuts[SHRT_SELECT_OLOOP].key);
 
366
      selectPrevPartAction->setShortcut(shortcuts[SHRT_SELECT_PREV_PART].key);
 
367
      selectNextPartAction->setShortcut(shortcuts[SHRT_SELECT_NEXT_PART].key);
 
368
      
 
369
      eventColor->menuAction()->setShortcut(shortcuts[SHRT_EVENT_COLOR].key);
 
370
      //evColorNormalAction->setShortcut(shortcuts[  ].key);
 
371
      //evColorPartsAction->setShortcut(shortcuts[  ].key);
 
372
      
294
373
      }
295
374
 
296
375
//---------------------------------------------------------
299
378
 
300
379
void WaveEdit::configChanged()
301
380
      {
302
 
      view->setBg(MusEGlobal::config.waveEditBackgroundColor);
303
 
      selectAllAction->setShortcut(shortcuts[SHRT_SELECT_ALL].key);
304
 
      selectNoneAction->setShortcut(shortcuts[SHRT_SELECT_NONE].key);
 
381
      if (MusEGlobal::config.canvasBgPixmap.isEmpty()) {
 
382
            canvas->setBg(MusEGlobal::config.waveEditBackgroundColor);
 
383
            canvas->setBg(QPixmap());
 
384
      }
 
385
      else {
 
386
            canvas->setBg(QPixmap(MusEGlobal::config.canvasBgPixmap));
 
387
      }
 
388
      
 
389
      initShortcuts();
305
390
      }
306
391
 
307
392
//---------------------------------------------------------
310
395
void WaveEdit::updateHScrollRange()
311
396
{
312
397
      int s, e;
313
 
      wview->range(&s, &e);
314
 
      // Show one more measure.
315
 
      e += AL::sigmap.ticksMeasure(e);  
316
 
      // Show another quarter measure due to imprecise drawing at canvas end point.
317
 
      e += AL::sigmap.ticksMeasure(e) / 4;
 
398
      canvas->range(&s, &e);   // Range in frames
 
399
      unsigned tm = AL::sigmap.ticksMeasure(MusEGlobal::tempomap.frame2tick(e));
 
400
      
 
401
      // Show one more measure, and show another quarter measure due to imprecise drawing at canvas end point.
 
402
      //e += MusEGlobal::tempomap.tick2frame(tm + tm / 4);  // TODO: Try changing scrollbar to use units of frames?
 
403
      e += (tm + tm / 4);
 
404
      
318
405
      // Compensate for the vscroll width. 
319
406
      //e += wview->rmapxDev(-vscroll->width()); 
320
407
      int s1, e1;
321
 
      hscroll->range(&s1, &e1);
 
408
      hscroll->range(&s1, &e1);                             //   ...
322
409
      if(s != s1 || e != e1) 
323
 
        hscroll->setRange(s, e);
 
410
        hscroll->setRange(s, e);                            //   ...
 
411
}
 
412
 
 
413
//---------------------------------------------------------
 
414
//   timeChanged
 
415
//---------------------------------------------------------
 
416
 
 
417
void WaveEdit::timeChanged(unsigned t)
 
418
{
 
419
      if(t == INT_MAX)
 
420
      {
 
421
        // Let the PosLabels disable themselves with INT_MAX.
 
422
        pos1->setValue(t);
 
423
        pos2->setValue(t);
 
424
        return;
 
425
      }
 
426
     
 
427
      unsigned frame = MusEGlobal::tempomap.tick2frame(t);
 
428
      pos1->setValue(t);
 
429
      pos2->setValue(frame);
 
430
      time->setPos(3, t, false);
324
431
}
325
432
 
326
433
//---------------------------------------------------------
329
436
 
330
437
void WaveEdit::setTime(unsigned samplepos)
331
438
      {
332
 
//    printf("setTime %d %x\n", samplepos, samplepos);
 
439
      if(samplepos == INT_MAX)
 
440
      {
 
441
        // Let the PosLabels disable themselves with INT_MAX.
 
442
        pos1->setValue(samplepos);
 
443
        pos2->setValue(samplepos);
 
444
        return;
 
445
      }
 
446
     
333
447
      unsigned tick = MusEGlobal::tempomap.frame2tick(samplepos);
334
448
      pos1->setValue(tick);
335
 
      //pos2->setValue(tick);
336
449
      pos2->setValue(samplepos);
337
450
      time->setPos(3, tick, false);
338
451
      }
343
456
 
344
457
WaveEdit::~WaveEdit()
345
458
      {
346
 
      // MusEGlobal::undoRedo->removeFrom(tools); // p4.0.6 Removed
347
459
      }
348
460
 
349
461
//---------------------------------------------------------
352
464
 
353
465
void WaveEdit::cmd(int n)
354
466
      {
355
 
      view->cmd(n);
 
467
      ((WaveCanvas*)canvas)->cmd(n);
356
468
      }
357
469
 
358
470
//---------------------------------------------------------
368
480
                  case MusECore::Xml::TagStart:
369
481
                        if (tag == "bgcolor")
370
482
                              MusEGlobal::config.waveEditBackgroundColor = readColor(xml);
 
483
                        else if (tag == "raster")
 
484
                              _rasterInit = xml.parseInt();
 
485
                        else if (tag == "colormode")
 
486
                              colorModeInit = xml.parseInt();
371
487
                        else if (tag == "topwin")
372
488
                              TopWin::readConfiguration(WAVE, xml);
373
489
                        else
393
509
      {
394
510
      xml.tag(level++, "waveedit");
395
511
      xml.colorTag(level, "bgcolor", MusEGlobal::config.waveEditBackgroundColor);
 
512
      xml.intTag(level, "raster", _rasterInit);
 
513
      xml.intTag(level, "colormode", colorModeInit);
396
514
      TopWin::writeConfiguration(WAVE, level,xml);
397
515
      xml.tag(level, "/waveedit");
398
516
      }
406
524
      writePartList(level, xml);
407
525
      xml.tag(level++, "waveedit");
408
526
      MidiEditor::writeStatus(level, xml);
 
527
      xml.intTag(level, "tool", int(canvas->tool()));
409
528
      xml.intTag(level, "xpos", hscroll->pos());
410
529
      xml.intTag(level, "xmag", hscroll->mag());
411
530
      xml.intTag(level, "ymag", ymag->value());
427
546
                  case MusECore::Xml::TagStart:
428
547
                        if (tag == "midieditor")
429
548
                              MidiEditor::readStatus(xml);
 
549
                        else if (tag == "tool") {
 
550
                              int tool = xml.parseInt();
 
551
                              canvas->setTool(tool);
 
552
                              tools2->set(tool);
 
553
                              }
430
554
                        else if (tag == "xmag")
431
555
                              hscroll->setMag(xml.parseInt());
432
556
                        else if (tag == "ymag")
451
575
//    signal from "song"
452
576
//---------------------------------------------------------
453
577
 
454
 
void WaveEdit::songChanged1(int bits)
 
578
void WaveEdit::songChanged1(MusECore::SongChangedFlags_t bits)
455
579
      {
456
580
        if(_isDeleting)  // Ignore while while deleting to prevent crash.
457
581
          return;
486
610
 
487
611
void WaveEdit::keyPressEvent(QKeyEvent* event)
488
612
      {
 
613
// TODO: Raster:
 
614
//       int index;
 
615
//       int n = sizeof(rasterTable)/sizeof(*rasterTable);
 
616
//       for (index = 0; index < n; ++index)
 
617
//             if (rasterTable[index] == raster())
 
618
//                   break;
 
619
//       if (index == n) {
 
620
//             index = 0;
 
621
//             // raster 1 is not in table
 
622
//             }
 
623
//       int off = (index / 9) * 9;
 
624
//       index   = index % 9;
 
625
 
 
626
//       int val = 0;
 
627
 
 
628
      WaveCanvas* wc = (WaveCanvas*)canvas;
489
629
      int key = event->key();
 
630
 
 
631
      if (((QInputEvent*)event)->modifiers() & Qt::ShiftModifier)
 
632
            key += Qt::SHIFT;
 
633
      if (((QInputEvent*)event)->modifiers() & Qt::AltModifier)
 
634
            key += Qt::ALT;
 
635
      if (((QInputEvent*)event)->modifiers() & Qt::ControlModifier)
 
636
            key+= Qt::CTRL;
 
637
 
490
638
      if (key == Qt::Key_Escape) {
491
639
            close();
492
640
            return;
493
641
            }
494
 
      else {
 
642
            
 
643
      else if (key == shortcuts[SHRT_POS_INC].key) {
 
644
            wc->waveCmd(CMD_RIGHT);
 
645
            return;
 
646
            }
 
647
      else if (key == shortcuts[SHRT_POS_DEC].key) {
 
648
            wc->waveCmd(CMD_LEFT);
 
649
            return;
 
650
            }
 
651
      else if (key == shortcuts[SHRT_POS_INC_NOSNAP].key) {
 
652
            wc->waveCmd(CMD_RIGHT_NOSNAP);
 
653
            return;
 
654
            }
 
655
      else if (key == shortcuts[SHRT_POS_DEC_NOSNAP].key) {
 
656
            wc->waveCmd(CMD_LEFT_NOSNAP);
 
657
            return;
 
658
            }
 
659
      else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) {
 
660
            wc->waveCmd(CMD_INSERT);
 
661
            return;
 
662
            }
 
663
      else if (key == Qt::Key_Backspace) {
 
664
            wc->waveCmd(CMD_BACKSPACE);
 
665
            return;
 
666
            }
 
667
            
 
668
      else if (key == shortcuts[SHRT_TOOL_POINTER].key) {
 
669
            tools2->set(MusEGui::PointerTool);
 
670
            return;
 
671
            }
 
672
      else if (key == shortcuts[SHRT_TOOL_PENCIL].key) {
 
673
            tools2->set(MusEGui::PencilTool);
 
674
            return;
 
675
            }
 
676
      else if (key == shortcuts[SHRT_TOOL_RUBBER].key) {
 
677
            tools2->set(MusEGui::RubberTool);
 
678
            return;
 
679
            }
 
680
      else if (key == shortcuts[SHRT_TOOL_SCISSORS].key) {
 
681
            tools2->set(MusEGui::CutTool);
 
682
            return;
 
683
            }
 
684
      else if (key == shortcuts[SHRT_TOOL_CURSOR].key) {
 
685
            tools2->set(MusEGui::CursorTool);
 
686
            return;
 
687
            }
 
688
      else if (key == shortcuts[SHRT_EVENT_COLOR].key) {
 
689
            if (colorMode == 0)
 
690
                  colorMode = 1;
 
691
            else if (colorMode == 1)
 
692
                  colorMode = 0;
 
693
            setEventColorMode(colorMode);
 
694
            return;
 
695
            }
 
696
            
 
697
      // TODO: New WaveCanvas: Convert some of these to use frames.
 
698
      else if (key == shortcuts[SHRT_ZOOM_IN].key) {
 
699
            int mag = hscroll->mag();
 
700
            int zoomlvl = MusEGui::ScrollScale::getQuickZoomLevel(mag);
 
701
            if (zoomlvl < MusEGui::ScrollScale::zoomLevels-1)
 
702
                  zoomlvl++;
 
703
 
 
704
            int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
 
705
            hscroll->setMag(newmag);
 
706
            //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag);
 
707
            return;
 
708
            }
 
709
      else if (key == shortcuts[SHRT_ZOOM_OUT].key) {
 
710
            int mag = hscroll->mag();
 
711
            int zoomlvl = MusEGui::ScrollScale::getQuickZoomLevel(mag);
 
712
            if (zoomlvl > 1)
 
713
                  zoomlvl--;
 
714
 
 
715
            int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
 
716
            hscroll->setMag(newmag);
 
717
            //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag);
 
718
            return;
 
719
            }
 
720
      else if (key == shortcuts[SHRT_GOTO_CPOS].key) {
 
721
            MusECore::PartList* p = this->parts();
 
722
            MusECore::Part* first = p->begin()->second;
 
723
            hscroll->setPos(MusEGlobal::song->cpos() - first->tick() );
 
724
            return;
 
725
            }
 
726
      else if (key == shortcuts[SHRT_SCROLL_LEFT].key) {
 
727
            int pos = hscroll->pos() - MusEGlobal::config.division;
 
728
            if (pos < 0)
 
729
                  pos = 0;
 
730
            hscroll->setPos(pos);
 
731
            return;
 
732
            }
 
733
      else if (key == shortcuts[SHRT_SCROLL_RIGHT].key) {
 
734
            int pos = hscroll->pos() + MusEGlobal::config.division;
 
735
            hscroll->setPos(pos);
 
736
            return;
 
737
            }
 
738
            
 
739
// TODO: Raster:            
 
740
//       else if (key == shortcuts[SHRT_SET_QUANT_1].key)
 
741
//             val = rasterTable[8 + off];
 
742
//       else if (key == shortcuts[SHRT_SET_QUANT_2].key)
 
743
//             val = rasterTable[7 + off];
 
744
//       else if (key == shortcuts[SHRT_SET_QUANT_3].key)
 
745
//             val = rasterTable[6 + off];
 
746
//       else if (key == shortcuts[SHRT_SET_QUANT_4].key)
 
747
//             val = rasterTable[5 + off];
 
748
//       else if (key == shortcuts[SHRT_SET_QUANT_5].key)
 
749
//             val = rasterTable[4 + off];
 
750
//       else if (key == shortcuts[SHRT_SET_QUANT_6].key)
 
751
//             val = rasterTable[3 + off];
 
752
//       else if (key == shortcuts[SHRT_SET_QUANT_7].key)
 
753
//             val = rasterTable[2 + off];
 
754
//       else if (key == shortcuts[SHRT_TOGGLE_TRIOL].key)
 
755
//             val = rasterTable[index + ((off == 0) ? 9 : 0)];
 
756
//       else if (key == shortcuts[SHRT_TOGGLE_PUNCT].key)
 
757
//             val = rasterTable[index + ((off == 18) ? 9 : 18)];
 
758
//       else if (key == shortcuts[SHRT_TOGGLE_PUNCT2].key) {//CDW
 
759
//             if ((off == 18) && (index > 2)) {
 
760
//                   val = rasterTable[index + 9 - 1];
 
761
//                   }
 
762
//             else if ((off == 9) && (index < 8)) {
 
763
//                   val = rasterTable[index + 18 + 1];
 
764
//                   }
 
765
//             else
 
766
//                   return;
 
767
//             }
 
768
            
 
769
      else { //Default:
495
770
            event->ignore();
 
771
            return;
496
772
            }
 
773
        
 
774
      // TODO: Raster:  
 
775
      //setRaster(val);
 
776
      //toolbar->setRaster(_raster);
497
777
      }
498
778
 
499
779
//---------------------------------------------------------
540
820
{
541
821
  if(MusEGlobal::config.smartFocus)
542
822
  {
543
 
    view->setFocus();
544
 
    view->activateWindow();
 
823
    canvas->setFocus();
 
824
    canvas->activateWindow();
545
825
  }
546
826
}
547
827
 
 
828
//---------------------------------------------------------
 
829
//   eventColorModeChanged
 
830
//---------------------------------------------------------
 
831
 
 
832
void WaveEdit::eventColorModeChanged(int mode)
 
833
      {
 
834
      colorMode = mode;
 
835
      colorModeInit = colorMode;
 
836
      
 
837
      ((WaveCanvas*)(canvas))->setColorMode(colorMode);
 
838
      }
 
839
 
 
840
//---------------------------------------------------------
 
841
//   setEventColorMode
 
842
//---------------------------------------------------------
 
843
 
 
844
void WaveEdit::setEventColorMode(int mode)
 
845
      {
 
846
      colorMode = mode;
 
847
      colorModeInit = colorMode;
 
848
      
 
849
      evColorNormalAction->setChecked(mode == 0);
 
850
      evColorPartsAction->setChecked(mode == 1);
 
851
      
 
852
      ((WaveCanvas*)(canvas))->setColorMode(colorMode);
 
853
      }
 
854
 
 
855
 
 
856
 
548
857
} // namespace MusEGui