aboutsummaryrefslogblamecommitdiffstats
path: root/mail/e-mail-print-config-headers.c
blob: 5a5cf350831d1dc20da74c0e0a86dd8045e83369 (plain) (tree)





























                                                                                  










                                    
                               



                                                                      
                                                                      
 
                               



                                 


                                                                      









                                                                              

                                                                   
































































                                                                       


                                        




                                    
                             






                                                                   

                                                                      
 
                                                        
 
                                            
 


                                                               
 


                                                                  
 



                                                                    
 



                                                                   
 



                                                                     
 



                                                                       
 



                                                                      
 
                                              






                                                                  
                                                        


                                    

                                                                  







                                                                    
                                                        







                                                                     


                                                        


                                                                 
                                                         


                                     
                                                            
                                                                        

























































                                                                             
/*
 * e-mail-print-config-headers.c
 *
 * 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/>
 *
 */

#include "e-mail-print-config-headers.h"

#include <config.h>
#include <glib/gi18n-lib.h>

#include <em-format/e-mail-formatter-print.h>

#define E_MAIL_PRINT_CONFIG_HEADERS_GET_PRIVATE(obj) \
    (G_TYPE_INSTANCE_GET_PRIVATE \
    ((obj), E_TYPE_MAIL_PRINT_CONFIG_HEADERS, EMailPrintConfigHeadersPrivate))

struct _EMailPrintConfigHeadersPrivate {
    EMailPartHeaders *part;
};

enum {
    PROP_0,
    PROP_PART
};

G_DEFINE_TYPE (
    EMailPrintConfigHeaders,
    e_mail_print_config_headers,
    E_TYPE_TREE_VIEW_FRAME)

static void
mail_print_config_headers_toggled_cb (GtkCellRendererToggle *renderer,
                                      const gchar *path_string,
                                      ETreeViewFrame *tree_view_frame)
{
    GtkTreeView *tree_view;
    GtkTreeModel *tree_model;
    GtkTreeIter iter;
    gboolean include;

    tree_view = e_tree_view_frame_get_tree_view (tree_view_frame);

    tree_model = gtk_tree_view_get_model (tree_view);
    gtk_tree_model_get_iter_from_string (tree_model, &iter, path_string);

    gtk_tree_model_get (
        tree_model, &iter,
        E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_INCLUDE, &include, -1);

    gtk_list_store_set (
        GTK_LIST_STORE (tree_model), &iter,
        E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_INCLUDE, !include, -1);

    /* XXX Maybe not needed? */
    e_tree_view_frame_update_toolbar_actions (tree_view_frame);
}

static void
mail_print_config_headers_set_part (EMailPrintConfigHeaders *config,
                                    EMailPartHeaders *part)
{
    g_return_if_fail (E_IS_MAIL_PART_HEADERS (part));
    g_return_if_fail (config->priv->part == NULL);

    config->priv->part = g_object_ref (part);
}

static void
mail_print_config_headers_set_property (GObject *object,
                                        guint property_id,
                                        const GValue *value,
                                        GParamSpec *pspec)
{
    switch (property_id) {
        case PROP_PART:
            mail_print_config_headers_set_part (
                E_MAIL_PRINT_CONFIG_HEADERS (object),
                g_value_get_object (value));
            return;
    }

    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}

static void
mail_print_config_headers_get_property (GObject *object,
                                        guint property_id,
                                        GValue *value,
                                        GParamSpec *pspec)
{
    switch (property_id) {
        case PROP_PART:
            g_value_take_object (
                value,
                e_mail_print_config_headers_ref_part (
                E_MAIL_PRINT_CONFIG_HEADERS (object)));
            return;
    }

    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}

static void
mail_print_config_headers_dispose (GObject *object)
{
    EMailPrintConfigHeadersPrivate *priv;

    priv = E_MAIL_PRINT_CONFIG_HEADERS_GET_PRIVATE (object);

    g_clear_object (&priv->part);

    /* Chain up to parent's dispose() method. */
    G_OBJECT_CLASS (e_mail_print_config_headers_parent_class)->
        dispose (object);
}

