summaryrefslogtreecommitdiff
path: root/src/range.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/range.cc')
-rw-r--r--src/range.cc129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/range.cc b/src/range.cc
new file mode 100644
index 0000000..28bf48e
--- /dev/null
+++ b/src/range.cc
@@ -0,0 +1,129 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * range.cc
+ *
+ * Mon Apr 14 10:13:21 CEST 2014
+ * Copyright 2014 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "range.h"
+
+Ranges::Ranges()
+ : QObject(NULL)
+{
+ nextid = 0;
+ act = SEL_NONE;
+}
+
+Ranges::Ranges(const Ranges& other)
+{
+ *this = other;
+}
+
+void Ranges::operator=(const Ranges& other)
+{
+ sels = other.sels;
+ nextid = other.nextid;
+ act = other.act;
+}
+
+sel_id_t Ranges::add(Range range)
+{
+ sel_id_t id = nextid++;
+ sels[id] = range;
+ added(id);
+ return id;
+}
+
+Range Ranges::get(sel_id_t id)
+{
+ if(sels.find(id) == sels.end())
+ {
+ Range s(0,0,0,0);
+ return s;
+ }
+ return sels[id];
+}
+
+QVector<sel_id_t> Ranges::ids()
+{
+ QVector<sel_id_t> v;
+
+ QMap<sel_id_t, Range>::iterator i = sels.begin();
+ while(i != sels.end())
+ {
+ v.push_back(i.key());
+ i++;
+ }
+
+ return v;
+}
+
+void Ranges::update(sel_id_t id, Range range)
+{
+ if(sels.find(id) != sels.end())
+ {
+ sels[id] = range;
+ emit updated(id);
+ }
+}
+
+void Ranges::remove(sel_id_t id)
+{
+ if(sels.find(id) != sels.end())
+ {
+ sels.erase(sels.find(id));
+ if(id == act)
+ {
+ setActive(SEL_NONE);
+ }
+ emit removed(id);
+ }
+}
+
+void Ranges::clear()
+{
+ QVector<sel_id_t> _ids = ids();
+ QVector<sel_id_t>::iterator i = _ids.begin();
+ while(i != _ids.end())
+ {
+ remove(*i);
+ i++;
+ }
+}
+
+void Ranges::setActive(sel_id_t id)
+{
+ if(sels.find(id) != sels.end())
+ {
+ act = id;
+ }
+ else
+ {
+ act = SEL_NONE;
+ }
+ emit activeChanged(act);
+}
+
+sel_id_t Ranges::active()
+{
+ return act;
+}