forked from osmocom/wireshark
Show the byte view when we select a packet. Update some method and
variable names. svn path=/trunk/; revision=45953
This commit is contained in:
parent
5d6e03f71b
commit
32074376ac
|
@ -33,6 +33,7 @@ ByteViewTab::ByteViewTab(QWidget *parent) :
|
|||
addTab();
|
||||
}
|
||||
|
||||
#include <QDebug>
|
||||
void ByteViewTab::addTab(const char *name, tvbuff_t *tvb, proto_tree *tree, QTreeWidget *protoTree, packet_char_enc encoding) {
|
||||
ByteViewText *byte_view_text = new ByteViewText(this, tvb, tree, protoTree, encoding);
|
||||
|
||||
|
@ -40,6 +41,13 @@ void ByteViewTab::addTab(const char *name, tvbuff_t *tvb, proto_tree *tree, QTre
|
|||
QTabWidget::addTab(byte_view_text, name);
|
||||
}
|
||||
|
||||
void ByteViewTab::clear()
|
||||
{
|
||||
while (currentWidget()) {
|
||||
delete currentWidget();
|
||||
}
|
||||
}
|
||||
|
||||
void ByteViewTab::tabInserted(int index) {
|
||||
setTabsVisible();
|
||||
QTabWidget::tabInserted(index);
|
||||
|
@ -75,7 +83,6 @@ void ByteViewTab::protoTreeItemChanged(QTreeWidgetItem *current) {
|
|||
int p_start = -1, p_end = -1, p_len = -1;
|
||||
guint len = tvb_length(fi->ds_tvb);
|
||||
|
||||
// byte_view_text->setEncoding(cap_file_->current_frame->flags.encoding);
|
||||
// Find and highlight the protocol bytes
|
||||
while (parent && parent->parent()) {
|
||||
parent = parent->parent();
|
||||
|
@ -157,7 +164,7 @@ void ByteViewTab::protoTreeItemChanged(QTreeWidgetItem *current) {
|
|||
// Appendix (trailer) bytes
|
||||
byte_view_text->setFieldAppendixHighlight(fa_start, fa_end);
|
||||
|
||||
byte_view_text->render();
|
||||
byte_view_text->renderBytes();
|
||||
|
||||
setCurrentIndex(i);
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ class ByteViewTab : public QTabWidget
|
|||
public:
|
||||
explicit ByteViewTab(QWidget *parent = 0);
|
||||
void addTab(const char *name = "", tvbuff_t *tvb = NULL, proto_tree *tree = NULL, QTreeWidget *protoTree = NULL, packet_char_enc encoding = PACKET_CHAR_ENC_CHAR_ASCII);
|
||||
void clear();
|
||||
|
||||
private:
|
||||
void setTabsVisible();
|
||||
|
|
|
@ -41,12 +41,20 @@ ByteViewText::ByteViewText(QWidget *parent, tvbuff_t *tvb, proto_tree *tree, QTr
|
|||
bold_highlight_(false),
|
||||
encoding_(encoding),
|
||||
format_(BYTES_HEX),
|
||||
p_start_(-1),
|
||||
p_end_(-1),
|
||||
f_start_(-1),
|
||||
f_end_(-1),
|
||||
fa_start_(-1),
|
||||
fa_end_(-1),
|
||||
per_line_(16),
|
||||
offset_width_(4)
|
||||
{
|
||||
setReadOnly(true);
|
||||
setLineWrapMode(QTextEdit::NoWrap);
|
||||
setState(StateNormal);
|
||||
|
||||
renderBytes();
|
||||
}
|
||||
|
||||
void ByteViewText::setEncoding(packet_char_enc encoding)
|
||||
|
@ -80,15 +88,18 @@ void ByteViewText::setFieldAppendixHighlight(int start, int end)
|
|||
fa_end_ = end;
|
||||
}
|
||||
|
||||
void ByteViewText::render()
|
||||
void ByteViewText::renderBytes()
|
||||
{
|
||||
int length;
|
||||
int start_byte = 0;
|
||||
|
||||
if (!tvb_) {
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
|
||||
setUpdatesEnabled(false);
|
||||
|
||||
textCursor().beginEditBlock();
|
||||
clear();
|
||||
|
||||
|
@ -96,14 +107,16 @@ void ByteViewText::render()
|
|||
for (int off = 0; off < length; off += per_line_) {
|
||||
lineCommon(off);
|
||||
}
|
||||
|
||||
if (f_start_ != -1 && f_end_ != -1) {
|
||||
scrollToByte(f_start_);
|
||||
} else if (p_start_ != -1 && p_end_ != -1) {
|
||||
scrollToByte(p_start_);
|
||||
}
|
||||
|
||||
textCursor().endEditBlock();
|
||||
|
||||
if (f_start_ > 0 && f_end_ > 0) {
|
||||
start_byte = f_start_;
|
||||
} else if (p_start_ > 0 && p_end_ > 0) {
|
||||
start_byte = p_start_;
|
||||
}
|
||||
scrollToByte(start_byte);
|
||||
|
||||
setUpdatesEnabled(true);
|
||||
}
|
||||
|
||||
// Private
|
||||
|
@ -303,9 +316,9 @@ void ByteViewText::scrollToByte(int byte)
|
|||
{
|
||||
QTextCursor cursor(textCursor());
|
||||
|
||||
cursor.movePosition(QTextCursor::Start);
|
||||
cursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, byte / per_line_);
|
||||
cursor.setPosition(byte * (per_line_ + 1)); // Newline
|
||||
setTextCursor(cursor);
|
||||
ensureCursorVisible();
|
||||
}
|
||||
|
||||
int ByteViewText::byteFromRowCol(int row, int col)
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
void setProtocolHighlight(int start, int end);
|
||||
void setFieldHighlight(int start, int end, guint32 mask = 0, int mask_le = 0);
|
||||
void setFieldAppendixHighlight(int start, int end);
|
||||
void render();
|
||||
void renderBytes();
|
||||
|
||||
private:
|
||||
typedef enum {
|
||||
|
|
|
@ -287,15 +287,13 @@ void PacketList::selectionChanged (const QItemSelection & selected, const QItemS
|
|||
GSList *src_le;
|
||||
struct data_source *source;
|
||||
|
||||
// Clear out existing tabs
|
||||
while (byte_view_tab_->currentWidget()) {
|
||||
delete byte_view_tab_->currentWidget();
|
||||
}
|
||||
byte_view_tab_->clear();
|
||||
|
||||
for (src_le = cap_file_->edt->pi.data_src; src_le != NULL; src_le = src_le->next) {
|
||||
source = (struct data_source *)src_le->data;
|
||||
byte_view_tab_->addTab(get_data_source_name(source), get_data_source_tvb(source), cap_file_->edt->tree, proto_tree_, cap_file_->current_frame->flags.encoding);
|
||||
}
|
||||
byte_view_tab_->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
if (proto_tree_ && byte_view_tab_) {
|
||||
|
@ -318,11 +316,7 @@ void PacketList::clear() {
|
|||
// packet_history_clear();
|
||||
packet_list_model_->clear();
|
||||
proto_tree_->clear();
|
||||
|
||||
// Clear out existing tabs
|
||||
while (byte_view_tab_->currentWidget()) {
|
||||
delete byte_view_tab_->currentWidget();
|
||||
}
|
||||
byte_view_tab_->clear();
|
||||
|
||||
/* XXX is this correct in all cases?
|
||||
* Reset the sort column, use packetlist as model in case the list is frozen.
|
||||
|
|
|
@ -178,31 +178,31 @@ void ProtoTree::updateSelectionStatus(QTreeWidgetItem* item) {
|
|||
|
||||
if (item) {
|
||||
field_info *fi;
|
||||
QString itemInfo;
|
||||
QString item_info;
|
||||
|
||||
fi = item->data(0, Qt::UserRole).value<field_info *>();
|
||||
if (!fi || !fi->hfinfo) return;
|
||||
|
||||
if (fi->hfinfo->blurb != NULL && fi->hfinfo->blurb[0] != '\0') {
|
||||
itemInfo.append(QString().fromUtf8(fi->hfinfo->blurb));
|
||||
item_info.append(QString().fromUtf8(fi->hfinfo->blurb));
|
||||
} else {
|
||||
itemInfo.append(QString().fromUtf8(fi->hfinfo->name));
|
||||
item_info.append(QString().fromUtf8(fi->hfinfo->name));
|
||||
}
|
||||
|
||||
if (!itemInfo.isEmpty()) {
|
||||
if (!item_info.isEmpty()) {
|
||||
int finfo_length;
|
||||
itemInfo.append(" (" + QString().fromUtf8(fi->hfinfo->abbrev) + ")");
|
||||
item_info.append(" (" + QString().fromUtf8(fi->hfinfo->abbrev) + ")");
|
||||
|
||||
finfo_length = fi->length + fi->appendix_length;
|
||||
if (finfo_length == 1) {
|
||||
itemInfo.append(tr(", 1 byte"));
|
||||
item_info.append(tr(", 1 byte"));
|
||||
} else if (finfo_length > 1) {
|
||||
itemInfo.append(QString(tr(", %1 bytes")).arg(finfo_length));
|
||||
item_info.append(QString(tr(", %1 bytes")).arg(finfo_length));
|
||||
}
|
||||
|
||||
emit protoItemSelected(*new QString());
|
||||
emit protoItemSelected(NULL);
|
||||
emit protoItemSelected(itemInfo);
|
||||
emit protoItemSelected(item_info);
|
||||
emit protoItemSelected(fi);
|
||||
} // else the GTK+ version pushes an empty string as described below.
|
||||
/*
|
||||
|
@ -277,25 +277,25 @@ void ProtoTree::collapse(const QModelIndex & index) {
|
|||
|
||||
void ProtoTree::expandSubtrees()
|
||||
{
|
||||
QTreeWidgetItem *topSel;
|
||||
QTreeWidgetItem *top_sel;
|
||||
|
||||
if (selectedItems().length() < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
topSel = selectedItems()[0];
|
||||
top_sel = selectedItems()[0];
|
||||
|
||||
if (!topSel) {
|
||||
if (!top_sel) {
|
||||
return;
|
||||
}
|
||||
|
||||
while (topSel->parent()) {
|
||||
topSel = topSel->parent();
|
||||
while (top_sel->parent()) {
|
||||
top_sel = top_sel->parent();
|
||||
}
|
||||
|
||||
QTreeWidgetItemIterator iter(topSel);
|
||||
QTreeWidgetItemIterator iter(top_sel);
|
||||
while (*iter) {
|
||||
if ((*iter) != topSel && (*iter)->parent() == NULL) {
|
||||
if ((*iter) != top_sel && (*iter)->parent() == NULL) {
|
||||
// We found the next top-level item
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue