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 <wipal/pcap/stream.hh>
00033
00034 # include "wscout_gui_trace.hh"
00035 # include "wscout_protocol_ids.hh"
00036
00037 namespace wscout
00038 {
00039
00040 namespace gui
00041 {
00042
00043
00044 struct AbstractHeader;
00045
00055 class Packet: public QFrame
00056 {
00057 Q_OBJECT
00058
00059 enum
00060 {
00062 header_spacing = 0,
00063
00065 border_sel = 4,
00066
00068 packet_margin_sel = 0,
00069
00071 border_unsel = 1,
00072
00074 packet_margin_unsel = 3
00075
00076 };
00077
00078 public:
00080 typedef wpl::pcap::indexed_file<>::packet packet;
00081
00083 typedef wpl::pkt::type link_type;
00084
00086 Packet(QWidget* parent = 0);
00087
00090 void setup(const Trace& t, const packet& p);
00091
00093 QBoxLayout* layout();
00094
00096 typedef AbstractHeader* (*header_allocator)();
00097
00111 static void registerProtocol(protocol::id, header_allocator);
00112
00114 typedef std::map<protocol::id, header_allocator> protocol_map;
00115
00122 static protocol_map& protocols();
00123
00124 public slots:
00125
00127 void setSelected(bool state = true);
00128
00129 private:
00130 int lineWidth() const;
00131 int margin() const;
00132 void setupBorders();
00133 void setupLayout();
00134 void updateMinimumSize();
00135
00136 std::vector<AbstractHeader*> headers_;
00137 bool selected_;
00138 };
00139
00140 }
00141
00142 }
00143
00144 # include "wscout_gui_packet.hxx"
00145
00146 #endif // ! WSCOUT_GUI_PACKET_HH_