5 #ifndef CNOID_BASE_ITEM_H 6 #define CNOID_BASE_ITEM_H 9 #include <cnoid/Referenced> 10 #include <cnoid/Signal> 11 #include <cnoid/NullOut> 40 template<
class ItemType>
43 boost::function<bool(ItemType* item)>
function;
45 ItemCallback(boost::function<
bool(ItemType* item)> f) :
function(f) { }
46 bool operator()(
Item* item) {
47 if(ItemType* casted = dynamic_cast<ItemType*>(item)){
48 return function(casted);
69 const std::string&
name()
const {
return name_; }
70 virtual void setName(
const std::string& name);
79 bool addChildItem(
Item* item,
bool isManualOperation =
false);
80 bool addSubItem(
Item* item);
81 bool isSubItem()
const;
84 void detachFromParentItem();
85 void emitSigDetachedFromRootForSubTree();
86 bool insertChildItem(
Item* item,
Item* nextItem,
bool isManualOperation =
false);
87 bool insertSubItem(
Item* item,
Item* nextItem);
89 bool isTemporal()
const;
90 void setTemporal(
bool on =
true);
97 Item* findItem(
const std::string& path)
const;
98 template<
class ItemType>
99 ItemType*
findItem(
const std::string& path)
const {
100 return dynamic_cast<ItemType*
>(findItem(path));
103 static Item* find(
const std::string& path);
104 template<
class ItemType>
105 ItemType*
find(
const std::string& path) {
106 return dynamic_cast<ItemType*
>(find(path));
112 Item* findChildItem(
const std::string& path)
const;
113 template<
class ItemType>
115 return dynamic_cast<ItemType*
>(findChildItem(path));
121 Item* findSubItem(
const std::string& path)
const;
122 template<
class ItemType>
124 return dynamic_cast<ItemType*
>(findSubItem(path));
132 Item* headItem()
const;
134 template <
class ItemType> ItemType*
findOwnerItem(
bool includeSelf =
false) {
135 Item* parentItem__ = includeSelf ? this : parentItem();
137 ItemType* ownerItem =
dynamic_cast<ItemType*
>(parentItem__);
146 bool isOwnedBy(
Item* item)
const;
148 bool traverse(boost::function<
bool(
Item*)>
function);
150 template<
class ItemType>
151 bool traverse(boost::function<
bool(ItemType* item)>
function){
155 Item* duplicate()
const;
156 Item* duplicateAll()
const;
158 void assign(
Item* srcItem);
160 bool load(
const std::string& filename,
const std::string& format = std::string());
161 bool load(
const std::string& filename,
Item* parent,
const std::string& format = std::string());
162 bool save(
const std::string& filename,
const std::string& format = std::string());
163 bool overwrite(
bool forceOverwrite =
false,
const std::string& format = std::string());
165 const std::string&
filePath()
const {
return filePath_; }
166 const std::string&
fileFormat()
const {
return fileFormat_; }
168 #ifdef CNOID_BACKWARD_COMPATIBILITY 169 const std::string& lastAccessedFilePath()
const {
return filePath_; }
170 const std::string& lastAccessedFileFormatId()
const {
return fileFormat_; }
176 void clearFileInformation();
182 virtual void notifyUpdate();
185 return sigNameChanged_;
204 return sigPositionChanged_;
211 return sigDetachedFromRoot_;
217 return sigDetachedFromRoot_;
221 return sigSubTreeChanged_;
224 virtual bool store(
Archive& archive);
225 virtual bool restore(
const Archive& archive);
230 void clearCustomData(
int id);
233 return sigClassUnregistered_;
238 virtual void onConnectedToRoot();
239 virtual void onDisconnectedFromRoot();
240 virtual void onPositionChanged();
241 virtual bool onChildItemAboutToBeAdded(
Item* childItem,
bool isManualOperation);
243 virtual Item* doDuplicate()
const;
244 virtual void doAssign(
Item* srcItem);
262 std::bitset<NUM_ATTRIBUTES> attributes;
264 std::vector<int> extraStates;
265 std::vector<ReferencedPtr> extraData;
276 bool isConsistentWithFile_;
277 std::string filePath_;
278 std::string fileFormat_;
279 std::time_t fileModificationTime_;
285 bool doInsertChildItem(
Item* item,
Item* nextItem,
bool isManualOperation);
286 void callSlotsOnPositionChanged();
287 void callFuncOnConnectedToRoot();
288 void addToItemsToEmitSigSubTreeChanged();
289 void addToItemsToEmitSigSubTreeChangedSub(std::list<Item*>::iterator& pos);
290 void emitSigSubTreeChanged();
292 void detachFromParentItemSub(
bool isMoving);
293 bool traverse(
Item* item,
const boost::function<
bool(
Item*)>&
function);
294 Item* duplicateAllSub(
Item* duplicated)
const;
296 void updateFileInformation(
const std::string& filename,
const std::string& format);
300 friend class ItemManagerImpl;
303 #ifndef CNOID_BASE_MVOUT_DECLARED 304 #define CNOID_BASE_MVOUT_DECLARED SignalProxy< void()> sigUpdated()
Definition: Item.h:191
SignalProxy< void()> sigDetachedFromRoot()
Definition: Item.h:210
bool hasAttribute(Attribute attribute) const
Definition: Item.h:72
Item * nextItem() const
Definition: Item.h:76
Definition: ExtensionManager.h:26
Definition: RootItem.h:23
Item * prevItem() const
Definition: Item.h:75
CNOID_EXPORT std::ostream & mvout(bool doFlush=false)
Definition: MessageView.cpp:1025
Definition: Referenced.h:67
SignalProxy< void()> sigSubTreeChanged()
Definition: Item.h:220
void setAttribute(Attribute attribute)
Definition: Item.h:247
ItemType * findItem(const std::string &path) const
Definition: Item.h:99
SignalProxy< void()> sigDisconnectedFromRoot()
Definition: Item.h:216
Definition: PutPropertyFunction.h:35
ItemType * find(const std::string &path)
Definition: Item.h:105
const std::string & filePath() const
Definition: Item.h:165
bool traverse(boost::function< bool(ItemType *item)> function)
Definition: Item.h:151
Item * parentItem() const
Definition: Item.h:77
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
Attribute
Definition: Item.h:60
ItemType * findOwnerItem(bool includeSelf=false)
Definition: Item.h:134
Item * childItem() const
Definition: Item.h:74
SignalProxy< void(const std::string &oldName)> sigNameChanged()
Definition: Item.h:184
ItemType * findSubItem(const std::string &path) const
Definition: Item.h:123
const std::string & name() const
Definition: Item.h:69
SignalProxy< void()> sigPositionChanged()
Definition: Item.h:203
bool isConsistentWithFile() const
Definition: Item.h:174
static SignalProxy< void(const char *type_info_name)> sigClassUnregistered()
Definition: Item.h:232
void unsetAttribute(Attribute attribute)
Definition: Item.h:248
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
bool traverse(boost::function< bool(Item *)> function)
Definition: Item.cpp:558
ItemType * findChildItem(const std::string &path) const
Definition: Item.h:114
ref_ptr< Item > ItemPtr
Definition: Item.h:20
std::time_t fileModificationTime() const
Definition: Item.h:173
const std::string & fileFormat() const
Definition: Item.h:166
Definition: ItemTreeArchiver.h:17
void suggestFileUpdate()
Definition: Item.h:178