Skip to content

Commit

Permalink
config file format changed to XML
Browse files Browse the repository at this point in the history
save and restore all layout windows
save and restore sidebar configuration
  • Loading branch information
nadvornik committed Feb 22, 2009
1 parent 179b485 commit 9e97127
Show file tree
Hide file tree
Showing 27 changed files with 1,595 additions and 963 deletions.
78 changes: 57 additions & 21 deletions src/bar.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "bar_keywords.h"
#include "bar_exif.h"
#include "bar_histogram.h"
#include "rcfile.h"

#define BAR_SIZE_INCREMENT 48
#define BAR_ARROW_SIZE 7
Expand Down Expand Up @@ -147,6 +148,40 @@ gint bar_event(GtkWidget *bar, GdkEvent *event)
return ret;
}

void bar_write_config(GtkWidget *bar, GString *outstr, gint indent)
{
BarData *bd;
GList *list, *work;
if (!bar) return;
bd = g_object_get_data(G_OBJECT(bar), "bar_data");
if (!bd) return;

write_indent(outstr, indent);
g_string_append_printf(outstr, "<bar>\n");

list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
work = list;
while (work)
{
GtkWidget *expander = work->data;
GtkWidget *widget = gtk_bin_get_child(GTK_BIN(expander));
PaneData *pd = g_object_get_data(G_OBJECT(widget), "pane_data");
if (!pd) continue;

pd->expanded = gtk_expander_get_expanded(GTK_EXPANDER(expander));

if (pd->pane_write_config)
pd->pane_write_config(widget, outstr, indent + 1);

work = work->next;
}
g_list_free(list);

write_indent(outstr, indent);
g_string_append_printf(outstr, "</bar>\n");
}


void bar_pane_set_selection_func(GtkWidget *pane, GList *(*list_func)(gpointer data), gpointer data)
{
PaneData *pd;
Expand Down Expand Up @@ -187,7 +222,7 @@ void bar_set_selection_func(GtkWidget *bar, GList *(*list_func)(gpointer data),



static void bar_add(GtkWidget *bar, GtkWidget *pane)
void bar_add(GtkWidget *bar, GtkWidget *pane)
{
GtkWidget *expander;
GtkWidget *label;
Expand All @@ -208,7 +243,7 @@ static void bar_add(GtkWidget *bar, GtkWidget *pane)

gtk_container_add(GTK_CONTAINER(expander), pane);

gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE);
gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded);

gtk_widget_show(expander);

Expand All @@ -217,6 +252,25 @@ static void bar_add(GtkWidget *bar, GtkWidget *pane)

}

void bar_populate_default(GtkWidget *bar)
{
GtkWidget *widget;
widget = bar_pane_histogram_new(_("Histogram"), 80, TRUE);
bar_add(bar, widget);

widget = bar_pane_comment_new(_("Title"), "Xmp.dc.title", TRUE, 40);
bar_add(bar, widget);

widget = bar_pane_keywords_new(_("Keywords"), KEYWORD_KEY, TRUE);
bar_add(bar, widget);

widget = bar_pane_comment_new(_("Comment"), "Xmp.dc.description", TRUE, 150);
bar_add(bar, widget);

widget = bar_pane_exif_new(_("Exif"), TRUE);
bar_add(bar, widget);
}

static void bar_width(BarData *bd, gint val)
{
gint size;
Expand All @@ -225,7 +279,7 @@ static void bar_width(BarData *bd, gint val)
size = CLAMP(size + val, BAR_SIZE_INCREMENT * 2, BAR_SIZE_INCREMENT * 16);

gtk_widget_set_size_request(bd->widget, size, -1);
options->panels.info.width = bd->widget->allocation.width;
options->layout.panels.info.width = bd->widget->allocation.width;
}

static void bar_larger(GtkWidget *widget, gpointer data)
Expand Down Expand Up @@ -269,7 +323,6 @@ GtkWidget *bar_new(GtkWidget *bounding_widget)
GtkWidget *button;
GtkWidget *arrow;
GtkWidget *scrolled;
GtkWidget *widget;

bd = g_new0(BarData, 1);

Expand Down Expand Up @@ -334,25 +387,8 @@ GtkWidget *bar_new(GtkWidget *bounding_widget)

gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_NONE);
gtk_widget_show(bd->vbox);

widget = bar_pane_histogram_new(_("Histogram"), 80);
bar_add(bd->widget, widget);

