-/* $Id$
-
-This file is part of R²C²
-Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
#ifndef SELECTION_H_
#define SELECTION_H_
#include <set>
#include <sigc++/sigc++.h>
-#include "3d/track.h"
+#include "libr2c2/object.h"
class Selection
{
sigc::signal<void> signal_changed;
private:
- std::set<R2C2::Track *> tracks;
+ std::set<R2C2::Object *> objects;
public:
- const std::set<R2C2::Track *> &get_tracks() const { return tracks; }
- R2C2::Track *get_track() const;
- unsigned size() const { return tracks.size(); }
- bool empty() const { return tracks.empty(); }
+ const std::set<R2C2::Object *> &get_objects() const { return objects; }
+ R2C2::Object *get_object() const;
+
+ template<typename T>
+ std::set<T *> get_objects() const
+ {
+ std::set<T *> result;
+ for(std::set<R2C2::Object *>::const_iterator i=objects.begin(); i!=objects.end(); ++i)
+ if(T *to = dynamic_cast<T *>(*i))
+ result.insert(to);
+ return result;
+ }
+
+ template<typename T>
+ T *get_object() const
+ {
+ for(std::set<R2C2::Object *>::const_iterator i=objects.begin(); i!=objects.end(); ++i)
+ if(T *to = dynamic_cast<T *>(*i))
+ return to;
+ return 0;
+ }
+
+ unsigned size() const { return objects.size(); }
+ bool empty() const { return objects.empty(); }
void clear();
template<typename Iter>
void replace(Iter begin, Iter end)
{
- tracks.clear();
- tracks.insert(begin, end);
+ objects.clear();
+ objects.insert(begin, end);
signal_changed.emit();
}
- void add_track(R2C2::Track *);
- void remove_track(R2C2::Track *);
- void toggle_track(R2C2::Track *);
+ void add_object(R2C2::Object *);
+ void remove_object(R2C2::Object *);
+ void toggle_object(R2C2::Object *);
void select_more();
void select_linked();