1 /*
2  * Copyright (c) 2008-2009  Christian Hammond
3  * Copyright (c) 2008-2009  David Trowbridge
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included
13  * in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21  * THE SOFTWARE.
22  */
23 #ifndef _GTK_INSPECTOR_WINDOW_H_
24 #define _GTK_INSPECTOR_WINDOW_H_
25 
26 
27 #include <gtk/gtkwindow.h>
28 
29 #include "inspectoroverlay.h"
30 
31 #define GTK_TYPE_INSPECTOR_WINDOW            (gtk_inspector_window_get_type())
32 #define GTK_INSPECTOR_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_WINDOW, GtkInspectorWindow))
33 #define GTK_INSPECTOR_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_WINDOW, GtkInspectorWindowClass))
34 #define GTK_INSPECTOR_IS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_WINDOW))
35 #define GTK_INSPECTOR_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_WINDOW))
36 #define GTK_INSPECTOR_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_WINDOW, GtkInspectorWindowClass))
37 
38 
39 #define TREE_TEXT_SCALE 0.8
40 #define TREE_CHECKBOX_SIZE (int)(0.8 * 13)
41 
42 typedef struct
43 {
44   GtkWindow parent;
45 
46   GtkWidget *top_stack;
47   GtkWidget *object_stack;
48   GtkWidget *button_stack;
49   GtkWidget *object_tree;
50   GtkWidget *object_id;
51   GtkWidget *object_details;
52   GtkWidget *object_buttons;
53   GtkWidget *object_details_button;
54   GtkWidget *select_object;
55   GtkWidget *object_start_stack;
56   GtkWidget *object_center_stack;
57   GtkWidget *object_title;
58   GtkWidget *prop_list;
59   GtkWidget *layout_prop_list;
60   GtkWidget *selector;
61   GtkWidget *signals_list;
62   GtkWidget *classes_list;
63   GtkWidget *widget_css_node_tree;
64   GtkWidget *widget_recorder;
65   GtkWidget *object_hierarchy;
66   GtkWidget *size_groups;
67   GtkWidget *tree_data;
68   GtkWidget *list_data;
69   GtkWidget *actions;
70   GtkWidget *shortcuts;
71   GtkWidget *menu;
72   GtkWidget *misc_info;
73   GtkWidget *controllers;
74   GtkWidget *magnifier;
75   GtkWidget *a11y;
76   GtkWidget *sidebar_revealer;
77   GtkWidget *css_editor;
78   GtkWidget *visual;
79   GtkWidget *general;
80   GtkWidget *logs;
81 
82   GtkWidget *go_up_button;
83   GtkWidget *go_down_button;
84   GtkWidget *go_previous_button;
85   GtkWidget *list_position_label;
86   GtkWidget *go_next_button;
87 
88   GList *extra_pages;
89 
90   GdkSeat *grab_seat;
91 
92   GtkInspectorOverlay *flash_overlay;
93   int flash_count;
94   int flash_cnx;
95 
96   GArray *objects;
97 
98   GList *overlays;
99 
100   GdkDisplay *inspected_display;
101 
102 } GtkInspectorWindow;
103 
104 typedef struct
105 {
106   GtkWindowClass parent;
107 } GtkInspectorWindowClass;
108 
109 
110 G_BEGIN_DECLS
111 
112 GType      gtk_inspector_window_get_type    (void);
113 GtkWidget *gtk_inspector_window_get         (GdkDisplay *display);
114 
115 void       gtk_inspector_flash_widget       (GtkInspectorWindow *iw,
116                                              GtkWidget          *widget);
117 
118 void       gtk_inspector_on_inspect         (GtkWidget          *widget,
119                                              GtkInspectorWindow *iw);
120 
121 void                    gtk_inspector_window_add_overlay                        (GtkInspectorWindow     *iw,
122                                                                                  GtkInspectorOverlay    *overlay);
123 void                    gtk_inspector_window_remove_overlay                     (GtkInspectorWindow     *iw,
124                                                                                  GtkInspectorOverlay    *overlay);
125 
126 void                    gtk_inspector_window_select_widget_under_pointer        (GtkInspectorWindow     *iw);
127 GdkDisplay *            gtk_inspector_window_get_inspected_display              (GtkInspectorWindow     *iw);
128 
129 typedef enum
130 {
131   CHILD_KIND_WIDGET,
132   CHILD_KIND_CONTROLLER,
133   CHILD_KIND_PROPERTY,
134   CHILD_KIND_LISTITEM,
135   CHILD_KIND_OTHER
136 } ChildKind;
137 
138 void                    gtk_inspector_window_push_object     (GtkInspectorWindow *iw,
139                                                               GObject            *object,
140                                                               ChildKind           kind,
141                                                               guint               position);
142 void                    gtk_inspector_window_pop_object      (GtkInspectorWindow *iw);
143 void                    gtk_inspector_window_set_object      (GtkInspectorWindow *iw,
144                                                               GObject            *object,
145                                                               ChildKind           kind,
146                                                               guint               position);
147 void                    gtk_inspector_window_replace_object  (GtkInspectorWindow *iw,
148                                                               GObject            *object,
149                                                               ChildKind           kind,
150                                                               guint               position);
151 
152 gboolean                gtk_inspector_is_recording                              (GtkWidget              *widget);
153 GskRenderNode *         gtk_inspector_prepare_render                            (GtkWidget              *widget,
154                                                                                  GskRenderer            *renderer,
155                                                                                  GdkSurface             *surface,
156                                                                                  const cairo_region_t   *region,
157                                                                                  GskRenderNode          *root,
158                                                                                  GskRenderNode          *widget_node);
159 gboolean                gtk_inspector_handle_event                              (GdkEvent               *event);
160 
161 G_END_DECLS
162 
163 
164 #endif // _GTK_INSPECTOR_WINDOW_H_
165 
166 // vim: set et sw=2 ts=2:
167