aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-cell-percent.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-05-20 22:50:00 +0800
committerMilan Crha <mcrha@redhat.com>2009-05-20 22:50:00 +0800
commitf4cf9af33ccde3142a3011e8b2dbcfb4cbc9ae81 (patch)
tree1c0228db536f5fa0efc6e0f779bb86df610989d0 /widgets/table/e-cell-percent.c
parent3acc45b10c9849aa5385a762b4d139472916dca1 (diff)
downloadgsoc2013-evolution-f4cf9af33ccde3142a3011e8b2dbcfb4cbc9ae81.tar.gz
gsoc2013-evolution-f4cf9af33ccde3142a3011e8b2dbcfb4cbc9ae81.tar.zst
gsoc2013-evolution-f4cf9af33ccde3142a3011e8b2dbcfb4cbc9ae81.zip
Use -no-undefined on Linux too
There still left two things opened, search for KILL-BONOBO to find them. One is in calendar's Makefile.am, one in composer.
Diffstat (limited to 'widgets/table/e-cell-percent.c')
-rw-r--r--widgets/table/e-cell-percent.c152
1 files changed, 152 insertions, 0 deletions
diff --git a/widgets/table/e-cell-percent.c b/widgets/table/e-cell-percent.c
new file mode 100644
index 0000000000..94e33489e5
--- /dev/null
+++ b/widgets/table/e-cell-percent.c
@@ -0,0 +1,152 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Damon Chaplin <damon@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+/*
+ * ECellPercent - a subclass of ECellText used to show an integer percentage
+ * in an ETable.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <ctype.h>
+
+#include <sys/time.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <glib/gi18n.h>
+
+#include "e-cell-percent.h"
+
+G_DEFINE_TYPE (ECellPercent, e_cell_percent, E_CELL_TEXT_TYPE)
+
+
+static char *
+ecp_get_text (ECellText *cell, ETableModel *model, int col, int row)
+{
+ int percent;
+ static char buffer[8];
+
+ percent = GPOINTER_TO_INT (e_table_model_value_at (model, col, row));
+
+ /* A -ve value means the property is not set. */
+ if (percent < 0) {
+ buffer[0] = '\0';
+ } else {
+ g_snprintf (buffer, sizeof (buffer), "%i%%", percent);
+ }
+
+ return buffer;
+}
+
+static void
+ecp_free_text(ECellText *cell, char *text)
+{
+ /* Do Nothing. */
+}
+
+/* FIXME: We need to set the "transient_for" property for the dialog. */
+static void
+show_percent_warning (void)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (
+ NULL, 0,
+ GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+ "%s", _("The percent value must be between 0 and 100, inclusive"));
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+}
+
+static void
+ecp_set_value (ECellText *cell, ETableModel *model, int col, int row,
+ const char *text)
+{
+ int matched, percent;
+ gboolean empty = TRUE;
+ const char *p;
+
+ if (text) {
+ p = text;
+ while (*p) {
+ if (!isspace ((unsigned char) *p)) {
+ empty = FALSE;
+ break;
+ }
+ p++;
+ }
+ }
+
+ if (empty) {
+ percent = -1;
+ } else {
+ matched = sscanf (text, "%i", &percent);
+
+ if (matched != 1 || percent < 0 || percent > 100) {
+ show_percent_warning ();
+ return;
+ }
+ }
+
+ e_table_model_set_value_at (model, col, row,
+ GINT_TO_POINTER (percent));
+}
+
+static void
+e_cell_percent_class_init (ECellPercentClass *ecpc)
+{
+ ECellTextClass *ectc = (ECellTextClass *) ecpc;
+
+ ectc->get_text = ecp_get_text;
+ ectc->free_text = ecp_free_text;
+ ectc->set_value = ecp_set_value;
+}
+
+static void
+e_cell_percent_init (ECellPercent *ecp)
+{
+}
+
+/**
+ * e_cell_percent_new:
+ * @fontname: font to be used to render on the screen
+ * @justify: Justification of the string in the cell.
+ *
+ * Creates a new ECell renderer that can be used to render an integer
+ * percentage that comes from the model. The value returned from the model is
+ * interpreted as being an int.
+ *
+ * See ECellText for other features.
+ *
+ * Returns: an ECell object that can be used to render numbers.
+ */
+ECell *
+e_cell_percent_new (const char *fontname, GtkJustification justify)
+{
+ ECellPercent *ecn = g_object_new (E_CELL_PERCENT_TYPE, NULL);
+
+ e_cell_text_construct (E_CELL_TEXT(ecn), fontname, justify);
+
+ return (ECell *) ecn;
+}