gtkscrollbar.c 6.61 KB
Newer Older
Elliot Lee's avatar
Elliot Lee committed
1 2
/* GTK - The GIMP Toolkit
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3
 * Copyright (C) 2001 Red Hat, Inc.
Elliot Lee's avatar
Elliot Lee committed
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
Elliot Lee's avatar
Elliot Lee committed
7 8 9 10 11 12
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 * Lesser General Public License for more details.
Elliot Lee's avatar
Elliot Lee committed
14
 *
15
 * You should have received a copy of the GNU Lesser General Public
16 17 18
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
19
 */
20 21

/*
22
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
23 24 25 26 27
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
 */

28
#include <config.h>
Elliot Lee's avatar
Elliot Lee committed
29
#include "gtkscrollbar.h"
30
#include "gtkintl.h"
31
#include "gtkprivate.h"
32
#include "gtkalias.h"
Elliot Lee's avatar
Elliot Lee committed
33 34 35

static void gtk_scrollbar_class_init (GtkScrollbarClass *klass);
static void gtk_scrollbar_init       (GtkScrollbar      *scrollbar);
36 37 38 39
static void gtk_scrollbar_style_set  (GtkWidget         *widget,
                                      GtkStyle          *previous);

static gpointer parent_class;
Elliot Lee's avatar
Elliot Lee committed
40

Manish Singh's avatar
Manish Singh committed
41
GType
42
gtk_scrollbar_get_type (void)
Elliot Lee's avatar
Elliot Lee committed
43
{
Manish Singh's avatar
Manish Singh committed
44
  static GType scrollbar_type = 0;
Elliot Lee's avatar
Elliot Lee committed
45 46 47

  if (!scrollbar_type)
    {
48
      static const GTypeInfo scrollbar_info =
Elliot Lee's avatar
Elliot Lee committed
49 50
      {
	sizeof (GtkScrollbarClass),
Manish Singh's avatar
Manish Singh committed
51 52
	NULL,		/* base_init */
	NULL,		/* base_finalize */
53
	(GClassInitFunc) gtk_scrollbar_class_init,
Manish Singh's avatar
Manish Singh committed
54 55
	NULL,		/* class_finalize */
	NULL,		/* class_data */
56
	sizeof (GtkScrollbar),
Manish Singh's avatar
Manish Singh committed
57
	0,		/* n_preallocs */
58
	(GInstanceInitFunc) gtk_scrollbar_init,
Manish Singh's avatar
Manish Singh committed
59
	NULL,		/* value_table */
Elliot Lee's avatar
Elliot Lee committed
60 61
      };

Manish Singh's avatar
Manish Singh committed
62 63 64
      scrollbar_type =
	g_type_register_static (GTK_TYPE_RANGE, "GtkScrollbar",
			        &scrollbar_info, G_TYPE_FLAG_ABSTRACT);
Elliot Lee's avatar
Elliot Lee committed
65 66 67 68 69 70 71 72
    }

  return scrollbar_type;
}

static void
gtk_scrollbar_class_init (GtkScrollbarClass *class)
{
73 74 75 76 77 78 79 80 81
  GtkWidgetClass *widget_class;

  widget_class = GTK_WIDGET_CLASS (class);

  parent_class = g_type_class_peek_parent (class);
  
  widget_class->style_set = gtk_scrollbar_style_set;
  
  gtk_widget_class_install_style_property (widget_class,
Matthias Clasen's avatar
x  
Matthias Clasen committed
82
					   g_param_spec_int ("min-slider-length",
83 84
							     P_("Minimum Slider Length"),
							     P_("Minimum length of scrollbar slider"),
85 86
							     0,
							     G_MAXINT,
87
							     21,
88
							     GTK_PARAM_READABLE));
89 90

  gtk_widget_class_install_style_property (widget_class,
Matthias Clasen's avatar
x  
Matthias Clasen committed
91
					   g_param_spec_boolean ("fixed-slider-length",
92 93
                                                                 P_("Fixed slider size"),
                                                                 P_("Don't change slider size, just lock it to the minimum length"),
94 95
                                                                 FALSE,
                                                                 
96
                                                                 GTK_PARAM_READABLE));
97 98
  
  gtk_widget_class_install_style_property (widget_class,
Matthias Clasen's avatar
x  
Matthias Clasen committed
99
					   g_param_spec_boolean ("has-backward-stepper",
100 101
                                                                 P_("Backward stepper"),
                                                                 P_("Display the standard backward arrow button"),
102 103
                                                                 TRUE,
                                                                 
104
                                                                 GTK_PARAM_READABLE));
105 106

    gtk_widget_class_install_style_property (widget_class,
Matthias Clasen's avatar
x  
Matthias Clasen committed
107
                                             g_param_spec_boolean ("has-forward-stepper",
108 109
                                                                   P_("Forward stepper"),
                                                                   P_("Display the standard forward arrow button"),
110 111
                                                                   TRUE,
                                                                   
112
                                                                   GTK_PARAM_READABLE));
113 114

  gtk_widget_class_install_style_property (widget_class,
Matthias Clasen's avatar
x  
Matthias Clasen committed
115
					   g_param_spec_boolean ("has-secondary-backward-stepper",
116 117
                                                                 P_("Secondary backward stepper"),
                                                                 P_("Display a second backward arrow button on the opposite end of the scrollbar"),
118 119
                                                                 FALSE,
                                                                 
120
                                                                 GTK_PARAM_READABLE));
121 122

    gtk_widget_class_install_style_property (widget_class,
Matthias Clasen's avatar
x  
Matthias Clasen committed
123
                                             g_param_spec_boolean ("has-secondary-forward-stepper",
124 125
                                                                   P_("Secondary forward stepper"),
                                                                   P_("Display a secondary forward arrow button on the opposite end of the scrollbar"),
126 127
                                                                   FALSE,
                                                                   
128
                                                                   GTK_PARAM_READABLE));
Elliot Lee's avatar
Elliot Lee committed
129 130 131 132 133
}

static void
gtk_scrollbar_init (GtkScrollbar *scrollbar)
{
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
  GtkRange *range;

  range = GTK_RANGE (scrollbar);
}

static void
gtk_scrollbar_style_set  (GtkWidget *widget,
                          GtkStyle  *previous)
{
  gint slider_length;
  gboolean fixed_size;
  gboolean has_a, has_b, has_c, has_d;
  GtkRange *range;

  range = GTK_RANGE (widget);
  
  gtk_widget_style_get (widget,
                        "min_slider_length", &slider_length,
                        "fixed_slider_length", &fixed_size,
                        "has_backward_stepper", &has_a,
                        "has_secondary_forward_stepper", &has_b,
                        "has_secondary_backward_stepper", &has_c,
                        "has_forward_stepper", &has_d,
                        NULL);
  
  range->min_slider_size = slider_length;
  range->slider_size_fixed = fixed_size;

  range->has_stepper_a = has_a;
  range->has_stepper_b = has_b;
  range->has_stepper_c = has_c;
  range->has_stepper_d = has_d;
  
  (* GTK_WIDGET_CLASS (parent_class)->style_set) (widget, previous);
Elliot Lee's avatar
Elliot Lee committed
168
}
169 170 171

#define __GTK_SCROLLBAR_C__
#include "gtkaliasdef.c"