Combo box investigation + proposed new API
- From: Kristian Rietveld <kristian planet nl>
- To: GTK Development list <gtk-devel-list gnome org>
- Subject: Combo box investigation + proposed new API
- Date: Tue, 26 Sep 2000 18:12:00 +0200 (CEST)
Hi all,
I recently mailed with Havoc that I was wanting to rewrite the GtkImage
widget (which was on the GTK todo list). He told me that the GtkImage
rewrite was already done and that another useful task was to investigate
the combo box. So I investigated the combo box and planned a new
interface.
I looked at the current GtkCombo, the GtkClueHunter from beast-gtk and the
GtkComboBox from Gnumeric. I decided to take the best parts of all these
widgets and melt those together in one new combo box for GTK+. Here is the
hierarchy that I have in mind:
GtkHBox
+ GtkComboBox
+ GtkComboBoxPixmap
+ GtkComboBoxText
The GtkComboBox will be based on the combo box work in Gnumeric, and will
be implemented using the new GtkTL stuff. The GtkComboBoxPixmap will be
based on PixmapCombo from Gnumeric. But I'll change the API of PixmapCombo
for GtkComboBoxPixmap, I think that a 'dynamic' version is handier than
the original PixmapCombo where you've to give all the elements at the time
of creation of the widget. Finally, the GtkComboBoxText will be based on
GtkClueHunter from beast-gtk, which will be also implemented using the new
GtkTL stuff.
Please take a look at the attached headers and post your comments. I know
the headers aren't complete yet, #includes and the copyright comments are
missing. I'll add them later.
If everybody is ok with it and if everybody is satisfied with the API,
I'll start implementing it.
Kris
--
"Running Windows on a Pentium is like having a brand new Porsche but only
be able to drive backwards with the handbrake on."
(Unknown source - taken from fortune-mod-1.0-11)
/* -*- linux-c -*- */
#ifndef __GTK_COMBO_BOX_PIXMAP_H__
#define __GTK_COMBO_BOX_PIXMAP_H__
#include <gtk/gtkcombobox.h>
#include <gtk/gtktooltips.h>
#include <gdk/gdkpixbuf.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define GTK_TYPE_COMBO_BOX_PIXMAP (gtk_combo_box_pixmap_get_type ( ))
#define GTK_COMBO_BOX_PIXMAP(object) (GTK_CHECK_CAST ((object), GTK_TYPE_COMBO_BOX_PIXMAP, GtkComboBoxPixmap))
#define GTK_COMBO_BOX_PIXMAP_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_COMBO_BOX_PIXMAP))
#define GTK_IS_COMBO_BOX_PIXMAP(object) (GTK_CHECK_TYPE ((object), GTK_TYPE_COMBO_BOX_PIXMAP))
#define GTK_IS_COMBO_BOX_PIXMAP_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COMBO_BOX_PIXMAP))
typedef struct _GtkComboBoxPixmapClass GtkComboBoxPixmapClass;
typedef struct _GtkComboBoxPixmapItem GtkComboBoxPixmapItem;
typedef struct _GtkComboBoxPixmap GtkComboBoxPixmap;
struct _GtkComboBoxPixmapItem
{
/* private */
int index;
GtkImage *image_widget;
/* public */
gchar *tooltip;
GdkPixbuf *image;
};
struct _GtkComboBoxPixmap
{
GtkComboBox cbox;
int cols, rows;
int max_cols, max_rows;
int number_of_elements;
GList *box_items;
GtkWidget *table;
GtkWidget *preview_button;
GtkTooltips *tool_tip;
};
struct _GtkComboBoxPixmapClass
{
GtkComboClass parent_class;
void (*select) ( GtkComboBoxPixmap *cboxpixmap,
GtkComboBoxPixmapItem *item );
};
GtkComboBoxPixmapItem *gtk_combo_box_pixmap_add_item ( gchar *tooltip,
GdkPixbuf *image );
GtkType gtk_combo_box_pixmap_get_type ( void );
GtkWidget *gtk_combo_box_pixmap_new ( int max_cols, int max_rows );
void gtk_combo_box_pixmap_remove_item ( GtkComboBoxPixmapItem *item );
void gtk_combo_box_pixmap_select_pixmap ( GtkComboBoxPixmap *cboxpixmap,
GtkComboBoxPixmapItem *item );
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __GTK_COMBO_BOX_PIXMAP_H__ */
/* -*- linux-c -*- */
#ifndef __GTK_COMBO_BOX_TEXT_H__
#define __GTK_COMBO_BOX_TEXT_H__
#include <gtk/gtkcombobox.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define GTK_TYPE_COMBO_BOX_TEXT (gtk_combo_box_text_get_type ( ))
#define GTK_COMBO_BOX_TEXT(object) (GTK_CHECK_CAST ((object), GTK_TYPE_COMBO_BOX_TEXT, GtkComboBoxText))
#define GTK_COMBO_BOX_TEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_COMBO_BOX_TEXT))
#define GTK_IS_COMBO_BOX_TEXT(object) (GTK_CHECK_TYPE ((object), GTK_TYPE_COMBO_BOX_TEXT))
#define GTK_IS_COMBO_BOX_TEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COMBO_BOX_TEXT))
typedef struct _GtkComboBoxTextClass GtkComboBoxTextClass;
typedef struct _GtkComboBoxText GtkComboBoxText;
struct _GtkComboBoxText
{
GtkComboBox cbox;
gchar *cstring;
GtkWidget *entry;
GtkWidget *list;
GtkWidget *scrolled_window;
};
struct _GtkComboBoxTextClass
{
GtkComboBoxClass parent_class;
void (*select) ( GtkComboBoxText *cboxtext,
const gchar *string );
};
GtkType gtk_combo_box_text_get_type ( void );
GtkWidget *gtk_combo_box_new ( void );
void gtk_combo_box_text_set_tlview ( GtkComboBoxText *cboxtext,
GtkWidget *tlview );
void gtk_combo_box_text_set_entry ( GtkComboBoxText *cboxtext,
GtkWidget *entry );
void gtk_combo_box_text_add_string ( GtkComboBoxText *cboxtext,
const gchar *string );
void gtk_combo_box_text_remove_string ( GtkComboBoxText *cboxtext,
const gchar *string );
void gtk_combo_box_text_remove_matches ( GtkComboBoxText *cboxtext,
const gchar *pattern );
void gtk_combo_box_text_set_pattern_matching ( GtkComboBoxText *cboxtext,
gboolean matching );
void gtk_combo_box_text_set_keep_history ( GtkComboBoxText *cboxtext,
gboolean keep );
void gtk_combo_box_text_select_entry ( GtkComboBoxText *cboxtext,
const gchar *string );
gchar *gtk_combo_box_text_try_complete ( GtkComboBoxText *cboxtext );
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __GTK_COMBO_BOX_TEXT_H__ */
/* -*- linux-c -*- */
#ifndef __GTK_COMBO_BOX_H__
#define __GTK_COMBO_BOX_H__
#include <gtk/gtkhbox.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define GTK_TYPE_COMBO_BOX (gtk_combo_box_get_type ( ))
#define GTK_COMBO_BOX(object) (GTK_CHECK_CAST ((object), GTK_TYPE_COMBO_BOX, GtkComboBox))
#define GTK_COMBO_BOX_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_COMBO_BOX))
#define GTK_IS_COMBO_BOX(object) (GTK_CHECK_TYPE ((object), GTK_TYPE_COMBO_BOX))
#define GTK_IS_COMBO_BOX_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COMBO_BOX))
typedef struct _GtkComboBoxClass GtkComboBoxClass;
typedef struct _GtkComboBox GtkComboBox;
struct _GtkComboBox
{
GtkHBox hbox;
GtkWidget *pop_down_widget;
GtkWidget *display_widget;
GtkWidget *box;
GtkWidget *arrow_button;
GtkWidget *toplevel;
GtkWidget *tearoff_window;
guint torn_off;
guint use_arrows:1;
GtkWidget *tearable;
GtkWidget *popup;
};
struct _GtkComboBoxClass
{
GtkHBoxClass parent_class;
void (*activate) ( GtkComboBox *cbox );
void (*popup) ( GtkComboBox *cbox );
void (*popdown) ( GtkComboBox *cbox );
};
GtkType gtk_combo_box_get_type ( void );
void gtk_combo_box_construct ( GtkComboBox *cbox,
GtkWidget *display_widget,
GtkWidget *pop_down_widget );
void gtk_combo_box_disable_activate ( GtkComboBox *cbox );
GtkWidget *gtk_combo_box_new ( GtkWidget *display_widget,
GtkWidget *pop_down_widget );
void gtk_combo_box_popup_hide ( GtkComboBox *cbox );
void gtk_combo_box_set_display ( GtkComboBox *cbox,
GtkWidget *display_widget );
void gtk_combo_box_set_arrow_relief ( GtkComboBox *cbox,
GtkReliefStyle relief );
void gtk_combo_box_set_arrow_sensitive ( GtkComboBox *cbox,
gboolean sensitive );
void gtk_combo_box_set_title ( GtkComboBox *cbox,
const gchar *title );
void gtk_combo_box_set_use_arrows ( GtkComboBox *cbox,
gboolean use_arrows );
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __GTK_COMBO_BOX_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]