1 /* $Id: gtkdatabox_ruler.h 4 2008-06-22 09:19:11Z rbock $ */
2 /* GTK - The GIMP Toolkit
3  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301 USA.
19  */
20 
21 /*
22  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
23  * file for a list of people on the GTK+ Team.  See the ChangeLog
24  * files for a list of changes.  These files are distributed with
25  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
26  */
27 
28 /*
29  * Modified by Roland Bock 2007 - 2008.
30  */
31 
32 /**
33  * SECTION:gtkdatabox_ruler
34  * @short_description: An improved version of the #GtkRuler.
35  * @include: gtkdatabox_ruler.h
36  * @see_also: #GtkDatabox
37  *
38  * #GtkDataboxRuler is a widget for the GTK+ library similar to GtkRuler.
39  *
40  * It is improved in several ways:
41  *
42  * <itemizedlist>
43  *    <listitem>
44  *       <para>
45  *          It supports linear and logarithmic scales.
46  *       </para>
47  *    </listitem>
48  *    <listitem>
49  *       <para>
50  *           In the vertical orientation, the labels are rotated 90° (instead of being written
51  *           as a vertical column of horizontal characters). This increases readability.
52  *       </para>
53  *    </listitem>
54  *    <listitem>
55  *       <para>
56  *           It works for very small and very large value ranges.
57  *       </para>
58  *    </listitem>
59  * </itemizedlist>
60  **/
61 #ifndef __GTK_DATABOX_RULER_H__
62 #define __GTK_DATABOX_RULER_H__
63 
64 #ifdef _MSC_VER
65 #define log2(x) (log(x)/log(2))
66 #endif
67 
68 #include <gdk/gdk.h>
69 #include <gtk/gtk.h>
70 #include <gtkdatabox_scale.h>
71 
72 G_BEGIN_DECLS
73 #define GTK_DATABOX_TYPE_RULER            (gtk_databox_ruler_get_type ())
74 #define GTK_DATABOX_RULER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_DATABOX_TYPE_RULER, GtkDataboxRuler))
75 #define GTK_DATABOX_RULER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_DATABOX_TYPE_RULER, GtkDataboxRulerClass))
76 #define GTK_DATABOX_IS_RULER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_DATABOX_TYPE_RULER))
77 #define GTK_DATABOX_IS_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_DATABOX_TYPE_RULER))
78 #define GTK_DATABOX_RULER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_DATABOX_TYPE_RULER, GtkDataboxRulerClass))
79 /**
80  * GtkDataboxRuler:
81  *
82  * An improved version (see above) of GtkRuler which supports linear and logarithmic scales.
83  *
84  **/
85 typedef struct _GtkDataboxRuler GtkDataboxRuler;
86 typedef struct _GtkDataboxRulerClass GtkDataboxRulerClass;
87 
88 /**
89  * GTK_DATABOX_RULER_MAX_MAX_LENGTH
90  *
91  * The maximum upper limit of label length in characters
92  */
93 #define GTK_DATABOX_RULER_MAX_MAX_LENGTH 63
94 
95 /**
96  * GtkDataboxRulerPrivate
97  *
98  * A private data structure used by the #GtkDataboxRuler. It shields all internal things
99  * from developers who are just using the object.
100  *
101  **/
102  typedef struct _GtkDataboxRulerPrivate GtkDataboxRulerPrivate;
103 
104 struct _GtkDataboxRuler
105 {
106    GtkWidget widget;
107 
108    GtkDataboxRulerPrivate *priv;
109 };
110 
111 struct _GtkDataboxRulerClass
112 {
113    GtkWidgetClass parent_class;
114 };
115 
116 
117 GType
118 gtk_databox_ruler_get_type (void)
119    G_GNUC_CONST;
120      GtkWidget *gtk_databox_ruler_new (GtkOrientation orientation);
121 
122      void gtk_databox_ruler_set_range (GtkDataboxRuler * ruler,
123 				       gdouble lower,
124 				       gdouble upper, gdouble position);
125      void gtk_databox_ruler_set_max_length (GtkDataboxRuler * ruler,
126 					    guint max_length);
127      void gtk_databox_ruler_set_scale_type (GtkDataboxRuler * ruler,
128 					    guint scale_type);
129 
130      void gtk_databox_ruler_get_range (GtkDataboxRuler * ruler,
131 				       gdouble * lower,
132 				       gdouble * upper, gdouble * position);
133      guint gtk_databox_ruler_get_max_length (GtkDataboxRuler * ruler);
134      GtkDataboxScaleType gtk_databox_ruler_get_scale_type (GtkDataboxRuler *
135 							   ruler);
136 
137      void gtk_databox_ruler_set_orientation (GtkDataboxRuler * ruler, GtkOrientation orientation);
138      GtkOrientation gtk_databox_ruler_get_orientation (GtkDataboxRuler *ruler);
139 
140      void gtk_databox_ruler_set_text_orientation (GtkDataboxRuler * ruler, GtkOrientation orientation);
141      GtkOrientation gtk_databox_ruler_get_text_orientation (GtkDataboxRuler *ruler);
142 
143      void gtk_databox_ruler_set_text_alignment (GtkDataboxRuler * ruler, PangoAlignment alignment);
144      PangoAlignment gtk_databox_ruler_get_text_alignment (GtkDataboxRuler * ruler);
145 
146     void gtk_databox_ruler_set_text_hoffset (GtkDataboxRuler * ruler,gint offset);
147     gint gtk_databox_ruler_get_text_hoffset (GtkDataboxRuler * ruler);
148 
149      void gtk_databox_ruler_set_draw_ticks(GtkDataboxRuler * ruler, gboolean draw);
150     gboolean gtk_databox_ruler_get_draw_ticks(GtkDataboxRuler * ruler);
151 
152      void gtk_databox_ruler_set_draw_position(GtkDataboxRuler * ruler, gboolean draw);
153     gboolean gtk_databox_ruler_get_draw_position(GtkDataboxRuler * ruler);
154 
155      void gtk_databox_ruler_set_draw_subticks(GtkDataboxRuler * ruler, gboolean draw);
156     gboolean gtk_databox_ruler_get_draw_subticks(GtkDataboxRuler * ruler);
157 
158      void gtk_databox_ruler_set_invert_edge(GtkDataboxRuler * ruler, gboolean invert);
159     gboolean gtk_databox_ruler_get_invert_edge(GtkDataboxRuler * ruler);
160 
161     void gtk_databox_ruler_set_linear_label_format(GtkDataboxRuler * ruler, gchar *format);
162     void gtk_databox_ruler_set_log_label_format(GtkDataboxRuler * ruler, gchar *format);
163 
164     gchar* gtk_databox_ruler_get_linear_label_format(GtkDataboxRuler * ruler);
165     gchar* gtk_databox_ruler_get_log_label_format(GtkDataboxRuler * ruler);
166 
167     void gtk_databox_ruler_set_manual_ticks(GtkDataboxRuler * ruler, gfloat* manual_ticks);
168     gfloat* gtk_databox_ruler_get_manual_ticks(GtkDataboxRuler * ruler);
169 
170     void gtk_databox_ruler_set_manual_tick_cnt(GtkDataboxRuler * ruler, guint manual_tick_cnt);
171     guint gtk_databox_ruler_get_manual_tick_cnt(GtkDataboxRuler * ruler);
172 
173     void gtk_databox_ruler_set_manual_tick_labels(GtkDataboxRuler * ruler, gchar *labels[]);
174     gchar ** gtk_databox_ruler_get_manual_tick_labels(GtkDataboxRuler * ruler);
175 
176     void gtk_databox_ruler_set_box_shadow(GtkDataboxRuler * ruler, GtkShadowType which_shadow);
177     GtkShadowType gtk_databox_ruler_get_box_shadow(GtkDataboxRuler * ruler);
178 
179 G_END_DECLS
180 #endif /* __GTK_DATABOX_RULER_H__ */
181