ParaQ:API: Difference between revisions
No edit summary |
|||
Line 32: | Line 32: | ||
=The Qt-SM API= | =The Qt-SM API= | ||
The Qt interface to SM for the GUI will have functions like the following. This is not set in stone yet. | |||
{ | |||
signals: | |||
// signal from SM that a proxy was created | |||
void ProxyCreated(vtkSMProxy* Proxy); | |||
// signal from SM that a proxy was deleted | |||
void ProxyDeleted(vtkSMProxy* Proxy); | |||
// signal from SM that a proxy has an added input | |||
void ProxyInputAdded(vtkSMProxy* Proxy, vtkSMProxy* Input); | |||
// signal from SM that a proxy has a removed input | |||
void ProxyInputRemoved(vtkSMProxy* Proxy, vtkSMProxy* Input); | |||
// signal from SM that a proxy has an added output | |||
void ProxyOutputAdded(vtkSMProxy* Proxy, vtkSMProxy* Output); | |||
// signal from SM that a proxy has a removed output | |||
void ProxyOutputRemoved(vtkSMProxy* Proxy, vtkSMProxy* Output); | |||
public: | |||
// Set properties for a proxy. UpdateVTKObjects is automatically called. | |||
void SetProperties(vtkSMProxy* Proxy, QList<vtkSMProperty*>, QList<QVariant>); | |||
// Get properties for a proxy. | |||
void GetProperties(vtkSMProxy* Proxy, QList<vtkSMProperty*>, QList<QVariant>); | |||
// Property linking | |||
// If a vtkSMProperty is linked to multiple QObjects' properties, this API | |||
// will query the Server Manager once for the data and give it to all QObjects. | |||
// Link a property of a proxy to a property of a QObject. | |||
// The QObject property follows the vtkSMProperty. | |||
void LinkPropertyTo(vtkSMProxy* Proxy, vtkSMProperty* Property, int Index, | |||
QObject* qObject, const char* qProperty); | |||
// Unlink a property of a proxy from a property of a QObject. | |||
void UnlinkPropertyFrom(vtkSMProxy* Proxy, vtkSMProperty* Property, int Index, | |||
QObject* qObject, const char* qProperty); | |||
// Link a property of a QObject to a property of a proxy. | |||
// The vtkSMProperty follows the QObject's property. | |||
void LinkPropertyTo(QObject* qObject, const char* qProperty, | |||
vtkSMProxy* Proxy, vtkSMProperty* Property, int Index); | |||
// Unlink a property of a QObject from a property of a proxy. | |||
void UnlinkPropertyFrom(QObject* qObject, const char* qProperty, | |||
vtkSMProxy* Proxy, vtkSMProperty* Property, int Index); | |||
// Domain linking | |||
// link a vtkSMDomain to a QObject's property. The QObject property must be a QVariant. | |||
void LinkDomain(vtkSMDomain* Domain, QObject* qObject, const char* qProperty); | |||
// unlink a vtkSMDomain from a QObject's property. The QObject property must be a QVariant. | |||
void UnLinkDomain(vtkSMDomain* Domain, QObject* qObject, const char* qProperty); | |||
} | |||
=Assumptions= | =Assumptions= |
Revision as of 18:16, 21 October 2005
Overview
We need to establish the architecture for how the GUI code interacts with the Server Manager.
Goals
The goals of designing this architecture are:
- Establish a general method for how the GUI talks to the Server Manager.
- Provide a way for the GUI to update correctly if a scripting client is modifying the server.
- Be designed to minimize traffic with the server.
- Decouple GUI from Server Manager to allow using of Qt Designer.
- To provide functionality such that multiple inheritance of VTK & Qt objects is not necessary (toolkits have different object management schemes).
- Allow GUI to control behavior. Meaning, Server Manager or API doesn't impose behavior on the GUI.
Use Cases
Histogram Use case: |
The SM API
The Server Manager API contains these basic components:
- Proxy
- Property
- Domain
- Data
The Qt-SM API
The Qt interface to SM for the GUI will have functions like the following. This is not set in stone yet.
{ signals: // signal from SM that a proxy was created void ProxyCreated(vtkSMProxy* Proxy); // signal from SM that a proxy was deleted void ProxyDeleted(vtkSMProxy* Proxy); // signal from SM that a proxy has an added input void ProxyInputAdded(vtkSMProxy* Proxy, vtkSMProxy* Input); // signal from SM that a proxy has a removed input void ProxyInputRemoved(vtkSMProxy* Proxy, vtkSMProxy* Input); // signal from SM that a proxy has an added output void ProxyOutputAdded(vtkSMProxy* Proxy, vtkSMProxy* Output); // signal from SM that a proxy has a removed output void ProxyOutputRemoved(vtkSMProxy* Proxy, vtkSMProxy* Output); public: // Set properties for a proxy. UpdateVTKObjects is automatically called. void SetProperties(vtkSMProxy* Proxy, QList<vtkSMProperty*>, QList<QVariant>); // Get properties for a proxy. void GetProperties(vtkSMProxy* Proxy, QList<vtkSMProperty*>, QList<QVariant>); // Property linking // If a vtkSMProperty is linked to multiple QObjects' properties, this API // will query the Server Manager once for the data and give it to all QObjects. // Link a property of a proxy to a property of a QObject. // The QObject property follows the vtkSMProperty. void LinkPropertyTo(vtkSMProxy* Proxy, vtkSMProperty* Property, int Index, QObject* qObject, const char* qProperty); // Unlink a property of a proxy from a property of a QObject. void UnlinkPropertyFrom(vtkSMProxy* Proxy, vtkSMProperty* Property, int Index, QObject* qObject, const char* qProperty); // Link a property of a QObject to a property of a proxy. // The vtkSMProperty follows the QObject's property. void LinkPropertyTo(QObject* qObject, const char* qProperty, vtkSMProxy* Proxy, vtkSMProperty* Property, int Index); // Unlink a property of a QObject from a property of a proxy. void UnlinkPropertyFrom(QObject* qObject, const char* qProperty, vtkSMProxy* Proxy, vtkSMProperty* Property, int Index); // Domain linking // link a vtkSMDomain to a QObject's property. The QObject property must be a QVariant. void LinkDomain(vtkSMDomain* Domain, QObject* qObject, const char* qProperty);
// unlink a vtkSMDomain from a QObject's property. The QObject property must be a QVariant. void UnLinkDomain(vtkSMDomain* Domain, QObject* qObject, const char* qProperty); }
Assumptions
It is assumed that Compound Filters, Linked Views, and Histogram Data will be implemented in the Server Manager and the GUI can use the aforementioned events to get updated when those change.
Implementation Details
The Event Relay will contain Qt signals that Qt objects in the GUI can connect to. The signal signatures will be Qt friendly. For example, a property changed signal will have parameters of which property of an object changed and what the value of the property is. The Event Relay will translate events if necessary into a form the GUI would like. For example, if the Server Manager sends an event about object connections, the Event Relay will change that into an object input/output connection signal. In other words, Server Manager level events will be translated to object level events. The vtkEventQtSlotConnect class will be used by the Event Relay. It contains a generic signal signature to connect to. The Event Relay will change the parameters into ParaQ frirendly parameters.