29#include <Ice/ObjectAdapter.h>
35#include <ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ui_IceGridNodeView.h>
36#include <ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ui_IceGridViewer.h>
50 qRegisterMetaType<QVector<int>>(
"QVector<int>");
51 qRegisterMetaType<IceGrid::ServerDynamicInfo>(
"IceGrid::ServerDynamicInfo");
52 connect(ui->gridNodeSelector,
53 SIGNAL(currentIndexChanged(
int)),
60 Ui::IceGridNodeView content;
61 content.setupUi(ui->contentWidget);
63 content.NodeInfo->setModel(nodeInfoModel);
65 content.ServerInfo->setModel(serverInfoModel);
67 content.AdapterInfo->setModel(adapterInfoModel);
69 connect(serverInfoModel,
74 selectorModel =
new QStringListModel;
75 ui->gridNodeSelector->setModel(selectorModel);
84 delete serverInfoModel;
85 delete adapterInfoModel;
107 iceGridAdmin->removeObservers();
113 IceGrid::AdminSessionPrx adminSession = iceGridAdmin->adminSession();
116 Ice::ObjectPrx objectProxy =
117 iceGridAdmin->registerObjectWithNewAdapter(observer, ADAPTER_NAME, observerAdapter);
118 IceGrid::NodeObserverPrx nodeObserver = IceGrid::NodeObserverPrx::checkedCast(objectProxy);
122 adminSession->setObservers(
nullptr, nodeObserver,
nullptr,
nullptr,
nullptr);
129 iceGridAdmin->stop();
131 iceGridAdmin->adminSession()->setObservers(NULL, NULL, NULL, NULL, NULL);
133 observerAdapter->destroy();
147 const QString lastSelectionText = ui->gridNodeSelector->currentText();
149 gridNodeList = nodeSeq;
150 QStringList nodeNames;
151 for (
const auto& node : gridNodeList)
153 nodeNames.append(QString::fromStdString(node.info.name));
155 selectorModel->setStringList(nodeNames);
157 const int index = std::max(0, ui->gridNodeSelector->findText(lastSelectionText));
158 ui->gridNodeSelector->setCurrentIndex(
index);
170 QStringList currentEntries = selectorModel->stringList();
171 currentEntries.append(QString::fromStdString(node.info.name));
172 gridNodeList.push_back(node);
173 selectorModel->setStringList(currentEntries);
184 const QString lastSelectionText = ui->gridNodeSelector->currentText();
186 QStringList currentEntries = selectorModel->stringList();
187 currentEntries.removeOne(node);
191 const std::string nodeName = node.toStdString();
192 gridNodeList.erase(std::remove_if(gridNodeList.begin(),
194 [&nodeName](
const IceGrid::NodeDynamicInfo& info)
195 { return info.info.name == nodeName; }),
198 selectorModel->setStringList(currentEntries);
201 std::max<int>(0, ui->gridNodeSelector->findText(lastSelectionText));
202 ui->gridNodeSelector->setCurrentIndex(
index);
209 const IceGrid::ServerDynamicInfo& serverUpdateInfo)
213 [
this, nodeName, serverUpdateInfo]()
215 auto nodeEntry = std::find_if(gridNodeList.begin(),
217 [&nodeName](
const IceGrid::NodeDynamicInfo& nodeInfo)
218 { return nodeName == nodeInfo.info.name; });
219 if (nodeEntry == gridNodeList.end())
225 std::find_if(nodeEntry->servers.begin(),
226 nodeEntry->servers.end(),
227 [&serverUpdateInfo](
const IceGrid::ServerDynamicInfo& serverInfo)
228 { return serverUpdateInfo.id == serverInfo.id; });
230 if (serverEntry == nodeEntry->servers.end())
232 nodeEntry->servers.push_back(serverUpdateInfo);
234 else if (serverUpdateInfo.pid == 0)
236 nodeEntry->servers.erase(serverEntry);
240 *serverEntry = serverUpdateInfo;
249 const IceGrid::AdapterDynamicInfo& adapterUpdateInfo)
253 [
this, nodeName, adapterUpdateInfo]()
255 auto nodeEntry = std::find_if(gridNodeList.begin(),
257 [&nodeName](
const IceGrid::NodeDynamicInfo& nodeInfo)
258 { return nodeName == nodeInfo.info.name; });
259 if (nodeEntry == gridNodeList.end())
264 auto adapterEntry = std::find_if(
265 nodeEntry->adapters.begin(),
266 nodeEntry->adapters.end(),
267 [&adapterUpdateInfo](
const IceGrid::AdapterDynamicInfo& adapterInfo)
268 { return adapterUpdateInfo.id == adapterInfo.id; });
270 if (adapterEntry == nodeEntry->adapters.end())
276 if (adapterUpdateInfo.proxy)
278 nodeEntry->adapters.push_back(adapterUpdateInfo);
281 else if (!adapterUpdateInfo.proxy)
283 nodeEntry->adapters.erase(adapterEntry);
287 *adapterEntry = adapterUpdateInfo;
299 iceGridAdmin->getAdmin()->enableServer(serverInfo.id, serverInfo.enabled);
306 ARMARX_WARNING <<
"Failed to enable/disable server " << serverInfo.id <<
": "
322 nodeInfoModel->setData(gridNodeList[
index].info);
323 serverInfoModel->setData(gridNodeList[
index].servers);
324 adapterInfoModel->setData(gridNodeList[
index].adapters);
IceUtil::Handle< QtNodeObserver > QtNodeObserverPtr
void onInitComponent() override
void gridNodeListAdd(const IceGrid::NodeDynamicInfo &node)
void loadSettings(QSettings *settings) override
Load stored manager models.
void saveSettings(QSettings *settings) override
Saves the manager models.
void gridNodeListRemove(const QString &node)
void updateServerInfo(const std::string &nodeName, const IceGrid::ServerDynamicInfo &serverUpdateInfo)
void onConnectComponent() override
~IceGridViewer() override
void onExitComponent() override
Hook for subclass.
void serverInfoChanged(IceGrid::ServerDynamicInfo serverInfo)
void selectGridNode(int index)
void gridNodeListUpdate(const IceGrid::NodeDynamicInfoSeq &nodeSeq)
void updateAdapterInfo(const std::string &nodeName, const IceGrid::AdapterDynamicInfo &adapterUpdateInfo)
IceManagerPtr getIceManager() const
Returns the IceManager.
Ice::CommunicatorPtr getCommunicator() const
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::string GetHandledExceptionString()
void postToObject(QObject *context, Function &&function)
Run function on the GUI (main) thread's event loop.