Commit 261883ed authored by Pierre Kraemer's avatar Pierre Kraemer

SCHNApps: linking entities scriptable from Python !

parent b1faeed4
......@@ -24,11 +24,14 @@ public:
private:
Window* m_window;
View* m_view;
bool b_refreshingUI;
void selectCurrentCamera();
public slots:
void selectedCameraChanged();
void selectCamera(View* view, Camera* camera);
void deselectCamera(View* view, Camera* camera);
void addCameraToList(Camera* c);
void removeCameraFromList(Camera* c);
};
......
......@@ -24,9 +24,12 @@ public:
private:
Window* m_window;
View* m_view;
bool b_refreshingUI;
public slots:
void selectedMapsChanged();
void selectMap(View* view, MapHandlerGen* map);
void deselectMap(View* view, MapHandlerGen* map);
void addMapToList(MapHandlerGen* m);
void removeMapFromList(MapHandlerGen* m);
};
......
......@@ -24,9 +24,12 @@ public:
private:
Window* m_window;
View* m_view;
bool b_refreshingUI;
public slots:
void selectedPluginsChanged();
void selectPlugin(View* view, Plugin* plugin);
void deselectPlugin(View* view, Plugin* plugin);
void addPluginToList(Plugin* p);
void removePluginFromList(Plugin* p);
};
......
......@@ -20,6 +20,7 @@ public:
Plugin();
virtual ~Plugin();
public slots:
const QString& getName() { return m_name; }
void setName(const QString& name) { m_name = name; }
......@@ -34,6 +35,7 @@ public:
bool getProvidesRendering() { return b_providesRendering; }
void setProvidesRendering(bool b) { b_providesRendering = b; }
public:
virtual bool enable() = 0;
virtual void disable() = 0;
......@@ -46,10 +48,6 @@ public:
virtual void mouseMove(View* view, int buttons, int x, int y) = 0;
virtual void wheelEvent(View* view, int delta, int x, int y) = 0;
// virtual void viewLinked(View* view) = 0;
// virtual void viewUnlinked(View* view) = 0;
// virtual void currentViewChanged(View* view) = 0;
/*********************************************************
* MANAGE LINKED VIEWS
*********************************************************/
......
......@@ -231,12 +231,17 @@ public:
public slots:
void linkViewAndCamera(View* v, Camera* c);
void linkViewAndCamera(const QString& viewName, const QString& cameraName);
void linkViewAndMap(View* v, MapHandlerGen* m);
void linkViewAndMap(const QString& viewName, const QString& mapName);
void unlinkViewAndMap(View* v, MapHandlerGen* m);
void unlinkViewAndMap(const QString& viewName, const QString& mapName);
void linkViewAndPlugin(View* v, Plugin* p);
void linkViewAndPlugin(const QString& viewName, const QString& pluginName);
void unlinkViewAndPlugin(View* v, Plugin* p);
void unlinkViewAndPlugin(const QString& viewName, const QString& pluginName);
/*********************************************************
* MANAGE TEXTURES
......
......@@ -16,7 +16,8 @@ namespace SCHNApps
CameraViewDialog::CameraViewDialog(Window* window, View* view) :
QDialog(view),
m_window(window),
m_view(view)
m_view(view),
b_refreshingUI(false)
{
this->setupUi(this);
this->setWindowTitle(m_view->getName() + QString(" : camera"));
......@@ -26,6 +27,9 @@ CameraViewDialog::CameraViewDialog(Window* window, View* view) :
connect(m_window, SIGNAL(cameraAdded(Camera*)), this, SLOT(addCameraToList(Camera*)));
connect(m_window, SIGNAL(cameraRemoved(Camera*)), this, SLOT(removeCameraFromList(Camera*)));
connect(m_window, SIGNAL(viewAndCameraLinked(View*, Camera*)), this, SLOT(selectCamera(View*, Camera*)));
connect(m_window, SIGNAL(viewAndCameraUnlinked(View*, Camera*)), this, SLOT(deselectCamera(View*, Camera*)));
QList<Camera*> cameras = m_window->getCamerasList();
foreach(Camera* c, cameras)
cameraList->addItem(c->getName());
......@@ -50,14 +54,47 @@ void CameraViewDialog::selectCurrentCamera()
void CameraViewDialog::selectedCameraChanged()
{
QList<QListWidgetItem*> currentItems = cameraList->selectedItems();
if(currentItems.empty())
selectCurrentCamera();
else
if(b_refreshingUI)
{
QList<QListWidgetItem*> currentItems = cameraList->selectedItems();
if(currentItems.empty())
selectCurrentCamera();
else
{
const QString& cname = currentItems[0]->text();
Camera* c = m_window->getCamera(cname);
m_window->linkViewAndCamera(m_view, c);
}
}
}
void CameraViewDialog::selectCamera(View* view, Camera* camera)
{
if(view == m_view)
{
const QString& cname = currentItems[0]->text();
Camera* c = m_window->getCamera(cname);
m_window->linkViewAndCamera(m_view, c);
QList<QListWidgetItem*> items = cameraList->findItems(camera->getName(), Qt::MatchExactly);
if(!items.empty())
{
b_refreshingUI = true;
items[0]->setSelected(true);
m_view->updateGL();
b_refreshingUI = false;
}
}
}
void CameraViewDialog::deselectCamera(View* view, Camera* camera)
{
if(view == m_view)
{
QList<QListWidgetItem*> items = cameraList->findItems(camera->getName(), Qt::MatchExactly);
if(!items.empty())
{
b_refreshingUI = true;
items[0]->setSelected(false);
m_view->updateGL();
b_refreshingUI = false;
}
}
}
......
......@@ -17,7 +17,8 @@ namespace SCHNApps
MapsViewDialog::MapsViewDialog(Window* window, View* view) :
QDialog(view),
m_window(window),
m_view(view)
m_view(view),
b_refreshingUI(false)
{
this->setupUi(this);
this->setWindowTitle(m_view->getName() + QString(" : maps"));
......@@ -27,6 +28,9 @@ MapsViewDialog::MapsViewDialog(Window* window, View* view) :
connect(m_window, SIGNAL(mapAdded(MapHandlerGen*)), this, SLOT(addMapToList(MapHandlerGen*)));
connect(m_window, SIGNAL(mapRemoved(MapHandlerGen*)), this, SLOT(removeMapFromList(MapHandlerGen*)));
connect(m_window, SIGNAL(viewAndMapLinked(View*, MapHandlerGen*)), this, SLOT(selectMap(View*, MapHandlerGen*)));
connect(m_window, SIGNAL(viewAndMapUnlinked(View*, MapHandlerGen*)), this, SLOT(deselectMap(View*, MapHandlerGen*)));
QList<MapHandlerGen*> maps = m_window->getMapsList();
foreach(MapHandlerGen* m, maps)
mapList->addItem(m->getName());
......@@ -37,18 +41,51 @@ MapsViewDialog::~MapsViewDialog()
void MapsViewDialog::selectedMapsChanged()
{
for(int i = 0; i < mapList->count(); ++i)
if(!b_refreshingUI)
{
QString mapName = mapList->item(i)->text();
MapHandlerGen* map = m_window->getMap(mapName);
for(int i = 0; i < mapList->count(); ++i)
{
QString mapName = mapList->item(i)->text();
MapHandlerGen* map = m_window->getMap(mapName);
if(mapList->item(i)->isSelected() && !m_view->isLinkedToMap(map))
m_window->linkViewAndMap(m_view, map);
if(mapList->item(i)->isSelected() && !m_view->isLinkedToMap(map))
m_window->linkViewAndMap(m_view, map);
else if(!mapList->item(i)->isSelected() && m_view->isLinkedToMap(map))
m_window->unlinkViewAndMap(m_view, map);
}
m_view->updateGL();
}
}
void MapsViewDialog::selectMap(View* view, MapHandlerGen* plugin)
{
if(view == m_view)
{
QList<QListWidgetItem*> items = mapList->findItems(plugin->getName(), Qt::MatchExactly);
if(!items.empty())
{
b_refreshingUI = true;
items[0]->setSelected(true);
m_view->updateGL();
b_refreshingUI = false;
}
}
}
else if(!mapList->item(i)->isSelected() && m_view->isLinkedToMap(map))
m_window->unlinkViewAndMap(m_view, map);
void MapsViewDialog::deselectMap(View* view, MapHandlerGen* plugin)
{
if(view == m_view)
{
QList<QListWidgetItem*> items = mapList->findItems(plugin->getName(), Qt::MatchExactly);
if(!items.empty())
{
b_refreshingUI = true;
items[0]->setSelected(false);
m_view->updateGL();
b_refreshingUI = false;
}
}
m_view->updateGL();
}
void MapsViewDialog::addMapToList(MapHandlerGen* m)
......
......@@ -16,7 +16,8 @@ namespace SCHNApps
PluginsViewDialog::PluginsViewDialog(Window* window, View* view) :
QDialog(view),
m_window(window),
m_view(view)
m_view(view),
b_refreshingUI(false)
{
this->setupUi(this);
this->setWindowTitle(m_view->getName() + QString(" : plugins"));
......@@ -26,6 +27,9 @@ PluginsViewDialog::PluginsViewDialog(Window* window, View* view) :
connect(m_window, SIGNAL(pluginLoaded(Plugin*)), this, SLOT(addPluginToList(Plugin*)));
connect(m_window, SIGNAL(pluginUnloaded(Plugin*)), this, SLOT(removePluginFromList(Plugin*)));
connect(m_window, SIGNAL(viewAndPluginLinked(View*, Plugin*)), this, SLOT(selectPlugin(View*, Plugin*)));
connect(m_window, SIGNAL(viewAndPluginUnlinked(View*, Plugin*)), this, SLOT(deselectPlugin(View*, Plugin*)));
QList<Plugin*> plugins = m_window->getPluginsList();
foreach(Plugin* p, plugins)
{
......@@ -39,17 +43,50 @@ PluginsViewDialog::~PluginsViewDialog()
void PluginsViewDialog::selectedPluginsChanged()
{
for(int i = 0; i < pluginList->count(); ++i)
if(!b_refreshingUI)
{
for(int i = 0; i < pluginList->count(); ++i)
{
QString pluginName = pluginList->item(i)->text();
Plugin* plugin = m_window->getPlugin(pluginName);
if(pluginList->item(i)->isSelected() && !m_view->isLinkedToPlugin(plugin))
m_window->linkViewAndPlugin(m_view, plugin);
else if(!pluginList->item(i)->isSelected() && m_view->isLinkedToPlugin(plugin))
m_window->unlinkViewAndPlugin(m_view, plugin);
}
m_view->updateGL();
}
}
void PluginsViewDialog::selectPlugin(View* view, Plugin* plugin)
{
if(view == m_view)
{
QString pluginName = pluginList->item(i)->text();
Plugin* plugin = m_window->getPlugin(pluginName);
if(pluginList->item(i)->isSelected() && !m_view->isLinkedToPlugin(plugin))
m_window->linkViewAndPlugin(m_view, plugin);
QList<QListWidgetItem*> items = pluginList->findItems(plugin->getName(), Qt::MatchExactly);
if(!items.empty())
{
b_refreshingUI = true;
items[0]->setSelected(true);
m_view->updateGL();
b_refreshingUI = false;
}
}
}
else if(!pluginList->item(i)->isSelected() && m_view->isLinkedToPlugin(plugin))
m_window->unlinkViewAndPlugin(m_view, plugin);
void PluginsViewDialog::deselectPlugin(View* view, Plugin* plugin)
{
if(view == m_view)
{
QList<QListWidgetItem*> items = pluginList->findItems(plugin->getName(), Qt::MatchExactly);
if(!items.empty())
{
b_refreshingUI = true;
items[0]->setSelected(false);
m_view->updateGL();
b_refreshingUI = false;
}
}
m_view->updateGL();
}
void PluginsViewDialog::addPluginToList(Plugin* p)
......
......@@ -15,10 +15,10 @@ int main(int argc, char* argv[])
PythonQt::init();
QStringList classNames;
classNames.append("Plugin");
classNames.append("View");
classNames.append("MapHandlerGen");
classNames.append("Camera");
classNames.append("Plugin");
classNames.append("MapHandlerGen");
PythonQt::self()->registerQObjectClassNames(classNames);
// get a smart pointer to the __main__ module of the Python interpreter
......
......@@ -476,8 +476,6 @@ Plugin* Window::loadPlugin(const QString& pluginName)
statusbar->showMessage(pluginName + QString(" successfully loaded."), 2000);
emit(pluginLoaded(plugin));
m_pythonContext.addObject(pluginName, plugin);
// method success
return plugin;
}
......@@ -583,20 +581,24 @@ MapHandlerGen* Window::getMap(const QString& name) const
* MANAGE LINKS
*********************************************************/
void Window::linkViewAndPlugin(View* v, Plugin* p)
void Window::linkViewAndCamera(View* v, Camera* c)
{
v->linkPlugin(p);
p->linkView(v);
Camera* current = v->getCurrentCamera();
current->unlinkView(v);
emit(viewAndCameraUnlinked(v, current));
emit(viewAndPluginLinked(v, p));
v->setCurrentCamera(c);
c->linkView(v);
emit(viewAndCameraLinked(v, c));
}
void Window::unlinkViewAndPlugin(View* v, Plugin* p)
void Window::linkViewAndCamera(const QString& viewName, const QString& cameraName)
{
v->unlinkPlugin(p);
p->unlinkView(v);
emit(viewAndPluginUnlinked(v, p));
View* view = getView(viewName);
Camera* camera = getCamera(cameraName);
if(view && camera)
linkViewAndCamera(view, camera);
}
void Window::linkViewAndMap(View* v, MapHandlerGen* m)
......@@ -607,6 +609,14 @@ void Window::linkViewAndMap(View* v, MapHandlerGen* m)
emit(viewAndMapLinked(v, m));
}
void Window::linkViewAndMap(const QString& viewName, const QString& mapName)
{
View* view = getView(viewName);
MapHandlerGen* map = getMap(mapName);
if(view && map)
linkViewAndMap(view, map);
}
void Window::unlinkViewAndMap(View* v, MapHandlerGen* m)
{
v->unlinkMap(m);
......@@ -615,15 +625,44 @@ void Window::unlinkViewAndMap(View* v, MapHandlerGen* m)
emit(viewAndMapUnlinked(v, m));
}
void Window::linkViewAndCamera(View* v, Camera* c)
void Window::unlinkViewAndMap(const QString& viewName, const QString& mapName)
{
Camera* current = v->getCurrentCamera();
current->unlinkView(v);
emit(viewAndCameraUnlinked(v, current));
v->setCurrentCamera(c);
c->linkView(v);
View* view = getView(viewName);
MapHandlerGen* map = getMap(mapName);
if(view && map)
unlinkViewAndMap(view, map);
}
emit(viewAndCameraLinked(v, c));
void Window::linkViewAndPlugin(View* v, Plugin* p)
{
v->linkPlugin(p);
p->linkView(v);
emit(viewAndPluginLinked(v, p));
}
void Window::linkViewAndPlugin(const QString& viewName, const QString& pluginName)
{
View* view = getView(viewName);
Plugin* plugin = getPlugin(pluginName);
if(view && plugin)
linkViewAndPlugin(view, plugin);
}
void Window::unlinkViewAndPlugin(View* v, Plugin* p)
{
v->unlinkPlugin(p);
p->unlinkView(v);
emit(viewAndPluginUnlinked(v, p));
}
void Window::unlinkViewAndPlugin(const QString& viewName, const QString& pluginName)
{
View* view = getView(viewName);
Plugin* plugin = getPlugin(pluginName);
if(view && plugin)
unlinkViewAndPlugin(view, plugin);
}
/*********************************************************
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment