gtkscrollbar.c 6.52 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>
29
#include "gtkalias.h"
Elliot Lee's avatar
Elliot Lee committed
30
#include "gtkscrollbar.h"
31
#include "gtkintl.h"
Elliot Lee's avatar
Elliot Lee committed
32 33 34

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

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

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

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

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

  return scrollbar_type;
}

static void
gtk_scrollbar_class_init (GtkScrollbarClass *class)
{
72 73 74 75 76 77 78 79 80
  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
81
					   g_param_spec_int ("min-slider-length",
82 83
							     P_("Minimum Slider Length"),
							     P_("Minimum length of scrollbar slider"),
84 85
							     0,
							     G_MAXINT,
86
							     21,
87 88 89
							     G_PARAM_READABLE));

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

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

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

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

static void
gtk_scrollbar_init (GtkScrollbar *scrollbar)
{
133 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
  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
167
}