nsresult nsAboutCacheEntry::WriteCacheEntryDescription(nsICacheEntryDescriptor *descriptor) { nsresult rv; nsCString buffer; uint32_t n; nsAutoCString str; rv = descriptor->GetKey(str); if (NS_FAILED(rv)) return rv; buffer.SetCapacity(4096); buffer.AssignLiteral("<table>\n" " <tr>\n" " <th>key:</th>\n" " <td id=\"td-key\">"); // Test if the key is actually a URI nsCOMPtr<nsIURI> uri; bool isJS = false; bool isData = false; rv = NS_NewURI(getter_AddRefs(uri), str); // javascript: and data: URLs should not be linkified // since clicking them can cause scripts to run - bug 162584 if (NS_SUCCEEDED(rv)) { uri->SchemeIs("javascript", &isJS); uri->SchemeIs("data", &isData); } char* escapedStr = nsEscapeHTML(str.get()); if (NS_SUCCEEDED(rv) && !(isJS || isData)) { buffer.AppendLiteral("<a href=\""); buffer.Append(escapedStr); buffer.AppendLiteral("\">"); buffer.Append(escapedStr); buffer.AppendLiteral("</a>"); uri = 0; } else buffer.Append(escapedStr); nsMemory::Free(escapedStr); buffer.AppendLiteral("</td>\n" " </tr>\n"); // temp vars for reporting char timeBuf[255]; uint32_t u = 0; int32_t i = 0; nsAutoCString s; // Fetch Count s.Truncate(); descriptor->GetFetchCount(&i); s.AppendInt(i); APPEND_ROW("fetch count", s); // Last Fetched descriptor->GetLastFetched(&u); if (u) { PrintTimeString(timeBuf, sizeof(timeBuf), u); APPEND_ROW("last fetched", timeBuf); } else { APPEND_ROW("last fetched", "No last fetch time"); } // Last Modified descriptor->GetLastModified(&u); if (u) { PrintTimeString(timeBuf, sizeof(timeBuf), u); APPEND_ROW("last modified", timeBuf); } else { APPEND_ROW("last modified", "No last modified time"); } // Expiration Time descriptor->GetExpirationTime(&u); if (u < 0xFFFFFFFF) { PrintTimeString(timeBuf, sizeof(timeBuf), u); APPEND_ROW("expires", timeBuf); } else { APPEND_ROW("expires", "No expiration time"); } // Data Size s.Truncate(); uint32_t dataSize; descriptor->GetStorageDataSize(&dataSize); s.AppendInt((int32_t)dataSize); // XXX nsICacheEntryInfo interfaces should be fixed. APPEND_ROW("Data size", s); // Storage Policy // XXX Stream Based? // XXX Cache Device // File on disk nsCOMPtr<nsIFile> cacheFile; rv = descriptor->GetFile(getter_AddRefs(cacheFile)); if (NS_SUCCEEDED(rv)) { nsAutoString filePath; cacheFile->GetPath(filePath); APPEND_ROW("file on disk", NS_ConvertUTF16toUTF8(filePath)); } else APPEND_ROW("file on disk", "none"); // Security Info nsCOMPtr<nsISupports> securityInfo; descriptor->GetSecurityInfo(getter_AddRefs(securityInfo)); if (securityInfo) { APPEND_ROW("Security", "This is a secure document."); } else { APPEND_ROW("Security", "This document does not have any security info associated with it."); } buffer.AppendLiteral("</table>\n" "<hr/>\n" "<table>\n"); // Meta Data // let's just look for some well known (HTTP) meta data tags, for now. // Client ID nsXPIDLCString str2; descriptor->GetClientID(getter_Copies(str2)); if (!str2.IsEmpty()) APPEND_ROW("Client", str2); mBuffer = &buffer; // make it available for VisitMetaDataElement(). // nsCacheEntryDescriptor::VisitMetaData calls // nsCacheEntry.h VisitMetaDataElements, which returns // nsCacheMetaData::VisitElements, which calls // nsAboutCacheEntry::VisitMetaDataElement (below) in a loop. descriptor->VisitMetaData(this); mBuffer = nullptr; buffer.AppendLiteral("</table>\n"); mOutputStream->Write(buffer.get(), buffer.Length(), &n); buffer.Truncate(); // Provide a hexdump of the data if (dataSize) { // don't draw an <hr> if the Data Size is 0. nsCOMPtr<nsIInputStream> stream; descriptor->OpenInputStream(0, getter_AddRefs(stream)); if (stream) { buffer.AssignLiteral("<hr/>\n" "<pre>"); uint32_t hexDumpState = 0; char chunk[4096]; while(NS_SUCCEEDED(stream->Read(chunk, sizeof(chunk), &n)) && n > 0) { HexDump(&hexDumpState, chunk, n, buffer); mOutputStream->Write(buffer.get(), buffer.Length(), &n); buffer.Truncate(); } buffer.AssignLiteral("</pre>\n"); mOutputStream->Write(buffer.get(), buffer.Length(), &n); } } return NS_OK; }
void GstPropertiesModule::show_pad_properties() { auto pad = std::dynamic_pointer_cast<PadModel>(controller->get_selected_object()); if (!pad) { return; } PadPropertyModelColumns cols; auto model = Gtk::TreeStore::create(cols); Gtk::TreeView *tree = Gtk::manage(new Gtk::TreeView()); tree->append_column(_("Property Name"), cols.m_col_name); tree->append_column(_("Property Value"), cols.m_col_value); tree->set_model(model); #define APPEND_ROW(name, value) \ do { \ row = *(model->append()); \ row[cols.m_col_name] = name; \ row[cols.m_col_value] = value; \ } while (false); std::string peer_pad = pad->get_peer() ? ElementPathProcessor::get_object_path(pad->get_peer()) : std::string("NO PEER PAD"); Gtk::TreeModel::Row row; APPEND_ROW(_("Name"), pad->get_name()); if (pad->get_template()) { display_template_info(pad->get_template(), model, cols.m_col_name, cols.m_col_value); } APPEND_ROW(_("Presence"), get_presence_str(pad->get_presence())); APPEND_ROW(_("Direction"), get_direction_str(pad->get_direction())); APPEND_ROW(_("Peer pad"), peer_pad); if (pad->get_current_caps()) { APPEND_ROW(_("Current caps"), ""); display_caps(pad->get_current_caps(), model, cols.m_col_name, cols.m_col_value, row); } else { APPEND_ROW(_("Current caps"), _("unknown")); } if (pad->get_allowed_caps()) { APPEND_ROW(_("Allowed caps"), ""); display_caps(pad->get_allowed_caps(), model, cols.m_col_name, cols.m_col_value, row); } else { APPEND_ROW(_("Allowed caps"), _("unknown")); } #undef APPEND_ROW tree->show(); properties_box->pack_start(*tree, true, true, 0); }
// refresh using projectPath void ProjectView::refresh() { m_model->clear(); QStringList header; header << tr("Content of %1").arg(m_projName) << tr("Note"); m_model->setHorizontalHeaderLabels(header); APPEND_ROW(m_model, tr("Datasets") ); APPEND_ROW(m_model, tr("Data Displays")); APPEND_ROW(m_model, tr("Verilog") ); APPEND_ROW(m_model, tr("Verilog-A") ); APPEND_ROW(m_model, tr("VHDL") ); APPEND_ROW(m_model, tr("Octave") ); APPEND_ROW(m_model, tr("Schematics") ); APPEND_ROW(m_model, tr("Others") ); setExpanded(m_model->index(6, 0), true); if (!m_valid) { return; } // put all files into "Content"-ListView QDir workPath(m_projPath); QStringList files = workPath.entryList("*", QDir::Files, QDir::Name); QStringList::iterator it; QString extName, fileName; QList<QStandardItem *> columnData; #define APPEND_CHILD(category, data) \ m_model->item(category, 0)->appendRow(data); for(it = files.begin(); it != files.end(); ++it) { fileName = (*it).toAscii(); extName = QFileInfo(workPath.filePath(fileName)).suffix(); columnData.clear(); columnData.append(new QStandardItem(fileName)); if(extName == "dat") { APPEND_CHILD(0, columnData); } else if(extName == "dpl") { APPEND_CHILD(1, columnData); } else if(extName == "v") { APPEND_CHILD(2, columnData); } else if(extName == "va") { APPEND_CHILD(3, columnData); } else if((extName == "vhdl") || (extName == "vhd")) { APPEND_CHILD(4, columnData); } else if((extName == "m") || (extName == "oct")) { APPEND_CHILD(5, columnData); } else if(extName == "sch") { int n = Schematic::testFile(workPath.filePath(fileName)); if(n >= 0) { if(n > 0) { columnData.append(new QStandardItem(QString::number(n)+tr("-port"))); } } APPEND_CHILD(6, columnData); } else { APPEND_CHILD(7, columnData); } } resizeColumnToContents(0); }