Fix the wireless settings button for AirPCap devices in the
[obnox/wireshark/wip.git] / gtk / packet_list_store.h
1 /* packet_list_store.h
2  *
3  * $Id$
4  *
5  * Wireshark - Network traffic analyzer
6  * By Gerald Combs <gerald@wireshark.org>
7  * Copyright 1998 Gerald Combs
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
22  * USA.
23  */
24
25 /* Uncomment to track some statistics (const strings, etc.) */
26 /* #define NEW_PACKET_LIST_STATISTICS */
27
28 #ifndef __PACKET_LIST_STORE_H__
29 #define __PACKET_LIST_STORE_H__
30
31 #include <glib.h>
32
33 #include "epan/column_info.h"
34 #include "epan/frame_data.h"
35
36 /** @file
37  *  The packet list store
38  *  @ingroup main_window_group
39  */
40 extern GType packet_list_get_type(void);
41 #define PACKETLIST_TYPE_LIST (packet_list_get_type())
42 #define PACKET_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PACKETLIST_TYPE_LIST, PacketList))
43 #define PACKETLIST_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CART((klass), PACKETLIST_TYPE_LIST))
44 #define PACKETLIST_IS_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PACKETLIST_TYPE_LIST))
45 #define PACKETLIST_IS_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE(klass), PACKETLIST_TYPE_LIST)
46 #define PACKETLIST_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PACKETLIST_TYPE_LIST, PacketListClass))
47
48 typedef struct _PacketListRecord PacketListRecord;
49 typedef struct _PacketList PacketList;
50 typedef struct _PacketListClass PacketListClass;
51
52 #define PACKET_LIST_RECORD_GET(rows, pos) ((PacketListRecord*) g_ptr_array_index((rows), (pos)))
53 #define PACKET_LIST_RECORD_SET(rows, pos, item) g_ptr_array_index((rows), (pos)) = (item)
54 #define PACKET_LIST_RECORD_APPEND(rows, item) g_ptr_array_add((rows), (item))
55 #define PACKET_LIST_RECORD_COUNT(rows) ((rows) ? (rows)->len : 0)
56 #define PACKET_LIST_RECORD_INDEX_VALID(rows, idx) ((rows) ? (((guint) (idx)) < (rows)->len) : FALSE)
57
58 /** PacketListRecord: represents a row */
59 struct _PacketListRecord
60 {
61         /** The column text for some columns */
62         gchar **col_text;
63         /**< The length of the column text strings in 'col_text' */
64         guint *col_text_len;
65
66         frame_data *fdata;
67
68         /** Has this record been columnized? */
69         gboolean columnized;
70         /** Has this record been colorized? */
71         gboolean colorized;
72
73         /* admin stuff used by the custom list model */
74         /** position within the physical array */
75         guint physical_pos;
76         /** position within the visible array */
77         gint visible_pos;
78 };
79
80 /** PacketList: Everything for our model implementation. */
81 struct _PacketList
82 {
83         GObject parent; /** MUST be first */
84
85         /** Array of pointers to the PacketListRecord structure for each visible row. */
86         GPtrArray *visible_rows;
87         /** Array of pointers to the PacketListRecord structure for each row. */
88         GPtrArray *physical_rows;
89
90         /** Has the entire file been columnized? */
91         gboolean columnized;
92
93         gint n_columns;
94         /**< Note: We need one extra column to store the entire PacketListRecord */
95         GType column_types[NUM_COL_FMTS+1];
96         GtkWidget *view; /**< @todo XXX - Does this really belong here?? */
97
98         gint sort_id;
99         GtkSortType sort_order;
100
101         GStringChunk *string_pool;
102
103         /** Random integer to check whether an iter belongs to our model. */
104         gint stamp;
105
106 #ifdef NEW_PACKET_LIST_STATISTICS
107         /** Statistics */
108         guint const_strings;
109 #endif
110 };
111
112 /** PacketListClass: more boilerplate GObject stuff */
113 struct _PacketListClass
114 {
115         GObjectClass parent_class;
116 };
117
118 GType packet_list_list_get_type(void);
119 PacketList *new_packet_list_new(void);
120 void new_packet_list_store_clear(PacketList *packet_list);
121 guint packet_list_recreate_visible_rows(PacketList *packet_list);
122 gboolean packet_list_visible_record(PacketList *packet_list, GtkTreeIter *iter);
123 gint packet_list_append_record(PacketList *packet_list, frame_data *fdata);
124 void packet_list_change_record(PacketList *packet_list, guint row, gint col, column_info *cinfo);
125 void packet_list_dissect_and_cache_iter(PacketList *packet_list, GtkTreeIter *iter, gboolean dissect_columns, gboolean dissect_color);
126 gboolean packet_list_do_packet_list_dissect_and_cache_all(PacketList *packet_list, gint sort_col_id);
127 void packet_list_reset_colorized(PacketList *packet_list);
128 const char* packet_list_get_widest_column_string(PacketList *packet_list, gint col);
129
130 #endif /* __PACKET_LIST_STORE_H__ */