[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src commands/AudioClipExternalProcessi...
From: |
Remon Sijrier |
Subject: |
[Traverso-commit] traverso/src commands/AudioClipExternalProcessi... |
Date: |
Thu, 17 May 2007 21:38:16 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Remon Sijrier <r_sijrier> 07/05/17 21:38:16
Modified files:
src/commands : AudioClipExternalProcessing.cpp Import.cpp
MoveClip.cpp RemoveClip.cpp RemoveClip.h
SplitClip.cpp
src/core : AudioClipManager.cpp AudioSource.cpp
MonoReader.cpp Project.cpp Project.h
ReadSource.cpp ReadSource.h
ResourcesManager.cpp ResourcesManager.h
Song.cpp Song.h Track.cpp
src/traverso/songcanvas: ClipsViewPort.cpp SongView.cpp
src/traverso/widgets: ResourcesWidget.cpp ResourcesWidget.h
Log message:
* A different, more streamlined approach to managing resources
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/AudioClipExternalProcessing.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/Import.cpp?cvsroot=traverso&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.cpp?cvsroot=traverso&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/RemoveClip.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/RemoveClip.h?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/SplitClip.cpp?cvsroot=traverso&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClipManager.cpp?cvsroot=traverso&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioSource.cpp?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/MonoReader.cpp?cvsroot=traverso&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Project.cpp?cvsroot=traverso&r1=1.44&r2=1.45
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Project.h?cvsroot=traverso&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.cpp?cvsroot=traverso&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ReadSource.h?cvsroot=traverso&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ResourcesManager.cpp?cvsroot=traverso&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ResourcesManager.h?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.102&r2=1.103
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.h?cvsroot=traverso&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Track.cpp?cvsroot=traverso&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/ClipsViewPort.cpp?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/SongView.cpp?cvsroot=traverso&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/ResourcesWidget.cpp?cvsroot=traverso&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/ResourcesWidget.h?cvsroot=traverso&r1=1.5&r2=1.6
Patches:
Index: commands/AudioClipExternalProcessing.cpp
===================================================================
RCS file:
/sources/traverso/traverso/src/commands/AudioClipExternalProcessing.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- commands/AudioClipExternalProcessing.cpp 10 May 2007 20:02:36 -0000
1.4
+++ commands/AudioClipExternalProcessing.cpp 17 May 2007 21:38:14 -0000
1.5
@@ -115,7 +115,7 @@
QString dir = pm().get_project()->get_audiosources_dir();
- ReadSource* source =
resources_manager()->create_new_readsource(dir, name);
+ ReadSource* source = resources_manager()->import_source(dir,
name);
if (!source) {
printf("ResourcesManager didn't return a ReadSource,
most likely sox didn't understand your command\n");
return -1;
Index: commands/Import.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/Import.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- commands/Import.cpp 10 May 2007 20:02:36 -0000 1.22
+++ commands/Import.cpp 17 May 2007 21:38:15 -0000 1.23
@@ -89,7 +89,7 @@
QString dir = m_fileName.left(splitpoint - 1);
if (m_fileName.isEmpty()) {
- PWARN("FileName is empty!");
+ PWARN("Import:: FileName is empty!");
return -1;
}
@@ -112,16 +112,11 @@
QString dir = m_fileName.left(splitpoint - 1) + "/";
m_name = m_fileName.right(length - splitpoint);
- m_source = resources_manager()->get_readsource(m_fileName);
-
- if (! m_source ) {
- PMESG("AudioSource not found in acm, requesting new one");
- m_source = resources_manager()->create_new_readsource(dir,
m_name);
+ m_source = resources_manager()->import_source(dir, m_name);
if (! m_source) {
PERROR("Can't import audiofile %s", QS_C(m_fileName));
return -1;
}
- }
return 1;
}
@@ -165,8 +160,6 @@
Command::process_command(m_track->add_clip(m_clip, false));
- resources_manager()->undo_remove_clip_from_database(m_clip->get_id());
-
return 1;
}
@@ -174,11 +167,7 @@
int Import::undo_action()
{
PENTER;
-
Command::process_command(m_track->remove_clip(m_clip, false));
-
- resources_manager()->remove_clip_from_database(m_clip->get_id());
-
return 1;
}
Index: commands/MoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- commands/MoveClip.cpp 17 May 2007 06:55:42 -0000 1.40
+++ commands/MoveClip.cpp 17 May 2007 21:38:15 -0000 1.41
@@ -233,10 +233,6 @@
m_song->move_clip(m_originTrack, m_targetTrack, m_clip,
m_originalTrackFirstFrame + m_posDiff);
}
- if (m_actionType == "copy") {
-
resources_manager()->undo_remove_clip_from_database(m_clip->get_id());
- }
-
if (m_actionType == "anchored_left_edge_move") {
m_clip->set_right_edge(m_oldOppositeEdge);
}
@@ -255,9 +251,7 @@
Command::process_command(m_targetTrack->remove_clip(m_clip,
false));
}
- if (m_actionType == "copy") {
-
resources_manager()->remove_clip_from_database(m_clip->get_id());
- } else {
+ if (m_actionType != "copy") {
m_clip->set_track_start_frame(m_originalTrackFirstFrame);
Command::process_command(m_originTrack->add_clip(m_clip,
false));
}
@@ -279,7 +273,6 @@
if (m_actionType == "copy") {
Command::process_command(m_originTrack->remove_clip(m_clip,
false));
-
resources_manager()->remove_clip_from_database(m_clip->get_id());
} else if (m_actionType == "move") {
if (d->resync) {
m_clip->set_track_start_frame(m_originalTrackFirstFrame);
Index: commands/RemoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/RemoveClip.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- commands/RemoveClip.cpp 5 May 2007 20:43:58 -0000 1.8
+++ commands/RemoveClip.cpp 17 May 2007 21:38:15 -0000 1.9
@@ -58,10 +58,6 @@
Command::process_command(m_track->add_clip(m_clip, false));
}
- if (m_removeFromDataBase) {
-
resources_manager()->undo_remove_clip_from_database(m_clip->get_id());
- }
-
return 1;
}
@@ -77,17 +73,8 @@
Command::process_command(m_track->remove_clip(m_clip, false));
}
- if (m_removeFromDataBase) {
-
resources_manager()->remove_clip_from_database(m_clip->get_id());
- }
-
return 1;
}
-void AddRemoveClip::remove_from_database_when_removed(bool remove)
-{
- m_removeFromDataBase = remove;
-}
-
// eof
Index: commands/RemoveClip.h
===================================================================
RCS file: /sources/traverso/traverso/src/commands/RemoveClip.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- commands/RemoveClip.h 5 May 2007 20:43:58 -0000 1.4
+++ commands/RemoveClip.h 17 May 2007 21:38:15 -0000 1.5
@@ -42,8 +42,6 @@
int do_action();
int undo_action();
- void remove_from_database_when_removed(bool remove);
-
private :
int m_type;
bool m_removeFromDataBase;
Index: commands/SplitClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/SplitClip.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- commands/SplitClip.cpp 8 May 2007 22:13:40 -0000 1.28
+++ commands/SplitClip.cpp 17 May 2007 21:38:15 -0000 1.29
@@ -104,9 +104,6 @@
Command::process_command(m_track->remove_clip(m_clip, false));
- resources_manager()->undo_remove_clip_from_database(leftClip->get_id());
-
resources_manager()->undo_remove_clip_from_database(rightClip->get_id());
-
return 1;
}
@@ -119,9 +116,6 @@
Command::process_command(m_track->remove_clip(leftClip, false));
Command::process_command(m_track->remove_clip(rightClip, false));
- resources_manager()->remove_clip_from_database(leftClip->get_id());
- resources_manager()->remove_clip_from_database(rightClip->get_id());
-
return 1;
}
Index: core/AudioClipManager.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClipManager.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- core/AudioClipManager.cpp 5 May 2007 20:43:58 -0000 1.12
+++ core/AudioClipManager.cpp 17 May 2007 21:38:15 -0000 1.13
@@ -17,7 +17,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- $Id: AudioClipManager.cpp,v 1.12 2007/05/05 20:43:58 r_sijrier Exp $
+ $Id: AudioClipManager.cpp,v 1.13 2007/05/17 21:38:15 r_sijrier Exp $
*/
#include "AudioClipManager.h"
@@ -59,7 +59,7 @@
m_song->get_snap_list()->mark_dirty(clip);
update_last_frame();
- resources_manager()->set_clip_added(clip);
+ resources_manager()->mark_clip_added(clip);
}
void AudioClipManager::remove_clip( AudioClip * clip )
@@ -71,7 +71,7 @@
}
m_song->get_snap_list()->mark_dirty(clip);
update_last_frame();
- resources_manager()->set_clip_removed(clip);
+ resources_manager()->mark_clip_removed(clip);
}
Index: core/AudioSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioSource.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- core/AudioSource.cpp 15 May 2007 20:06:31 -0000 1.18
+++ core/AudioSource.cpp 17 May 2007 21:38:15 -0000 1.19
@@ -17,7 +17,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-$Id: AudioSource.cpp,v 1.18 2007/05/15 20:06:31 r_sijrier Exp $
+$Id: AudioSource.cpp,v 1.19 2007/05/17 21:38:15 r_sijrier Exp $
*/
@@ -38,6 +38,7 @@
AudioSource::AudioSource(const QString& dir, const QString& name)
: m_dir(dir)
, m_name(name)
+ , m_shortName(name)
, m_wasRecording (false)
{
PENTERCONS;
@@ -113,6 +114,7 @@
void AudioSource::set_name(const QString& name)
{
m_name = name;
+ m_shortName = name;
m_fileName = m_dir + m_name;
}
Index: core/MonoReader.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/MonoReader.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- core/MonoReader.cpp 14 May 2007 18:05:28 -0000 1.7
+++ core/MonoReader.cpp 17 May 2007 21:38:15 -0000 1.8
@@ -17,7 +17,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-$Id: MonoReader.cpp,v 1.7 2007/05/14 18:05:28 r_sijrier Exp $
+$Id: MonoReader.cpp,v 1.8 2007/05/17 21:38:15 r_sijrier Exp $
*/
@@ -373,7 +373,6 @@
void MonoReader::set_audio_clip( AudioClip * clip )
{
- Q_ASSERT(!m_clip);
m_clip = clip;
}
Index: core/Project.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Project.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- core/Project.cpp 15 May 2007 20:06:31 -0000 1.44
+++ core/Project.cpp 17 May 2007 21:38:15 -0000 1.45
@@ -63,7 +63,7 @@
m_rate = audiodevice().get_sample_rate();
m_bitDepth = audiodevice().get_bit_depth();
- m_asmanager = new ResourcesManager();
+ m_resourcesManager = new ResourcesManager(this);
m_hs = new QUndoStack(pm().get_undogroup());
cpointer().add_contextitem(this);
@@ -80,7 +80,6 @@
song->disconnect_from_audiodevice();
}
- delete m_asmanager;
delete m_hs;
}
@@ -217,7 +216,7 @@
// Load all the AudioSources for this project
QDomNode asmNode = docElem.firstChildElement("ResourcesManager");
- m_asmanager->set_state(asmNode);
+ m_resourcesManager->set_state(asmNode);
QDomNode songsNode = docElem.firstChildElement("Songs");
@@ -310,7 +309,7 @@
// Get the AudioSources Node, and append
if (! istemplate) {
- projectNode.appendChild(m_asmanager->get_state(doc));
+ projectNode.appendChild(m_resourcesManager->get_state(doc));
}
// Get all the Songs
@@ -774,7 +773,7 @@
ResourcesManager * Project::get_audiosource_manager( ) const
{
- return m_asmanager;
+ return m_resourcesManager;
}
Index: core/Project.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Project.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- core/Project.h 11 May 2007 11:16:32 -0000 1.21
+++ core/Project.h 17 May 2007 21:38:15 -0000 1.22
@@ -105,7 +105,7 @@
Project(const QString& title);
QList<Song* > m_songs;
- ResourcesManager* m_asmanager;
+ ResourcesManager* m_resourcesManager;
ExportThread* m_exportThread;
QString title;
Index: core/ReadSource.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- core/ReadSource.cpp 11 May 2007 13:18:25 -0000 1.32
+++ core/ReadSource.cpp 17 May 2007 21:38:15 -0000 1.33
@@ -44,7 +44,6 @@
ReadSource::ReadSource(const QDomNode node)
: AudioSource(node)
, m_refcount(0)
- , m_unrefcount(0)
, m_error(0)
, m_clip(0)
{
@@ -65,7 +64,6 @@
ReadSource::ReadSource(const QString& dir, const QString& name)
: AudioSource(dir, name)
, m_refcount(0)
- , m_unrefcount(0)
, m_error(0)
, m_clip(0)
{
@@ -83,27 +81,27 @@
}
-// Constructur for recorded audio.
-ReadSource::ReadSource(const QString& dir, const QString& name, int
channelCount, int fileCount)
+// Constructor for recorded audio.
+ReadSource::ReadSource(const QString& dir, const QString& name, int
channelCount)
: AudioSource(dir, name)
, m_refcount(0)
- , m_unrefcount(0)
, m_error(0)
, m_clip(0)
{
- m_channelCount = channelCount;
- m_fileCount = fileCount;
+ m_channelCount = m_fileCount = channelCount;
m_silent = false;
m_name = name + "-" + QString::number(m_id);
m_fileName = m_dir + m_name;
m_length = 0;
+ m_rate = pm().get_project()->get_rate();
+ m_wasRecording = true;
+ m_shortName = m_name.left(m_name.length() - 20);
}
ReadSource::ReadSource()
: AudioSource("", tr("Silence"))
, m_refcount(0)
- , m_unrefcount(0)
, m_error(0)
, m_clip(0)
{
@@ -256,12 +254,6 @@
return m_length;
}
-void ReadSource::set_was_recording(bool wasRecording)
-{
- m_wasRecording = wasRecording;
- m_shortName = m_name.left(m_name.length() - 20);
-}
-
int ReadSource::set_file(const QString & filename)
{
PENTER;
Index: core/ReadSource.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ReadSource.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- core/ReadSource.h 11 May 2007 11:16:32 -0000 1.23
+++ core/ReadSource.h 17 May 2007 21:38:15 -0000 1.24
@@ -17,7 +17,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-$Id: ReadSource.h,v 1.23 2007/05/11 11:16:32 r_sijrier Exp $
+$Id: ReadSource.h,v 1.24 2007/05/17 21:38:15 r_sijrier Exp $
*/
#ifndef READSOURCE_H
@@ -35,7 +35,7 @@
public :
ReadSource(const QDomNode node);
ReadSource(const QString& dir, const QString& name);
- ReadSource(const QString& dir, const QString& name, int channelCount,
int fileCount);
+ ReadSource(const QString& dir, const QString& name, int channelCount);
ReadSource(); // For creating a 0-channel, silent ReadSource
~ReadSource();
@@ -53,11 +53,9 @@
int init();
int get_ref_count() const {return m_refcount;}
- int get_unref_count() const {return m_unrefcount;}
int get_error() const {return m_error;}
int set_file(const QString& filename);
void set_active(bool active);
- void set_was_recording(bool wasRecording);
void set_audio_clip(AudioClip* clip);
Peak* get_peak(int channel);
@@ -68,14 +66,12 @@
private:
QList<MonoReader*> m_sources;
int m_refcount;
- int m_unrefcount;
int m_error;
AudioClip* m_clip;
int m_usedByClips;
bool m_silent;
int ref() { return m_refcount++;}
- int unref(bool b) { if (b) m_unrefcount++; else m_unrefcount--; return
m_unrefcount;}
int add_mono_reader(int channel, int channelNumber, const QString&
fileName);
friend class MonoReader;
Index: core/ResourcesManager.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ResourcesManager.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- core/ResourcesManager.cpp 11 May 2007 13:09:23 -0000 1.14
+++ core/ResourcesManager.cpp 17 May 2007 21:38:15 -0000 1.15
@@ -24,6 +24,8 @@
#include "ReadSource.h"
#include "Information.h"
#include "AudioClip.h"
+#include "Project.h"
+#include "Song.h"
#include "Utils.h"
#include "AudioDevice.h"
@@ -36,7 +38,9 @@
*/
-ResourcesManager::ResourcesManager()
+ResourcesManager::ResourcesManager(Project* project)
+ : QObject(project)
+ , m_project(project)
{
PENTERCONS;
m_silentReadSource = 0;
@@ -46,14 +50,16 @@
ResourcesManager::~ResourcesManager()
{
PENTERDES;
- foreach(ReadSource* source, m_sources) {
- if (! source->ref()) {
- delete source;
+ foreach(SourceData* data, m_sources) {
+ if (! data->source->ref()) {
+ delete data->source;
}
+ delete data;
}
- foreach(AudioClip* clip, m_clips) {
- delete clip;
+ foreach(ClipData* data, m_clips) {
+ delete data->clip;
+ delete data;
}
}
@@ -63,33 +69,30 @@
{
PENTER;
- QDomElement asmNode = doc.createElement("ResourcesManager");
+ QDomElement rsmNode = doc.createElement("ResourcesManager");
QDomElement audioSourcesElement = doc.createElement("AudioSources");
- foreach(AudioSource* source, m_sources) {
+ foreach(SourceData* data, m_sources) {
+ AudioSource* source = (AudioSource*)data->source;
audioSourcesElement.appendChild(source->get_state(doc));
}
- asmNode.appendChild(audioSourcesElement);
+ rsmNode.appendChild(audioSourcesElement);
QDomElement audioClipsElement = doc.createElement("AudioClips");
- QList<AudioClip*> list = m_clips.values();
-
+ foreach(ClipData* data, m_clips) {
+ AudioClip* clip = data->clip;
- for (int i=0; i<list.size(); ++i) {
- AudioClip* clip = list.at(i);
-
- // Omit all clips that were deprecated:
- if (m_deprecatedClips.contains(clip->get_id())) {
+ if (data->isCopy && data->removed) {
continue;
}
- // If the clip was refcounted, then it's state has been fully
set
+ // If the clip was 'getted', then it's state has been fully set
// and likely changed, so we can get the 'new' state from it.
- if (m_gettedClips.contains(clip->get_id())) {
+ if (data->inUse) {
audioClipsElement.appendChild(clip->get_state(doc));
} else {
// In case it wasn't we should use the 'old' domNode
which
@@ -98,9 +101,9 @@
}
}
- asmNode.appendChild(audioClipsElement);
+ rsmNode.appendChild(audioClipsElement);
- return asmNode;
+ return rsmNode;
}
@@ -110,7 +113,9 @@
while(!sourcesNode.isNull()) {
ReadSource* source = new ReadSource(sourcesNode);
- m_sources.insert(source->get_id(), source);
+ SourceData* data = new SourceData();
+ data->source = source;
+ m_sources.insert(source->get_id(), data);
sourcesNode = sourcesNode.nextSibling();
if (source->get_channel_count() == 0) {
m_silentReadSource = source;
@@ -122,59 +127,35 @@
while(!clipsNode.isNull()) {
AudioClip* clip = new AudioClip(clipsNode);
- m_clips.insert(clip->get_id(), clip);
+ ClipData* data = new ClipData();
+ data->clip = clip;
+ m_clips.insert(clip->get_id(), data);
clipsNode = clipsNode.nextSibling();
}
- emit sourceAdded();
+ emit stateRestored();
return 1;
}
-int ResourcesManager::remove_clip_from_database(qint64 id)
+ReadSource* ResourcesManager::import_source(const QString& dir, const QString&
name)
{
- if ( ! m_clips.contains(id) ) {
- info().critical(tr("ResourcesManager : AudioClip with id %1 not
in database,"
- "unable to remove it!").arg(id));
- return -1;
+ QString fileName = dir + name;
+ foreach(SourceData* data, m_sources) {
+ if (data->source->get_filename() == fileName) {
+ printf("id is %lld\n", data->source->get_id());
+ return get_readsource(data->source->get_id());
}
-
- printf("ResourcesManager:: Scheduling AudioClip with id %lld for
removal\n", id);
-
- m_deprecatedClips.insert(id, m_clips.value(id));
-
- return 1;
-}
-
-int ResourcesManager::undo_remove_clip_from_database(qint64 id)
-{
- if ( ! m_clips.contains(id) ) {
- info().critical(tr("ResourcesManager: AudioClip with id %1 not
in database,"
- "unable to UNDO removal!").arg(id));
- return -1;
}
- printf("ResourcesManager:: UNDO scheduling AudioClip with id %lld for
removal\n", id);
-
- m_deprecatedClips.remove(id);
-
- return 1;
-}
-
-
-int ResourcesManager::get_total_sources()
-{
- return m_sources.size();
-}
-
-
-ReadSource* ResourcesManager::create_new_readsource(const QString& dir, const
QString& name)
-{
ReadSource* source = new ReadSource(dir, name);
- m_sources.insert(source->get_id(), source);
- source->set_created_by_song( -1 );
+ SourceData* data = new SourceData();
+ data->source = source;
+ source->set_created_by_song(m_project->get_current_song()->get_id());
+
+ m_sources.insert(source->get_id(), data);
source = get_readsource(source->get_id());
@@ -184,6 +165,8 @@
return 0;
}
+ emit sourceAdded(source);
+
return source;
}
@@ -196,14 +179,17 @@
{
PENTER;
- ReadSource* source = new ReadSource(dir, name, channelCount,
channelCount);
+ ReadSource* source = new ReadSource(dir, name, channelCount);
+ SourceData* data = new SourceData();
+ data->source = source;
- source->set_was_recording(true);
source->set_original_bit_depth(audiodevice().get_bit_depth());
source->set_created_by_song(songId);
source->ref();
- m_sources.insert(source->get_id(), source);
+ m_sources.insert(source->get_id(), data);
+
+ emit sourceAdded(source);
return source;
}
@@ -213,7 +199,9 @@
{
if (!m_silentReadSource) {
m_silentReadSource = new ReadSource();
- m_sources.insert(m_silentReadSource->get_id(),
m_silentReadSource);
+ SourceData* data = new SourceData();
+ data->source = m_silentReadSource;
+ m_sources.insert(m_silentReadSource->get_id(), data);
m_silentReadSource->set_created_by_song( -1 );
}
@@ -225,16 +213,17 @@
ReadSource * ResourcesManager::get_readsource( qint64 id )
{
- ReadSource* source = m_sources.value(id);
+ SourceData* data = m_sources.value(id);
- if ( ! source ) {
- PERROR("ReadSource with id %lld is not in my list!", id);
+ if (!data) {
+ PWARN("ResourcesManager::get_readsource(): ReadSource with id
%lld is not in my database!", id);
return 0;
}
- // When the AudioSource is first "get", do a ref counting.
+ ReadSource* source = data->source;
+
+ // When the AudioSource is "get", do a ref counting.
// If the source allready was ref counted, create a deep copy
- // and do the initialization
if (source->ref()) {
PWARN("Creating deep copy of ReadSource: %s",
QS_C(source->get_name()));
source = source->deep_copy();
@@ -246,29 +235,9 @@
.arg(source->get_filename()));
}
- emit stateChanged();
-
return source;
}
-/**
- * Mainly used for Importing audio files. If the file with \a fileName
- allready is in the database, a ReadSource will be returned, else 0.
-
- * @param fileName The file name of the audio source
- * @return A ReadSource if a ReadSource with the same file name is in the
database, else 0
- */
-ReadSource* ResourcesManager::get_readsource(const QString& fileName)
-{
- foreach(ReadSource* rs, m_sources) {
-// PMESG("rs filename %s, filename %s", QS_C(rs->get_filename()),
QS_C(fileName));
- if (rs->get_filename() == fileName) {
- return get_readsource(rs->get_id());
- }
- }
-
- return 0;
-}
/**
* Get the AudioClip with id \a id
@@ -284,18 +253,17 @@
'deep copy' of the AudioClip with id \a id if the AudioClip was
allready
getted before via this function.
*/
-AudioClip* ResourcesManager::get_clip( qint64 id )
+AudioClip* ResourcesManager::get_clip(qint64 id)
{
- AudioClip* clip = m_clips.value(id);
+ ClipData* data = m_clips.value(id);
- printf("ResourcesManager: Getting clip with id %lld\n", id);
- if (! clip) {
+ if (!data) {
return 0;
}
- if (m_removedClips.contains(id)) {
- clip = m_removedClips.take(id);
- } else if (m_gettedClips.contains(id)) {
+ AudioClip* clip = data->clip;
+
+ if (data->inUse && !data->removed) {
PMESG("Creating deep copy of Clip %s", QS_C(clip->get_name()));
clip = clip->create_copy();
@@ -304,8 +272,11 @@
// indicates a design error somewhere ! (most likely in
// AudioClip::create_copy();
Q_ASSERT( ! m_clips.contains(clip->get_id()) );
+ ClipData* copy = new ClipData();
+ copy->clip = clip;
+ copy->isCopy = true;
- m_clips.insert(clip->get_id(), clip);
+ m_clips.insert(clip->get_id(), copy);
// Now that we have created a copy of the audioclip, start
// the usual get_clip routine again to properly init the clip
@@ -313,21 +284,13 @@
return get_clip(clip->get_id());
}
- m_gettedClips.insert(id, clip);
-
- ReadSource* source = get_readsource(clip->get_readsource_id());
+ ReadSource* source = get_readsource(data->clip->get_readsource_id());
if (source) {
clip->set_audio_source(source);
- } else {
- // sometimes the source is set later...
- // maybe that should become the default ?
-/* info().critical(
- tr("ResourcesManager: AudioClip %1 required ReadSource
with ID %2, but I don't have it!!")
-
.arg(clip->get_name()).arg(clip->get_readsource_id()));*/
}
- emit stateChanged();
+ data->inUse = true;
return clip;
}
@@ -336,13 +299,18 @@
{
PENTER;
AudioClip* clip = new AudioClip(name);
- m_clips.insert(clip->get_id(), clip);
+ ClipData* data = new ClipData();
+ data->clip = clip;
+ m_clips.insert(clip->get_id(), data);
return get_clip(clip->get_id());
}
QList<ReadSource*> ResourcesManager::get_all_audio_sources( ) const
{
- QList< ReadSource * > list = m_sources.values();
+ QList< ReadSource * > list;
+ foreach(SourceData* data, m_sources) {
+ list.append(data->source);
+ }
if (m_silentReadSource) {
list.removeAll(m_silentReadSource);
}
@@ -351,57 +319,88 @@
QList< AudioClip * > ResourcesManager::get_all_clips() const
{
- return m_clips.values();
+ QList<AudioClip* > list;
+ foreach(ClipData* data, m_clips) {
+ list.append(data->clip);
+ }
+ return list;
}
-QList< AudioClip * > ResourcesManager::get_clips_for_source( ReadSource *
source ) const
-{
- QList<AudioClip*> clips;
- foreach(AudioClip* clip, m_clips) {
- if (clip->get_readsource_id() == source->get_id()) {
- clips.append(clip);
+void ResourcesManager::mark_clip_removed(AudioClip * clip)
+{
+ ClipData* data = m_clips.value(clip->get_id());
+ if (!data) {
+ PERROR("Clip with id %lld is not in my database!",
clip->get_id());
+ return;
}
+ data->removed = true;
+
+ SourceData* sourcedata = m_sources.value(clip->get_readsource_id());
+ if (!sourcedata) {
+ PERROR("Source %lld not in database",
clip->get_readsource_id());
}
+ sourcedata->clipCount--;
- return clips;
+ emit clipRemoved(clip);
}
-void ResourcesManager::set_clip_removed(AudioClip * clip)
+void ResourcesManager::mark_clip_added(AudioClip * clip)
{
- ReadSource* source = m_sources.value(clip->get_readsource_id());
- if (source) {
- source->unref(true);
- printf("ClipRemoved: refcount, unrefcount: %d, %d\n",
source->get_ref_count(), source->get_unref_count());
- if (source->get_unref_count() == 0) {
- emit sourceNoLongerUsed(source);
+ ClipData* clipdata = m_clips.value(clip->get_id());
+ if (!clipdata) {
+ PERROR("Clip with id %lld is not in my database!",
clip->get_id());
+ return;
}
- }
- m_removedClips.insert(clip->get_id(), clip);
- emit clipRemoved(clip);
-}
+ clipdata->removed = false;
-void ResourcesManager::set_clip_added(AudioClip * clip)
-{
- ReadSource* source = m_sources.value(clip->get_readsource_id());
- if (source) {
- source->unref(false);
- printf("ClipAdded: refcount, unrefcount: %d, %d\n",
source->get_ref_count(), source->get_unref_count());
- emit sourceBackInUse(source);
+ SourceData* sourcedata = m_sources.value(clip->get_readsource_id());
+ if (!sourcedata) {
+ PERROR("Source %lld not in database",
clip->get_readsource_id());
}
- m_removedClips.take(clip->get_id());
+ sourcedata->clipCount++;
+
emit clipAdded(clip);
}
bool ResourcesManager::is_clip_in_use(qint64 id) const
{
- return m_gettedClips.contains(id) && ! m_removedClips.contains(id);
+ ClipData* data = m_clips.value(id);
+ if (!data) {
+ PERROR("Clip with id %lld is not in my database!", id);
+ return false;
+ }
+ return data->inUse && !data->removed;
}
+bool ResourcesManager::is_source_in_use(qint64 id) const
+{
+ SourceData* data = m_sources.value(id);
+ if (!data) {
+ PERROR("Source with id %lld is not in my database!", id);
+ return false;
+ }
+
+ return data->clipCount > 0 ? true : false;
+}
void ResourcesManager::set_source_for_clip(AudioClip * clip, ReadSource *
source)
{
clip->set_audio_source(source);
}
+ResourcesManager::SourceData::SourceData()
+{
+ source = 0;
+ clipCount = 0;
+}
+
+ResourcesManager::ClipData::ClipData()
+{
+ clip = 0;
+ inUse = false;
+ isCopy = false;
+ removed = false;
+}
+
Index: core/ResourcesManager.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ResourcesManager.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- core/ResourcesManager.h 10 May 2007 20:02:36 -0000 1.8
+++ core/ResourcesManager.h 17 May 2007 21:38:15 -0000 1.9
@@ -32,13 +32,14 @@
class AudioSource;
class ReadSource;
class AudioClip;
+class Project;
class ResourcesManager : public QObject
{
Q_OBJECT
public:
- ResourcesManager();
+ ResourcesManager(Project* project);
~ResourcesManager();
int set_state( const QDomNode& node );
@@ -49,49 +50,52 @@
int channelCount,
int songId);
- ReadSource* create_new_readsource(const QString& dir, const QString&
name);
+ ReadSource* import_source(const QString& dir, const QString& name);
ReadSource* get_silent_readsource();
AudioClip* new_audio_clip(const QString& name);
AudioClip* get_clip(qint64 id);
- int remove_clip_from_database(qint64 id);
- int undo_remove_clip_from_database(qint64 id);
-
- void set_clip_removed(AudioClip* clip);
- void set_clip_added(AudioClip* clip);
+ void mark_clip_removed(AudioClip* clip);
+ void mark_clip_added(AudioClip* clip);
void set_source_for_clip(AudioClip* clip, ReadSource* source);
bool is_clip_in_use(qint64) const;
+ bool is_source_in_use(qint64 id) const;
- ReadSource* get_readsource(const QString& fileName);
ReadSource* get_readsource(qint64 id);
- int get_total_sources();
-
QList<ReadSource*> get_all_audio_sources() const;
QList<AudioClip*> get_all_clips() const;
- QList<AudioClip*> get_clips_for_source(ReadSource* source) const;
private:
- QHash<qint64, ReadSource* > m_sources;
- QHash<qint64, AudioClip* > m_clips;
- QHash<qint64, AudioClip* > m_gettedClips;
- QHash<qint64, AudioClip* > m_removedClips;
- QHash<qint64, AudioClip* > m_deprecatedClips;
+ struct ClipData {
+ ClipData();
+ AudioClip* clip;
+ bool inUse;
+ bool isCopy;
+ bool removed;
+ };
+
+ struct SourceData {
+ SourceData();
+ ReadSource* source;
+ int clipCount;
+ };
+
+ Project* m_project;
+ QHash<qint64, SourceData* > m_sources;
+ QHash<qint64, ClipData* > m_clips;
ReadSource* m_silentReadSource;
signals:
- void sourceAdded();
- void sourceRemoved();
- void stateChanged();
+ void stateRestored();
void clipRemoved(AudioClip* clip);
void clipAdded(AudioClip* clip);
- void sourceNoLongerUsed(ReadSource* source);
- void sourceBackInUse(ReadSource* source);
- void newSourceCreated(ReadSource* source);
+ void sourceAdded(ReadSource* source);
+ void sourceRemoved(ReadSource* source);
};
Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -b -r1.102 -r1.103
--- core/Song.cpp 17 May 2007 19:59:29 -0000 1.102
+++ core/Song.cpp 17 May 2007 21:38:16 -0000 1.103
@@ -154,7 +154,7 @@
realtimepath = false;
scheduleForDeletion = false;
- isSnapOn=true;
+ m_isSnapOn=true;
changed = m_rendering = m_recording = false;
firstVisibleFrame=workingFrame=0;
seeking = 0;
@@ -190,6 +190,7 @@
set_first_visible_frame(e.attribute( "firstVisibleFrame", "0"
).toUInt());
set_work_at(e.attribute( "workingFrame", "0").toUInt());
set_transport_pos(e.attribute( "transportFrame", "0").toUInt());
+ set_snapping(e.attribute("snapping", "0").toInt());
m_timeline->set_state(node.firstChildElement("TimeLine"));
@@ -228,6 +229,7 @@
properties.setAttribute("sbx", m_sbx);
properties.setAttribute("sby", m_sby);
properties.setAttribute("mastergain", m_gain);
+ properties.setAttribute("snapping", m_isSnapOn);
songNode.appendChild(properties);
doc.appendChild(songNode);
@@ -609,14 +611,14 @@
Command* Song::toggle_snap()
{
- set_snapping( ! isSnapOn );
+ set_snapping( ! m_isSnapOn );
return 0;
}
void Song::set_snapping(bool snapping)
{
- isSnapOn = snapping;
+ m_isSnapOn = snapping;
emit snapChanged();
}
Index: core/Song.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- core/Song.h 17 May 2007 12:45:19 -0000 1.53
+++ core/Song.h 17 May 2007 21:38:16 -0000 1.54
@@ -128,7 +128,7 @@
bool realtime_path() const {return realtimepath;}
bool is_transporting() const {return m_transport;}
bool is_changed() const {return changed;}
- bool is_snap_on() const {return isSnapOn;}
+ bool is_snap_on() const {return m_isSnapOn;}
bool is_recording() const {return m_recording;}
void disconnect_from_audiodevice();
@@ -175,7 +175,7 @@
int m_sby;
bool m_rendering;
bool changed;
- bool isSnapOn;
+ bool m_isSnapOn;
bool resumeTransport;
bool m_stopTransport;
bool realtimepath;
Index: core/Track.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Track.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- core/Track.cpp 17 May 2007 12:45:19 -0000 1.55
+++ core/Track.cpp 17 May 2007 21:38:16 -0000 1.56
@@ -316,7 +316,6 @@
if (clip->init_recording(busIn) < 0) {
PERROR("Could not create AudioClip to record to!");
- resources_manager()->remove_clip_from_database(clip->get_id());
} else {
return clip;
}
Index: traverso/songcanvas/ClipsViewPort.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/ClipsViewPort.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- traverso/songcanvas/ClipsViewPort.cpp 17 May 2007 13:08:33 -0000
1.18
+++ traverso/songcanvas/ClipsViewPort.cpp 17 May 2007 21:38:16 -0000
1.19
@@ -153,7 +153,6 @@
clip->set_track_start_frame(startpos);
startpos = clip->get_track_end_frame();
AddRemoveClip* arc = new AddRemoveClip(clip,
AddRemoveClip::ADD);
- arc->remove_from_database_when_removed(true);
group->add_command(arc);
continue;
}
@@ -168,7 +167,6 @@
// FIXME!!!!!!!!!!!!!!!!!!!!
clip->init_gain_envelope();
AddRemoveClip* arc = new AddRemoveClip(clip,
AddRemoveClip::ADD);
- arc->remove_from_database_when_removed(true);
group->add_command(arc);
}
}
Index: traverso/songcanvas/SongView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/SongView.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- traverso/songcanvas/SongView.cpp 17 May 2007 13:08:33 -0000 1.51
+++ traverso/songcanvas/SongView.cpp 17 May 2007 21:38:16 -0000 1.52
@@ -202,7 +202,6 @@
void SongView::update_scrollbars()
{
- printf("update_scrollbars()\n");
int width = (m_song->get_last_frame() / scalefactor) -
(m_clipsViewPort->width() / 4);
m_hScrollBar->setRange(0, width);
Index: traverso/widgets/ResourcesWidget.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/widgets/ResourcesWidget.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- traverso/widgets/ResourcesWidget.cpp 10 May 2007 20:44:20 -0000
1.17
+++ traverso/widgets/ResourcesWidget.cpp 17 May 2007 21:38:16 -0000
1.18
@@ -207,16 +207,16 @@
songComboBox->setEnabled(true);
ResourcesManager* rsmanager = m_project->get_audiosource_manager();
- connect(rsmanager, SIGNAL(sourceAdded()), this,
SLOT(update_tree_widgets()));
- connect(rsmanager, SIGNAL(clipAdded(AudioClip*)), this,
SLOT(clip_added(AudioClip*)));
- connect(rsmanager, SIGNAL(clipRemoved(AudioClip*)), this,
SLOT(clip_removed(AudioClip*)));
- connect(rsmanager, SIGNAL(sourceNoLongerUsed(ReadSource*)), this,
SLOT(source_nolonger_in_use(ReadSource*)));
- connect(rsmanager, SIGNAL(sourceBackInUse(ReadSource*)), this,
SLOT(source_back_in_use(ReadSource*)));
+ connect(rsmanager, SIGNAL(stateRestored()), this,
SLOT(populate_tree()));
+ connect(rsmanager, SIGNAL(clipAdded(AudioClip*)), this,
SLOT(add_clip(AudioClip*)));
+ connect(rsmanager, SIGNAL(clipRemoved(AudioClip*)), this,
SLOT(remove_clip(AudioClip*)));
+ connect(rsmanager, SIGNAL(sourceAdded(ReadSource*)), this,
SLOT(add_source(ReadSource*)));
+ connect(rsmanager, SIGNAL(sourceRemoved(ReadSource*)), this,
SLOT(remove_source(ReadSource*)));
connect(m_project, SIGNAL(songAdded(Song*)), this,
SLOT(song_added(Song*)));
connect(m_project, SIGNAL(songRemoved(Song*)), this,
SLOT(song_removed(Song*)));
}
-void ResourcesWidget::update_tree_widgets()
+void ResourcesWidget::populate_tree()
{
sourcesTreeWidget->clear();
@@ -225,44 +225,12 @@
}
foreach(ReadSource* rs, resources_manager()->get_all_audio_sources()) {
- QTreeWidgetItem* item = new QTreeWidgetItem(sourcesTreeWidget);
- m_sourceindices.insert(rs->get_id(), item);
- QString duration = frame_to_ms(rs->get_nframes(), 44100);
- item->setText(0, rs->get_short_name());
- item->setText(1, duration);
- item->setText(2, "");
- item->setText(3, "");
- item->setData(0, Qt::UserRole, rs->get_id());
- item->setToolTip(0, rs->get_short_name() + " " + duration);
- if (!rs->get_ref_count()) {
- item->setForeground(0, QColor(Qt::lightGray));
- item->setForeground(1, QColor(Qt::lightGray));
- item->setForeground(2, QColor(Qt::lightGray));
- item->setForeground(3, QColor(Qt::lightGray));
+ add_source(rs);
}
- foreach(AudioClip* clip,
resources_manager()->get_clips_for_source(rs)) {
- QTreeWidgetItem* clipitem = new QTreeWidgetItem(item);
- m_clipindices.insert(clip->get_id(), clipitem);
- clipitem->setText(0, clip->get_name());
- QString start =
frame_to_ms(clip->get_source_start_frame(), clip->get_rate());
- QString end = frame_to_ms(clip->get_source_end_frame(),
clip->get_rate());
- clipitem->setText(1, frame_to_ms(clip->get_length(),
clip->get_rate()));
- clipitem->setText(2, start);
- clipitem->setText(3, end);
- clipitem->setData(0, Qt::UserRole, clip->get_id());
- clipitem->setToolTip(0, clip->get_name() + " " +
start + " - " + end);
-
- if
(resources_manager()->is_clip_in_use(clip->get_id())) {
- clipitem->setForeground(0,
QColor(Qt::lightGray));
- clipitem->setForeground(1,
QColor(Qt::lightGray));
- clipitem->setForeground(2,
QColor(Qt::lightGray));
- clipitem->setForeground(3,
QColor(Qt::lightGray));
+ foreach(AudioClip* clip, resources_manager()->get_all_clips()) {
+ add_clip(clip);
}
- }
- }
-
-
sourcesTreeWidget->sortItems(0, Qt::AscendingOrder);
}
@@ -281,7 +249,6 @@
void ResourcesWidget::song_combo_box_index_changed(int index)
{
-// update_tree_widgets();
}
void ResourcesWidget::song_added(Song * song)
@@ -295,65 +262,101 @@
songComboBox->removeItem(index);
}
-void ResourcesWidget::clip_removed(AudioClip * clip)
+void ResourcesWidget::add_clip(AudioClip * clip)
{
+ printf("clip_added: clip is %lld\n", clip->get_id());
+
QTreeWidgetItem* item = m_clipindices.value(clip->get_id());
- if (!item) return;
- for (int i=0; i<5; ++i) {
- item->setForeground(i, QColor(Qt::lightGray));
+
+ if (!item) {
+ QTreeWidgetItem* sourceitem =
m_sourceindices.value(clip->get_readsource_id());
+
+ if (! sourceitem ) return;
+
+ QTreeWidgetItem* clipitem = new QTreeWidgetItem(sourceitem);
+ m_clipindices.insert(clip->get_id(), clipitem);
+
+ QString start = frame_to_ms(clip->get_source_start_frame(),
clip->get_rate());
+ QString end = frame_to_ms(clip->get_source_end_frame(),
clip->get_rate());
+
+ clipitem->setText(0, clip->get_name());
+ clipitem->setText(1, frame_to_ms(clip->get_length(),
clip->get_rate()));
+ clipitem->setText(2, start);
+ clipitem->setText(3, end);
+ clipitem->setData(0, Qt::UserRole, clip->get_id());
+ clipitem->setToolTip(0, clip->get_name() + " " + start + " -
" + end);
+
+ item = clipitem;
}
+
+ update_clip_state(clip);
}
-void ResourcesWidget::clip_added(AudioClip * clip)
+void ResourcesWidget::remove_clip(AudioClip * clip)
{
- printf("clip_added: clip is %lld\n", clip->get_id());
QTreeWidgetItem* item = m_clipindices.value(clip->get_id());
+
if (!item) {
- add_new_clip_entry(clip);
return;
}
- for (int i=0; i<5; ++i) {
- item->setForeground(i, QColor(Qt::black));
- }
+
+ update_clip_state(clip);
}
-void ResourcesWidget::source_nolonger_in_use(ReadSource * source)
+void ResourcesWidget::add_source(ReadSource * source)
{
QTreeWidgetItem* item = m_sourceindices.value(source->get_id());
- if (!item) return;
- for (int i=0; i<5; ++i) {
- item->setForeground(i, QColor(Qt::lightGray));
+
+ if (! item) {
+ QTreeWidgetItem* item = new QTreeWidgetItem(sourcesTreeWidget);
+ m_sourceindices.insert(source->get_id(), item);
+ QString duration = frame_to_ms(source->get_nframes(), 44100);
+ item->setText(0, source->get_short_name());
+ item->setText(1, duration);
+ item->setText(2, "");
+ item->setText(3, "");
+ item->setData(0, Qt::UserRole, source->get_id());
+ item->setToolTip(0, source->get_short_name() + " " +
duration);
}
+
+ update_source_state(source->get_id());
}
-void ResourcesWidget::source_back_in_use(ReadSource * source)
+void ResourcesWidget::remove_source(ReadSource * source)
{
- QTreeWidgetItem* item = m_sourceindices.value(source->get_id());
- if (!item) return;
- for (int i=0; i<5; ++i) {
- item->setForeground(i, QColor(Qt::black));
- }
}
-void ResourcesWidget::add_new_clip_entry(AudioClip * clip)
+void ResourcesWidget::update_clip_state(AudioClip* clip)
{
- QTreeWidgetItem* sourceitem =
m_sourceindices.value(clip->get_readsource_id());
+ QTreeWidgetItem* item = m_clipindices.value(clip->get_id());
+ Q_ASSERT(item);
- if (! sourceitem ) return;
+ if (resources_manager()->is_clip_in_use(clip->get_id())) {
+ for (int i=0; i<5; ++i) {
+ item->setForeground(i, QColor(Qt::black));
+ }
+ } else {
+ for (int i=0; i<5; ++i) {
+ item->setForeground(i, QColor(Qt::lightGray));
+ }
+ }
-// Q_ASSERT(sourceitem);
+ update_source_state(clip->get_readsource_id());
+}
- QTreeWidgetItem* clipitem = new QTreeWidgetItem(sourceitem);
- m_clipindices.insert(clip->get_id(), clipitem);
- printf("add_new_clip_entry: clip is %lld\n", clip->get_id());
+void ResourcesWidget::update_source_state(qint64 id)
+{
+ QTreeWidgetItem* item = m_sourceindices.value(id);
+ Q_ASSERT(item);
- clipitem->setText(0, clip->get_name());
- QString start = frame_to_ms(clip->get_source_start_frame(),
clip->get_rate());
- QString end = frame_to_ms(clip->get_source_end_frame(),
clip->get_rate());
- clipitem->setText(1, frame_to_ms(clip->get_length(), clip->get_rate()));
- clipitem->setText(2, start);
- clipitem->setText(3, end);
- clipitem->setData(0, Qt::UserRole, clip->get_id());
- clipitem->setToolTip(0, clip->get_name() + " " + start + " - " + end);
+ if (resources_manager()->is_source_in_use(id)) {
+ for (int i=0; i<5; ++i) {
+ item->setForeground(i, QColor(Qt::black));
+ }
+ } else {
+ for (int i=0; i<5; ++i) {
+ item->setForeground(i, QColor(Qt::lightGray));
+ }
+ }
}
Index: traverso/widgets/ResourcesWidget.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/widgets/ResourcesWidget.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- traverso/widgets/ResourcesWidget.h 5 May 2007 20:43:58 -0000 1.5
+++ traverso/widgets/ResourcesWidget.h 17 May 2007 21:38:16 -0000 1.6
@@ -48,21 +48,23 @@
QHash<qint64, QTreeWidgetItem*> m_clipindices;
QHash<qint64, QTreeWidgetItem*> m_sourceindices;
- void add_new_clip_entry(AudioClip* clip);
-
+ void update_clip_state(AudioClip* clip);
+ void update_source_state(qint64 id);
private slots:
void set_project(Project* project);
- void update_tree_widgets();
+ void populate_tree();
+
void view_combo_box_index_changed(int index);
void song_combo_box_index_changed(int index);
+
void song_added(Song* song);
void song_removed(Song* song);
- void clip_removed(AudioClip* clip);
- void clip_added(AudioClip* clip);
- void source_nolonger_in_use(ReadSource* source);
- void source_back_in_use(ReadSource* source);
+ void add_clip(AudioClip* clip);
+ void remove_clip(AudioClip* clip);
+ void add_source(ReadSource* source);
+ void remove_source(ReadSource* source);
};
#endif
- [Traverso-commit] traverso/src commands/AudioClipExternalProcessi...,
Remon Sijrier <=