aboutsummaryrefslogtreecommitdiffstats
path: root/executive-summary
diff options
context:
space:
mode:
Diffstat (limited to 'executive-summary')
-rw-r--r--executive-summary/ChangeLog13
-rw-r--r--executive-summary/component/e-summary-callbacks.c79
-rw-r--r--executive-summary/component/e-summary-util.c59
-rw-r--r--executive-summary/component/e-summary-util.h1
-rw-r--r--executive-summary/component/e-summary.c40
-rw-r--r--executive-summary/component/executive-summary-config.glade15
6 files changed, 181 insertions, 26 deletions
diff --git a/executive-summary/ChangeLog b/executive-summary/ChangeLog
index 536cac363e..1af8f7e605 100644
--- a/executive-summary/ChangeLog
+++ b/executive-summary/ChangeLog
@@ -1,5 +1,18 @@
2000-12-13 Iain Holmes <iain@helixcode.com>
+ * component/e-summary.c (e_summary_rebuild_page): Display all the windows
+ correctly.
+ (e_summary_save_state): Remove the whole of the Executive-Summary dir.
+
+ * component/e-summary-util.[ch]: Add e_summary_rm_dir, a function to reove
+ everything in the path. RC people have a function to do it too, but I can't
+ remember how to get RC :)
+
+ * component/e-summary-callbacks.c: (configure_summary): Put an HTML
+ explanation into the configure dialog.
+
+2000-12-13 Iain Holmes <iain@helixcode.com>
+
* component/e-summary.c (e_summary_rebuild_page): Count the number
of rows correctly.
diff --git a/executive-summary/component/e-summary-callbacks.c b/executive-summary/component/e-summary-callbacks.c
index 09072990d5..7343726865 100644
--- a/executive-summary/component/e-summary-callbacks.c
+++ b/executive-summary/component/e-summary-callbacks.c
@@ -32,6 +32,8 @@
#include <liboaf/liboaf.h>
#include <glade/glade.h>
#include <e-summary-callbacks.h>
+#include <gtkhtml/gtkhtml.h>
+#include <e-util/e-html-utils.h>
#include "e-summary.h"
@@ -44,6 +46,70 @@ typedef struct _PropertyData {
GladeXML *xml;
} PropertyData;
+/* HTML helper functions from mail/mail-config-gui.c */
+static void
+html_size_req (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ requisition->height = GTK_LAYOUT (widget)->height;
+}
+
+/* Returns a GtkHTML which is already inside a GtkScrolledWindow. If
+ * @white is TRUE, the GtkScrolledWindow will be inside a GtkFrame.
+ */
+static GtkWidget *
+html_new (gboolean white)
+{
+ GtkWidget *html, *scrolled, *frame;
+ GtkStyle *style;
+
+ html = gtk_html_new ();
+ GTK_LAYOUT (html)->height = 0;
+ gtk_signal_connect (GTK_OBJECT (html), "size_request",
+ GTK_SIGNAL_FUNC (html_size_req), NULL);
+ gtk_html_set_editable (GTK_HTML (html), FALSE);
+ style = gtk_rc_get_style (html);
+
+ if (style) {
+ gtk_html_set_default_background_color (GTK_HTML (html),
+ white ? &style->white:
+ &style->bg[0]);
+ }
+
+ gtk_widget_set_sensitive (html, FALSE);
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+ gtk_container_add (GTK_CONTAINER (scrolled), html);
+ if (white) {
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame),
+ GTK_SHADOW_ETCHED_IN);
+ gtk_container_add (GTK_CONTAINER (frame), scrolled);
+ gtk_widget_show_all (frame);
+ } else {
+ gtk_widget_show_all (scrolled);
+ }
+
+ return html;
+}
+
+static void
+put_html (GtkHTML *html,
+ const char *text)
+{
+ GtkHTMLStream *handle;
+ char *htmltext;
+
+ htmltext = e_text_to_html (text, E_TEXT_TO_HTML_CONVERT_NL);
+ handle = gtk_html_begin (html);
+ gtk_html_write (html, handle, "<HTML><BODY>", 12);
+ gtk_html_write (html, handle, text, strlen (text));
+ gtk_html_write (html, handle, "</BODY></HTML>", 14);
+ g_free (htmltext);
+ gtk_html_end (html, handle, GTK_HTML_STREAM_OK);
+}
+
void
embed_service (GtkWidget *widget,
ESummary *esummary)
@@ -172,6 +238,7 @@ configure_summary (GtkWidget *widget,
static GtkWidget *prefs = NULL;
PropertyData *data;
GtkWidget *html_page;
+ GtkWidget *vbox, *html;
if (prefs != NULL) {
g_assert (GTK_WIDGET_REALIZED (prefs));
@@ -188,11 +255,21 @@ configure_summary (GtkWidget *widget,
}
esummary->tmp_prefs = e_summary_prefs_copy (esummary->prefs);
-
+
data->xml = glade_xml_new (EVOLUTION_GLADEDIR
"/executive-summary-config.glade", NULL);
prefs = glade_xml_get_widget (data->xml, "summaryprefs");
data->box = GNOME_PROPERTY_BOX(prefs);
+
+ vbox = glade_xml_get_widget (data->xml, "vbox");
+ html = html_new (TRUE);
+ put_html (html,
+ _("You can select a different HTML page for the background "
+ "of the Executive Summary.\n\nJust leave it blank for the "
+ "default"));
+ gtk_box_pack_start (GTK_BOX (vbox), html->parent->parent, TRUE, TRUE, 0);
+ gtk_box_reorder_child (GTK_BOX (vbox), html->parent->parent, 0);
+
html_page = glade_xml_get_widget (data->xml, "htmlpage");
if (esummary->prefs->page != NULL)
diff --git a/executive-summary/component/e-summary-util.c b/executive-summary/component/e-summary-util.c
index 78731a6b3e..c19c829d57 100644
--- a/executive-summary/component/e-summary-util.c
+++ b/executive-summary/component/e-summary-util.c
@@ -25,6 +25,20 @@
#include <gnome.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+/**
+ * e_pixmap_file:
+ * @filename: Filename of pixmap.
+ *
+ * Finds @filename in the Evolution or GNOME installation dir.
+ *
+ * Returns: A newly allocated absolute path to @filename, or NULL
+ * if it cannot be found.
+ */
char *
e_pixmap_file (const char *filename)
{
@@ -65,3 +79,48 @@ e_pixmap_file (const char *filename)
return gnome_pixmap_file (filename);
}
+/**
+ * e_summary_rm_dir:
+ * @path: Full path to the directory or file to be removed.
+ *
+ * Deletes everything in fullpath.
+ */
+void
+e_summary_rm_dir (const char *path)
+{
+ DIR *base;
+ struct stat statbuf;
+ struct dirent *contents;
+
+ stat (path, &statbuf);
+ if (!S_ISDIR (statbuf.st_mode)) {
+ /* Not a directory */
+ g_warning ("Removing: %s", path);
+ unlink (path);
+ return;
+ } else {
+ g_warning ("Opening: %s", path);
+ base = opendir (path);
+
+ contents = readdir (base);
+ while (contents != NULL) {
+ char *fullpath;
+
+ if (strcmp (contents->d_name, ".") == 0||
+ strcmp (contents->d_name, "..") ==0) {
+ contents = readdir (base);
+ continue;
+ }
+
+ fullpath = g_concat_dir_and_file (path, contents->d_name);
+ e_summary_rm_dir (fullpath);
+ g_free (fullpath);
+
+ contents = readdir (base);
+ }
+
+ closedir (base);
+ rmdir (path);
+ }
+}
+
diff --git a/executive-summary/component/e-summary-util.h b/executive-summary/component/e-summary-util.h
index 0cfd50403a..63799a324a 100644
--- a/executive-summary/component/e-summary-util.h
+++ b/executive-summary/component/e-summary-util.h
@@ -25,5 +25,6 @@
#define _E_SUMMARY_UTIL_H__
char *e_pixmap_file (const char *filename);
+void e_summary_rm_dir (const char *filename);
#endif
diff --git a/executive-summary/component/e-summary.c b/executive-summary/component/e-summary.c
index c55d6887f7..ef95c7e8b1 100644
--- a/executive-summary/component/e-summary.c
+++ b/executive-summary/component/e-summary.c
@@ -542,28 +542,32 @@ e_summary_rebuild_page (ESummary *esummary)
gtk_html_write (GTK_HTML (priv->html), priv->stream, service_table,
strlen (service_table));
/* Load each of the services */
- numwindows = g_list_length (priv->window_list) - 1;
+ numwindows = g_list_length (priv->window_list);
windows = priv->window_list;
- if ( (numwindows % 3) == 0)
+ if (numwindows % 3 == 0)
numrows = numwindows / 3;
else
- numrows = (numwindows / 3) + 1;
+ numrows = numwindows / 3 + 1;
for (i = 0; i < numrows; i++) {
GList *window = windows;
-
+
g_print ("i: %d/%d\n", i, numrows);
/* Do the same row twice:
Once for the title, once for the contents */
for (j = 0; j < 2; j++) {
-
+
gtk_html_write (GTK_HTML (priv->html), priv->stream,
"<tr>", 4);
- /* For each window on row i */
- for (k = 0; k < 3; k++) {
+ /* For each window on row i */
+ for (k = 0; k < MIN (3, (numwindows - (i * 3))); k++) {
+
+ g_print ("%d of %d\n", k,
+ MIN (3, (numwindows - (i * 3))));
+ if (window == NULL)
+ break;
- g_print ("%d of 3\n", k);
if (j == 0) {
e_summary_display_window_title (esummary,
window->data,
@@ -575,35 +579,35 @@ e_summary_rebuild_page (ESummary *esummary)
k, k,
numwindows);
}
+
+ if (window != NULL)
+ window = window->next;
- window = window->next;
if (window == NULL)
break;
}
-
+
gtk_html_write (GTK_HTML (priv->html), priv->stream,
"</tr>", 5);
if (j == 0)
window = windows;
else {
if (window)
- windows = window->next;
+ windows = window;
else
break;
}
}
}
-
- gtk_html_write (GTK_HTML (priv->html), priv->stream, "</tr></table>",
- 13);
-
+ gtk_html_write (GTK_HTML (priv->html), priv->stream, "</tr></table>", 13);
+
if (priv->footer == NULL) {
load_default_footer (esummary);
} else {
gtk_html_write (GTK_HTML (priv->html), priv->stream,
priv->footer, priv->footer_len);
}
-
+
e_summary_end_load (esummary);
gtk_layout_thaw (GTK_LAYOUT (priv->html));
@@ -1276,7 +1280,7 @@ save_component (BonoboStorage *storage,
bonobo_object_release_unref (corba_subdir, &ev);
CORBA_exception_free (&ev);
}
-
+
static void
e_summary_save_state (ESummary *esummary,
const char *path)
@@ -1298,7 +1302,7 @@ e_summary_save_state (ESummary *esummary,
g_print ("fullpath: %s\n", fullpath);
/* FIXME: Use RC's rmdir function */
- remove (fullpath);
+ e_summary_rm_dir (fullpath);
storage = bonobo_storage_open (STORAGE_TYPE, fullpath,
Bonobo_Storage_READ |
diff --git a/executive-summary/component/executive-summary-config.glade b/executive-summary/component/executive-summary-config.glade
index 387964fa21..f6d468ba33 100644
--- a/executive-summary/component/executive-summary-config.glade
+++ b/executive-summary/component/executive-summary-config.glade
@@ -51,11 +51,15 @@
<widget>
<class>GtkVBox</class>
- <name>vbox1</name>
+ <name>vbox</name>
<border_width>2</border_width>
<cxx_use_heap>True</cxx_use_heap>
<homogeneous>False</homogeneous>
- <spacing>0</spacing>
+ <spacing>8</spacing>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
<widget>
<class>GtkFrame</class>
@@ -74,9 +78,10 @@
<widget>
<class>GtkVBox</class>
<name>vbox2</name>
+ <border_width>2</border_width>
<cxx_use_heap>True</cxx_use_heap>
<homogeneous>False</homogeneous>
- <spacing>0</spacing>
+ <spacing>5</spacing>
<widget>
<class>GtkHBox</class>
@@ -144,10 +149,6 @@
<widget>
<class>Placeholder</class>
</widget>
-
- <widget>
- <class>Placeholder</class>
- </widget>
</widget>
<widget>