static void
mail_print_config_headers_constructed (GObject *object)
{
    EMailPrintConfigHeaders *config;
    ETreeViewFrame *tree_view_frame;
    GtkAction *action;
    GtkTreeView *tree_view;
    GtkTreeSelection *selection;
    GtkTreeViewColumn *column;
    GtkCellRenderer *renderer;
    EMailPartHeaders *part;
    GtkTreeModel *print_model;
    const gchar *tooltip;

    config = E_MAIL_PRINT_CONFIG_HEADERS (object);

    /* Chain up to parent's constructed() method. */
    G_OBJECT_CLASS (e_mail_print_config_headers_parent_class)->
        constructed (object);

    tree_view_frame = E_TREE_VIEW_FRAME (object);
    tree_view = e_tree_view_frame_get_tree_view (tree_view_frame);

    gtk_tree_view_set_reorderable (tree_view, TRUE);

    /* Configure the toolbar actions. */

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_ADD);
    gtk_action_set_visible (action, FALSE);

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_REMOVE);
    gtk_action_set_visible (action, FALSE);

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_MOVE_TOP);
    tooltip = _("Move selected headers to top");
    gtk_action_set_tooltip (action, tooltip);

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_MOVE_UP);
    tooltip = _("Move selected headers up one row");
    gtk_action_set_tooltip (action, tooltip);

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_MOVE_DOWN);
    tooltip = _("Move selected headers down one row");
    gtk_action_set_tooltip (action, tooltip);

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_MOVE_BOTTOM);
    tooltip = _("Move selected headers to bottom");
    gtk_action_set_tooltip (action, tooltip);

    action = e_tree_view_frame_lookup_toolbar_action (
        tree_view_frame, E_TREE_VIEW_FRAME_ACTION_SELECT_ALL);
    tooltip = _("Select all headers");
    gtk_action_set_tooltip (action, tooltip);

    /* Configure the tree view columns. */

    column = gtk_tree_view_column_new ();
    renderer = gtk_cell_renderer_toggle_new ();
    gtk_tree_view_column_pack_start (column, renderer, FALSE);
    gtk_tree_view_column_add_attribute (
        column, renderer, "active",
        E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_INCLUDE);
    gtk_tree_view_append_column (tree_view, column);

    g_signal_connect (
        renderer, "toggled",
        G_CALLBACK (mail_print_config_headers_toggled_cb),
        tree_view_frame);

    column = gtk_tree_view_column_new ();
    gtk_tree_view_column_set_title (column, _("Header Name"));
    renderer = gtk_cell_renderer_text_new ();
    gtk_tree_view_column_pack_start (column, renderer, FALSE);
    gtk_tree_view_column_add_attribute (
        column, renderer, "text",
        E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_HEADER_NAME);
    gtk_tree_view_append_column (tree_view, column);

    column = gtk_tree_view_column_new ();
    gtk_tree_view_column_set_title (column, _("Header Value"));
    renderer = gtk_cell_renderer_text_new ();
    gtk_tree_view_column_pack_start (column, renderer, FALSE);
    gtk_tree_view_column_add_attribute (
        column, renderer, "text",
        E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_HEADER_VALUE);
    gtk_tree_view_append_column (tree_view, column);

    /* Set the tree model and selection mode. */

    part = e_mail_print_config_headers_ref_part (config);
    print_model = e_mail_part_headers_ref_print_model (part);
    gtk_tree_view_set_model (tree_view, print_model);
    g_object_unref (print_model);
    g_object_unref (part);

    selection = gtk_tree_view_get_selection (tree_view);
    gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
}

static void
e_mail_print_config_headers_class_init (EMailPrintConfigHeadersClass *class)
{
    GObjectClass *object_class;

    g_type_class_add_private (
        class, sizeof (EMailPrintConfigHeadersPrivate));

    object_class = G_OBJECT_CLASS (class);
    object_class->set_property = mail_print_config_headers_set_property;
    object_class->get_property = mail_print_config_headers_get_property;
    object_class->dispose = mail_print_config_headers_dispose;
    object_class->constructed = mail_print_config_headers_constructed;

    /**
     * EMailPartConfigHeaders:part:
     *
     * The #EMailPartHeaders to configure.
     **/
    g_object_class_install_property (
        object_class,
        PROP_PART,
        g_param_spec_object (
            "part",
            "Part",
            "The EMailPartHeaders to configure",
            E_TYPE_MAIL_PART_HEADERS,
            G_PARAM_READWRITE |
            G_PARAM_CONSTRUCT_ONLY |
            G_PARAM_STATIC_STRINGS));
}

static void
e_mail_print_config_headers_init (EMailPrintConfigHeaders *config)
{
    config->priv = E_MAIL_PRINT_CONFIG_HEADERS_GET_PRIVATE (config);
}

GtkWidget *
e_mail_print_config_headers_new (EMailPartHeaders *part)
{
    g_return_val_if_fail (E_IS_MAIL_PART_HEADERS (part), NULL);

    return g_object_new (
        E_TYPE_MAIL_PRINT_CONFIG_HEADERS,
        "part", part, NULL);
}

EMailPartHeaders *
e_mail_print_config_headers_ref_part (EMailPrintConfigHeaders *config)
{
    g_return_val_if_fail (E_IS_MAIL_PRINT_CONFIG_HEADERS (config), NULL);

    return g_object_ref (config->priv->part);
}