00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef WSCOUT_GUI_PACKET_HH_
00024 # define WSCOUT_GUI_PACKET_HH_
00025
00026 # include <vector>
00027 # include <map>
00028
00029 # include <QtGui/QFrame>
00030 # include <QtGui/QBoxLayout>
00031
00032 # include <trace-tools/pcap/descriptor.hh>
00033
00034 # include "wscout_gui_pcap_header.hh"
00035 # include "wscout_gui_abstract_header.hh"
00036
00037 namespace wscout
00038 {
00039
00040 namespace gui
00041 {
00042
00052 class Packet: public QFrame
00053 {
00054 Q_OBJECT
00055
00056 enum
00057 {
00059 header_spacing = 1,
00060
00062 border_sel = 4,
00063
00065 packet_margin_sel = 0,
00066
00068 border_unsel = 1,
00069
00071 packet_margin_unsel = 3
00072
00073 };
00074
00075 public:
00077 typedef pcapxx::descriptor<>::iterator::value_type packet;
00078
00080 typedef pcapxx::descriptor<>::link_type link_type;
00081
00083 Packet(QWidget* parent = 0);
00084
00087 void setup(const Trace& t, const packet& p);
00088
00090 QBoxLayout* layout();
00091
00093 typedef AbstractHeader* (*header_allocator)();
00094
00108 static void registerProtocol(protocol::id, header_allocator);
00109
00111 typedef std::map<protocol::id, header_allocator> protocol_map;
00112
00119 static protocol_map& protocols();
00120
00121 public slots:
00122
00124 void setSelected(bool state = true);
00125
00126 private:
00127 int lineWidth() const;
00128 int margin() const;
00129 void setupBorders();
00130 void setupLayout();
00131 void updateMinimumSize();
00132
00133
00134 PcapHeader pcap_;
00135 std::vector<AbstractHeader*> headers_;
00136 bool selected_;
00137 };
00138
00139 }
00140
00141 }
00142
00143 #endif // ! WSCOUT_GUI_PACKET_HH_