aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormescalinum <mescalinum@users.sourceforge.net>2009-09-26 21:51:30 +0000
committermescalinum <mescalinum@users.sourceforge.net>2009-09-26 21:51:30 +0000
commitb5d0c13836806cc9cff64ccbc5599b36e6135b83 (patch)
treeef1597aa49c3426aa637c9fd03f4d75413377fa3
parent48166a3836ea82ebbab1d622d5ff770eefbd59a1 (diff)
add unimplemented features (copy & resize pattern)
svn path=/trunk/externals/ffext/; revision=12467
-rw-r--r--composer/PdClasses.cpp39
-rw-r--r--composer/Track.cpp18
-rw-r--r--composer/Track.hpp2
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<string,Pattern *>::iterator patternsBegin() {return patterns.begin();}
inline map<string,Pattern *>::iterator patternsEnd() {return patterns.end();}