Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/tools/qdbus/qdbusviewer/qdbusviewer.cpp

    r651 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    7070    objectPathRegExp(QLatin1String("\\[ObjectPath: (.*)\\]"))
    7171{
    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)));
    7582
    7683    tree = new QTreeView;
     
    8794    connect(refreshShortcut, SIGNAL(activated()), this, SLOT(refreshChildren()));
    8895
    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
    90100    log = new QTextBrowser;
    91101    connect(log, SIGNAL(anchorClicked(QUrl)), this, SLOT(anchorClicked(QUrl)));
    92102
    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)));
    102118    connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
    103119            this, SLOT(showContextMenu(QPoint)));
     
    134150void QDBusViewer::refresh()
    135151{
    136     services->clear();
     152    servicesModel->removeRows(0, servicesModel->rowCount());
    137153
    138154    if (c.isConnected()) {
    139155        const QStringList serviceNames = c.interface()->registeredServiceNames();
    140         foreach (QString service, serviceNames)
    141             new QTreeWidgetItem(services, QStringList(service));
     156        servicesModel->setStringList(serviceNames);
    142157    }
    143158}
     
    155170    sig.mInterface = model->dBusInterface(item);
    156171    sig.mName = model->dBusMethodName(item);
     172    sig.mTypeSig = model->dBusTypeSignature(item);
    157173
    158174    switch (model->itemType(item)) {
     
    208224}
    209225
     226static 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
    210237void QDBusViewer::callMethod(const BusSignature &sig)
    211238{
     
    218245        const QString signature = QString::fromLatin1(mo->method(i).signature());
    219246        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);
    221249    }
    222250    if (!method.signature()) {
     
    278306    sig.mInterface = model->dBusInterface(item);
    279307    sig.mName = model->dBusMethodName(item);
     308    sig.mTypeSig = model->dBusTypeSignature(item);
    280309
    281310    QMenu menu;
     
    380409}
    381410
    382 void QDBusViewer::serviceChanged(QTreeWidgetItem *item)
     411void QDBusViewer::serviceChanged(const QModelIndex &index)
    383412{
    384413    delete tree->model();
    385414
    386415    currentService.clear();
    387     if (!item)
    388         return;
    389     currentService = item->text(0);
     416    if (!index.isValid())
     417        return;
     418    currentService = index.data().toString();
    390419
    391420    tree->setModel(new QDBusViewModel(currentService, c));
     
    398427        return;
    399428
    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
     433static 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();
    410440}
    411441
    412442void QDBusViewer::serviceUnregistered(const QString &name)
    413443{
    414     delete findItem(services, name);
     444    QModelIndex hit = findItem(servicesModel, name);
     445    if (!hit.isValid())
     446        return;
     447    servicesModel->removeRows(hit.row(), 1);
    415448}
    416449
     
    418451                                      const QString &newOwner)
    419452{
    420     QTreeWidgetItem *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())
    423456        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);
    428461        serviceRegistered(name);
    429462    }
     
    445478                "<h3>%1</h3>"
    446479                "<p>Version %2</p></center>"
    447                 "<p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p>")
     480                "<p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p>")
    448481            .arg(tr("D-Bus Viewer")).arg(QLatin1String(QT_VERSION_STR)));
    449482    box.setWindowTitle(tr("D-Bus Viewer"));
Note: See TracChangeset for help on using the changeset viewer.