Changeset 846 for trunk/tools/qdbus/qdbusviewer/qdbusviewer.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/tools/qdbus/qdbusviewer/qdbusviewer.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 70 70 objectPathRegExp(QLatin1String("\\[ObjectPath: (.*)\\]")) 71 71 { 72 services = new QTreeWidget; 73 services->setRootIsDecorated(false); 74 services->setHeaderLabels(QStringList(QLatin1String("Services"))); 72 servicesModel = new QStringListModel(this); 73 servicesFilterModel = new QSortFilterProxyModel(this); 74 servicesFilterModel->setSourceModel(servicesModel); 75 servicesFilterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); 76 serviceFilterLine = new QLineEdit(this); 77 serviceFilterLine->setPlaceholderText(tr("Search...")); 78 servicesView = new QListView(this); 79 servicesView->setModel(servicesFilterModel); 80 81 connect(serviceFilterLine, SIGNAL(textChanged(QString)), servicesFilterModel, SLOT(setFilterFixedString(QString))); 75 82 76 83 tree = new QTreeView; … … 87 94 connect(refreshShortcut, SIGNAL(activated()), this, SLOT(refreshChildren())); 88 95 89 QVBoxLayout *topLayout = new QVBoxLayout(this); 96 QVBoxLayout *layout = new QVBoxLayout(this); 97 QSplitter *topSplitter = new QSplitter(Qt::Vertical, this); 98 layout->addWidget(topSplitter); 99 90 100 log = new QTextBrowser; 91 101 connect(log, SIGNAL(anchorClicked(QUrl)), this, SLOT(anchorClicked(QUrl))); 92 102 93 QHBoxLayout *layout = new QHBoxLayout; 94 layout->addWidget(services, 1); 95 layout->addWidget(tree, 2); 96 97 topLayout->addLayout(layout); 98 topLayout->addWidget(log); 99 100 connect(services, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), 101 this, SLOT(serviceChanged(QTreeWidgetItem*))); 103 QSplitter *splitter = new QSplitter(topSplitter); 104 splitter->addWidget(servicesView); 105 106 QWidget *servicesWidget = new QWidget; 107 QVBoxLayout *servicesLayout = new QVBoxLayout(servicesWidget); 108 servicesLayout->addWidget(serviceFilterLine); 109 servicesLayout->addWidget(servicesView); 110 splitter->addWidget(servicesWidget); 111 splitter->addWidget(tree); 112 113 topSplitter->addWidget(splitter); 114 topSplitter->addWidget(log); 115 116 connect(servicesView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), 117 this, SLOT(serviceChanged(QModelIndex))); 102 118 connect(tree, SIGNAL(customContextMenuRequested(QPoint)), 103 119 this, SLOT(showContextMenu(QPoint))); … … 134 150 void QDBusViewer::refresh() 135 151 { 136 services ->clear();152 servicesModel->removeRows(0, servicesModel->rowCount()); 137 153 138 154 if (c.isConnected()) { 139 155 const QStringList serviceNames = c.interface()->registeredServiceNames(); 140 foreach (QString service, serviceNames) 141 new QTreeWidgetItem(services, QStringList(service)); 156 servicesModel->setStringList(serviceNames); 142 157 } 143 158 } … … 155 170 sig.mInterface = model->dBusInterface(item); 156 171 sig.mName = model->dBusMethodName(item); 172 sig.mTypeSig = model->dBusTypeSignature(item); 157 173 158 174 switch (model->itemType(item)) { … … 208 224 } 209 225 226 static QString getDbusSignature(const QMetaMethod& method) 227 { 228 // create a D-Bus type signature from QMetaMethod's parameters 229 QString sig; 230 for (int i = 0; i < method.parameterTypes().count(); ++i) { 231 QVariant::Type type = QVariant::nameToType(method.parameterTypes().at(i)); 232 sig.append(QString::fromLatin1(QDBusMetaType::typeToSignature(type))); 233 } 234 return sig; 235 } 236 210 237 void QDBusViewer::callMethod(const BusSignature &sig) 211 238 { … … 218 245 const QString signature = QString::fromLatin1(mo->method(i).signature()); 219 246 if (signature.startsWith(sig.mName) && signature.at(sig.mName.length()) == QLatin1Char('(')) 220 method = mo->method(i); 247 if (getDbusSignature(mo->method(i)) == sig.mTypeSig) 248 method = mo->method(i); 221 249 } 222 250 if (!method.signature()) { … … 278 306 sig.mInterface = model->dBusInterface(item); 279 307 sig.mName = model->dBusMethodName(item); 308 sig.mTypeSig = model->dBusTypeSignature(item); 280 309 281 310 QMenu menu; … … 380 409 } 381 410 382 void QDBusViewer::serviceChanged( QTreeWidgetItem *item)411 void QDBusViewer::serviceChanged(const QModelIndex &index) 383 412 { 384 413 delete tree->model(); 385 414 386 415 currentService.clear(); 387 if (!i tem)388 return; 389 currentService = i tem->text(0);416 if (!index.isValid()) 417 return; 418 currentService = index.data().toString(); 390 419 391 420 tree->setModel(new QDBusViewModel(currentService, c)); … … 398 427 return; 399 428 400 new QTreeWidgetItem(services, QStringList(service)); 401 } 402 403 static QTreeWidgetItem *findItem(const QTreeWidget *services, const QString &name) 404 { 405 for (int i = 0; i < services->topLevelItemCount(); ++i) { 406 if (services->topLevelItem(i)->text(0) == name) 407 return services->topLevelItem(i); 408 } 409 return 0; 429 servicesModel->insertRows(0, 1); 430 servicesModel->setData(servicesModel->index(0, 0), service); 431 } 432 433 static QModelIndex findItem(QStringListModel *servicesModel, const QString &name) 434 { 435 QModelIndexList hits = servicesModel->match(servicesModel->index(0, 0), Qt::DisplayRole, name); 436 if (hits.isEmpty()) 437 return QModelIndex(); 438 439 return hits.first(); 410 440 } 411 441 412 442 void QDBusViewer::serviceUnregistered(const QString &name) 413 443 { 414 delete findItem(services, name); 444 QModelIndex hit = findItem(servicesModel, name); 445 if (!hit.isValid()) 446 return; 447 servicesModel->removeRows(hit.row(), 1); 415 448 } 416 449 … … 418 451 const QString &newOwner) 419 452 { 420 Q TreeWidgetItem *item = findItem(services, name);421 422 if (! item&& oldOwner.isEmpty() && !newOwner.isEmpty())453 QModelIndex hit = findItem(servicesModel, name); 454 455 if (!hit.isValid() && oldOwner.isEmpty() && !newOwner.isEmpty()) 423 456 serviceRegistered(name); 424 else if ( item&& !oldOwner.isEmpty() && newOwner.isEmpty())425 delete item;426 else if ( item&& !oldOwner.isEmpty() && !newOwner.isEmpty()) {427 delete item;457 else if (hit.isValid() && !oldOwner.isEmpty() && newOwner.isEmpty()) 458 servicesModel->removeRows(hit.row(), 1); 459 else if (hit.isValid() && !oldOwner.isEmpty() && !newOwner.isEmpty()) { 460 servicesModel->removeRows(hit.row(), 1); 428 461 serviceRegistered(name); 429 462 } … … 445 478 "<h3>%1</h3>" 446 479 "<p>Version %2</p></center>" 447 "<p>Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).</p>")480 "<p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p>") 448 481 .arg(tr("D-Bus Viewer")).arg(QLatin1String(QT_VERSION_STR))); 449 482 box.setWindowTitle(tr("D-Bus Viewer"));
Note:
See TracChangeset
for help on using the changeset viewer.