On Tue, 2004-06-29 at 18:45 +0200, Owen Taylor wrote:
> We had a GTK+ BOF today (2004-06-29) at GUADEC.
[snip]
> Various picker buttons / entries were discussed:
>
> File/Directory picker. There was some considerably discussion
> of whether such a beast was an actually a good idea; it seems
> that at least *some* apps do genuinely need file and
> directory selection, and we're better off providing a widget
> to do it well than have everybody do it themselves badly.
> James Cape was nominated in absentia to write up his work
> as a proposal and send it to gtk-devel-list
Righteo, man, righteo!
EscoFileChooserButton is the current classname.
API:
- GtkFileChooser + std. constructors (new, new_with_filesystem).
- "title" property (for dialog).
- "active" property (for visibility of dialog).
Look:
- Similar to GtkComboBox(Entry), only with a dialog behind the
button instead of a pulldown
- Varies by file-chooser action (on-the-fly):
+ GtkToggleButton w/ a basename label and the stock "open" icon for
OPEN/SELECT.
[ thefile.txt | o ]
+ _GtkFileChooserEntry w/ the "open" icon togglebutton for SAVE/CREATE.
[_thefile.txt______][ o ]
Behavior:
- Autocomplete using _GtkFileChooserEntry.
- clicking togglebutton/"active" property opens
GtkFileChooserDialog.
- proper signal filtering (update-preview always, others on
Ok/Cancel)
Possible:
- Use of a custom-GtkComboBox (with _GtkFileChooserEntry) instead of
entry/button to display a history (and rename to GtkFileChooserCombo
[Box])?
Currently the sources for this are in
http://esco.mine.nu/downloads/user-selector-applet-0.0.7.tar.gz
in src/esco-ui/escofilechooserbutton.[c,h].
=======
And so long as I'm at it: I've got GdkPixbuf-loader-based thumbnailing
using the fd.o thumbnailing standard working at
http://esco.mine.nu/downloads/eggpixbufthumbnail.tar.bz2
GLib-level MD5 API:
struct _EggMd5Digest
{
guchar digest[16];
};
EggMd5Digest *egg_str_get_md5_digest (const gchar *contents);
gchar *egg_str_get_md5_str (const gchar *contents);
EggMd5Digest *egg_md5_str_to_digest (const gchar *str_digest);
gchar *egg_md5_digest_to_str (const EggMd5Digest *md5_digest);
EggMd5Digest *egg_md5_digest_dup (const EggMd5Digest *src);
#define egg_md5_digest_free g_free
guint egg_md5_digest_hash (gconstpointer digest);
gboolean egg_md5_digest_equal (gconstpointer digest1,
gconstpointer digest2);
GdkPixbuf-level thumbnai/metadatal API:
typedef enum /* <prefix=EGG_PIXBUF_THUMB> */
{
EGG_PIXBUF_THUMB_UNKNOWN = -1,
EGG_PIXBUF_THUMB_NORMAL = 128,
EGG_PIXBUF_THUMB_LARGE = 256
}
EggPixbufThumbSize;
/* Convenience API, handles loading/creation/auto-failure-saving */
GdkPixbuf *egg_pixbuf_get_thumbnail_for_file (const gchar
*filename,
EggPixbufThumbSize size,
GError **error);
/* Just reads/checks the appropriate ~/.thumbnails/blah.png */
GdkPixbuf *egg_pixbuf_load_thumbnail (const gchar *uri,
gint64 mtime,
EggPixbufThumbSize size);
/* Saves a pixbuf w/ previously-set URI/mtime metadata */
gboolean egg_pixbuf_save_thumbnail (GdkPixbuf *thumbnail,
GError **error,
...);
gboolean egg_pixbuf_save_thumbnailv (GdkPixbuf *thumbnail,
gchar **keys,
gchar **values,
GError **error);
/* Failed thumbnail handling */
/* Reads propriatary data from thumbnail file to fill @error */
gboolean egg_pixbuf_has_failed_thumbnail (const gchar *uri,
gint64 mtime,
GError **error);
/* Saves propriatary failure data from @error */
void egg_pixbuf_save_failed_thumbnail (const gchar *uri,
gint64 mtime,
const GError *error);
/* Scales an existing pixbuf and adds required metadata */
GdkPixbuf *egg_pixbuf_create_thumbnail (GdkPixbuf *pixbuf,
const gchar *uri,
gint64 mtime,
EggPixbufThumbSize size);
/* Adds metadata via gdk_pixbuf_set_option() */
gboolean egg_pixbuf_add_thumbnail_data (GdkPixbuf *pixbuf,
const gchar *uri,
gint64 mtime,
EggPixbufThumbSize size);
/* Checks if a pixbuf has required metadata */
gboolean egg_pixbuf_has_thumbnail_data (GdkPixbuf *pixbuf);
/* Metadata accessors -- wrappers around gdk_pixbuf_(get/set)_option()
*/
EggPixbufThumbSize egg_pixbuf_get_thumb_size (GdkPixbuf
*thumbnail);
gboolean egg_pixbuf_set_thumb_size (GdkPixbuf *thumbnail,
EggPixbufThumbSize size);
G_CONST_RETURN gchar *egg_pixbuf_get_thumb_uri (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_uri (GdkPixbuf *thumbnail,
const gchar *uri);
G_CONST_RETURN gchar *egg_pixbuf_get_thumb_mime_type (GdkPixbuf
*thumbnail);
gboolean egg_pixbuf_set_thumb_mime_type (GdkPixbuf *thumbnail,
const gchar *mime_type);
G_CONST_RETURN gchar *egg_pixbuf_get_thumb_description (GdkPixbuf
*thumbnail);
gboolean egg_pixbuf_set_thumb_description (GdkPixbuf *thumbnail,
const gchar *description);
gint64 egg_pixbuf_get_thumb_mtime (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_mtime (GdkPixbuf *thumbnail,
gint64 mtime);
gint64 egg_pixbuf_get_thumb_filesize (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_filesize (GdkPixbuf *thumbnail,
gint64 filesize);
gint egg_pixbuf_get_thumb_image_width (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_image_width (GdkPixbuf *thumbnail,
gint image_width);
gint egg_pixbuf_get_thumb_image_height (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_image_height (GdkPixbuf *thumbnail,
gint image_height);
gint egg_pixbuf_get_thumb_document_pages (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_document_pages (GdkPixbuf
*thumbnail,
gint document_pages);
gint64 egg_pixbuf_get_thumb_movie_length (GdkPixbuf *thumbnail);
gboolean egg_pixbuf_set_thumb_movie_length (GdkPixbuf *thumbnail,
gint64 movie_length);
G_CONST_RETURN gchar *egg_pixbuf_get_thumb_software (GdkPixbuf
*thumbnail);
/* Gets the thumbnail filename for @uri at @size */
gchar *egg_pixbuf_get_thumb_filename (const gchar
*uri,
EggPixbufThumbSize size);
The only real addition to that thumbnailing API is "load_at_size" and
"get_for_file_at_size" to load a pixbuf at a pre-determined pixel size
(mainly to speed pixbuf loading when !128/!256-pixel sizes are desired).
Carlos Garnacho Parro (added to CC) had mentioned wanting to do a
GtkImagePreview widget which would be useful for things like the
wallpaper-properties capplet (and the chooser API described below) as
well as any other "pick an image from a file chooser" cases.
======
Finally, an EggIconChooser API to superceed GnomeIconSelection. I had
originally wanted to do a mixed icon/image chooser, but that proved to
be massive overkill, a horribly bad API, and a *lot* of wasted work, so
I'm returning to the basic IconChooser idea (which I managed to
accidentally delete in the meantime :-(). The UI will look something
like that described in [http://bugzilla.gnome.org/show_bug.cgi?
id=128723]. I've got the EggIconChooserIface API back up and compiling
(but better):
gboolean egg_icon_chooser_get_select_multiple (EggIconChooser
*chooser);
void egg_icon_chooser_set_select_multiple (EggIconChooser
*chooser,
gboolean select_multiple);
void egg_icon_chooser_unselect_all (EggIconChooser
*chooser);
/* Icon theme context, NULL for "All icons", "gtk-custom" to switch to
custom pane */
gchar *egg_icon_chooser_get_context (EggIconChooser
*chooser);
void egg_icon_chooser_set_context (EggIconChooser
*chooser,
const gchar *context);
/* Useful for an icon theme editor, but should it be here? */
GtkIconTheme *egg_icon_chooser_get_icon_theme (EggIconChooser
*chooser);
void egg_icon_chooser_set_icon_theme (EggIconChooser
*chooser,
GtkIconTheme *icon_theme);
/* The icon pane's selection */
GSList *egg_icon_chooser_get_icons (EggIconChooser
*chooser);
gchar *egg_icon_chooser_get_icon (EggIconChooser
*chooser);
void egg_icon_chooser_set_icon (EggIconChooser
*chooser,
const gchar *icon);
gboolean egg_icon_chooser_select_icon (EggIconChooser
*chooser,
const gchar *icon_name);
void egg_icon_chooser_unselect_icon (EggIconChooser
*chooser,
const gchar *icon_name);
/* Show the "custom" file-chooser pane */
gboolean egg_icon_chooser_get_allow_custom (EggIconChooser
*chooser);
void egg_icon_chooser_set_allow_custom (EggIconChooser
*chooser,
gboolean allow_custom);
/* The file-chooser pane */
GSList *egg_icon_chooser_get_uris (EggIconChooser
*chooser);
gchar *egg_icon_chooser_get_uri (EggIconChooser
*chooser);
void egg_icon_chooser_set_uri (EggIconChooser
*chooser,
const gchar *uri);
gboolean egg_icon_chooser_select_uri (EggIconChooser
*chooser,
const gchar *uri);
void egg_icon_chooser_unselect_uri (EggIconChooser
*chooser,
const gchar *uri);
GSList *egg_icon_chooser_get_filenames (EggIconChooser
*chooser);
gchar *egg_icon_chooser_get_filename (EggIconChooser
*chooser);
void egg_icon_chooser_set_filename (EggIconChooser
*chooser,
const gchar *filename);
gboolean egg_icon_chooser_select_filename (EggIconChooser
*chooser,
const gchar *filename);
void egg_icon_chooser_unselect_filename (EggIconChooser
*chooser,
const gchar *filename);
GSList *egg_icon_chooser_list_custom_filters (EggIconChooser
*chooser);
void egg_icon_chooser_add_custom_filter (EggIconChooser
*chooser,
GtkFileFilter *filter);
void egg_icon_chooser_remove_custom_filter (EggIconChooser
*chooser,
GtkFileFilter *filter);
GtkFileFilter *egg_icon_chooser_get_custom_filter (EggIconChooser
*chooser);
void egg_icon_chooser_set_custom_filter (EggIconChooser
*chooser,
GtkFileFilter *filter);
One possible addition I can see for this is controlling which icon-theme
contexts are visible from inside apps.
I still have to (somewhat) rewrite the code for this, but it's mostly
copy/paste/cleanup-alot from the EggImageChooser (the dead-end).
Anyhow, that's all of what I've been doing lately, I can put any/all of
these in libegg (or hack up some patches) if desired. :-)
--
Peace,
Jim Cape
http://ignore-your.tv
"We still name our military helicopter gunships after victims
of genocide. Nobody bats an eyelash about that: Blackhawk.
Apache. And Comanche. If the Luftwaffe named its military
helicopters Jew and Gypsy, I suppose people would notice."
-- Noam Chomsky, "Propaganda and the Public Mind"
Attachment:
signature.asc
Description: This is a digitally signed message part