widget = bar_pane_comment_new(_("Title"), "Xmp.dc.title", 40);
bar_add(bd->widget, widget);

widget = bar_pane_keywords_new(_("Keywords"), KEYWORD_KEY);
bar_add(bd->widget, widget);

widget = bar_pane_comment_new(_("Comment"), "Xmp.dc.description", 150);
bar_add(bd->widget, widget);

widget = bar_pane_exif_new(_("Exif"));
bar_add(bd->widget, widget);

return bd->widget;
}



/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
10 changes: 10 additions & 0 deletions src/bar.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ typedef struct _PaneData PaneData;
struct _PaneData {
void (*pane_set_fd)(GtkWidget *pane, FileData *fd);
gint (*pane_event)(GtkWidget *pane, GdkEvent *event);
void (*pane_write_config)(GtkWidget *pane, GString *outstr, gint indent);
gchar *title;
gboolean expanded;

GList *(*list_func)(gpointer);
gpointer list_data;
Expand All @@ -29,8 +31,16 @@ struct _PaneData {


GtkWidget *bar_new(GtkWidget *bounding_widget);

void bar_populate_default(GtkWidget *bar);

void bar_close(GtkWidget *bar);

void bar_write_config(GtkWidget *bar, GString *outstr, gint indent);

void bar_add(GtkWidget *bar, GtkWidget *pane);


void bar_set_fd(GtkWidget *bar, FileData *fd);
gint bar_event(GtkWidget *bar, GdkEvent *event);

Expand Down
52 changes: 50 additions & 2 deletions src/bar_comment.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "filedata.h"
#include "ui_menu.h"
#include "ui_misc.h"
#include "rcfile.h"

static void bar_pane_comment_changed(GtkTextBuffer *buffer, gpointer data);

Expand All @@ -38,6 +39,7 @@ struct _PaneCommentData
GtkWidget *comment_view;
FileData *fd;
gchar *key;
gint height;
};


Expand Down Expand Up @@ -130,7 +132,7 @@ static void bar_pane_comment_set_fd(GtkWidget *bar, FileData *fd)
bar_pane_comment_update(pcd);
}

gint bar_pane_comment_event(GtkWidget *bar, GdkEvent *event)
static gint bar_pane_comment_event(GtkWidget *bar, GdkEvent *event)
{
PaneCommentData *pcd;

Expand All @@ -142,6 +144,25 @@ gint bar_pane_comment_event(GtkWidget *bar, GdkEvent *event)
return FALSE;
}

static void bar_pane_comment_write_config(GtkWidget *pane, GString *outstr, gint indent)
{
PaneCommentData *pcd;

pcd = g_object_get_data(G_OBJECT(pane), "pane_data");
if (!pcd) return;

write_indent(outstr, indent);
g_string_append_printf(outstr, "<pane_comment\n");
indent++;
WRITE_CHAR(*pcd, pane.title);
WRITE_BOOL(*pcd, pane.expanded);
WRITE_CHAR(*pcd, key);
WRITE_INT(*pcd, height);
indent--;
write_indent(outstr, indent);
g_string_append_printf(outstr, "/>\n");
}

static void bar_pane_comment_notify_cb(FileData *fd, NotifyType type, gpointer data)
{
PaneCommentData *pcd = data;
Expand Down Expand Up @@ -193,7 +214,7 @@ static void bar_pane_comment_destroy(GtkWidget *widget, gpointer data)
}


