Skip to content
Snippets Groups Projects
Commit bff1ca89 authored by Joseph Mirabel's avatar Joseph Mirabel Committed by Joseph Mirabel
Browse files

SelectionEvent are sent by the body tree

parent 4cf58fb3
No related branches found
No related tags found
No related merge requests found
......@@ -59,11 +59,10 @@ namespace gepetto {
return model_;
}
/// Handle a selection event
///
/// Does not re-emit a selection event when the body tree selection
/// is updated.
void handleSelectionEvent (const SelectionEvent* event);
void emitBodySelected (SelectionEvent* event);
signals:
void bodySelected (SelectionEvent* event);
public slots:
/// \addtogroup available_in_python Python API
......@@ -111,6 +110,12 @@ namespace gepetto {
const QModelIndex &previous);
private:
/// Handle a selection event
///
/// Does not re-emit a selection event when the body tree selection
/// is updated.
void handleSelectionEvent (const SelectionEvent* event);
QTreeView* view_;
QStandardItemModel* model_;
WindowsManagerPtr_t osg_;
......
......@@ -57,9 +57,6 @@ namespace gepetto {
WindowsManager::WindowID windowID () const;
signals:
void clicked (SelectionEvent* event);
public slots:
/// Load an urdf file in the viewer.
/// \param robotName name of the robot
......@@ -76,7 +73,6 @@ signals:
void cameraManipulationMode ();
void addFloor();
void attachToWindow (const std::string nodeName);
void emitClicked (SelectionEvent* event);
protected:
......
......@@ -78,8 +78,6 @@ namespace gepetto {
SelectionHandler(WindowsManagerPtr_t wsm, QWidget* parent = 0);
~SelectionHandler();
void setParentOSG(OSGWidget* parent);
SelectionMode* mode ();
public slots:
......@@ -95,7 +93,6 @@ namespace gepetto {
void initWidget();
std::vector<SelectionMode *> modes_;
OSGWidget* osg_;
int index_;
WindowsManagerPtr_t wsm_;
QStringList selected_;
......
......@@ -100,10 +100,11 @@ class Plugin(QtGui.QDockWidget):
self.main = mainWindow
self.windowsManager = windowsManager
mainWindow.connect('refresh()', self.refresh)
mainWindow.bodyTree().connect('bodySelected(SelectionEvent*)', self.selected)
### If present, this function is called when a new OSG Widget is created.
def osgWidget(self, osgWindow):
osgWindow.connect('clicked(SelectionEvent*)', self.selected)
pass
def resetConnection(self):
self.client = Client()
......
......@@ -132,7 +132,6 @@ namespace gepetto {
if (matches.empty())
view_->clearSelection();
else {
qDebug() << event->modKey();
if (event->modKey() == Qt::ControlModifier)
view_->selectionModel()->setCurrentIndex
(matches.first()->index(),
......@@ -147,6 +146,16 @@ namespace gepetto {
SLOT (currentChanged(QModelIndex,QModelIndex)));
}
void BodyTreeWidget::emitBodySelected(SelectionEvent* event)
{
emit bodySelected (event);
if (event->type() != SelectionEvent::FromBodyTree) {
MainWindow* main = MainWindow::instance();
handleSelectionEvent(event);
main->requestSelectJointFromBodyName(event->nodeName());
}
}
void BodyTreeWidget::currentChanged (const QModelIndex &current,
const QModelIndex &/*previous*/)
{
......@@ -160,7 +169,7 @@ namespace gepetto {
);
if (item) {
SelectionEvent *event = new SelectionEvent(SelectionEvent::FromBodyTree, item->node(), QApplication::keyboardModifiers());
MainWindow::instance()->centralWidget()->emitClicked(event);
emit bodySelected(event);
}
}
......
......@@ -244,7 +244,6 @@ namespace gepetto {
osg()->addSceneToWindow("hpp-gui", centralWidget_->windowID());
connect(ui_->actionAdd_floor, SIGNAL (triggered()), centralWidget_, SLOT (addFloor()));
selectionHandler_->setParentOSG(centralWidget());
}
osgWindows_.append(osgWidget);
}
......
......@@ -36,7 +36,6 @@
#include <gepetto/viewer/OSGManipulator/keyboard-manipulator.h>
#include <gepetto/gui/windows-manager.hh>
#include <gepetto/gui/bodytreewidget.hh>
#include <gepetto/gui/selection-event.hh>
namespace gepetto {
......@@ -180,16 +179,6 @@ namespace gepetto {
// wsm_->lock().unlock();
}
void OSGWidget::emitClicked(SelectionEvent* event)
{
emit clicked (event);
if (event->type() != SelectionEvent::FromBodyTree) {
MainWindow* main = MainWindow::instance();
main->bodyTree()->handleSelectionEvent(event);
main->requestSelectJointFromBodyName(event->nodeName());
}
}
void OSGWidget::onHome()
{
viewer_->home ();
......
......@@ -89,6 +89,7 @@ namespace gepetto {
const float &x, const float &y,
int modKeyMask)
{
BodyTreeWidget* bt = MainWindow::instance()->bodyTree();
std::list<graphics::NodePtr_t> nodes;
osgViewer::View* viewer = dynamic_cast<osgViewer::View*>( &aa );
if( viewer )
......@@ -108,7 +109,7 @@ namespace gepetto {
camera->accept( iv );
if( !intersector->containsIntersections() ) {
parent_->emitClicked(new SelectionEvent(SelectionEvent::FromOsgWindow, QApplication::keyboardModifiers()));
bt->emitBodySelected(new SelectionEvent(SelectionEvent::FromOsgWindow, QApplication::keyboardModifiers()));
return nodes;
}
......@@ -125,12 +126,12 @@ namespace gepetto {
n,
mapper_.getQtModKey(modKeyMask));
event->setupIntersection(intersection);
parent_->emitClicked(event);
bt->emitBodySelected(event);
return nodes;
}
}
}
parent_->emitClicked(new SelectionEvent(SelectionEvent::FromOsgWindow, QApplication::keyboardModifiers()));
bt->emitBodySelected(new SelectionEvent(SelectionEvent::FromOsgWindow, QApplication::keyboardModifiers()));
return nodes;
}
......
......@@ -4,16 +4,16 @@
#include <QAction>
#include <QDebug>
#include <gepetto/gui/bodytreewidget.hh>
#include <gepetto/gui/mainwindow.hh>
#include <gepetto/gui/selection-event.hh>
#include <gepetto/gui/windows-manager.hh>
#include "gepetto/gui/osgwidget.hh"
#include "gepetto/gui/selection-handler.hh"
namespace gepetto {
namespace gui {
SelectionHandler::SelectionHandler(WindowsManagerPtr_t wsm, QWidget *parent)
: QComboBox(parent),
osg_(NULL),
index_(-1),
wsm_(wsm)
{
......@@ -24,12 +24,6 @@ namespace gepetto {
{
}
void SelectionHandler::setParentOSG(OSGWidget* parent)
{
osg_ = parent;
changeMode(currentIndex());
}
SelectionMode* SelectionHandler::mode ()
{
assert(index_ >= 0 && index_ < (int)modes_.size());
......@@ -38,23 +32,22 @@ namespace gepetto {
void SelectionHandler::changeMode(int index)
{
if (osg_ != NULL) {
foreach(QString name, selected_) {
wsm_->setHighlight(name.toStdString(), 0);
}
if (index_ != -1) {
modes_[index_]->reset();
disconnect(osg_, SIGNAL(clicked(SelectionEvent*)),
modes_[index_], SLOT(onSelect(SelectionEvent*)));
disconnect(modes_[index_], SIGNAL(selectedBodies(QStringList)),
this, SLOT(getBodies(QStringList)));
}
index_ = index;
connect(osg_, SIGNAL(clicked(SelectionEvent*)),
modes_[index], SLOT(onSelect(SelectionEvent*)));
connect(modes_[index], SIGNAL(selectedBodies(QStringList)),
SLOT(getBodies(QStringList)));
BodyTreeWidget* bt = MainWindow::instance()->bodyTree();
foreach(QString name, selected_) {
wsm_->setHighlight(name.toStdString(), 0);
}
if (index_ != -1) {
modes_[index_]->reset();
disconnect(bt, SIGNAL(bodySelected(SelectionEvent*)),
modes_[index_], SLOT(onSelect(SelectionEvent*)));
disconnect(modes_[index_], SIGNAL(selectedBodies(QStringList)),
this, SLOT(getBodies(QStringList)));
}
index_ = index;
connect(bt, SIGNAL(bodySelected(SelectionEvent*)),
modes_[index], SLOT(onSelect(SelectionEvent*)));
connect(modes_[index], SIGNAL(selectedBodies(QStringList)),
SLOT(getBodies(QStringList)));
}
void SelectionHandler::addMode(SelectionMode* mode)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment