src/cmd/fsexam/src/fsexam-ui.c
author yz157939@agc105
Fri, 25 Apr 2008 17:13:57 +0800
changeset 149 0014c9b031e9
permissions -rw-r--r--
add fsexam 0.8.1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
149
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     1
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     2
 * CDDL HEADER START
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     3
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     7
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    11
 * and limitations under the License.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    12
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    18
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    19
 * CDDL HEADER END
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    20
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    21
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    22
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    23
 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    24
 * Use is subject to license terms.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    25
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    26
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    27
#ifdef HAVE_CONFIG_H
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    28
#include <config.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    29
#endif
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    30
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    31
#include <dirent.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    32
#include <sys/stat.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    33
#include <sys/types.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    34
#include <string.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    35
#include <stdlib.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    36
#include <stdio.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    37
#include <errno.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    38
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    39
#include <gtk/gtk.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    40
#include <gconf/gconf-client.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    41
#include <libgnome/libgnome.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    42
#include <libgnomeui/libgnomeui.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    43
#include <libgnomevfs/gnome-vfs.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    44
#include <libgnomevfs/gnome-vfs-mime.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    45
#include <glib.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    46
#include <glib/gi18n.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    47
#include <glade/glade.h>
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    48
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    49
#include "fsexam.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    50
#include "fsexam-header.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    51
#include "encoding.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    52
#include "fsexam-history.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    53
#include "fsexam-ui.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    54
#include "callbacks.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    55
#include "fsexam-dialog.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    56
#include "fsexam-dnd.h"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    57
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    58
FSEXAM_view *view;      // global variable 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    59
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    60
typedef struct _TreeItem TreeItem;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    61
struct _TreeItem
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    62
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    63
    GdkPixbuf   *icon;  // file icon
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    64
    gchar       *label;     // filename
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    65
    gboolean    loaded;  // meaningful only for directory
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    66
    TreeItem    *children;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    67
};
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    68
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    69
static gchar    *get_root_dir_name (const gchar *dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    70
static void     set_root_dir (const gchar *dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    71
static void     fsexam_treeitem_free (TreeItem *);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    72
static gint     get_dir_elements (DIR *dirp);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    73
static void     fsexam_treeview_set_title (const gchar *);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    74
static gint     set_item_collation (gconstpointer a, gconstpointer b);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    75
static void     treemodel_create_with_treeitem (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    76
                            GtkTreeStore *, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    77
                            TreeItem *, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    78
                            GtkTreeIter, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    79
                            gboolean);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    80
static gchar    *get_last_path (GtkTextBuffer *, GtkTextIter *);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    81
static void     common_construct_ui ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    82
static GString  *fsexam_filename_get_path (GtkTreeModel *, GtkTreeIter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    83
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    84
static GdkPixbuf    *get_file_pixbuf (const gchar *);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    85
static TreeItem     *fsexam_treeitem_create (const gchar *);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    86
static TreeItem     *fsexam_treeitem_create_from_list (GList *);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    87
static GtkTreeModel *fsexam_treemodel_create_with_treeitem (TreeItem *root);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    88
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    89
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    90
mainwin_destroy (GtkObject *object, gpointer user_data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    91
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    92
    force_quit = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    93
    fsexam_cleanup_all ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    94
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    95
    gtk_main_quit ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    96
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    97
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    98
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
    99
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   100
static gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   101
mainwin_delete (GtkObject *object, gpointer user_data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   102
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   103
    return FALSE;   /* return TRUE will not send 'destroy' signal */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   104
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   105
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   106
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   107
 *  dir can be NULL, ""(for file list), and abs_path
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   108
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   109
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   110
set_root_dir (const gchar *path)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   111
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   112
    gchar    *uri = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   113
    gchar    *dir = (gchar *)path;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   114
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   115
    g_free (view->rootdir);     //free old rootdir first
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   116
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   117
    if (dir == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   118
        view->rootdir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   119
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   120
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   121
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   122
    if (! g_file_test (path, G_FILE_TEST_IS_DIR)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   123
        dir = g_path_get_dirname (path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   124
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   125
        if ((*dir == '\0') || (g_utf8_validate (dir, -1, NULL))) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   126
            view->rootdir = g_strdup (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   127
            return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   128
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   129
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   130
        uri = g_filename_to_uri (dir, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   131
        view->rootdir = uri;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   132
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   133
        g_free (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   134
    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   135
        if ((*dir == '\0') || (g_utf8_validate (dir, -1, NULL))) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   136
            view->rootdir = g_strdup (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   137
            return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   138
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   139
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   140
        uri = g_filename_to_uri (dir, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   141
        view->rootdir = uri;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   142
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   143
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   144
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   145
} 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   146
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   147
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   148
 * Get the root dirname, may need convert from uri.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   149
 * free when don't need again.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   150
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   151
static gchar *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   152
get_root_dir_name (const gchar *rootdir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   153
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   154
    if (NULL == rootdir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   155
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   156
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   157
    if (*rootdir == 'f')  /* file:///... */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   158
        return g_filename_from_uri (rootdir, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   159
    else
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   160
        return g_strdup (rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   161
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   162
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   163
static gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   164
button_press (GtkWidget      *widget,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   165
              GdkEventButton *button,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   166
              gpointer       data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   167
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   168
    g_return_val_if_fail (button != NULL, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   169
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   170
    if (button->button == 1 && button->type == GDK_2BUTTON_PRESS) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   171
        cb_convert ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   172
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   173
        return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   174
    }else if (button->button == 2) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   175
        fsexam_content_peek (button->x_root, button->y_root);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   176
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   177
        return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   178
    }else if (button->button == 3) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   179
        GtkWidget *menu = view->popup_menu;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   180
        GtkWidget *w = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   181
        gboolean  sensitive;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   182
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   183
        /* undo menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   184
        w = g_object_get_data (G_OBJECT (menu), "popup_undo");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   185
        gtk_widget_set_sensitive (w, view->undo_list ? TRUE : FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   186
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   187
        /* conversion mode menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   188
        w = g_object_get_data (G_OBJECT (menu), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   189
                view->setting->pref->conv_content ? "popup_content_mode"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   190
                                                  : "popup_name_mode");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   191
        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   192
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   193
        /* scenario menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   194
        w = g_object_get_data (G_OBJECT (view->mainwin), "menu_scenario");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   195
        sensitive = GTK_WIDGET_IS_SENSITIVE (w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   196
        w = g_object_get_data (G_OBJECT (menu), "popup_scenario");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   197
        gtk_widget_set_sensitive (w, sensitive);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   198
        //gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), sensitive);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   199
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   200
        /* display the popup menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   201
        gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   202
                button->button, button->time);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   203
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   204
        return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   205
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   206
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   207
        return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   208
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   209
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   210
static gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   211
button_release (GtkWidget *widget, GdkEventButton *event, gpointer data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   212
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   213
    if (view->peekwin && event->button == 2) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   214
        gtk_object_destroy (GTK_OBJECT (view->peekwin));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   215
        view->peekwin = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   216
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   217
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   218
    return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   219
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   220
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   221
static gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   222
key_press (GtkWidget *widget, GdkEventKey *event, gpointer data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   223
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   224
    switch (event->keyval) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   225
        case GDK_space:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   226
            cb_convert ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   227
            return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   228
       /* case GDK_F12:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   229
            if (event->state == GDK_SHIFT_MASK) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   230
                printf ("shitf+F12\n");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   231
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   232
            printf ("F12\n");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   233
            return TRUE; */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   234
        default:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   235
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   236
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   237
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   238
    return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   239
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   240
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   241
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   242
 * Search give string at the same level with given iter
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   243
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   244
static GtkTreeIter *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   245
search_model_at_same_level (GtkTreeModel *model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   246
                            GtkTreeIter *iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   247
                            const gchar *string)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   248
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   249
    if ((NULL == string) || (NULL == iter))
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   250
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   251
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   252
    do {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   253
        gchar *name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   254
        gchar *internal_name = NULL;    /* escaped name */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   255
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   256
        /* get the escaped name */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   257
        gtk_tree_model_get (model, iter, FILENAME_COLUMN, &internal_name, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   258
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   259
        /* unescaped the escaped name */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   260
        name = g_strcompress (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   261
        g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   262
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   263
        if (strcmp (name, string) == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   264
            g_free (name);      /* found */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   265
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   266
            return gtk_tree_iter_copy (iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   267
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   268
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   269
        g_free (name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   270
    } while (gtk_tree_model_iter_next (model, iter));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   271
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   272
    return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   273
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   274
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   275
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   276
 * Update GtkTreeView which constructed from file list.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   277
 * The underlying store is GtkListStore
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   278
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   279
static void 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   280
update_gui_for_filelist (GtkTreeModel *model, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   281
                        const gchar *oldname, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   282
                        const gchar *newname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   283
                        GtkTreePath *treepath,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   284
                        gboolean    is_myself)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   285
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   286
    GtkTreeIter iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   287
    gint        old_name_len;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   288
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   289
    if ((NULL == model) || (NULL == oldname) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   290
            || (NULL == newname) || (NULL == view->basedir))
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   291
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   292
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   293
    if (! fsexam_is_subpath (oldname, view->basedir))
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   294
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   295
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   296
    if (! gtk_tree_model_get_iter_first (model, &iter)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   297
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   298
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   299
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   300
    old_name_len = strlen (oldname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   301
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   302
    do {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   303
        gchar *name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   304
        gchar *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   305
        gchar *tmp = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   306
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   307
        /* get the filename from TreeView */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   308
        gtk_tree_model_get (model, &iter, FILENAME_COLUMN, &internal_name, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   309
        name = g_strcompress (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   310
        g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   311
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   312
        /* oldname is prefix path of name ? */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   313
        if (g_str_has_prefix (name, oldname)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   314
            tmp = name + old_name_len;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   315
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   316
            /* construct new name */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   317
            if (*tmp == '\0') {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   318
                gchar *display_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   319
                gchar *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   320
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   321
                internal_name = g_strescape (newname, "");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   322
                display_name = fsexam_filename_display_basename (newname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   323
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   324
                gtk_list_store_set (GTK_LIST_STORE (model), &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   325
                        FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   326
                        DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   327
                        -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   328
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   329
                g_free (display_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   330
                g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   331
            }else if (*tmp == '/') {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   332
                gchar *new_full_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   333
                gchar *display_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   334
                gchar *internal_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   335
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   336
                new_full_name = g_strdup_printf ("%s/%s", newname, tmp + 1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   337
                display_name = fsexam_filename_display_basename (new_full_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   338
                internal_name = g_strescape (new_full_name, "");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   339
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   340
                gtk_list_store_set (GTK_LIST_STORE (model), &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   341
                        FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   342
                        DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   343
                        -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   344
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   345
                g_free (new_full_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   346
                g_free (display_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   347
                g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   348
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   349
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   350
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   351
        g_free (name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   352
    } while (gtk_tree_model_iter_next (model, &iter));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   353
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   354
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   355
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   356
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   357
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   358
 *  Update treeview_file
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   359
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   360
 *  is_myself is TRUE if conversion are caused by dir/file TreeView
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   361
 *  is_myself is FALSE if conversion are caused by search result Treeview 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   362
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   363
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   364
update_gui_for_dir (GtkTreeModel *model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   365
                    const gchar *path,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   366
                    const gchar *oldname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   367
                    const gchar *newname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   368
                    GtkTreePath *treepath,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   369
                    gboolean    is_myself)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   370
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   371
    GtkTreeIter iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   372
    GtkTreeIter *match_iter = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   373
    gchar       *rootdir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   374
    gchar       *remaining = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   375
    gchar       *display_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   376
    gchar       *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   377
    gchar       *path_clone = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   378
    gint        len;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   379
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   380
    display_name = fsexam_filename_display_name (newname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   381
    internal_name = g_strescape (newname, "");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   382
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   383
    if (is_myself && treepath != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   384
        gtk_tree_model_get_iter (model, &iter, treepath);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   385
        gtk_tree_store_set (GTK_TREE_STORE (model),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   386
                            &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   387
                            FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   388
                            DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   389
                            -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   390
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   391
        goto CLEAN_UP;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   392
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   393
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   394
    rootdir = get_root_dir_name (view->rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   395
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   396
    if (! g_str_has_prefix (path, rootdir)) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   397
        goto CLEAN_UP;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   398
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   399
    path_clone = g_strdup (path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   400
    len = strlen (rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   401
    remaining = path_clone + len;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   402
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   403
    if (! gtk_tree_model_get_iter_first (model, &iter)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   404
        goto CLEAN_UP;     /* empty tree */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   405
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   406
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   407
    if (*remaining == '\0') {   /* top level */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   408
        match_iter = search_model_at_same_level (model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   409
                                                 &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   410
                                                 oldname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   411
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   412
        if (match_iter == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   413
            goto CLEAN_UP;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   414
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   415
        gtk_tree_store_set (GTK_TREE_STORE (model), match_iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   416
                            FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   417
                            DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   418
                            -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   419
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   420
        gtk_tree_iter_free (match_iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   421
    }else if (*remaining == '/') {  /* iterate each directory level */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   422
        gchar       *cur = ++remaining; //skip the '/'
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   423
        gboolean    last_element;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   424
        gboolean    loaded;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   425
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   426
        while (TRUE) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   427
            if ((*remaining != '\0') && (*remaining != '/'))  {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   428
                ++remaining;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   429
                continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   430
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   431
               
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   432
            last_element = (*remaining == '\0') ? TRUE : FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   433
            *remaining = '\0';
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   434
            match_iter = search_model_at_same_level (model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   435
                                                     &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   436
                                                     cur);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   437
            if (match_iter == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   438
                break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   439
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   440
            if (! gtk_tree_model_iter_children (model, &iter, match_iter)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   441
                gtk_tree_iter_free (match_iter);    /* no children */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   442
                break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   443
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   444
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   445
            /* now iter is the first child of match_iter */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   446
            gtk_tree_model_get (model, match_iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   447
                                LOADED_COLUMN, &loaded,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   448
                                -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   449
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   450
            gtk_tree_iter_free (match_iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   451
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   452
            if (! loaded) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   453
                break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   454
            }else if (last_element) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   455
                match_iter = search_model_at_same_level (model, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   456
                                            &iter, oldname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   457
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   458
                if (match_iter != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   459
                    gchar *display_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   460
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   461
                    display_name = fsexam_filename_display_name (newname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   462
                    gtk_tree_store_set (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   463
                            GTK_TREE_STORE (model), match_iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   464
                            FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   465
                            DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   466
                            -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   467
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   468
                    gtk_tree_iter_free (match_iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   469
                    g_free (display_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   470
                }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   471
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   472
                break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   473
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   474
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   475
            cur = ++remaining;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   476
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   477
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   478
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   479
CLEAN_UP:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   480
    g_free (rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   481
    g_free (display_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   482
    g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   483
    g_free (path_clone);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   484
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   485
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   486
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   487
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   488
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   489
 *  Get the last path of GtkTextBuffer of report pane
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   490
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   491
static gchar *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   492
get_last_path (GtkTextBuffer *buffer, GtkTextIter *iter)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   493
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   494
    gchar   *text = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   495
    gint    line;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   496
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   497
    line = gtk_text_iter_get_line (iter) - 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   498
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   499
    while (line >= 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   500
        GtkTextIter start, end;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   501
        gtk_text_buffer_get_iter_at_line_offset (buffer, &start, line, 0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   502
        gtk_text_buffer_get_iter_at_line_offset (buffer, &end, line + 1, 0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   503
        text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   504
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   505
        if (*text != '\n' && *text != '\t') /* info line */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   506
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   507
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   508
        --line;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   509
        g_free (text);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   510
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   511
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   512
    if (text == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   513
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   514
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   515
    *(text + strlen (text) - 1) = '\0';     /* remove '\n' */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   516
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   517
    if (strncmp (text, "file:///", 8) == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   518
        gchar *tmp = g_filename_from_uri (text, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   519
        g_free (text);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   520
        text = tmp;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   521
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   522
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   523
    return text;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   524
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   525
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   526
// dummy TreeItem
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   527
static TreeItem demo_toplevel[] =
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   528
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   529
    { NULL, "", TRUE, NULL},
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   530
    { NULL }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   531
};
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   532
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   533
// copy from gsearchtool to load the pixbuf
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   534
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   535
#define ICON_THEME_EXECUTABLE_ICON "gnome-fs-executable"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   536
#define ICON_THEME_REGULAR_ICON    "gnome-fs-regular"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   537
#define ICON_THEME_CHAR_DEVICE     "gnome-fs-chardev"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   538
#define ICON_THEME_BLOCK_DEVICE    "gnome-fs-blockdev"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   539
#define ICON_THEME_SOCKET          "gnome-fs-socket"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   540
#define ICON_THEME_FIFO            "gnome-fs-fifo"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   541
#define ICON_THEME_SYMLINK         "emblem-symbolic-link"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   542
#define ICON_SIZE                  24
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   543
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   544
#if 0
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   545
static GdkPixbuf *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   546
get_file_pixbuf (const gchar *file)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   547
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   548
    GdkPixbuf *pixbuf = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   549
    gchar      *icon_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   550
    gchar      *escape_path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   551
    GnomeVFSFileInfo    *vfs_file_info = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   552
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   553
    vfs_file_info = gnome_vfs_file_info_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   554
    escape_path = gnome_vfs_escape_path_string (file);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   555
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   556
    gnome_vfs_get_file_info (escape_path, vfs_file_info,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   557
                            GNOME_VFS_FILE_INFO_DEFAULT | 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   558
                            GNOME_VFS_FILE_INFO_GET_MIME_TYPE |
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   559
                            GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   560
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   561
#endif 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   562
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   563
static GdkPixbuf *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   564
get_file_pixbuf (const gchar *file)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   565
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   566
    GdkPixbuf   *pixbuf = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   567
    gchar       *icon_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   568
    const gchar *mime_type;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   569
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   570
    mime_type = gnome_vfs_get_file_mime_type (file, NULL, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   571
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   572
    if (g_file_test (file, G_FILE_TEST_IS_SYMLINK)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   573
        icon_name = g_strdup (ICON_THEME_SYMLINK);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   574
    } else if (file == NULL || mime_type == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   575
        icon_name = g_strdup (ICON_THEME_REGULAR_ICON);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   576
    } else if ((g_file_test (file, G_FILE_TEST_IS_EXECUTABLE)) &&
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   577
           !g_ascii_strcasecmp (mime_type, "application/x-executable-binary")) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   578
        icon_name = g_strdup (ICON_THEME_EXECUTABLE_ICON);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   579
    } else if (!g_ascii_strcasecmp (mime_type, "x-special/device-char")) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   580
        icon_name = g_strdup (ICON_THEME_CHAR_DEVICE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   581
    } else if (!g_ascii_strcasecmp (mime_type, "x-special/device-block")) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   582
        icon_name = g_strdup (ICON_THEME_BLOCK_DEVICE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   583
    } else if (!g_ascii_strcasecmp (mime_type, "x-special/socket")) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   584
        icon_name = g_strdup (ICON_THEME_SOCKET);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   585
    } else if (!g_ascii_strcasecmp (mime_type, "x-special/fifo")) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   586
        icon_name = g_strdup (ICON_THEME_FIFO);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   587
    } else {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   588
      icon_name = gnome_icon_lookup (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   589
                        gtk_icon_theme_get_default (), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   590
                        NULL, file,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   591
                        NULL, NULL, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   592
                        mime_type, 0, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   593
                        NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   594
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   595
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   596
    if (icon_name == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   597
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   598
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   599
    pixbuf = (GdkPixbuf *)g_hash_table_lookup (view->pixbuf_hash, icon_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   600
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   601
    if (pixbuf == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   602
        pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   603
                                           icon_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   604
                                           ICON_SIZE, 0, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   605
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   606
        /* free icon_name when free view->pixbuf_hash */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   607
        if (pixbuf != NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   608
            g_hash_table_insert (view->pixbuf_hash,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   609
                    g_strdup (icon_name),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   610
                    pixbuf);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   611
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   612
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   613
    g_free (icon_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   614
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   615
    return pixbuf;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   616
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   617
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   618
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   619
 * free TreeItem and the memory it points to
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   620
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   621
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   622
fsexam_treeitem_free (TreeItem *item)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   623
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   624
    TreeItem *item2 = item;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   625
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   626
    // As one place holder, demo_toplevel isn't dynamically
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   627
    // generated, we can't free it
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   628
    if (NULL == item || item == demo_toplevel) return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   629
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   630
    while (TRUE) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   631
        if (item->label == NULL) /* all remaining TreeItem contain no data */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   632
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   633
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   634
        g_free (item->label);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   635
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   636
        if (item->icon != NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   637
            g_object_unref (item->icon);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   638
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   639
        if (item->children)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   640
            fsexam_treeitem_free (item->children);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   641
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   642
        ++item;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   643
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   644
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   645
    g_free (item2);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   646
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   647
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   648
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   649
 * Get the number of elements in given directory
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   650
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   651
static gint
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   652
get_dir_elements (DIR *dirp)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   653
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   654
    struct dirent *dp = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   655
    gint   num_elements = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   656
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   657
    if (dirp == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   658
        return 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   659
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   660
    while ((dp = readdir (dirp)) != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   661
        ++num_elements;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   662
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   663
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   664
    rewinddir (dirp);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   665
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   666
    return num_elements;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   667
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   668
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   669
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   670
 * Change the title of treeview to indicate the current root directory
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   671
 * that treeview is based on.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   672
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   673
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   674
fsexam_treeview_set_title (const gchar *title)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   675
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   676
    GtkWidget         *w;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   677
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   678
    w = g_object_get_data (G_OBJECT (view->mainwin), "entry_folder");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   679
    gtk_entry_set_text (GTK_ENTRY (w), title);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   680
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   681
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   682
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   683
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   684
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   685
 * TODO: collation for non-utf8
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   686
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   687
static gint
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   688
set_item_collation (gconstpointer a, gconstpointer b)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   689
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   690
    TreeItem *item_a = (TreeItem *)a;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   691
    TreeItem *item_b = (TreeItem *)b;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   692
    gint     retval;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   693
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   694
    if (!item_a->label || !item_b->label) return -1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   695
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   696
    // put directory ahead
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   697
    if (item_a->children && !item_b->children)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   698
      return -1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   699
    if (!item_a->children && item_b->children)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   700
      return 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   701
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   702
    retval = g_strcasecmp (item_a->label, item_b->label);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   703
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   704
    return (retval == 0 ?  (strcmp (item_a->label, item_b->label) > 0 ? -1 : 1)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   705
                        : retval);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   706
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   707
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   708
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   709
 *  Create TreeItem list from given directory
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   710
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   711
static TreeItem *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   712
fsexam_treeitem_create (const gchar *dir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   713
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   714
    struct stat stat_buf;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   715
    struct dirent *dp = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   716
    TreeItem     *tree = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   717
    TreeItem     *item = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   718
    DIR          *dirp;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   719
    gint         count;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   720
    gchar        *msg = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   721
    gint         filenum = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   722
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   723
    if (NULL == dir || lstat (dir, &stat_buf) == -1) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   724
        goto _ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   725
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   726
    if (! S_ISDIR (stat_buf.st_mode)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   727
        tree = g_new0 (TreeItem, 2);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   728
        tree->icon = get_file_pixbuf (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   729
        tree->label = g_path_get_basename (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   730
        tree->loaded = 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   731
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   732
        return tree;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   733
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   734
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   735
    dirp = opendir (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   736
    if (dirp == NULL) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   737
        goto _ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   738
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   739
    filenum = get_dir_elements (dirp);  //contain '.' and '..'
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   740
    tree = g_new0 (TreeItem, filenum);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   741
    count = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   742
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   743
    while (((dp = readdir (dirp)) != NULL)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   744
        gchar    *name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   745
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   746
        if ((strcmp (dp->d_name, ".") == 0) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   747
                || (strcmp (dp->d_name, "..") == 0)) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   748
            continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   749
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   750
        name = g_strdup_printf ("%s/%s", dir, dp->d_name); 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   751
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   752
        item = tree + count;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   753
        item->label = g_strdup (dp->d_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   754
        item->loaded = 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   755
        item->icon = get_file_pixbuf (name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   756
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   757
        if (lstat (name, &stat_buf) == 0 && S_ISDIR (stat_buf.st_mode)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   758
             // mark it is unloaded yet and put demo_toplevel as its children
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   759
             // to act as one placeholder
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   760
             item->loaded = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   761
             item->children = demo_toplevel;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   762
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   763
      
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   764
        g_free (name);  
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   765
        ++count;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   766
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   767
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   768
    closedir (dirp);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   769
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   770
    qsort (tree, count, sizeof (TreeItem), set_item_collation);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   771
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   772
    return tree;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   773
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   774
 _ERR:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   775
    switch (errno) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   776
        case EACCES:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   777
            msg = g_strdup_printf (_("No read permission"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   778
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   779
        case ENOENT:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   780
            msg = g_strdup_printf (_("File doesn't exist"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   781
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   782
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   783
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   784
    if (!dir) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   785
        msg = g_strdup_printf (_("No folder specified"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   786
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   787
    if (msg) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   788
        GtkWidget *notebook = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   789
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   790
        /* show conversion log notebook page */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   791
        notebook = g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   792
                "notebook_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   793
        gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   794
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   795
        fsexam_statusbar_update (msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   796
        fsexam_gui_display_msg (dir, msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   797
        g_free (msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   798
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   799
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   800
    return demo_toplevel;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   801
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   802
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   803
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   804
 * Create TreeItem list from file list
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   805
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   806
static TreeItem *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   807
fsexam_treeitem_create_from_list (GList *files)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   808
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   809
    TreeItem        *tree = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   810
    TreeItem        *item = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   811
    struct stat     buf;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   812
    GList           *current;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   813
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   814
    tree = g_new0 (TreeItem, g_list_length (files) + 1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   815
    item = tree;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   816
    current = files;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   817
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   818
    while (current != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   819
        gchar *filename = current->data;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   820
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   821
        current = g_list_next (current);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   822
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   823
        if ((lstat (filename, &buf) < 0)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   824
            fsexam_gui_display_msg (filename, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   825
                        _("File does not exist or no access permission."));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   826
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   827
            continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   828
        }else if (!(S_ISREG(buf.st_mode)) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   829
                && !(S_ISDIR(buf.st_mode)) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   830
                && !(S_ISLNK(buf.st_mode))) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   831
            fsexam_gui_display_msg (filename, _("File type is not supported."));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   832
            continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   833
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   834
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   835
        item->label = get_abs_path (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   836
        item->loaded = 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   837
        item->icon = get_file_pixbuf (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   838
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   839
        item ++;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   840
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   841
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   842
    return tree;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   843
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   844
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   845
/* create GtkTreeModel from TreeItem list */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   846
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   847
treemodel_create_with_treeitem (GtkTreeStore *model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   848
                                TreeItem *item,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   849
                                GtkTreeIter parent_iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   850
                                gboolean is_root)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   851
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   852
    GtkTreeIter iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   853
    gchar       *display_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   854
    gchar       *internal_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   855
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   856
    if (NULL == item)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   857
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   858
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   859
    while (item->label != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   860
        TreeItem *subitem = item->children;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   861
        display_name = fsexam_filename_display_name (item->label);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   862
        internal_name = g_strescape (item->label, "");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   863
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   864
        if (is_root)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   865
            gtk_tree_store_append(model, &iter, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   866
        else
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   867
            gtk_tree_store_append(model, &iter, &parent_iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   868
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   869
        gtk_tree_store_set (model, &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   870
                            ICON_COLUMN, item->icon,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   871
                            FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   872
                            DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   873
                            LOADED_COLUMN, item->loaded,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   874
                            -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   875
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   876
        if (subitem)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   877
            treemodel_create_with_treeitem(model, subitem, iter, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   878
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   879
        g_free (display_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   880
        g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   881
        item++;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   882
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   883
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   884
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   885
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   886
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   887
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   888
 * Concatenate each part to generate its full path name
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   889
 * The returned GString should be freed with g_string_free ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   890
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   891
 * please be sure that the third param is view->rootdir
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   892
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   893
static GString *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   894
fsexam_filename_get_path (GtkTreeModel *model, GtkTreeIter iter)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   895
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   896
    GtkTreeIter parent;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   897
    GString     *dir;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   898
    gchar       *fullpath = get_root_dir_name (view->rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   899
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   900
    dir = g_string_new (NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   901
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   902
    while (gtk_tree_model_iter_parent (model, &parent, &iter)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   903
        gchar *filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   904
        gchar *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   905
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   906
        gtk_tree_model_get (model, &parent,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   907
                            FILENAME_COLUMN, &internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   908
                            -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   909
       
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   910
        filename = g_strcompress (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   911
        dir = g_string_prepend (dir, filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   912
        dir = g_string_prepend (dir, "/");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   913
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   914
        g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   915
        g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   916
        iter = parent; 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   917
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   918
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   919
    if (fullpath) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   920
        // if it ends with '/', modify it to avoid two consecutive slashes
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   921
        gchar *ch = fullpath + strlen (fullpath) - 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   922
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   923
        if (*ch == '/') 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   924
            *ch = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   925
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   926
        dir = g_string_prepend (dir, fullpath);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   927
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   928
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   929
    g_free (fullpath);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   930
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   931
    return dir;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   932
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   933
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   934
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   935
 * Concatenate each part to generate its full file name
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   936
 * The returned GString should be freed with g_string_free ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   937
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   938
gchar *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   939
fsexam_filename_get_fullname (GtkTreeModel *model, GtkTreeIter *iter)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   940
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   941
    GString     *fullname = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   942
    gchar       *filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   943
    gchar       *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   944
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   945
    gtk_tree_model_get (model, iter,              
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   946
                        FILENAME_COLUMN, &internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   947
                        -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   948
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   949
    filename = g_strcompress (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   950
    g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   951
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   952
    if (*filename == '/') {     /* search result treeview */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   953
        return filename;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   954
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   955
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   956
    /* upper-left corner treeview, not search result treeview */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   957
    fullname = fsexam_filename_get_path (model, *iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   958
    fullname = g_string_append (fullname, "/");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   959
    fullname = g_string_append (fullname, filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   960
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   961
    g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   962
    filename = g_string_free (fullname, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   963
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   964
    return filename;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   965
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   966
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   967
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   968
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   969
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   970
 * Check if it is one directory which hasn't been loaded yet,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   971
 * if yes, load its files and add into model.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   972
 * If permission issue exists, collapse the directory row and
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   973
 * write error message to statusbar. 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   974
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   975
gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   976
fsexam_treeview_expand (GtkWidget *widget,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   977
                        GtkTreeIter *iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   978
                        GtkTreePath *path,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   979
                        gpointer user_data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   980
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   981
    GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   982
    gboolean    loaded;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   983
    gchar       *filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   984
    gchar       *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   985
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   986
    gtk_tree_model_get (model, iter,              
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   987
                        FILENAME_COLUMN, &internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   988
                        LOADED_COLUMN, &loaded,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   989
                        -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   990
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   991
    filename = g_strcompress (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   992
    g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   993
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   994
    if (!loaded) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   995
        GtkTreeIter dummy_iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   996
        TreeItem    *item = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   997
        GString     *dir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   998
        gchar       *name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
   999
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1000
        dir = fsexam_filename_get_path (model, *iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1001
        name = g_strdup_printf ("%s/%s", dir->str, filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1002
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1003
        item = fsexam_treeitem_create (name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1004
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1005
        if (item == demo_toplevel) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1006
            fsexam_statusbar_update (_("No read permission"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1007
            gtk_tree_view_collapse_row (GTK_TREE_VIEW (widget), path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1008
        } else if (!item->label) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1009
            fsexam_statusbar_update (_("Empty folder"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1010
            gtk_tree_view_collapse_row (GTK_TREE_VIEW (widget), path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1011
        } else {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1012
            treemodel_create_with_treeitem (GTK_TREE_STORE (model), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1013
                                            item,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1014
                                            *iter, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1015
                                            FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1016
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1017
            // change it's status
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1018
            gtk_tree_store_set (GTK_TREE_STORE (model), iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1019
                                LOADED_COLUMN, TRUE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1020
                                -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1021
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1022
            // dummy_iter will be the first child of iter.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1023
            // it is demo_toplevel, need remove it
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1024
            gtk_tree_model_iter_children (model, &dummy_iter, iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1025
            gtk_tree_store_remove (GTK_TREE_STORE (model), &dummy_iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1026
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1027
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1028
        g_string_free (dir, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1029
        free(name);  
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1030
        fsexam_treeitem_free (item); 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1031
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1032
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1033
    g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1034
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1035
    return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1036
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1037
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1038
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1039
 * Create GtkTreeModel using given TreeItem list
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1040
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1041
static GtkTreeModel *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1042
fsexam_treemodel_create_with_treeitem (TreeItem *root)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1043
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1044
    GtkTreeStore     *model;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1045
    GtkTreeIter      iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1046
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1047
    if (root == NULL) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1048
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1049
 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1050
    model = gtk_tree_store_new (NUM_COLUMNS,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1051
                                GDK_TYPE_PIXBUF,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1052
                                G_TYPE_STRING,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1053
                                G_TYPE_STRING,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1054
                                G_TYPE_BOOLEAN);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1055
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1056
    treemodel_create_with_treeitem (model, root, iter, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1057
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1058
    return GTK_TREE_MODEL (model);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1059
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1060
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1061
/* 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1062
 * create GtkTreeView from single directory 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1063
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1064
 * dir need to be absolute path
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1065
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1066
gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1067
fsexam_treeview_construct (const gchar *dir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1068
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1069
    TreeItem         *toplevel;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1070
    GtkWidget        *widget;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1071
    GtkTreeModel     *model;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1072
    GtkTreeSelection *selection;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1073
    GtkTreeIter      iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1074
    gchar            *abs_path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1075
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1076
    if (dir == NULL) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1077
        return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1078
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1079
    if (g_file_test (dir, G_FILE_TEST_IS_SYMLINK)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1080
        abs_path = get_abs_path_for_symlink_target (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1081
    } else {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1082
        abs_path = get_abs_path (dir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1083
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1084
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1085
    if (abs_path == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1086
        fsexam_gui_display_msg (dir,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1087
                g_file_test (dir, G_FILE_TEST_IS_SYMLINK) ? 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1088
                _("Symlink target doesn't exist") : 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1089
                _("doesn't exist"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1090
        fsexam_gui_display_stats (view->setting);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1091
   
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1092
        return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1093
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1094
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1095
    /* Create TreeItem from directory name */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1096
    if ((toplevel = fsexam_treeitem_create (abs_path)) == demo_toplevel) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1097
        g_free (abs_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1098
        return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1099
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1100
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1101
    set_root_dir (abs_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1102
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1103
    widget = g_object_get_data (G_OBJECT (view->mainwin), "treeview_file");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1104
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1105
    /* Create GtkTreeModel from TreeItem list */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1106
    model = fsexam_treemodel_create_with_treeitem (toplevel);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1107
    gtk_tree_view_set_model (GTK_TREE_VIEW (widget), model);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1108
    fsexam_treeitem_free (toplevel);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1109
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1110
    /* select the first row by default */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1111
    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1112
    if (gtk_tree_model_get_iter_first (model, &iter)) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1113
        gtk_tree_selection_select_iter (selection, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1114
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1115
    if (view->rootdir) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1116
        fsexam_treeview_set_title (view->rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1117
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1118
    g_free (abs_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1119
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1120
    return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1121
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1122
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1123
/* create GtkTreeView from multiple files */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1124
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1125
fsexam_treeview_construct_from_list (GList *list)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1126
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1127
    TreeItem        *toplevel;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1128
    GtkWidget       *widget;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1129
    GtkTreeModel    *model;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1130
    GtkTreeIter     iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1131
    GtkTreeSelection *selection;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1132
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1133
    if (NULL == list)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1134
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1135
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1136
    g_free (view->rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1137
    view->rootdir = g_strdup (FSEXAM_ROOT_DIR);  
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1138
    fsexam_treeview_set_title (view->rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1139
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1140
    widget = g_object_get_data (G_OBJECT (view->mainwin), "treeview_file");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1141
    toplevel = fsexam_treeitem_create_from_list (list);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1142
    model = fsexam_treemodel_create_with_treeitem (toplevel);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1143
    gtk_tree_view_set_model (GTK_TREE_VIEW (widget), model);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1144
    fsexam_treeitem_free (toplevel);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1145
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1146
    /* select the first row by default */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1147
    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1148
    gtk_tree_model_get_iter_first (model, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1149
    gtk_tree_selection_select_iter (selection, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1150
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1151
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1152
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1153
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1154
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1155
fsexam_statusbar_update (gchar *msg)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1156
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1157
    GtkWidget *statusbar;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1158
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1159
    statusbar = g_object_get_data (G_OBJECT (view->mainwin), "appbar");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1160
    gnome_appbar_pop (GNOME_APPBAR (statusbar));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1161
    gnome_appbar_push (GNOME_APPBAR(statusbar), msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1162
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1163
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1164
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1165
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1166
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1167
 * Clear statusbar
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1168
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1169
gboolean 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1170
fsexam_statusbar_fresh ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1171
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1172
    fsexam_statusbar_update ("");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1173
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1174
    return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1175
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1176
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1177
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1178
 * Get the filename from GtkFileChooser
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1179
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1180
 * Ask to convert to UTF-8 if filename is not UTF-8 encoded.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1181
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1182
gchar *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1183
fsexam_file_chooser_get_name (const gchar *title, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1184
                              GtkFileChooserAction action, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1185
                              gboolean no_check, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1186
                              gboolean ensure_utf8)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1187
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1188
    GtkWidget   *dialog;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1189
    gchar       *filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1190
    const gchar *emp_msg = N_("The selected file is not empty, do you want to override it?");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1191
    const gchar *nonutf8_msg = N_("The selected file is not UTF-8 encoded, we strongly suggest you to use UTF-8 filename.\n\n Do you want to convert it to UTF8?");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1192
    const gchar *converr_msg = N_("Can't convert %s to UTF8: %s.\n\nPlease Note that there may exist partial conversion.\n So please Refresh you directory and select file again.");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1193
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1194
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1195
    dialog = gtk_file_chooser_dialog_new (title,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1196
                            GTK_WINDOW (view->mainwin),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1197
                            action,   //GTK_FILE_CHOOSER_ACTION_OPEN,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1198
                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1199
                            GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1200
                            NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1201
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1202
    while (TRUE) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1203
        if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1204
            filename = gtk_file_chooser_get_filename (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1205
                            GTK_FILE_CHOOSER (dialog));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1206
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1207
            if (filename == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1208
                continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1209
            if (no_check)   /* don't need any check so break */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1210
                break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1211
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1212
            if (action == GTK_FILE_CHOOSER_ACTION_OPEN) { /* Open REG file */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1213
                struct stat statbuf;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1214
                
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1215
                stat (filename, &statbuf);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1216
                if (statbuf.st_size != 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1217
                    if (! fsexam_gui_show_yesno_dialog (GTK_WINDOW (dialog), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1218
                                _(emp_msg))) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1219
                        g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1220
                        filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1221
                        continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1222
                    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1223
                }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1224
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1225
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1226
            if ((ensure_utf8) && ! g_utf8_validate (filename, -1, NULL)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1227
                if (fsexam_gui_show_yesno_dialog (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1228
                            GTK_WINDOW (dialog), _(nonutf8_msg))) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1229
                    gboolean ret;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1230
                    gchar    *result = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1231
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1232
                    ret = fsexam_convert_single_filename (view->setting,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1233
                                                          filename,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1234
                                                          &result);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1235
                    if (ret) {  /* convert success */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1236
                        g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1237
                        filename = result;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1238
                        break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1239
                    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1240
                        gchar *uri; 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1241
                        GtkWidget *dlg;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1242
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1243
                        if (fsexam_errno == ERR_CANCEL_CONVERSION) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1244
                            g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1245
                            filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1246
                            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1247
                        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1248
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1249
                        uri = g_filename_to_uri (filename, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1250
                        dlg = gtk_message_dialog_new (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1251
                                            GTK_WINDOW (dialog),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1252
                                            GTK_DIALOG_DESTROY_WITH_PARENT,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1253
                                            GTK_MESSAGE_ERROR,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1254
                                            GTK_BUTTONS_CLOSE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1255
                                            _(converr_msg),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1256
                                            uri,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1257
                                            fsexam_error_get_msg ());
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1258
                        g_signal_connect (G_OBJECT (dlg), "response",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1259
                                          G_CALLBACK (gtk_widget_destroy),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1260
                                          NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1261
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1262
                        gtk_dialog_run (GTK_DIALOG (dlg));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1263
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1264
                        gtk_widget_destroy (dlg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1265
                        g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1266
                        g_free (uri);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1267
                        filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1268
                        continue;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1269
                    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1270
                }else{  /* fsexam_gui_show_yesno_dialog (...) */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1271
                    break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1272
                }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1273
            }else{  /* if  ((ensure_utf8) && !g_utf8_validate (...) */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1274
                break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1275
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1276
        }else{  /* if (GTK_DIALOG_RUN (dialog) == GTK_RESPONSE_ACCEPT) */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1277
            g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1278
            filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1279
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1280
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1281
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1282
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1283
    gtk_widget_destroy (dialog);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1284
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1285
    return filename;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1286
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1287
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1288
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1289
 * If dir is symlink or under symlink directory, convert it
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1290
 * to absolute path firstly.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1291
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1292
void 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1293
fsexam_change_dir (const gchar *dir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1294
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1295
    if (dir == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1296
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1297
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1298
    if (view->rootdir != NULL && strcmp (dir, view->rootdir) == 0) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1299
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1300
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1301
    if (! fsexam_treeview_construct (dir))
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1302
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1303
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1304
    fsexam_undo_removeall ();       /* clear undo stack */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1305
    fsexam_statusbar_fresh ();      /* refresh the status bar msg stack */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1306
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1307
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1308
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1309
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1310
/* callback for open menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1311
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1312
fsexam_choose_dir ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1313
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1314
    gchar *filename = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1315
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1316
    filename = fsexam_file_chooser_get_name (_("Folder Selection"),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1317
                                GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1318
                                FALSE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1319
                                TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1320
    fsexam_change_dir (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1321
    g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1322
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1323
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1324
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1325
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1326
void 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1327
show_help()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1328
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1329
    GError *err = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1330
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1331
    gnome_help_display ("fsexam.xml", "fsexam-intro", &err);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1332
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1333
    if (err) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1334
        GtkWidget *dialog;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1335
        dialog = gtk_message_dialog_new (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1336
                        GTK_WINDOW (view->mainwin),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1337
                        GTK_DIALOG_DESTROY_WITH_PARENT,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1338
                        GTK_MESSAGE_ERROR,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1339
                        GTK_BUTTONS_CLOSE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1340
                        _("There was an error when displaying help: %s"),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1341
                        err->message);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1342
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1343
        g_signal_connect (G_OBJECT (dialog),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1344
                          "response",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1345
                          G_CALLBACK (gtk_widget_destroy),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1346
                          NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1347
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1348
        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1349
        gtk_widget_show (dialog);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1350
        g_error_free (err);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1351
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1352
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1353
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1354
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1355
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1356
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1357
fsexam_about ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1358
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1359
    static GtkWidget *about = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1360
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1361
    gchar *authors [] = {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1362
        "Yandong Yao <[email protected]>",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1363
        "Federic Zhang <[email protected]>",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1364
        "Yong Sun <[email protected]>",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1365
        NULL
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1366
    };
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1367
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1368
    if (about != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1369
        gtk_window_present (GTK_WINDOW (about));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1370
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1371
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1372
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1373
    about = gnome_about_new (("fsexam"), VERSION,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1374
               "Copyright 2003-2008",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1375
               _("fsexam is to help migrate file name and file content from"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1376
                 " legacy encoding to UTF8"),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1377
               (const gchar **)authors,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1378
               NULL, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1379
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1380
    gtk_window_set_destroy_with_parent (GTK_WINDOW (about), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1381
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1382
    g_signal_connect (G_OBJECT (about), "destroy",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1383
                      G_CALLBACK (gtk_widget_destroyed), &about);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1384
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1385
    gtk_widget_show (about);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1386
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1387
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1388
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1389
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1390
/* construct GtkTreeView column and renderer */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1391
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1392
common_construct_ui ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1393
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1394
    static gboolean     initialized = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1395
    GtkCellRenderer     *renderer;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1396
    GtkTreeViewColumn   *column;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1397
    GtkWidget           *treeview;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1398
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1399
    if (initialized)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1400
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1401
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1402
    initialized = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1403
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1404
    /* construct tree view */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1405
    treeview = g_object_get_data (G_OBJECT (view->mainwin), "treeview_file");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1406
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1407
    /* ICON_COLUMN + DISPLAYNAME_COLUMN */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1408
    column = gtk_tree_view_column_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1409
 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1410
    /* Icon renderer */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1411
    renderer = gtk_cell_renderer_pixbuf_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1412
    gtk_tree_view_column_pack_start (column, renderer, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1413
    gtk_tree_view_column_set_attributes (column, renderer,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1414
                                         "pixbuf", ICON_COLUMN,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1415
                                         NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1416
 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1417
    /* text renderer */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1418
    renderer = gtk_cell_renderer_text_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1419
    gtk_tree_view_column_pack_start (column, renderer, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1420
    gtk_tree_view_column_set_attributes (column, renderer,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1421
                                         "text", DISPLAYNAME_COLUMN,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1422
                                         NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1423
  
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1424
    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1425
    gtk_tree_view_column_set_resizable (column, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1426
    gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1427
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1428
//    gtk_tree_view_column_set_sort_column_id (column, FILENAME_COLUMN);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1429
    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1430
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1431
    /* FILENAME_COLUMN */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1432
    column = gtk_tree_view_column_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1433
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1434
    renderer = gtk_cell_renderer_text_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1435
    gtk_tree_view_column_pack_start (column, renderer, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1436
    gtk_tree_view_column_set_attributes (column, renderer,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1437
                                         "text", FILENAME_COLUMN,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1438
                                         NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1439
  
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1440
    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1441
    gtk_tree_view_column_set_resizable (column, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1442
    gtk_tree_view_column_set_visible (column, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1443
    gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1444
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1445
    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1446
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1447
    /* set GtkTreeView selection mode */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1448
    gtk_tree_selection_set_mode (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1449
          gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1450
          GTK_SELECTION_MULTIPLE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1451
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1452
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1453
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1454
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1455
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1456
 * Construct file list in the left pane and display dirname in location 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1457
 * field.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1458
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1459
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1460
fsexam_construct_ui (const gchar *dir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1461
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1462
    if (NULL == dir)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1463
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1464
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1465
    common_construct_ui ();             /* create GtkTreeView */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1466
    fsexam_treeview_construct (dir);    /* create GtkTreeModel */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1467
                                
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1468
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1469
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1470
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1471
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1472
 * Create and show search pane 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1473
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1474
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1475
create_search_treeview_column (GtkTreeView *treeview)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1476
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1477
    GtkTreeViewColumn   *column = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1478
    GtkCellRenderer     *renderer = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1479
    GtkListStore        *model = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1480
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1481
    /* Create empty list store */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1482
    model = gtk_list_store_new (3, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1483
            GDK_TYPE_PIXBUF, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1484
            G_TYPE_STRING, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1485
            G_TYPE_STRING);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1486
    gtk_tree_view_set_model (treeview, GTK_TREE_MODEL (model));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1487
    g_object_unref (model);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1488
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1489
    //gtk_tree_view_set_headers_visible (treeview, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1490
    gtk_tree_selection_set_mode (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1491
            gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1492
            GTK_SELECTION_MULTIPLE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1493
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1494
    /* display name column */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1495
    column = gtk_tree_view_column_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1496
    //gtk_tree_view_column_set_title (column, _("Name"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1497
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1498
    renderer = gtk_cell_renderer_pixbuf_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1499
    gtk_tree_view_column_pack_start (column, renderer, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1500
    gtk_tree_view_column_set_attributes (column, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1501
            renderer, "pixbuf", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1502
            ICON_COLUMN, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1503
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1504
    renderer = gtk_cell_renderer_text_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1505
    gtk_tree_view_column_pack_start (column, renderer, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1506
    gtk_tree_view_column_set_attributes (column, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1507
            renderer, "text", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1508
            DISPLAYNAME_COLUMN, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1509
            NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1510
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1511
    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1512
    gtk_tree_view_column_set_resizable (column, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1513
    gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1514
    //gtk_tree_view_column_set_sort_column_id (column, DISPLAYNAME_COLUMN);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1515
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1516
    gtk_tree_view_append_column (treeview, column);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1517
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1518
    /* real name column */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1519
    column = gtk_tree_view_column_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1520
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1521
    renderer = gtk_cell_renderer_text_new ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1522
    gtk_tree_view_column_pack_start (column, renderer, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1523
    gtk_tree_view_column_set_attributes (column, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1524
            renderer, "text", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1525
            FILENAME_COLUMN, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1526
            NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1527
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1528
    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1529
    gtk_tree_view_column_set_resizable (column, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1530
    gtk_tree_view_column_set_visible (column, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1531
    gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1532
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1533
    gtk_tree_view_append_column (treeview, column);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1534
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1535
    /* connect signals */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1536
    gtk_widget_add_events (GTK_WIDGET (treeview), GDK_BUTTON_PRESS_MASK);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1537
    g_signal_connect (G_OBJECT (treeview), "button_press_event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1538
                      G_CALLBACK (button_press), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1539
    g_signal_connect (G_OBJECT (treeview), "button_release_event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1540
                      G_CALLBACK (button_release), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1541
    g_signal_connect (G_OBJECT (treeview), "key_press_event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1542
                      G_CALLBACK (key_press), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1543
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1544
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1545
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1546
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1547
void 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1548
fsexam_search_treeview_show ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1549
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1550
    GtkWidget *treeview = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1551
    GtkWidget *widget = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1552
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1553
    treeview = g_object_get_data (G_OBJECT (view->mainwin), "treeview_search");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1554
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1555
    if (gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)) == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1556
        create_search_treeview_column (GTK_TREE_VIEW (treeview));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1557
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1558
    /* show the search result pane for the first time */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1559
    widget = g_object_get_data (G_OBJECT (view->mainwin), "vpaned_main");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1560
    gtk_widget_show (gtk_paned_get_child2 (GTK_PANED (widget)));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1561
    gtk_paned_set_position (GTK_PANED (widget), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1562
                            2 * widget->allocation.height / 3);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1563
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1564
    /* check search result menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1565
    widget = g_object_get_data (G_OBJECT (view->mainwin), "menu_search_result");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1566
    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1567
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1568
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1569
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1570
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1571
void 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1572
fsexam_search_treeview_hide ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1573
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1574
    GtkWidget *vpaned_main = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1575
    GtkWidget *widget = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1576
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1577
    vpaned_main = g_object_get_data (G_OBJECT (view->mainwin), "vpaned_main");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1578
    gtk_paned_set_position (GTK_PANED (vpaned_main), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1579
                            vpaned_main->allocation.height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1580
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1581
    /* check search result menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1582
    widget = g_object_get_data (G_OBJECT (view->mainwin), "menu_search_result");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1583
    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1584
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1585
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1586
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1587
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1588
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1589
 * Append search result into search result listview 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1590
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1591
 * If filename == NULL, then show result pane and clear old result only
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1592
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1593
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1594
fsexam_search_treeview_append_file (const gchar *filename, gboolean first_file)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1595
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1596
    GtkTreeView     *treeview = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1597
    GtkListStore    *model = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1598
    GtkTreeIter     iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1599
    gchar           *abs_path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1600
    gchar           *display_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1601
    gchar           *internal_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1602
    gboolean        showned;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1603
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1604
    showned = gtk_check_menu_item_get_active (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1605
            g_object_get_data (G_OBJECT (view->mainwin), "menu_search_result"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1606
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1607
    if (!showned)   /* show search result treeview if not */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1608
        fsexam_search_treeview_show ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1609
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1610
    treeview = GTK_TREE_VIEW (g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1611
                              "treeview_search"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1612
    model = GTK_LIST_STORE (gtk_tree_view_get_model (treeview));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1613
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1614
    if (first_file) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1615
        gtk_list_store_clear (model);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1616
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1617
   
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1618
    if (filename == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1619
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1620
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1621
    abs_path = get_abs_path (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1622
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1623
    if (abs_path == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1624
        fsexam_gui_display_msg (filename,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1625
                g_file_test (filename, G_FILE_TEST_IS_SYMLINK) ? 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1626
                _("Symlink target doesn't exist") : 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1627
                _("doesn't exist"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1628
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1629
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1630
   
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1631
    /* add search result into search tree view */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1632
    display_name = fsexam_filename_display_name (abs_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1633
    internal_name = g_strescape (abs_path, "");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1634
    gtk_list_store_append(model, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1635
    gtk_list_store_set (model, &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1636
                       ICON_COLUMN, get_file_pixbuf (abs_path),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1637
                       DISPLAYNAME_COLUMN, display_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1638
                       FILENAME_COLUMN, internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1639
                       -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1640
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1641
    g_free (abs_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1642
    g_free (display_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1643
    g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1644
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1645
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1646
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1647
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1648
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1649
fsexam_search_treeview_append_list (GList *list)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1650
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1651
    GtkWidget *notebook = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1652
    gboolean  first_file = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1653
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1654
    if (list == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1655
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1656
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1657
    while (list) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1658
        fsexam_search_treeview_append_file (list->data, first_file);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1659
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1660
        first_file = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1661
        list = list->next;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1662
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1663
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1664
    /* show conversion log notebook page */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1665
    notebook = g_object_get_data (G_OBJECT (view->mainwin), "notebook_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1666
    gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1667
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1668
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1669
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1670
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1671
gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1672
fsexam_gui_show_yesno_dialog (GtkWindow *parent, const gchar *msg_format, ...)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1673
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1674
    GtkWidget   *dialog = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1675
    gchar       *msg = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1676
    va_list     args;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1677
    gboolean    ret = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1678
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1679
    if (msg_format) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1680
        va_start (args, msg_format);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1681
        msg = g_strdup_vprintf (msg_format, args);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1682
        va_end (args);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1683
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1684
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1685
    dialog = gtk_message_dialog_new (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1686
                            parent,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1687
                            GTK_DIALOG_DESTROY_WITH_PARENT,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1688
                            GTK_MESSAGE_QUESTION,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1689
                            GTK_BUTTONS_YES_NO,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1690
                            msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1691
    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1692
        ret = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1693
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1694
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1695
    g_free (msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1696
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1697
    gtk_widget_destroy (dialog);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1698
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1699
    return ret;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1700
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1701
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1702
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1703
fsexam_gui_show_dialog (GtkWindow *parent, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1704
                        GtkMessageType type, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1705
                        const gchar *message_format, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1706
                        ...)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1707
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1708
    GtkWidget   *dialog = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1709
    gchar       *msg = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1710
    va_list     args;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1711
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1712
    if (message_format) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1713
        va_start (args, message_format);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1714
        msg = g_strdup_vprintf (message_format, args);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1715
        va_end (args);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1716
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1717
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1718
    dialog = gtk_message_dialog_new (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1719
                            parent, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1720
                            GTK_DIALOG_DESTROY_WITH_PARENT,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1721
                            type,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1722
                            GTK_BUTTONS_CLOSE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1723
                            msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1724
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1725
    g_signal_connect (G_OBJECT (dialog), "response", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1726
                      G_CALLBACK (gtk_widget_destroy), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1727
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1728
    gtk_dialog_run (GTK_DIALOG (dialog));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1729
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1730
    g_free (msg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1731
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1732
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1733
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1734
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1735
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1736
 * Display msg into report pane.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1737
 *  filename: maybe non-utf8
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1738
 *  msg: must be utf8
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1739
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1740
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1741
fsexam_gui_display_msg (const gchar *filename, const gchar *msg)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1742
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1743
    GtkWidget       *textview = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1744
    GtkTextBuffer   *buffer = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1745
    GtkTextMark     *mark = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1746
    GtkTextIter     iter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1747
    gchar           *messages = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1748
    static gboolean created_mark = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1749
    static gboolean tag_created = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1750
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1751
    textview = g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1752
                                  "textview_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1753
    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1754
    gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1755
   
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1756
    /* creat mark based on iter */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1757
    if (!created_mark) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1758
        mark = gtk_text_buffer_create_mark (buffer, "end_mark", &iter, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1759
        created_mark = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1760
    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1761
        mark = gtk_text_buffer_get_mark (buffer, "end_mark");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1762
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1763
   
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1764
    /* create BOLD tag */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1765
    if (!tag_created) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1766
        gtk_text_buffer_create_tag (buffer,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1767
                "BOLD_TAG",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1768
                "weight", PANGO_WEIGHT_BOLD,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1769
                NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1770
        tag_created = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1771
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1772
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1773
    if (filename) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1774
        gchar *dname = g_path_get_dirname (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1775
        gchar *bname = g_path_get_basename (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1776
        gchar *prev_line = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1777
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1778
        /* Under the same directory as the previous report? */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1779
        prev_line = get_last_path (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1780
        if (prev_line == NULL || strcmp (dname, prev_line) != 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1781
            gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1782
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1783
            if (g_utf8_validate (dname, -1, NULL)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1784
                messages = g_strdup_printf ("%s\n", dname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1785
            }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1786
                gchar *uri = g_filename_to_uri (dname, NULL, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1787
                messages = g_strdup_printf ("%s\n", uri);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1788
                g_free (uri);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1789
            }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1790
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1791
            gtk_text_buffer_insert (buffer, &iter, messages, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1792
            g_free (messages);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1793
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1794
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1795
        /* print basename and conversion message */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1796
        gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1797
        gtk_text_buffer_insert (buffer, &iter, "\t\t", -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1798
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1799
        gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1800
        if (g_utf8_validate (bname, -1, NULL)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1801
            gtk_text_buffer_insert_with_tags_by_name (buffer,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1802
                    &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1803
                    bname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1804
                    -1,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1805
                    "BOLD_TAG",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1806
                    NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1807
        }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1808
            gchar *escape = fsexam_string_escape (bname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1809
            gtk_text_buffer_insert_with_tags_by_name (buffer,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1810
                    &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1811
                    escape,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1812
                    -1,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1813
                    "BOLD_TAG",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1814
                    NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1815
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1816
            g_free (escape);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1817
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1818
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1819
        gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1820
        messages = g_strdup_printf (":\t%s\n", msg ? msg : "");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1821
        gtk_text_buffer_insert (buffer, &iter, messages, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1822
        g_free (messages);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1823
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1824
        g_free (dname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1825
        g_free (bname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1826
        g_free (prev_line);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1827
    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1828
        gtk_text_buffer_insert (buffer, &iter, msg, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1829
        gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1830
        gtk_text_buffer_insert (buffer, &iter, "\n", -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1831
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1832
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1833
    /* scroll text view so that the newest line is visible */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1834
    gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (textview),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1835
            mark,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1836
            0.0,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1837
            TRUE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1838
            0.0,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1839
            1.0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1840
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1841
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1842
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1843
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1844
/* 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1845
 * callbacks for FSEXAM_setting functions 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1846
 *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1847
 * update TreeView after convert file name successfully.
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1848
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1849
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1850
fsexam_gui_update ( FSEXAM_setting *setting, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1851
                    const gchar *path,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1852
                    const gchar *oldname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1853
                    const gchar *newname)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1854
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1855
    GtkWidget       *tree_view = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1856
    GtkTreeModel    *tree_model = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1857
    GtkTreeModel    *another_model = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1858
    GtkTreePath     *tree_path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1859
    gchar           *tree_path_str = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1860
    gchar           *old_full_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1861
    gchar           *new_full_name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1862
    gboolean        on_treeview_search = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1863
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1864
    if (setting->pref->conv_content)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1865
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1866
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1867
    if ((NULL == path) || (NULL == oldname) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1868
            || (NULL == newname) || (view->focus_treeview == NULL))
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1869
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1870
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1871
    tree_view = view->focus_treeview;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1872
    tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1873
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1874
    if (strcmp (gtk_widget_get_name (tree_view), "treeview_search") == 0) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1875
        on_treeview_search = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1876
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1877
    tree_view = g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1878
                    on_treeview_search ? "treeview_file" : "treeview_search");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1879
    another_model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1880
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1881
    old_full_name = g_strdup_printf ("%s/%s", path, oldname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1882
    new_full_name = g_strdup_printf ("%s/%s", path, newname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1883
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1884
    /* lookup hash to get the GtkTreePath string */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1885
    if (view->treepath_hash != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1886
        tree_path_str = (gchar *)g_hash_table_lookup (view->treepath_hash, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1887
                                                      old_full_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1888
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1889
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1890
    if (tree_path_str != NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1891
        tree_path = gtk_tree_path_new_from_string (tree_path_str);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1892
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1893
    /* update search result treeview */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1894
    update_gui_for_filelist (on_treeview_search ? tree_model : another_model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1895
                             old_full_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1896
                             new_full_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1897
                             tree_path,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1898
                             on_treeview_search ? TRUE : FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1899
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1900
    /* update folder treeview */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1901
    update_gui_for_dir (on_treeview_search ? another_model : tree_model,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1902
                        path,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1903
                        oldname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1904
                        newname,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1905
                        tree_path,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1906
                        on_treeview_search ? FALSE : TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1907
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1908
    g_free (new_full_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1909
    g_free (old_full_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1910
    gtk_tree_path_free (tree_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1911
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1912
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1913
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1914
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1915
extern gint indexg;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1916
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1917
gint
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1918
fsexam_gui_get_index (GList *encoding_list, gboolean forname)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1919
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1920
    GtkWidget   *dialog;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1921
    gint        response;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1922
    gboolean    donnot_ask;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1923
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1924
    indexg = -1;    /* init indexg to override previous value */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1925
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1926
    dialog = fsexam_dialog_candidate (encoding_list, forname);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1927
    response = gtk_dialog_run (GTK_DIALOG (dialog));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1928
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1929
    donnot_ask = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1930
                g_object_get_data (G_OBJECT (dialog), "chkbtn_ask")));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1931
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1932
    /* now indexg should contain the real index */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1933
    if (response == GTK_RESPONSE_OK){
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1934
        gint index = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1935
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1936
        if (indexg == -1){
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1937
            /* use the first available encode */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1938
            fsexam_encoding_iterate_with_func (encoding_list,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1939
                        fsexam_encoding_translate_index,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1940
                        &index,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1941
                        &indexg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1942
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1943
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1944
        /* indexg is the index in encoding_list, so it is safe */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1945
        if (donnot_ask)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1946
            view->setting->gold_index = indexg;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1947
    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1948
        indexg = -1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1949
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1950
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1951
    /* indexg == -1 means cancel conversion by user */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1952
    if (indexg == -1 && donnot_ask)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1953
        view->setting->flags |= FSEXAM_SETTING_FLAGS_STOP;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1954
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1955
    gtk_widget_destroy (dialog);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1956
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1957
    return indexg;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1958
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1959
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1960
#define END_LINE "==================================================\n"
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1961
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1962
fsexam_gui_display_stats (FSEXAM_setting *setting)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1963
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1964
    gchar           *stats_info = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1965
    GtkTextView     *textview = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1966
    GtkTextBuffer   *buffer = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1967
    GtkTextMark     *mark = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1968
    GtkTextIter     iter, start, end;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1969
    gchar           *text;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1970
    gint            line;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1971
    static gboolean tag_created = FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1972
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1973
    stats_info = g_strdup_printf (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1974
            _("Rough summary: %d given, %d total, %d ignore, %d fail, %d succeed\n"),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1975
            setting->passin_num,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1976
            setting->total_num,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1977
            setting->ignore_num,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1978
            setting->fail_num,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1979
            setting->succ_num);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1980
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1981
    /* display statastics information in statusbar */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1982
    *(stats_info + strlen (stats_info) - 1) = '\0';
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1983
    fsexam_statusbar_update (stats_info);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1984
    g_free (stats_info);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1985
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1986
    /* display something in report pane to make it clear to see */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1987
    textview = g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1988
                                  "textview_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1989
    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1990
    gtk_text_buffer_get_end_iter (buffer, &iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1991
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1992
    line = gtk_text_iter_get_line (&iter) - 1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1993
    gtk_text_buffer_get_iter_at_line_offset (buffer, &start, line, 0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1994
    gtk_text_buffer_get_iter_at_line_offset (buffer, &end, line + 1, 0);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1995
    text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1996
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1997
    if (text == NULL || *text == '=') {		/* No new data, return */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1998
        g_free (text);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  1999
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2000
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2001
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2002
    if (!tag_created) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2003
        gtk_text_buffer_create_tag (buffer, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2004
                "SUMMARY_TAG",      /* tag name */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2005
                "foreground", "blue", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2006
                //"weight", PANGO_WEIGHT_BOLD, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2007
                NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2008
        tag_created = TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2009
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2010
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2011
    mark = gtk_text_buffer_get_mark (buffer, "end_mark");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2012
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2013
    if (mark == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2014
        mark = gtk_text_buffer_create_mark (buffer, "end_mark", &iter, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2015
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2016
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2017
    gtk_text_buffer_insert_with_tags_by_name (buffer, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2018
            &iter, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2019
            END_LINE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2020
            -1,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2021
            "SUMMARY_TAG",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2022
            NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2023
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2024
    gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (textview), mark);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2025
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2026
    g_free (text);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2027
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2028
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2029
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2030
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2031
/* 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2032
 * Load Glade xml file
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2033
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2034
GladeXML *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2035
fsexam_gui_load_glade_file (const gchar *filename,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2036
                            const gchar *widget_root,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2037
                            GtkWindow  *error_dialog_parent)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2038
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2039
    gchar       *path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2040
    GladeXML    *xml = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2041
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2042
    path = g_strconcat ("./", filename, NULL);  /* for test in local dir */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2043
    if (g_file_test (path, G_FILE_TEST_EXISTS)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2044
        xml = glade_xml_new (path, widget_root, GETTEXT_PACKAGE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2045
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2046
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2047
    if (xml == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2048
        g_free (path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2049
        path = g_build_filename (FSEXAM_GLADE_DIR, filename, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2050
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2051
        xml = glade_xml_new (path, widget_root, GETTEXT_PACKAGE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2052
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2053
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2054
    if (xml == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2055
        fsexam_gui_show_dialog (error_dialog_parent,    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2056
                                GTK_MESSAGE_ERROR,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2057
                                _("The file \"%s\" is missing."), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2058
                                path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2059
    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2060
        glade_xml_signal_autoconnect (xml);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2061
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2062
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2063
    g_free (path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2064
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2065
    return xml;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2066
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2067
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2068
FSEXAM_view *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2069
fsexam_view_new ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2070
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2071
    FSEXAM_view *view = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2072
    GladeXML    *xml = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2073
    GtkWidget   *mainwin = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2074
    GtkWidget   *w = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2075
    gchar       *icon_path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2076
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2077
    view = g_new0 (FSEXAM_view, 1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2078
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2079
    view->pixbuf_hash = g_hash_table_new_full (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2080
                                        g_str_hash, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2081
                                        g_str_equal,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2082
                                        (GDestroyNotify) g_free,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2083
                                        (GDestroyNotify) g_object_unref);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2084
    view->treepath_hash = g_hash_table_new_full (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2085
                                        g_str_hash, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2086
                                        g_str_equal,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2087
                                        (GDestroyNotify) g_free,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2088
                                        (GDestroyNotify) g_free);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2089
    view->undo_list = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2090
    view->rootdir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2091
    view->basedir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2092
    view->lineoffset = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2093
    view->pid = -1;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2094
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2095
    view->peekwin = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2096
    view->focus_treeview = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2097
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2098
    /* set the default icon for all window */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2099
    icon_path = g_strdup_printf ("%s/%s", FSEXAM_ICON_DIR, FSEXAM_ICON_FILE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2100
	gtk_window_set_default_icon_from_file (icon_path, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2101
    g_free (icon_path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2102
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2103
    /* Main Window */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2104
    xml = fsexam_gui_load_glade_file (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2105
                        FSEXAM_GLADE_FILE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2106
                        "app_window",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2107
                        NULL); 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2108
    if (xml == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2109
        return view;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2110
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2111
    mainwin = view->mainwin = glade_xml_get_widget (xml, "app_window");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2112
    g_signal_connect (G_OBJECT (mainwin), "destroy",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2113
                      G_CALLBACK (mainwin_destroy), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2114
    g_signal_connect (G_OBJECT (mainwin), "delete-event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2115
                      G_CALLBACK (mainwin_delete), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2116
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2117
    fsexam_dnd_set (mainwin);       /* set DnD */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2118
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2119
    /* main menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2120
    w = glade_xml_get_widget(xml, "menu_quit");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2121
    g_signal_connect (G_OBJECT (w), "activate",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2122
		      G_CALLBACK (mainwin_destroy), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2123
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2124
    /* toolbar */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2125
    w = glade_xml_get_widget (xml, "toolbar_main");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2126
    g_object_set_data (G_OBJECT (mainwin), "toolbar", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2127
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2128
    /* Treeview and its mouse and button events */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2129
    w = glade_xml_get_widget (xml, "treeview_file");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2130
    g_object_set_data (G_OBJECT (mainwin), "treeview_file", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2131
    gtk_widget_add_events (w, GDK_BUTTON_PRESS_MASK);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2132
    g_signal_connect (GTK_TREE_VIEW (w), "button_press_event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2133
                      G_CALLBACK (button_press), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2134
    g_signal_connect (GTK_TREE_VIEW (w), "button_release_event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2135
                      G_CALLBACK (button_release), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2136
    g_signal_connect (GTK_TREE_VIEW (w), "key_press_event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2137
                      G_CALLBACK (key_press), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2138
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2139
    /* status bar */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2140
    w = glade_xml_get_widget (xml, "appbar1");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2141
    g_object_set_data (G_OBJECT (mainwin), "appbar", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2142
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2143
    /* notebook */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2144
    w = glade_xml_get_widget (xml, "notebook_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2145
    g_object_set_data (G_OBJECT (mainwin), "notebook_report", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2146
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2147
    w = glade_xml_get_widget (xml, "scrollwin_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2148
    g_object_set_data (G_OBJECT (mainwin), "scrollwin_report", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2149
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2150
    w = glade_xml_get_widget (xml, "textview_report");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2151
    g_object_set_data (G_OBJECT (mainwin), "textview_report", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2152
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2153
    w = glade_xml_get_widget (xml, "scrollwin_dryrun");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2154
    g_object_set_data (G_OBJECT (mainwin), "scrollwin_dryrun", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2155
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2156
    w = glade_xml_get_widget (xml, "textview_dryrun");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2157
    g_object_set_data (G_OBJECT (mainwin), "textview_dryrun", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2158
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2159
    /* folder entry */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2160
    w = glade_xml_get_widget (xml, "entry_folder");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2161
    g_object_set_data (G_OBJECT (mainwin), "entry_folder", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2162
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2163
    /* submenu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2164
    w = glade_xml_get_widget (xml, "menu_search");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2165
    g_object_set_data (G_OBJECT (mainwin), "menu_search", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2166
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2167
    w = glade_xml_get_widget (xml, "menu_stop_search");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2168
    g_object_set_data (G_OBJECT (mainwin), "menu_stop_search", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2169
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2170
    w = glade_xml_get_widget (xml, "undo_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2171
    g_object_set_data (G_OBJECT (mainwin), "menu_undo", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2172
    gtk_widget_set_sensitive (w, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2173
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2174
    w = glade_xml_get_widget (xml, "convert_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2175
    g_object_set_data (G_OBJECT (mainwin), "menu_convert", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2176
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2177
    w = glade_xml_get_widget (xml, "restore_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2178
    g_object_set_data (G_OBJECT (mainwin), "menu_restore", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2179
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2180
    w = glade_xml_get_widget (xml, "dryrun_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2181
    g_object_set_data (G_OBJECT (mainwin), "menu_dryrun", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2182
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2183
    w = glade_xml_get_widget (xml, "menu_scenario");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2184
    g_object_set_data (G_OBJECT (mainwin), "menu_scenario", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2185
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2186
    w = glade_xml_get_widget (xml, "force_convert_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2187
    g_object_set_data (G_OBJECT (mainwin), "menu_force_convert", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2188
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2189
    w = glade_xml_get_widget (xml, "menu_clear_search");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2190
    g_object_set_data (G_OBJECT (mainwin), "menu_clear_search", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2191
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2192
    w = glade_xml_get_widget (xml, "name_mode_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2193
    g_object_set_data (G_OBJECT (mainwin), "menu_name_mode", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2194
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2195
    w = glade_xml_get_widget (xml, "content_mode_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2196
    g_object_set_data (G_OBJECT (mainwin), "menu_content_mode", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2197
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2198
    w = glade_xml_get_widget (xml, "report_pane_menu");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2199
    g_object_set_data (G_OBJECT (mainwin), "menu_report", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2200
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2201
    w = glade_xml_get_widget (xml, "dryrun_result_menu");       /* dryrun result under view */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2202
    g_object_set_data (G_OBJECT (mainwin), "menu_dryrun_result", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2203
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2204
    w = glade_xml_get_widget (xml, "menu_search_result");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2205
    g_object_set_data (G_OBJECT (mainwin), "menu_search_result", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2206
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2207
    /* toolbar button */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2208
    w = glade_xml_get_widget (xml, "toolbutton_convert");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2209
    g_object_set_data (G_OBJECT (mainwin), "toolbutton_convert", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2210
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2211
    w = glade_xml_get_widget (xml, "toolbutton_restore");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2212
    g_object_set_data (G_OBJECT (mainwin), "toolbutton_restore", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2213
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2214
    w = glade_xml_get_widget (xml, "toolbutton_dryrun");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2215
    g_object_set_data (G_OBJECT (mainwin), "toolbutton_dryrun", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2216
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2217
    w = glade_xml_get_widget (xml, "toolbutton_force");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2218
    g_object_set_data (G_OBJECT (mainwin), "toolbutton_force", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2219
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2220
    w = glade_xml_get_widget (xml, "toolbutton_undo");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2221
    g_object_set_data (G_OBJECT (mainwin), "toolbutton_undo", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2222
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2223
    w = glade_xml_get_widget (xml, "toolbutton_scenario");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2224
    g_object_set_data (G_OBJECT (mainwin), "toolbutton_scenario", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2225
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2226
    /* search result pane */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2227
    w = glade_xml_get_widget (xml, "vpaned_main");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2228
    g_object_set_data (G_OBJECT (mainwin), "vpaned_main", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2229
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2230
    w = glade_xml_get_widget (xml, "label_result");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2231
    g_object_set_data (G_OBJECT (mainwin), "label_result", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2232
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2233
    w = glade_xml_get_widget (xml, "treeview_search");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2234
    g_object_set_data (G_OBJECT (mainwin), "treeview_search", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2235
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2236
    g_object_unref (G_OBJECT (xml));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2237
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2238
    /* popup menu */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2239
    xml = fsexam_gui_load_glade_file (FSEXAM_GLADE_FILE, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2240
                                      "menu_popup",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2241
                                      GTK_WINDOW (view->mainwin));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2242
   if (xml == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2243
       return view;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2244
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2245
    view->popup_menu = glade_xml_get_widget (xml, "menu_popup");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2246
#ifdef HAVE_NO_GLIB_2_8
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2247
    g_object_ref (view->popup_menu);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2248
#else
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2249
    g_object_ref_sink (view->popup_menu);   /* we own this object */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2250
#endif
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2251
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2252
    w = glade_xml_get_widget (xml, "popup_undo");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2253
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_undo", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2254
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2255
    w = glade_xml_get_widget (xml, "popup_convert");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2256
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_convert", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2257
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2258
    w = glade_xml_get_widget (xml, "popup_restore");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2259
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_restore", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2260
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2261
    w = glade_xml_get_widget (xml, "popup_dryrun");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2262
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_dryrun", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2263
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2264
    w = glade_xml_get_widget (xml, "popup_scenario");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2265
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_scenario", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2266
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2267
    w = glade_xml_get_widget (xml, "popup_forceful");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2268
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_forceful", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2269
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2270
    w = glade_xml_get_widget (xml, "popup_name_mode");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2271
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_name_mode", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2272
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2273
    w = glade_xml_get_widget (xml, "popup_content_mode");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2274
    g_object_set_data (G_OBJECT (view->popup_menu), "popup_content_mode", w);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2275
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2276
    g_object_unref (G_OBJECT (xml));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2277
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2278
    return view;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2279
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2280
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2281
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2282
fsexam_view_destroy (FSEXAM_view *view)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2283
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2284
    /* hash table */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2285
    g_hash_table_destroy (view->pixbuf_hash);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2286
    g_hash_table_destroy (view->treepath_hash);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2287
    view->treepath_hash = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2288
    view->pixbuf_hash = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2289
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2290
    /* FSEXAM_setting */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2291
    if (view->setting) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2292
        fsexam_setting_destroy (view->setting);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2293
    view->setting = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2294
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2295
    /* undo list */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2296
    if (view->undo_list) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2297
        g_slist_free (view->undo_list);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2298
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2299
    view->undo_list = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2300
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2301
    /* popup menu object */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2302
    g_object_unref (G_OBJECT (view->popup_menu));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2303
    view->popup_menu = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2304
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2305
    /* dirname */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2306
    g_free (view->rootdir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2307
    view->rootdir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2308
    g_free (view->basedir);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2309
    view->basedir = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2310
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2311
    g_free (view);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2312
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2313
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2314
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2315
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2316
/* ---------------------  Content peek funcs -------------------- */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2317
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2318
GdkPixmap *content_pixmap;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2319
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2320
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2321
get_upper_left_xy (GtkWidget *peekwin,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2322
                   gint width, gint height,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2323
                   gint x_root, gint y_root,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2324
                   gint *x, gint *y)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2325
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2326
    *x = x_root;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2327
    *y = y_root;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2328
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2329
    *x -= width;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2330
    *y -= height;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2331
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2332
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2333
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2334
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2335
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2336
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2337
set_window_background (GtkWidget *window, GdkPixmap *pixmap)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2338
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2339
    gdk_window_set_back_pixmap (window->window, pixmap, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2340
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2341
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2342
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2343
 * Create a pixmap from contents 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2344
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2345
static GdkPixmap *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2346
create_content_pixmap (GtkWidget *peekwin, gchar *content)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2347
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2348
    PangoLayout     *pango_layout;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2349
    PangoLayout     *main_pango_layout = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2350
    PangoRectangle  rect;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2351
    gint            pixmap_width, pixmap_height;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2352
    GtkStyle        *style;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2353
    GdkPixmap       *pixmap;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2354
    PangoFontDescription *font_desc;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2355
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2356
    enum { PADDING = 8 };
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2357
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2358
    /* create PangoLayout */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2359
    main_pango_layout = gtk_widget_create_pango_layout (view->mainwin, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2360
    font_desc = pango_font_description_copy (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2361
                        gtk_widget_get_style (view->mainwin)->font_desc);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2362
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2363
    pango_layout = pango_layout_new (
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2364
                        pango_layout_get_context (main_pango_layout));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2365
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2366
    pango_layout_set_font_description (pango_layout, font_desc);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2367
    
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2368
    if (str_isutf8 (content, -1)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2369
        pango_layout_set_text (pango_layout, content, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2370
    } else {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2371
        gchar   *display_content;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2372
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2373
        /* Use below function to replace non-utf8 char with '?' */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2374
        display_content = fsexam_filename_display_name (content);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2375
        pango_layout_set_text (pango_layout, display_content, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2376
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2377
        g_free (display_content);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2378
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2379
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2380
    pango_layout_get_pixel_extents (pango_layout, &rect, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2381
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2382
    pixmap_width = rect.width + 2 * PADDING;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2383
    pixmap_height = rect.height + 2 * PADDING;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2384
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2385
    style = gtk_widget_get_style (view->mainwin);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2386
   
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2387
    /* create pixmap */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2388
    pixmap = gdk_pixmap_new (view->mainwin->window, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2389
                             pixmap_width, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2390
                             pixmap_height, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2391
                             -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2392
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2393
    gdk_draw_rectangle (pixmap, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2394
                        style->base_gc[GTK_STATE_NORMAL], 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2395
                        TRUE, 0, 0, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2396
                        pixmap_width, pixmap_height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2397
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2398
    gdk_draw_rectangle (pixmap, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2399
                        style->fg_gc[GTK_STATE_INSENSITIVE], 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2400
                        FALSE, 1, 1, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2401
                        pixmap_width - 3, pixmap_height -3);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2402
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2403
    gdk_draw_layout (pixmap, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2404
                     style->text_gc[GTK_STATE_NORMAL], 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2405
                     -rect.x + PADDING, -rect.y + PADDING, 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2406
                     pango_layout);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2407
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2408
    pango_font_description_free (font_desc);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2409
    g_object_unref (pango_layout);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2410
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2411
    return pixmap;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2412
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2413
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2414
static void 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2415
free_selection (gpointer row, gpointer data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2416
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2417
    GtkTreePath *path = (GtkTreePath *)row;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2418
    gtk_tree_path_free (path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2419
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2420
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2421
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2422
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2423
#define MAX_NUM_MULTIBYTE_CHARACTERS 400
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2424
#define MAX_NUM_CHARACTERS 2000
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2425
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2426
static gchar *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2427
fsexam_content_get_sample (char *file)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2428
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2429
    gchar   *p = NULL, *sample = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2430
    gsize   length;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2431
    gint    multi_num = 0, char_num = 0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2432
    GError  *err = NULL; 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2433
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2434
    if (NULL == file)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2435
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2436
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2437
    if (! g_file_get_contents (file, &p, &length, &err)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2438
        fsexam_statusbar_update (err->message);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2439
        g_error_free (err);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2440
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2441
        return NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2442
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2443
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2444
    sample = p;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2445
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2446
    while (TRUE) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2447
        gunichar wc;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2448
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2449
        /* get the next Unicode character */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2450
        wc = g_utf8_get_char_validated (p, -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2451
        if (wc == 0x0 || multi_num == MAX_NUM_MULTIBYTE_CHARACTERS 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2452
                || char_num == MAX_NUM_CHARACTERS) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2453
            *p = 0x0;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2454
            break;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2455
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2456
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2457
        if (wc == (gunichar)-1 || wc == (gunichar)-2) { /* invalid UTF8 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2458
            ++multi_num;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2459
            ++p;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2460
        } else {                                        /* valid UTF8 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2461
            if (wc >= 0x7e)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2462
                ++multi_num;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2463
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2464
            p = g_utf8_next_char (p);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2465
        }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2466
        ++char_num;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2467
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2468
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2469
    return sample;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2470
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2471
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2472
/* callback for realize signal */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2473
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2474
peek_window_realize (GtkWidget *peekwin, gpointer user_data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2475
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2476
    gint width, height;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2477
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2478
    set_window_background (peekwin, content_pixmap);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2479
    gdk_window_clear (peekwin->window);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2480
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2481
    gdk_drawable_get_size (GDK_DRAWABLE (content_pixmap),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2482
                           &width, &height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2483
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2484
    gtk_widget_set_size_request (peekwin, width, height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2485
    gtk_window_resize (GTK_WINDOW (peekwin), width, height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2486
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2487
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2488
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2489
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2490
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2491
 *  Update peek window using new content
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2492
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2493
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2494
update_peek_window (GtkWidget *peekwin, gchar *content)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2495
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2496
    gint width, height;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2497
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2498
    if (NULL == peekwin)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2499
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2500
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2501
    if (content_pixmap != NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2502
        g_object_unref (content_pixmap);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2503
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2504
    /* create pixmap from content */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2505
    content_pixmap = create_content_pixmap (peekwin, content);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2506
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2507
    if (GTK_WIDGET_REALIZED (peekwin)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2508
        set_window_background (peekwin, content_pixmap);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2509
        gdk_window_clear (peekwin->window);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2510
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2511
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2512
    gdk_drawable_get_size (GDK_DRAWABLE (content_pixmap),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2513
                           &width, &height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2514
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2515
    gtk_widget_set_size_request (peekwin, width, height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2516
    gtk_window_resize (GTK_WINDOW (peekwin), width, height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2517
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2518
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2519
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2520
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2521
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2522
place_peek_window (GtkWidget *peekwin, gint x_root, gint y_root)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2523
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2524
    gint width, height;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2525
    gint x, y;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2526
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2527
    if (NULL == peekwin)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2528
        return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2529
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2530
    gtk_widget_get_size_request (peekwin, &width, &height);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2531
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2532
    get_upper_left_xy (peekwin, width, height,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2533
                       x_root, y_root, &x, &y);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2534
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2535
    gtk_window_move (GTK_WINDOW (peekwin), x, y);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2536
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2537
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2538
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2539
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2540
/*
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2541
 * Create a toplevel peek window 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2542
 */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2543
static GtkWidget *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2544
make_peek_window ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2545
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2546
    GtkWidget *peekwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2547
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2548
    g_signal_connect (peekwin, "realize", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2549
                      G_CALLBACK (peek_window_realize), NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2550
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2551
    gtk_window_set_type_hint (GTK_WINDOW (peekwin),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2552
                              GDK_WINDOW_TYPE_HINT_UTILITY);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2553
    gtk_window_set_decorated (GTK_WINDOW (peekwin), FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2554
    gtk_window_set_screen (GTK_WINDOW (peekwin),
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2555
                           gtk_widget_get_screen (view->mainwin));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2556
    gtk_widget_set_app_paintable (peekwin, TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2557
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2558
    return peekwin;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2559
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2560
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2561
static gboolean
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2562
fsexam_content_get_selection (gchar **path, gchar **filename)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2563
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2564
    GtkTreeSelection    *selection;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2565
    GtkTreeIter         iter, subiter;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2566
    GtkTreeModel        *model;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2567
    GtkWidget           *treeview;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2568
    GList               *row;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2569
    GString             *dir;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2570
    gchar               *internal_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2571
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2572
    treeview = view->focus_treeview;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2573
    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2574
    row = gtk_tree_selection_get_selected_rows (selection, &model);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2575
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2576
    if (row == NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2577
        fsexam_statusbar_update (_("No selection"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2578
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2579
        return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2580
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2581
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2582
    if (g_list_length (row) > 1) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2583
        g_list_foreach (row, free_selection, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2584
        g_list_free (row);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2585
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2586
        fsexam_statusbar_update (_("Cannot preview multiple selections"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2587
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2588
        return FALSE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2589
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2590
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2591
    gtk_tree_model_get_iter (model, &iter, row->data);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2592
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2593
    g_list_foreach (row, free_selection, NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2594
    g_list_free (row);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2595
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2596
    if (gtk_tree_model_iter_children (model, &subiter, &iter)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2597
        fsexam_statusbar_update (_("Cannot preview contents of folder"));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2598
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2599
        return FALSE; 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2600
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2601
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2602
    gtk_tree_model_get (model, &iter,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2603
                        FILENAME_COLUMN, &internal_name,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2604
                        -1);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2605
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2606
    *filename = g_strcompress (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2607
    g_free (internal_name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2608
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2609
    if (**filename == '/') { /* we are on search result treeview */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2610
        *path = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2611
        return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2612
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2613
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2614
    dir = fsexam_filename_get_path (model, iter);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2615
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2616
    *path = g_string_free (dir, FALSE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2617
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2618
    return TRUE;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2619
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2620
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2621
static void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2622
peekwin_destroy (GtkWidget *widget, gpointer user_data)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2623
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2624
    gtk_object_destroy (GTK_OBJECT (view->peekwin));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2625
    view->peekwin = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2626
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2627
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2628
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2629
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2630
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2631
fsexam_content_peek (gint x_root, gint y_root)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2632
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2633
    gchar          *path = NULL, *filename = NULL, *name = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2634
    gchar          *sample_text = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2635
    gchar          *statusmsg = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2636
    gint           y_root2 = y_root;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2637
    struct stat    statbuf;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2638
    GtkWidget      *widget = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2639
    const gchar    *widget_name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2640
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2641
    widget = gtk_window_get_focus (GTK_WINDOW (view->mainwin));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2642
    widget_name = gtk_widget_get_name (widget);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2643
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2644
    if (strcmp (widget_name, "treeview_search") == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2645
        /* convert search result */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2646
        if (view->basedir == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2647
            return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2648
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2649
        view->focus_treeview = widget;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2650
    }else{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2651
        /* convert files in left pane */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2652
        if (NULL == view->rootdir)  
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2653
            return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2654
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2655
        widget = g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2656
                                      "treeview_file");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2657
        view->focus_treeview = widget;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2658
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2659
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2660
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2661
    if (!fsexam_content_get_selection (&path, &filename))
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2662
       return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2663
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2664
    if (y_root == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2665
        gint x, y, height, width;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2666
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2667
        gtk_window_get_position (GTK_WINDOW (view->mainwin), &x, &y);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2668
        gtk_window_get_size (GTK_WINDOW (view->mainwin), &height, &width);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2669
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2670
        x_root = x+width/2;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2671
        y_root = y+height/2;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2672
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2673
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2674
    if (path == NULL)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2675
        name = g_strdup (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2676
    else
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2677
        name = g_strdup_printf ("%s/%s", path, filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2678
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2679
    if (lstat (name, &statbuf) == -1) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2680
        statusmsg = g_strdup_printf ("%s: %s", _("Can't access"), filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2681
        goto ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2682
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2683
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2684
    if (! S_ISREG (statbuf.st_mode)) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2685
        statusmsg = g_strdup_printf ("%s: %s", 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2686
                                     _("Not regular file"), filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2687
        goto ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2688
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2689
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2690
    if (statbuf.st_size == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2691
        statusmsg = g_strdup_printf ("%s: %s", _("Empty file"), filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2692
        goto ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2693
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2694
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2695
    if (!fsexam_is_plain_text (name, view->setting)) { 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2696
        statusmsg = g_strdup_printf ("%s: %s", _("Not plain text"), filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2697
        goto ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2698
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2699
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2700
    if (!view->peekwin)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2701
        view->peekwin = make_peek_window ();
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2702
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2703
    place_peek_window (view->peekwin, x_root, y_root);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2704
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2705
    if ((sample_text = fsexam_content_get_sample (name)) == NULL) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2706
        goto ERR;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2707
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2708
    update_peek_window (view->peekwin, sample_text);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2709
    gtk_widget_show (view->peekwin);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2710
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2711
    set_window_background (view->peekwin, content_pixmap);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2712
    gdk_window_clear (view->peekwin->window);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2713
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2714
    if (y_root2 == 0)
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2715
       g_signal_connect (G_OBJECT (view->peekwin), "focus-in-event",
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2716
                         G_CALLBACK (peekwin_destroy), view->peekwin);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2717
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2718
    g_free (sample_text);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2719
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2720
ERR:
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2721
    if (statusmsg != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2722
        fsexam_statusbar_update (statusmsg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2723
        g_free (statusmsg);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2724
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2725
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2726
    g_free (name);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2727
    g_free (filename);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2728
    g_free (path);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2729
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2730
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2731
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2732
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2733
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2734
GtkWidget *
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2735
fsexam_gui_get_focused_treeview ()
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2736
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2737
    GtkWidget   *widget = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2738
    const gchar *name;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2739
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2740
    widget = gtk_window_get_focus (GTK_WINDOW (view->mainwin));
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2741
    name = gtk_widget_get_name (widget);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2742
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2743
    if (strcmp (name, "treeview_search") != 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2744
        widget = g_object_get_data (G_OBJECT (view->mainwin), 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2745
                                    "treeview_file");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2746
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2747
        
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2748
    return widget;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2749
}
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2750
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2751
/* Set the initial toolbar style */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2752
void
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2753
fsexam_gui_set_initial_state (void) 
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2754
{
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2755
    GtkWidget   *w = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2756
    gchar       *toolbar_style = NULL;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2757
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2758
    /* set toolbar style */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2759
    toolbar_style = gconf_client_get_string (view->setting->pref->gconf_client,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2760
            TOOLBAR_STYLE,
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2761
            NULL);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2762
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2763
    if (toolbar_style != NULL) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2764
        w = g_object_get_data (G_OBJECT (view->mainwin), "toolbar");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2765
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2766
        if (strcmp (toolbar_style, "both") == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2767
	    	gtk_toolbar_set_style (GTK_TOOLBAR (w), GTK_TOOLBAR_BOTH);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2768
	    }else if (strcmp (toolbar_style, "both-horiz") == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2769
	    	gtk_toolbar_set_style (GTK_TOOLBAR (w), GTK_TOOLBAR_BOTH_HORIZ);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2770
	    }else if (strcmp (toolbar_style, "icons") == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2771
	    	gtk_toolbar_set_style (GTK_TOOLBAR (w), GTK_TOOLBAR_ICONS);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2772
	    }else if (strcmp (toolbar_style, "text") == 0) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2773
	    	gtk_toolbar_set_style (GTK_TOOLBAR (w), GTK_TOOLBAR_TEXT);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2774
	    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2775
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2776
        g_free (toolbar_style);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2777
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2778
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2779
    /* update name/content conversion mode accordting to command line option */
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2780
    if (view->setting->pref->conv_content) {
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2781
        w = g_object_get_data (G_OBJECT (view->mainwin), "menu_content_mode");
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2782
        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE);
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2783
    }
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2784
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2785
    return;
0014c9b031e9 add fsexam 0.8.1
yz157939@agc105
parents:
diff changeset
  2786
}