95
108
menuGain = menuFunctions->addMenu(tr("&Gain"));
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()));
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()));
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()));
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()));
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()));
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()));
121
134
connect(mapper, SIGNAL(mapped(int)), this, SLOT(cmd(int)));
123
136
menuFunctions->addSeparator();
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()));
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()));
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()));
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()));
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()));
159
menuEdit->addSeparator();
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()));
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()));
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()));
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()));
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()));
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()));
162
185
select = menuEdit->addMenu(QIcon(*selectIcon), tr("Select"));
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()));
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()));
195
select->addSeparator();
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()));
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()));
173
206
QMenu* settingsMenu = menuBar()->addMenu(tr("Window &Config"));
208
eventColor = settingsMenu->addMenu(tr("&Event Color"));
210
QActionGroup* actgrp = new QActionGroup(this);
211
actgrp->setExclusive(true);
213
evColorNormalAction = actgrp->addAction(tr("&Part colors"));
214
evColorNormalAction->setCheckable(true);
215
colorMapper->setMapping(evColorNormalAction, 0);
217
evColorPartsAction = actgrp->addAction(tr("&Gray"));
218
evColorPartsAction->setCheckable(true);
219
colorMapper->setMapping(evColorPartsAction, 1);
221
connect(evColorNormalAction, SIGNAL(triggered()), colorMapper, SLOT(map()));
222
connect(evColorPartsAction, SIGNAL(triggered()), colorMapper, SLOT(map()));
224
eventColor->addActions(actgrp->actions());
226
connect(colorMapper, SIGNAL(mapped(int)), this, SLOT(eventColorModeChanged(int)));
228
settingsMenu->addSeparator();
174
229
settingsMenu->addAction(subwinAction);
175
230
settingsMenu->addAction(shareAction);
176
231
settingsMenu->addAction(fullscreenAction);
179
233
connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(configChanged()));
182
236
//--------------------------------------------------
183
237
// ToolBar: Solo Cursor1 Cursor2
239
tools2 = new MusEGui::EditToolBar(this, waveEditTools);
185
242
addToolBarBreak();
186
243
tb1 = addToolBar(tr("WaveEdit tools"));
187
244
tb1->setObjectName("WaveEdit tools");
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);
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)));
315
connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int)));
316
connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int)));
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)));
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)));
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)));
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)));
334
// For the wave editor, let's start with the operation range selection tool.
335
canvas->setTool(MusEGui::CursorTool);
336
tools2->set(MusEGui::CursorTool);
338
setEventColorMode(colorMode);
274
342
updateHScrollRange();
310
395
void WaveEdit::updateHScrollRange()
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));
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?
318
405
// Compensate for the vscroll width.
319
406
//e += wview->rmapxDev(-vscroll->width());
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); // ...
413
//---------------------------------------------------------
415
//---------------------------------------------------------
417
void WaveEdit::timeChanged(unsigned t)
421
// Let the PosLabels disable themselves with INT_MAX.
427
unsigned frame = MusEGlobal::tempomap.tick2frame(t);
429
pos2->setValue(frame);
430
time->setPos(3, t, false);
326
433
//---------------------------------------------------------
487
611
void WaveEdit::keyPressEvent(QKeyEvent* event)
615
// int n = sizeof(rasterTable)/sizeof(*rasterTable);
616
// for (index = 0; index < n; ++index)
617
// if (rasterTable[index] == raster())
621
// // raster 1 is not in table
623
// int off = (index / 9) * 9;
624
// index = index % 9;
628
WaveCanvas* wc = (WaveCanvas*)canvas;
489
629
int key = event->key();
631
if (((QInputEvent*)event)->modifiers() & Qt::ShiftModifier)
633
if (((QInputEvent*)event)->modifiers() & Qt::AltModifier)
635
if (((QInputEvent*)event)->modifiers() & Qt::ControlModifier)
490
638
if (key == Qt::Key_Escape) {
643
else if (key == shortcuts[SHRT_POS_INC].key) {
644
wc->waveCmd(CMD_RIGHT);
647
else if (key == shortcuts[SHRT_POS_DEC].key) {
648
wc->waveCmd(CMD_LEFT);
651
else if (key == shortcuts[SHRT_POS_INC_NOSNAP].key) {
652
wc->waveCmd(CMD_RIGHT_NOSNAP);
655
else if (key == shortcuts[SHRT_POS_DEC_NOSNAP].key) {
656
wc->waveCmd(CMD_LEFT_NOSNAP);
659
else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) {
660
wc->waveCmd(CMD_INSERT);
663
else if (key == Qt::Key_Backspace) {
664
wc->waveCmd(CMD_BACKSPACE);
668
else if (key == shortcuts[SHRT_TOOL_POINTER].key) {
669
tools2->set(MusEGui::PointerTool);
672
else if (key == shortcuts[SHRT_TOOL_PENCIL].key) {
673
tools2->set(MusEGui::PencilTool);
676
else if (key == shortcuts[SHRT_TOOL_RUBBER].key) {
677
tools2->set(MusEGui::RubberTool);
680
else if (key == shortcuts[SHRT_TOOL_SCISSORS].key) {
681
tools2->set(MusEGui::CutTool);
684
else if (key == shortcuts[SHRT_TOOL_CURSOR].key) {
685
tools2->set(MusEGui::CursorTool);
688
else if (key == shortcuts[SHRT_EVENT_COLOR].key) {
691
else if (colorMode == 1)
693
setEventColorMode(colorMode);
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)
704
int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
705
hscroll->setMag(newmag);
706
//printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag);
709
else if (key == shortcuts[SHRT_ZOOM_OUT].key) {
710
int mag = hscroll->mag();
711
int zoomlvl = MusEGui::ScrollScale::getQuickZoomLevel(mag);
715
int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
716
hscroll->setMag(newmag);
717
//printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag);
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() );
726
else if (key == shortcuts[SHRT_SCROLL_LEFT].key) {
727
int pos = hscroll->pos() - MusEGlobal::config.division;
730
hscroll->setPos(pos);
733
else if (key == shortcuts[SHRT_SCROLL_RIGHT].key) {
734
int pos = hscroll->pos() + MusEGlobal::config.division;
735
hscroll->setPos(pos);
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];
762
// else if ((off == 9) && (index < 8)) {
763
// val = rasterTable[index + 18 + 1];
776
//toolbar->setRaster(_raster);
499
779
//---------------------------------------------------------