summaryrefslogtreecommitdiff
path: root/muse2
diff options
context:
space:
mode:
Diffstat (limited to 'muse2')
-rw-r--r--muse2/ChangeLog14
-rw-r--r--muse2/muse/app.cpp23
-rw-r--r--muse2/muse/app.h7
-rw-r--r--muse2/muse/arranger/arranger.cpp46
-rw-r--r--muse2/muse/arranger/arranger.h2
-rw-r--r--muse2/muse/instruments/minstrument.cpp6
-rw-r--r--muse2/muse/master/lmaster.cpp1
-rw-r--r--muse2/muse/midiedit/drumedit.cpp3
-rw-r--r--muse2/muse/midiedit/pianoroll.cpp2
-rw-r--r--muse2/muse/midiedit/scoreedit.cpp1
-rw-r--r--muse2/muse/midieditor.cpp27
-rw-r--r--muse2/muse/midieditor.h4
-rw-r--r--muse2/muse/midifile.cpp2
-rw-r--r--muse2/muse/waveedit/waveedit.cpp32
-rw-r--r--muse2/muse/waveedit/waveedit.h3
-rw-r--r--muse2/muse/waveedit/waveview.cpp49
-rw-r--r--muse2/muse/waveedit/waveview.h3
-rw-r--r--muse2/muse/widgets/CMakeLists.txt9
-rw-r--r--muse2/muse/widgets/canvas.cpp44
-rw-r--r--muse2/muse/widgets/canvas.h2
-rw-r--r--muse2/muse/widgets/projectcreateimpl.cpp5
-rw-r--r--muse2/muse/widgets/unusedwavefiles.cpp97
-rw-r--r--muse2/muse/widgets/unusedwavefiles.h25
-rw-r--r--muse2/muse/widgets/unusedwavefiles.ui131
24 files changed, 499 insertions, 39 deletions
diff --git a/muse2/ChangeLog b/muse2/ChangeLog
index edf65b0b..fce03eb0 100644
--- a/muse2/ChangeLog
+++ b/muse2/ChangeLog
@@ -1,5 +1,19 @@
+15.05.2011:
+ - Changed mouse wheel behaviour in graphical editors except the score editor (rj)
+ * wheel scrolls left-right
+ * shift+wheel scrolls up-down
+ * control+wheel zooms horizontally
+ TODO:
+ - score editor
+ - zoom to where the mouse is located
+14.05.2011:
+ - Fixed problem with project save dialog missing a forward slash '/'. (Tim)
+ ~/.config was being polluted with wrong folders. Fixed ProjectCreateImpl::updateDirectoryPath().
13.05.2011:
- New spanish translation from Cristian Ramos (rj)
+ - Added dialog to remove unused wave files (rj)
+ - Changed default imported midi song type to GM. (Tim)
+ - Added GM drums patch in MidiInstrument::populatePatchPopup() for GM songs on ch 10. (Tim)
12.05.2011:
- Changed template song "default.med" song type from NO to GM, to help new users. (Tim)
10.05.2011:
diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp
index 4ec64edf..adac840a 100644
--- a/muse2/muse/app.cpp
+++ b/muse2/muse/app.cpp
@@ -53,6 +53,7 @@
#include "widgets/menutitleitem.h"
#include "tools.h"
#include "visibletracks.h"
+#include "widgets/unusedwavefiles.h"
#ifdef DSSI_SUPPORT
#include "dssihost.h"
@@ -964,6 +965,7 @@ MusE::MusE(int argc, char** argv) : QMainWindow()
fileImportPartAction = new QAction(tr("Import Part"), this);
fileImportWaveAction = new QAction(tr("Import Wave File"), this);
+ fileMoveWaveFiles = new QAction(tr("Find unused wave files"), this);
quitAction = new QAction(tr("&Quit"), this);
@@ -998,10 +1000,9 @@ MusE::MusE(int argc, char** argv) : QMainWindow()
scoreAllInOneSubsubmenu = new QMenu(tr("all parts in one staff"), this);
scoreOneStaffPerTrackSubsubmenu = new QMenu(tr("one staff per part"), this);
- scoreSubmenu->addMenu(scoreAllInOneSubsubmenu);
- scoreSubmenu->addMenu(scoreOneStaffPerTrackSubsubmenu);
-
- updateScoreMenus();
+ scoreSubmenu->addMenu(scoreAllInOneSubsubmenu);
+ scoreSubmenu->addMenu(scoreOneStaffPerTrackSubsubmenu);
+ updateScoreMenus();
startScoreEditAction = new QAction(*scoreIconSet, tr("New score window"), this);
startPianoEditAction = new QAction(*pianoIconSet, tr("Pianoroll"), this);
@@ -1072,6 +1073,7 @@ MusE::MusE(int argc, char** argv) : QMainWindow()
autoClearAction = new QAction(QIcon(*automation_clear_dataIcon), tr("Clear Automation Data"), this);
autoClearAction->setEnabled(false);
+
//-------- Settings Actions
settingsGlobalAction = new QAction(QIcon(*settings_globalsettingsIcon), tr("Global Settings"), this);
settingsShortcutsAction = new QAction(QIcon(*settings_configureshortcutsIcon), tr("Configure Shortcuts"), this);
@@ -1113,6 +1115,7 @@ MusE::MusE(int argc, char** argv) : QMainWindow()
connect(fileImportPartAction, SIGNAL(activated()), SLOT(importPart()));
connect(fileImportWaveAction, SIGNAL(activated()), SLOT(importWave()));
+ connect(fileMoveWaveFiles, SIGNAL(activated()), SLOT(findUnusedWaveFiles()));
connect(quitAction, SIGNAL(activated()), SLOT(quitDoc()));
//-------- Edit connections
@@ -1338,6 +1341,8 @@ MusE::MusE(int argc, char** argv) : QMainWindow()
menu_file->addSeparator();
menu_file->addAction(fileImportWaveAction);
menu_file->addSeparator();
+ menu_file->addAction(fileMoveWaveFiles);
+ menu_file->addSeparator();
menu_file->addAction(quitAction);
menu_file->addSeparator();
@@ -5081,6 +5086,7 @@ void MusE::execDeliveredScript(int id)
//QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id];
song->executeScript(song->getScriptPath(id, true).toLatin1().constData(), song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger
}
+
//---------------------------------------------------------
// execUserScript
//---------------------------------------------------------
@@ -5088,3 +5094,12 @@ void MusE::execUserScript(int id)
{
song->executeScript(song->getScriptPath(id, false).toLatin1().constData(), song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger
}
+
+//---------------------------------------------------------
+// findUnusedWaveFiles
+//---------------------------------------------------------
+void MusE::findUnusedWaveFiles()
+{
+ UnusedWaveFiles unused(muse);
+ unused.exec();
+}
diff --git a/muse2/muse/app.h b/muse2/muse/app.h
index 0cca50b3..70aac8fc 100644
--- a/muse2/muse/app.h
+++ b/muse2/muse/app.h
@@ -104,7 +104,8 @@ class MusE : public QMainWindow
// File menu actions
QAction *fileSaveAction, *fileOpenAction, *fileNewAction, *testAction;
- QAction *fileSaveAsAction, *fileImportMidiAction, *fileExportMidiAction, *fileImportPartAction, *fileImportWaveAction, *quitAction;
+ QAction *fileSaveAsAction, *fileImportMidiAction, *fileExportMidiAction;
+ QAction *fileImportPartAction, *fileImportWaveAction, *fileMoveWaveFiles, *quitAction;
// Edit Menu actions
QAction *editCutAction, *editCopyAction, *editPasteAction, *editInsertAction, *editPasteCloneAction, *editPaste2TrackAction;
@@ -159,7 +160,7 @@ class MusE : public QMainWindow
QMenu *menu_file, *menuView, *menuSettings, *menu_help;
QMenu *menuEdit, *menuStructure;
- QMenu* menu_audio, *menuAutomation;
+ QMenu* menu_audio, *menuAutomation, *menuUtils;
QMenu* menu_functions, *menuScriptPlugins;
QMenu* select, *master, *midiEdit, *addTrack;
@@ -246,6 +247,7 @@ class MusE : public QMainWindow
void importWave();
void importPart();
void exportMidi();
+ void findUnusedWaveFiles();
void toggleTransport(bool);
void toggleMarker(bool);
@@ -373,6 +375,7 @@ class MusE : public QMainWindow
bool seqStart();
void setHeartBeat();
void importController(int, MidiPort*, int);
+ QString projectName() { return project.fileName(); }
//QWidget* mixerWindow();
QWidget* mixer1Window();
QWidget* mixer2Window();
diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp
index 495c4cb8..d74bed78 100644
--- a/muse2/muse/arranger/arranger.cpp
+++ b/muse2/muse/arranger/arranger.cpp
@@ -384,6 +384,8 @@ Arranger::Arranger(QMainWindow* parent, const char* name)
connect(list, SIGNAL(keyPressExt(QKeyEvent*)), canvas, SLOT(redirKeypress(QKeyEvent*)));
connect(canvas, SIGNAL(selectTrackAbove()), list, SLOT(selectTrackAbove()));
connect(canvas, SIGNAL(selectTrackBelow()), list, SLOT(selectTrackBelow()));
+ connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
+ connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
connect(this, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*)));
connect(list, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*)));
@@ -1078,27 +1080,39 @@ void Arranger::keyPressEvent(QKeyEvent* event)
key+= Qt::CTRL;
if (key == shortcuts[SHRT_ZOOM_IN].key) {
- int mag = hscroll->mag();
- int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
- if (zoomlvl < 23)
- zoomlvl++;
-
- int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
-
- hscroll->setMag(newmag);
+ horizontalZoomIn();
return;
}
else if (key == shortcuts[SHRT_ZOOM_OUT].key) {
- int mag = hscroll->mag();
- int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
- if (zoomlvl > 1)
- zoomlvl--;
-
- int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
-
- hscroll->setMag(newmag);
+ horizontalZoomOut();
return;
}
QWidget::keyPressEvent(event);
}
+
+void Arranger::horizontalZoomIn()
+{
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl < 23)
+ zoomlvl++;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
+
+void Arranger::horizontalZoomOut()
+{
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl > 1)
+ zoomlvl--;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
diff --git a/muse2/muse/arranger/arranger.h b/muse2/muse/arranger/arranger.h
index 0143afd5..262d7464 100644
--- a/muse2/muse/arranger/arranger.h
+++ b/muse2/muse/arranger/arranger.h
@@ -122,6 +122,8 @@ class Arranger : public QWidget {
void setTempo200();
//void seek();
void verticalScrollSetYpos(unsigned);
+ void horizontalZoomIn();
+ void horizontalZoomOut();
signals:
void redirectWheelEvent(QWheelEvent*);
diff --git a/muse2/muse/instruments/minstrument.cpp b/muse2/muse/instruments/minstrument.cpp
index 9e52498f..4fde7bf3 100644
--- a/muse2/muse/instruments/minstrument.cpp
+++ b/muse2/muse/instruments/minstrument.cpp
@@ -891,7 +891,13 @@ void MidiInstrument::populatePatchPopup(QMenu* menu, int chan, MType songType, b
case MT_GS: mask = 2; break;
case MT_GM:
if(drumchan)
+ {
+ int id = (0xff << 16) + (0xff << 8) + 0x00; // First patch
+ QAction* act = menu->addAction(gmdrumname);
+ //act->setCheckable(true);
+ act->setData(id);
return;
+ }
mask = 1;
break;
case MT_UNKNOWN: mask = 7; break;
diff --git a/muse2/muse/master/lmaster.cpp b/muse2/muse/master/lmaster.cpp
index 2f921cdc..9083c024 100644
--- a/muse2/muse/master/lmaster.cpp
+++ b/muse2/muse/master/lmaster.cpp
@@ -125,6 +125,7 @@ LMaster::LMaster()
setWindowTitle(tr("MusE: Mastertrack"));
setMinimumHeight(100);
setFixedWidth(400);
+ setFocusPolicy(Qt::StrongFocus);
//---------Pulldown Menu----------------------------
menuEdit = menuBar()->addMenu(tr("&Edit"));
diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp
index b5ff9447..b8d97283 100644
--- a/muse2/muse/midiedit/drumedit.cpp
+++ b/muse2/muse/midiedit/drumedit.cpp
@@ -157,6 +157,7 @@ void DrumEdit::closeEvent(QCloseEvent* e)
DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned initPos)
: MidiEditor(_rasterInit, pl, parent, name)
{
+ setFocusPolicy(Qt::StrongFocus);
split1w1 = 0;
resize(_widthInit, _heightInit);
selPart = 0;
@@ -379,6 +380,8 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini
canvas->setCanvasTools(drumeditTools);
canvas->setFocus();
connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int)));
+ connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
+ connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
time->setOrigin(offset, 0);
QList<int> mops;
diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp
index 2a2bad5b..840bd1c7 100644
--- a/muse2/muse/midiedit/pianoroll.cpp
+++ b/muse2/muse/midiedit/pianoroll.cpp
@@ -358,6 +358,8 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i
canvas->setCanvasTools(pianorollTools);
canvas->setFocus();
connect(canvas, SIGNAL(toolChanged(int)), tools2, SLOT(set(int)));
+ connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
+ connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
time->setOrigin(offset, 0);
gridS1->setRowStretch(2, 100);
diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp
index 0b4111cd..67325b75 100644
--- a/muse2/muse/midiedit/scoreedit.cpp
+++ b/muse2/muse/midiedit/scoreedit.cpp
@@ -4126,7 +4126,6 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed)
*
* CURRENT TODO
* o let the user change velocity of already existent notes
- * o save dialog-window's values
*
* IMPORTANT TODO
* o add a select-clef-toolbox for tracks
diff --git a/muse2/muse/midieditor.cpp b/muse2/muse/midieditor.cpp
index 2a6d8750..f4d21320 100644
--- a/muse2/muse/midieditor.cpp
+++ b/muse2/muse/midieditor.cpp
@@ -226,3 +226,30 @@ void MidiEditor::setCurCanvasPart(Part* part)
canvas->setCurrentPart(part);
}
+void MidiEditor::horizontalZoomIn()
+{
+ printf("zoom in \n");
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl < 23)
+ zoomlvl++;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
+
+void MidiEditor::horizontalZoomOut()
+{
+ printf("zoom out \n");
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl > 1)
+ zoomlvl--;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
diff --git a/muse2/muse/midieditor.h b/muse2/muse/midieditor.h
index 00272529..78873a6a 100644
--- a/muse2/muse/midieditor.h
+++ b/muse2/muse/midieditor.h
@@ -55,7 +55,9 @@ class MidiEditor : public TopWin {
public slots:
void songChanged(int type);
void setCurDrumInstrument(int instr);
-
+ void horizontalZoomIn();
+ void horizontalZoomOut();
+
virtual void updateHScrollRange() { };
signals:
void curDrumInstrumentChanged(int);
diff --git a/muse2/muse/midifile.cpp b/muse2/muse/midifile.cpp
index 21e3e882..65cb6d25 100644
--- a/muse2/muse/midifile.cpp
+++ b/muse2/muse/midifile.cpp
@@ -60,7 +60,7 @@ MidiFile::MidiFile(FILE* f)
{
fp = f;
curPos = 0;
- _mtype = MT_GM;
+ _mtype = MT_GM; // MT_UNKNOWN;
_error = MF_NO_ERROR;
_tracks = new MidiFileTrackList;
}
diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp
index 99dfd5f1..7a5ad815 100644
--- a/muse2/muse/waveedit/waveedit.cpp
+++ b/muse2/muse/waveedit/waveedit.cpp
@@ -65,6 +65,7 @@ WaveEdit::WaveEdit(PartList* pl)
: MidiEditor(1, pl)
{
resize(_widthInit, _heightInit);
+ setFocusPolicy(Qt::StrongFocus);
QSignalMapper* mapper = new QSignalMapper(this);
QAction* act;
@@ -223,6 +224,9 @@ WaveEdit::WaveEdit(PartList* pl)
ymag->setFixedWidth(16);
connect(view, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int)));
connect(ymag, SIGNAL(valueChanged(int)), view, SLOT(setYScale(int)));
+ connect(view, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn()));
+ connect(view, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut()));
+
time->setOrigin(0, 0);
mainGrid->setRowStretch(0, 100);
@@ -247,6 +251,8 @@ WaveEdit::WaveEdit(PartList* pl)
// connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
connect(view, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned)));
+ connect(view, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned)));
+
connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange()));
connect(song, SIGNAL(songChanged(int)), SLOT(songChanged1(int)));
@@ -526,3 +532,29 @@ void WaveEdit::moveVerticalSlider(int val)
ymag->setValue(ymag->value() + val);
}
+
+void WaveEdit::horizontalZoomIn()
+{
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl < 23)
+ zoomlvl++;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
+
+void WaveEdit::horizontalZoomOut()
+{
+ int mag = hscroll->mag();
+ int zoomlvl = ScrollScale::getQuickZoomLevel(mag);
+ if (zoomlvl > 1)
+ zoomlvl--;
+
+ int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl);
+
+ hscroll->setMag(newmag);
+
+}
diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h
index 5c06d37f..e966a635 100644
--- a/muse2/muse/waveedit/waveedit.h
+++ b/muse2/muse/waveedit/waveedit.h
@@ -71,6 +71,9 @@ class WaveEdit : public MidiEditor {
void configChanged();
virtual void updateHScrollRange();
+ void horizontalZoomIn();
+ void horizontalZoomOut();
+
signals:
void deleted(unsigned long);
diff --git a/muse2/muse/waveedit/waveview.cpp b/muse2/muse/waveedit/waveview.cpp
index f83ae1d5..0c387f72 100644
--- a/muse2/muse/waveedit/waveview.cpp
+++ b/muse2/muse/waveedit/waveview.cpp
@@ -25,6 +25,7 @@
#include "waveedit.h"
#include "audio.h"
#include "gconfig.h"
+#include "fastlog.h"
bool modifyWarnedYet = false;
//---------------------------------------------------------
@@ -381,14 +382,52 @@ void WaveView::viewMousePressEvent(QMouseEvent* event)
viewMouseMoveEvent(event);
}
-
+#define WHEEL_STEPSIZE 40
+#define WHEEL_DELTA 120
//---------------------------------------------------------
// wheelEvent
//---------------------------------------------------------
-void WaveView::wheelEvent(QWheelEvent* event)
- {
- emit mouseWheelMoved(event->delta() / 10);
- }
+void WaveView::wheelEvent(QWheelEvent* ev)
+{
+ int keyState = ev->modifiers();
+
+ bool shift = keyState & Qt::ShiftModifier;
+ bool alt = keyState & Qt::AltModifier;
+ bool ctrl = keyState & Qt::ControlModifier;
+
+ if (shift) { // scroll vertically
+ emit mouseWheelMoved(ev->delta() / 10);
+
+ } else if (ctrl) { // zoom horizontally
+ if (ev->delta()>0)
+ emit horizontalZoomIn();
+ else
+ emit horizontalZoomOut();
+
+ } else { // scroll horizontally
+ int delta = ev->delta() / WHEEL_DELTA;
+ int xpixelscale = 5*fast_log10(rmapxDev(1));
+
+
+ if (xpixelscale <= 0)
+ xpixelscale = 1;
+
+ int scrollstep = WHEEL_STEPSIZE * (delta);
+ ///if (ev->state() == Qt::ShiftModifier)
+// if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier)
+ scrollstep = scrollstep / 10;
+
+ int newXpos = xpos + xpixelscale * scrollstep;
+
+ if (newXpos < 0)
+ newXpos = 0;
+
+ //setYPos(newYpos);
+ emit horizontalScroll((unsigned)newXpos);
+
+ }
+
+}
//---------------------------------------------------------
// viewMouseReleaseEvent
diff --git a/muse2/muse/waveedit/waveview.h b/muse2/muse/waveedit/waveview.h
index 3ee0d5f8..c7992952 100644
--- a/muse2/muse/waveedit/waveview.h
+++ b/muse2/muse/waveedit/waveview.h
@@ -88,6 +88,9 @@ class WaveView : public View {
void followEvent(int);
void timeChanged(unsigned);
void mouseWheelMoved(int);
+ void horizontalScroll(unsigned);
+ void horizontalZoomIn();
+ void horizontalZoomOut();
public:
WaveView(MidiEditor*, QWidget* parent, int xscale, int yscale);
diff --git a/muse2/muse/widgets/CMakeLists.txt b/muse2/muse/widgets/CMakeLists.txt
index feb86816..0ca33d5a 100644
--- a/muse2/muse/widgets/CMakeLists.txt
+++ b/muse2/muse/widgets/CMakeLists.txt
@@ -75,7 +75,8 @@ QT4_WRAP_CPP (widget_mocs
tools.h
# ttoolbar.h
ttoolbutton.h
- velocity.h
+ unusedwavefiles.h
+ velocity.h
quantize.h
move.h
remove.h
@@ -115,7 +116,8 @@ file (GLOB widgets_ui_files
songinfo.ui
synthconfigbase.ui
transformbase.ui
- transposebase.ui
+ transposebase.ui
+ unusedwavefiles.ui
velocitybase.ui
quantbase.ui
movebase.ui
@@ -187,7 +189,8 @@ file (GLOB widgets_source_files
tools.cpp
ttoolbar.cpp
ttoolbutton.cpp
- utils.cpp
+ unusedwavefiles.cpp
+ utils.cpp
velocity.cpp
quantize.cpp
move.cpp
diff --git a/muse2/muse/widgets/canvas.cpp b/muse2/muse/widgets/canvas.cpp
index c12ac956..18de985b 100644
--- a/muse2/muse/widgets/canvas.cpp
+++ b/muse2/muse/widgets/canvas.cpp
@@ -24,6 +24,7 @@
#include "icons.h"
#include "../marker/marker.h"
#include "part.h"
+#include "fastlog.h"
#define ABS(x) ((x) < 0) ? -(x) : (x)
@@ -338,7 +339,13 @@ void Canvas::draw(QPainter& p, const QRect& rect)
// wheelEvent
//---------------------------------------------------------
void Canvas::wheelEvent(QWheelEvent* ev)
- {
+{
+ int keyState = ev->modifiers();
+
+ bool shift = keyState & Qt::ShiftModifier;
+ bool ctrl = keyState & Qt::ControlModifier;
+
+ if (shift) { // scroll vertically
int delta = ev->delta() / WHEEL_DELTA;
int ypixelscale = rmapyDev(1);
@@ -347,8 +354,8 @@ void Canvas::wheelEvent(QWheelEvent* ev)
int scrollstep = WHEEL_STEPSIZE * (-delta);
///if (ev->state() == Qt::ShiftModifier)
- if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier)
- scrollstep = scrollstep / 10;
+// if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier)
+ scrollstep = scrollstep / 2;
int newYpos = ypos + ypixelscale * scrollstep;
@@ -358,7 +365,36 @@ void Canvas::wheelEvent(QWheelEvent* ev)
//setYPos(newYpos);
emit verticalScroll((unsigned)newYpos);
- }
+ } else if (ctrl) { // zoom horizontally
+ if (ev->delta()>0)
+ emit horizontalZoomIn();
+ else
+ emit horizontalZoomOut();
+
+ } else { // scroll horizontally
+ int delta = ev->delta() / WHEEL_DELTA;
+ int xpixelscale = 5*fast_log10(rmapxDev(1));
+
+
+ if (xpixelscale <= 0)
+ xpixelscale = 1;
+
+ int scrollstep = WHEEL_STEPSIZE * (delta);
+ ///if (ev->state() == Qt::ShiftModifier)
+// if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier)
+ scrollstep = scrollstep / 10;
+
+ int newXpos = xpos + xpixelscale * scrollstep;
+
+ if (newXpos < 0)
+ newXpos = 0;
+
+ //setYPos(newYpos);
+ emit horizontalScroll((unsigned)newXpos);
+
+ }
+
+}
void Canvas::redirectedWheelEvent(QWheelEvent* ev)
{
diff --git a/muse2/muse/widgets/canvas.h b/muse2/muse/widgets/canvas.h
index 97392f1e..6e8b9fa8 100644
--- a/muse2/muse/widgets/canvas.h
+++ b/muse2/muse/widgets/canvas.h
@@ -174,6 +174,8 @@ class Canvas : public View {
void verticalScroll(unsigned);
void horizontalScroll(unsigned);
void horizontalScrollNoLimit(unsigned);
+ void horizontalZoomIn();
+ void horizontalZoomOut();
public:
Canvas(QWidget* parent, int sx, int sy, const char* name = 0);
bool isSingleSelection();
diff --git a/muse2/muse/widgets/projectcreateimpl.cpp b/muse2/muse/widgets/projectcreateimpl.cpp
index d455c917..369e806a 100644
--- a/muse2/muse/widgets/projectcreateimpl.cpp
+++ b/muse2/muse/widgets/projectcreateimpl.cpp
@@ -45,12 +45,13 @@ void ProjectCreateImpl::updateDirectoryPath()
if (createFolderCheckbox->isChecked()) {
if (!projectNameEdit->text().isEmpty())
name = projectNameEdit->text() + "/" + projectNameEdit->text() + ".med";
- storageDirEdit->setText(directoryPath + name );
+ //storageDirEdit->setText(directoryPath + name );
} else {
if (!projectNameEdit->text().isEmpty())
name = projectNameEdit->text() + ".med";
- storageDirEdit->setText(directoryPath +"/" + name);
+ //storageDirEdit->setText(directoryPath +"/" + name);
}
+ storageDirEdit->setText(directoryPath +"/" + name ); // Tim
}
QString ProjectCreateImpl::getProjectPath()
diff --git a/muse2/muse/widgets/unusedwavefiles.cpp b/muse2/muse/widgets/unusedwavefiles.cpp
new file mode 100644
index 00000000..5a2e620b
--- /dev/null
+++ b/muse2/muse/widgets/unusedwavefiles.cpp
@@ -0,0 +1,97 @@
+#include <stdio.h>
+#include <qdir.h>
+#include <qfileinfo.h>
+#include <qstringlist.h>
+#include <qtextstream.h>
+#include <qmessagebox.h>
+#include "unusedwavefiles.h"
+#include "ui_unusedwavefiles.h"
+#include "globals.h"
+#include "app.h"
+
+UnusedWaveFiles::UnusedWaveFiles(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::UnusedWaveFiles)
+{
+
+ ui->setupUi(this);
+ ui->currentProjRadioButton->setChecked(true);
+ connect(ui->currentProjRadioButton, SIGNAL(clicked()), SLOT(findWaveFiles()));
+ connect(ui->allProjRadioButton, SIGNAL(clicked()), SLOT(findWaveFiles()));
+ findWaveFiles();
+
+}
+
+void UnusedWaveFiles::findWaveFiles()
+{
+ ui->filelistWidget->clear();
+ //printf("museProject =%s\n", museProject.toLatin1().data());
+// QFileInfo proj(museProject);
+// QString projPath = proj.absolutePath();
+ QDir dir(museProject);
+ QStringList filter;
+ filter.append("*.wav");
+ filter.append("*.ogg");
+ allWaveFiles= dir.entryList(filter);
+ if (!allWaveFiles.count())
+ return;
+ // get med files
+ QStringList medFiles;
+ if (ui->currentProjRadioButton->isChecked()) {
+ medFiles.append(muse->projectName());
+ } else {
+ //printf("get ALLL *.med files!\n");
+ QStringList medFilter("*.med");
+ medFiles = dir.entryList(medFilter);
+ }
+ foreach (QString medFile, medFiles) {
+ QString fname = museProject+"/"+ medFile;
+ //printf("fopen %s\n", fname.toLatin1().data());
+ FILE *fp =fopen(fname.toLatin1().data(),"r");
+ QTextStream fileContent(fp);
+ while (!fileContent.atEnd()) {
+ QString line = fileContent.readLine();
+ if (line.contains(".wav") || line.contains(".ogg")) { // optimization
+ foreach (QString wav, allWaveFiles) {
+ //printf("checking wav [%s]\n", wav.toLatin1().data() );
+ if (line.contains(wav)) {
+ //int beforeSize=allWaveFiles.size();
+ allWaveFiles.removeOne(wav);
+ //printf("removed one from list, %d %d\n", beforeSize, allWaveFiles.size());
+ break;
+ }
+ }
+ }
+ }
+ fclose(fp);
+ }
+
+ ui->filelistWidget->addItems(allWaveFiles);
+ update();
+}
+
+UnusedWaveFiles::~UnusedWaveFiles()
+{
+ delete ui;
+}
+
+void UnusedWaveFiles::accept()
+{
+ int ret = QMessageBox::question(this,"Move files", "Are you sure you want to move away the unused files?",
+ QMessageBox::Ok, QMessageBox::Cancel);
+ if (ret == QMessageBox::Ok) {
+ QDir currDir(museProject);
+ currDir.mkdir("unused");
+
+ foreach(QString file, allWaveFiles) {
+ QFile::rename(museProject+ "/"+file, museProject + "/unused/" +file);
+ // move the wca file if it exists
+ QFileInfo wf(museProject + "/" + file);
+ if (QFile::exists(museProject + "/" + wf.baseName()+".wca")) {
+ QFile::rename(museProject + "/" + wf.baseName()+".wca", museProject + "/unused/" +wf.baseName()+".wca");
+
+ }
+ }
+ }
+ QDialog::accept();
+}
diff --git a/muse2/muse/widgets/unusedwavefiles.h b/muse2/muse/widgets/unusedwavefiles.h
new file mode 100644
index 00000000..fd1f524c
--- /dev/null
+++ b/muse2/muse/widgets/unusedwavefiles.h
@@ -0,0 +1,25 @@
+#ifndef UNUSEDWAVEFILES_H
+#define UNUSEDWAVEFILES_H
+
+#include <QDialog>
+
+namespace Ui {
+ class UnusedWaveFiles;
+}
+
+class UnusedWaveFiles : public QDialog
+{
+ Q_OBJECT
+ QStringList allWaveFiles;
+public:
+ explicit UnusedWaveFiles(QWidget *parent = 0);
+ ~UnusedWaveFiles();
+
+public slots:
+ void accept();
+ void findWaveFiles();
+private:
+ Ui::UnusedWaveFiles *ui;
+};
+
+#endif // UNUSEDWAVEFILES_H
diff --git a/muse2/muse/widgets/unusedwavefiles.ui b/muse2/muse/widgets/unusedwavefiles.ui
new file mode 100644
index 00000000..65c8c804
--- /dev/null
+++ b/muse2/muse/widgets/unusedwavefiles.ui
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UnusedWaveFiles</class>
+ <widget class="QDialog" name="UnusedWaveFiles">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>508</width>
+ <height>241</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Dialog</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>List of unused audio files in current project directory:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" rowspan="2">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QRadioButton" name="currentProjRadioButton">
+ <property name="text">
+ <string>Current project</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="allProjRadioButton">
+ <property name="text">
+ <string>All .med files
+in current
+ directory</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0">
+ <widget class="QListWidget" name="filelistWidget"/>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>98</width>
+ <height>17</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="moveButton">
+ <property name="text">
+ <string>Move files to 'unused' subdir</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>UnusedWaveFiles</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>416</x>
+ <y>331</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>305</x>
+ <y>183</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>moveButton</sender>
+ <signal>clicked()</signal>
+ <receiver>UnusedWaveFiles</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>266</x>
+ <y>321</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>305</x>
+ <y>183</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>