GtkWidget *bar_pane_comment_new(const gchar *title, const gchar *key, gint height)
GtkWidget *bar_pane_comment_new(const gchar *title, const gchar *key, gboolean expanded, gint height)
{
PaneCommentData *pcd;
GtkWidget *scrolled;
Expand All @@ -203,9 +224,12 @@ GtkWidget *bar_pane_comment_new(const gchar *title, const gchar *key, gint heigh

pcd->pane.pane_set_fd = bar_pane_comment_set_fd;
pcd->pane.pane_event = bar_pane_comment_event;
pcd->pane.pane_write_config = bar_pane_comment_write_config;
pcd->pane.title = g_strdup(title);
pcd->pane.expanded = expanded;

pcd->key = g_strdup(key);
pcd->height = height;

scrolled = gtk_scrolled_window_new(NULL, NULL);

Expand Down Expand Up @@ -237,4 +261,28 @@ GtkWidget *bar_pane_comment_new(const gchar *title, const gchar *key, gint heigh
return pcd->widget;
}

GtkWidget *bar_pane_comment_new_from_config(const gchar **attribute_names, const gchar **attribute_values)
{
gchar *title = g_strdup(_("NoName"));
gchar *key = g_strdup(COMMENT_KEY);
gboolean expanded = TRUE;
gint height = 50;

while (*attribute_names)
{
const gchar *option = *attribute_names++;
const gchar *value = *attribute_values++;

READ_CHAR_FULL("pane.title", title);
READ_CHAR_FULL("key", key);
READ_BOOL_FULL("pane.expanded", expanded);
READ_INT_FULL("height", height);


DEBUG_1("unknown attribute %s = %s", option, value);
}

return bar_pane_comment_new(title, key, expanded, height);
}

/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
3 changes: 2 additions & 1 deletion src/bar_comment.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
#ifndef BAR_COMMENT_H
#define BAR_COMMENT_H

GtkWidget *bar_pane_comment_new(const gchar *title, const gchar *key, gint height);
GtkWidget *bar_pane_comment_new(const gchar *title, const gchar *key, gboolean expanded, gint height);
GtkWidget *bar_pane_comment_new_from_config(const gchar **attribute_names, const gchar **attribute_values);

#endif
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
45 changes: 44 additions & 1 deletion src/bar_exif.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "misc.h"
#include "ui_misc.h"
#include "bar.h"
#include "rcfile.h"


#include <math.h>
Expand Down Expand Up @@ -281,6 +282,24 @@ void bar_pane_exif_set_fd(GtkWidget *widget, FileData *fd)
bar_pane_exif_update(ped);
}

static void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint indent)
{
PaneExifData *ped;

ped = g_object_get_data(G_OBJECT(pane), "pane_data");
if (!ped) return;

write_indent(outstr, indent);
g_string_append_printf(outstr, "<pane_exif\n");
indent++;
WRITE_CHAR(*ped, pane.title);
WRITE_BOOL(*ped, pane.expanded);
indent--;
write_indent(outstr, indent);
g_string_append_printf(outstr, "/>\n");
}


static void bar_pane_exif_remove_advanced_cb(GtkWidget *widget, gpointer data)
{
PaneExifData *ped = data;
Expand Down Expand Up @@ -317,7 +336,7 @@ static void bar_pane_exif_destroy(GtkWidget *widget, gpointer data)
g_free(ped);
}

GtkWidget *bar_pane_exif_new(const gchar *title)
GtkWidget *bar_pane_exif_new(const gchar *title, gboolean expanded)
{
PaneExifData *ped;
GtkWidget *table;
Expand All @@ -332,7 +351,9 @@ GtkWidget *bar_pane_exif_new(const gchar *title)
ped = g_new0(PaneExifData, 1);

ped->pane.pane_set_fd = bar_pane_exif_set_fd;
ped->pane.pane_write_config = bar_pane_exif_write_config;
ped->pane.title = g_strdup(title);
ped->pane.expanded = expanded;

ped->keys = g_new0(GtkWidget *, exif_len);
ped->labels = g_new0(GtkWidget *, exif_len);
Expand Down Expand Up @@ -395,4 +416,26 @@ GtkWidget *bar_pane_exif_new(const gchar *title)

return ped->vbox;
}

GtkWidget *bar_pane_exif_new_from_config(const gchar **attribute_names, const gchar **attribute_values)
{
gchar *title = g_strdup(_("NoName"));
gboolean expanded = TRUE;

while (*attribute_names)
{
const gchar *option = *attribute_names++;
const gchar *value = *attribute_values++;

READ_CHAR_FULL("pane.title", title);
READ_BOOL_FULL("pane.expanded", expanded);


DEBUG_1("unknown attribute %s = %s", option, value);
}

return bar_pane_exif_new(title, expanded);
}


/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
4 changes: 2 additions & 2 deletions src/bar_exif.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ extern ExifUI ExifUIList[];
#define EXIF_BAR_CUSTOM_COUNT 20


GtkWidget *bar_pane_exif_new(const gchar *title);

GtkWidget *bar_pane_exif_new(const gchar *title, gboolean expanded);
GtkWidget *bar_pane_exif_new_from_config(const gchar **attribute_names, const gchar **attribute_values);

/* these are exposed for when duplication of the exif bar's text is needed */

Expand Down
Loading

0 comments on commit 9e97127

Please sign in to comment.