gtkscrollbar.c 6.47 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/. 
 */

Elliot Lee's avatar
Elliot Lee committed
28
#include "gtkscrollbar.h"
29
#include "gtkintl.h"
Elliot Lee's avatar
Elliot Lee committed
30 31 32

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

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

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

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

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

  return scrollbar_type;
}

static void
gtk_scrollbar_class_init (GtkScrollbarClass *class)
{
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
  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,
					   g_param_spec_int ("min_slider_length",
							     _("Minimum Slider Length"),
							     _("Minimum length of scrollbar slider"),
							     0,
							     G_MAXINT,
							     7,
							     G_PARAM_READABLE));

  gtk_widget_class_install_style_property (widget_class,
					   g_param_spec_boolean ("fixed_slider_length",
                                                                 _("Fixed slider size"),
                                                                 _("Don't change slider size, just lock it to the minimum length"),
                                                                 FALSE,
                                                                 
                                                                 G_PARAM_READABLE));
  
  gtk_widget_class_install_style_property (widget_class,
					   g_param_spec_boolean ("has_backward_stepper",
                                                                 _("Backward stepper"),
                                                                 _("Display the standard backward arrow button"),
                                                                 TRUE,
                                                                 
                                                                 G_PARAM_READABLE));

    gtk_widget_class_install_style_property (widget_class,
                                             g_param_spec_boolean ("has_forward_stepper",
                                                                   _("Forward stepper"),
                                                                   _("Display the standard forward arrow button"),
                                                                   TRUE,
                                                                   
                                                                   G_PARAM_READABLE));

  gtk_widget_class_install_style_property (widget_class,
					   g_param_spec_boolean ("has_secondary_backward_stepper",
                                                                 _("Secondary backward stepper"),
                                                                 _("Display a second backward arrow button on the opposite end of the scrollbar"),
                                                                 FALSE,
                                                                 
                                                                 G_PARAM_READABLE));

    gtk_widget_class_install_style_property (widget_class,
                                             g_param_spec_boolean ("has_secondary_forward_stepper",
                                                                   _("Secondary forward stepper"),
                                                                   _("Display a secondary forward arrow button on the opposite end of the scrollbar"),
                                                                   FALSE,
                                                                   
                                                                   G_PARAM_READABLE));
Elliot Lee's avatar
Elliot Lee committed
126 127 128 129 130
}

static void
gtk_scrollbar_init (GtkScrollbar *scrollbar)
{
131 132 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
  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
165
}
166 167