Choreonoid  1.5
LinkTreeWidget.h
Go to the documentation of this file.
1 
5 #ifndef CNOID_BODY_PLUGIN_LINK_TREE_WIDGET_H
6 #define CNOID_BODY_PLUGIN_LINK_TREE_WIDGET_H
7 
8 #include "BodyItem.h"
9 #include <cnoid/Signal>
10 #include <cnoid/ComboBox>
11 #include <cnoid/TreeWidget>
12 #include <boost/dynamic_bitset.hpp>
13 #include <vector>
14 #include "exportdecl.h"
15 
16 namespace cnoid {
17 
18 class MenuManager;
19 class LinkGroup;
20 class LinkTreeWidget;
21 class LinkTreeWidgetImpl;
22 
23 class CNOID_EXPORT LinkTreeItem : public QTreeWidgetItem
24 {
25 public:
26  LinkTreeItem(const std::string& name);
27 
28  inline int rowIndex() const { return rowIndex_; }
29 
30  inline const std::string& name() const { return name_; }
31  inline const QString& nameText() const { return nameText_; }
32  inline const Link* link() const { return link_; }
33  inline Link* link() { return link_; }
34  inline bool isLinkGroup() const { return isLinkGroup_; }
35 
36  virtual QVariant data(int column, int role) const;
37  virtual void setData(int column, int role, const QVariant& value);
38 
39 private:
40  int rowIndex_;
41  std::string name_;
42  QString nameText_;
43  Link* link_;
44  bool isLinkGroup_;
45 
46  LinkTreeItem(Link* link, LinkTreeWidgetImpl* treeImpl);
47  LinkTreeItem(LinkGroup* linkGroup, LinkTreeWidgetImpl* treeImpl);
48 
49  friend class LinkTreeWidget;
50  friend class LinkTreeWidgetImpl;
51 };
52 
53 
55 {
56  Q_OBJECT
57 
58  public:
59 
60  LinkTreeWidget(QWidget* parent = 0);
61  virtual ~LinkTreeWidget();
62 
63  void setDefaultExpansionLevel(int level);
64  void enableCache(bool on);
65 
66  enum ListingMode {
67  LINK_LIST, LINK_TREE, JOINT_LIST, JOINT_TREE, PART_TREE };
68 
69  ComboBox* listingModeCombo();
70  void setListingMode(ListingMode mode);
71  void fixListingMode(bool on = true);
72 
74 
75  void setBodyItem(BodyItem* bodyItem);
76  BodyItem* bodyItem();
77 
78  typedef boost::function<void(const LinkTreeItem* item, int role, QVariant& out_value)> ColumnDataFunction;
79  typedef boost::function<void(const LinkTreeItem* item, int role, const QVariant& value)> ColumnSetDataFunction;
80  typedef boost::function<QWidget*(const LinkTreeItem* item)> ColumnWidgetFunction;
81 
82  int setNumColumns(int n);
83  int addColumn();
84  int addColumn(const QString& headerText);
85  void setColumnStretchResizeMode(int column);
86  void setColumnInteractiveResizeMode(int column);
87  void setColumnResizeToContentsMode(int column);
88 
89  void setColumnDataFunction(int column, ColumnDataFunction func);
90  void setColumnSetDataFunction(int column, ColumnSetDataFunction func);
91  void setColumnWidgetFunction(int column, ColumnWidgetFunction func);
92  void moveVisualColumnIndex(int column, int visualIndex);
93  int nameColumn();
94  int jointIdColumn();
95 
96  void setNameColumnMarginEnabled(bool on);
97 
98  void setAlignedItemWidget(LinkTreeItem* item, int column, QWidget* widget, Qt::Alignment alignment = Qt::AlignCenter);
99  QWidget* alignedItemWidget(LinkTreeItem* item, int column);
100 
101  void addCustomRow(LinkTreeItem* treeItem);
102 
103  LinkTreeItem* itemOfLink(int linkIndex);
104 
105  int numLinkTreeItems();
106 
108 
109  SignalProxy<void()> sigSelectionChanged();
110  int selectedLinkIndex() const;
111  const std::vector<int>& selectedLinkIndices();
112  const boost::dynamic_bitset<>& linkSelection();
113 
115  SignalProxy<void()> sigSelectionChanged(BodyItem* bodyItem);
117  int selectedLinkIndex(BodyItem* bodyItem) const;
119  const std::vector<int>& selectedLinkIndices(BodyItem* bodyItem);
121  const boost::dynamic_bitset<>& linkSelection(BodyItem* bodyItem);
122 
123  MenuManager& popupMenuManager();
124 
125  bool makeSingleSelection(BodyItem* bodyItem, int linkIndex);
126 
127  void enableArchiveOfCurrentBodyItem(bool on);
128  bool storeState(Archive& archive);
129  bool restoreState(const Archive& archive);
130 
131 protected:
132  virtual void changeEvent(QEvent* event);
133 
134 private Q_SLOTS:
135  void onItemChanged(QTreeWidgetItem* item, int column);
136  void onSelectionChanged();
137  void onCustomContextMenuRequested(const QPoint& pos);
138  void onItemExpanded(QTreeWidgetItem* treeWidgetItem);
139  void onItemCollapsed(QTreeWidgetItem* treeWidgetItem);
140  void onHeaderSectionResized();
141 
142 private:
143 
144  LinkTreeWidgetImpl* impl;
145 
146  friend class LinkTreeItem;
147 };
148 
149 }
150 
151 #endif
bool isLinkGroup() const
Definition: LinkTreeWidget.h:34
boost::function< void(const LinkTreeItem *item, int role, const QVariant &value)> ColumnSetDataFunction
Definition: LinkTreeWidget.h:79
Definition: LinkGroup.h:21
Definition: Archive.h:21
Definition: LinkTreeWidget.h:54
Definition: LinkTreeWidget.h:23
const std::string & name() const
Definition: LinkTreeWidget.h:30
boost::function< void(const LinkTreeItem *item, int role, QVariant &out_value)> ColumnDataFunction
Definition: LinkTreeWidget.h:78
Definition: MenuManager.h:23
ListingMode
Definition: LinkTreeWidget.h:66
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
Definition: TreeWidget.h:15
const QString & nameText() const
Definition: LinkTreeWidget.h:31
Definition: ComboBox.h:14
const Link * link() const
Definition: LinkTreeWidget.h:32
int rowIndex() const
Definition: LinkTreeWidget.h:28
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
Definition: BodyItem.h:31
Definition: Signal.h:380
Link * link()
Definition: LinkTreeWidget.h:33
boost::function< QWidget *(const LinkTreeItem *item)> ColumnWidgetFunction
Definition: LinkTreeWidget.h:80