void PerformanceRecordTreeWidget::updateTree() { // clear top level items topItems_.clear(); if(clearTreeOnUpdate_){ items_.clear(); clear(); } // create/update tree item QString numStr; QTreeWidgetItem* recordItem; std::map<std::string, QTreeWidgetItem*>::iterator sampleMapIterator; PerformanceSample* theSample; std::string nameStr = ""; std::string subStr = ""; float num = 0.f; for (size_t i = 0; i < performanceSamples_.size(); ++i) { nameStr = performanceSamples_[i].getName(); if(showType_ == PerformanceRecordTreeWidget::TimeTypeTotalProcess){ theSample = &performanceSamples_[i]; num = theSample->getChildrenTime(); } else{ if(showType_ == PerformanceRecordTreeWidget::TimeTypeBeforeProcess) subStr = "beforeprocess"; else if(showType_ == PerformanceRecordTreeWidget::TimeTypeProcess) subStr = "process"; else subStr = "afterprocess"; theSample = performanceSamples_[i].getChild(subStr); num = theSample->getTime(); nameStr += "." + subStr; } numStr.sprintf("%4.4f", num*1000.f); sampleMapIterator = items_.lower_bound(nameStr); if(sampleMapIterator != items_.end() && !(items_.key_comp()(nameStr, sampleMapIterator->first))){ //exists recordItem = sampleMapIterator->second; recordItem->setText(1, numStr); createSampleHierarchy(theSample, recordItem); } else{ //doesn't exist recordItem = new QTreeWidgetItem(QStringList() << QString::fromStdString(nameStr) << numStr); items_.insert(std::pair<std::string, QTreeWidgetItem*>(nameStr, recordItem)); createSampleHierarchy(theSample, recordItem); } topItems_.append(recordItem); } addTopLevelItems(topItems_); }
void CallView::refresh() { clear(); setColumnWidth(1, _eventType2 ? 50:0); if (_eventType) _headerLabels[0] = _eventType->name(); if (_eventType2) _headerLabels[1] = _eventType2->name(); setHeaderLabels(_headerLabels); if (!_data || !_activeItem) return; TraceFunction* f = activeFunction(); if (!f) return; TraceCall* call; // In the call lists, we skip cycles to show the real call relations TraceCallList l = _showCallers ? f->callers(true) : f->callings(true); QList<QTreeWidgetItem*> items; for (call=l.first();call;call=l.next()) if (call->subCost(_eventType)>0) items.append(new CallItem(this, 0, call)); // when inserting, switch off sorting for performance reason setSortingEnabled(false); addTopLevelItems(items); setSortingEnabled(true); // enabling sorting switches on the indicator, but we want it off header()->setSortIndicatorShown(false); // resize to content now (section size still can be interactively changed) header()->resizeSections(QHeaderView::ResizeToContents); if (!_eventType2) setColumnWidth(1, 0); }
void InterfaceTree::display() { #ifdef HAVE_LIBPCAP interface_t device; #if HAVE_EXTCAP QIcon extcap_icon(StockIcon("x-capture-options")); #endif setDisabled(false); clear(); if (global_capture_opts.all_ifaces->len == 0) { // Error,or just no interfaces? QTreeWidgetItem *ti = new QTreeWidgetItem(); QLabel *err_label; if (global_capture_opts.ifaces_err == 0) { err_label = new QLabel("No interfaces found"); } else { err_label = new QLabel(global_capture_opts.ifaces_err_info); } err_label->setWordWrap(true); setColumnCount(1); addTopLevelItem(ti); setItemWidget(ti, 0, err_label); resizeColumnToContents(0); return; } /* when no interfaces were available initially and an update of the interface list called this function, the column count is set to 1 reset it to ensure that the interface list is properly displayed */ resetColumnCount(); // List physical interfaces first. Alternatively we could sort them by // traffic, interface name, or most recently used. QList<QTreeWidgetItem *> phys_ifaces; QList<QTreeWidgetItem *> virt_ifaces; for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) { device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); /* Continue if capture device is hidden */ if (device.hidden) { continue; } InterfaceTreeWidgetItem *ti = new InterfaceTreeWidgetItem(); ti->setText(IFTREE_COL_NAME, QString().fromUtf8(device.display_name)); ti->setData(IFTREE_COL_NAME, Qt::UserRole, QString(device.name)); ti->setData(IFTREE_COL_STATS, Qt::UserRole, qVariantFromValue(&ti->points)); #if HAVE_EXTCAP if (device.if_info.type == IF_EXTCAP) { if (extcap_has_configuration((const char *)(device.name), FALSE)) { ti->setIcon(IFTREE_COL_EXTCAP, extcap_icon); ti->setData(IFTREE_COL_EXTCAP, Qt::UserRole, QString(device.if_info.extcap)); if (!(device.external_cap_args_settings != 0 && g_hash_table_size(device.external_cap_args_settings) > 0)) { QFont ti_font = ti->font(IFTREE_COL_NAME); ti_font.setItalic(true); ti->setFont(IFTREE_COL_NAME, ti_font); } } virt_ifaces << ti; } else #endif { phys_ifaces << ti; } // XXX Need to handle interfaces passed from the command line. if (strstr(prefs.capture_device, device.name) != NULL) { device.selected = TRUE; global_capture_opts.num_selected++; global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); g_array_insert_val(global_capture_opts.all_ifaces, i, device); } } if (!phys_ifaces.isEmpty()) addTopLevelItems(phys_ifaces); if (!virt_ifaces.isEmpty()) addTopLevelItems(virt_ifaces); setSelectedInterfaces(); // XXX Add other device information resizeColumnToContents(IFTREE_COL_NAME); resizeColumnToContents(IFTREE_COL_STATS); #if HAVE_EXTCAP resizeColumnToContents(IFTREE_COL_EXTCAP); #endif #else QTreeWidgetItem *ti = new QTreeWidgetItem(); clear(); setColumnCount(1); ti->setText(0, tr("Interface information not available")); addTopLevelItem(ti); resizeColumnToContents(0); #endif // HAVE_LIBPCAP }