From b5d0c13836806cc9cff64ccbc5599b36e6135b83 Mon Sep 17 00:00:00 2001 From: mescalinum Date: Sat, 26 Sep 2009 21:51:30 +0000 Subject: add unimplemented features (copy & resize pattern) svn path=/trunk/externals/ffext/; revision=12467 --- composer/PdClasses.cpp | 39 ++++++++++++++++++++++++++++++++++----- composer/Track.cpp | 18 +++++++++++++++++- composer/Track.hpp | 2 ++ 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/composer/PdClasses.cpp b/composer/PdClasses.cpp index 75f05a0..7ea37a0 100644 --- a/composer/PdClasses.cpp +++ b/composer/PdClasses.cpp @@ -334,6 +334,12 @@ int track_proxy_addpattern(t_track_proxy *x, t_symbol *name, t_floatarg rows, t_ result_argc = 0; t_int r = (t_int) rows; t_int c = (t_int) cols; + Pattern *pattern = x->track->getPattern(name->s_name); + if(pattern) + { + pd_error(x, "addpattern: pattern already exist: %s", name->s_name); + return -3; + } x->track->addPattern(r, c, string(name->s_name)); return 0; } @@ -347,8 +353,8 @@ int track_proxy_removepattern(t_track_proxy *x, t_symbol *pat) pd_error(x, "removepattern: no such pattern: %s", pat->s_name); return -2; } - pd_error(x, "removepattern: not implemented yet"); - return -9; + x->track->removePattern(pat->s_name); + return 0; } int track_proxy_resizepattern(t_track_proxy *x, t_symbol *pat, t_floatarg rows, t_floatarg cols) @@ -362,6 +368,11 @@ int track_proxy_resizepattern(t_track_proxy *x, t_symbol *pat, t_floatarg rows, pd_error(x, "resizepattern: no such pattern: %s", pat->s_name); return -2; } + if(rows < 1 || cols < 1) + { + pd_error(x, "resizepattern: rows and columns must be positive"); + return -6; + } pattern->resize(r, c); return 0; } @@ -372,9 +383,15 @@ int track_proxy_renamepattern(t_track_proxy *x, t_symbol *oldName, t_symbol *new Pattern *pattern = x->track->getPattern(oldName->s_name); if(!pattern) { - pd_error(x, "resizepattern: no such pattern: %s", oldName->s_name); + pd_error(x, "renamepattern: no such pattern: %s", oldName->s_name); return -2; } + pattern = x->track->getPattern(newName->s_name); + if(pattern) + { + pd_error(x, "renamepattern: destination pattern already exist: %s", newName->s_name); + return -3; + } x->track->renamePattern(oldName->s_name, newName->s_name); return 0; } @@ -382,8 +399,20 @@ int track_proxy_renamepattern(t_track_proxy *x, t_symbol *oldName, t_symbol *new int track_proxy_copypattern(t_track_proxy *x, t_symbol *src, t_symbol *dst) { result_argc = 0; - pd_error(x, "copypattern: not implemented yet"); - return -9; + Pattern *pattern = x->track->getPattern(src->s_name); + if(!pattern) + { + pd_error(x, "copypattern: no such pattern: %s", src->s_name); + return -2; + } + pattern = x->track->getPattern(dst->s_name); + if(pattern) + { + pd_error(x, "copypattern: destination pattern already exist: %s", dst->s_name); + return -3; + } + x->track->copyPattern(src->s_name, dst->s_name); + return 0; } void composer_setup() diff --git a/composer/Track.cpp b/composer/Track.cpp index ae02ed5..d0ed4de 100644 --- a/composer/Track.cpp +++ b/composer/Track.cpp @@ -53,7 +53,23 @@ void Track::renamePattern(const string &oldName, const string &newName) { Pattern *pattern = getPattern(oldName); if(!pattern) return; - pattern->setName(newName); patterns[newName] = patterns[oldName]; + patterns[newName]->setName(newName); patterns.erase(oldName); } + +void Track::copyPattern(const string &src, const string &dst) +{ + Pattern *pattern = getPattern(src); + if(!pattern) return; + patterns[dst] = new Pattern(*patterns[src]); + patterns[dst]->setName(dst); +} + +void Track::removePattern(const string &p) +{ + Pattern *pattern = getPattern(p); + if(!pattern) return; + patterns.erase(p); +} + diff --git a/composer/Track.hpp b/composer/Track.hpp index a4e7fbc..35113e0 100644 --- a/composer/Track.hpp +++ b/composer/Track.hpp @@ -27,6 +27,8 @@ public: void addPattern(int rows, int cols, string name); Pattern *getPattern(const string &p); void renamePattern(const string &oldName, const string &newName); + void copyPattern(const string &src, const string &dst); + void removePattern(const string &p); inline unsigned int getPatternCount() {return patterns.size();} inline map::iterator patternsBegin() {return patterns.begin();} inline map::iterator patternsEnd() {return patterns.end();} -- cgit v1.2.1