Commit 78a1614f authored by Johannes Schmid's avatar Johannes Schmid Committed by Johannes Schmid

Don't claim to implement IAnjutaVCS

2009-01-14  Johannes Schmid  <jhs@gnome.org>

	* plugins/cvs-plugin/anjuta-cvs.plugin.in:
	Don't claim to implement IAnjutaVCS
	
	* plugins/file-manager/file-model.c
	(file_model_vcs_status_callback), (file_model_free_vcs_data),
	(file_model_get_vcs_status), (file_model_update_file),
	(file_model_new):
	* plugins/file-manager/file-model.h:
	* plugins/file-manager/file-view.c (file_view_show_extended_data),
	(file_view_init):
	* plugins/file-manager/plugin.c (file_manager_activate):
	Show VCS status in file-manager

svn path=/trunk/; revision=4586
parent 26cf2aad
2009-01-14 Johannes Schmid <jhs@gnome.org>
* plugins/cvs-plugin/anjuta-cvs.plugin.in:
Don't claim to implement IAnjutaVCS
* plugins/file-manager/file-model.c
(file_model_vcs_status_callback), (file_model_free_vcs_data),
(file_model_get_vcs_status), (file_model_update_file),
(file_model_new):
* plugins/file-manager/file-model.h:
* plugins/file-manager/file-view.c (file_view_show_extended_data),
(file_view_init):
* plugins/file-manager/plugin.c (file_manager_activate):
Show VCS status in file-manager
2008-01-13 Sébastien Granjoux <seb.sfo@free.fr>
* plugins/project-wizard/anjuta-project-wizard.glade,
......@@ -3,7 +3,6 @@ _Name=CVS Plugin
_Description=A version control system plugin
Location=anjuta-cvs-plugin:CVSPlugin
Icon=anjuta-cvs-plugin-48.png
Interfaces=IAnjutaVcs
[Version Control]
Supported-Vcs-Types=cvs
......@@ -26,6 +26,9 @@
#include <glib/gi18n.h>
#include <string.h>
#include <libanjuta/anjuta-debug.h>
#include <libanjuta/anjuta-plugin.h>
#include <libanjuta/anjuta-async-notify.h>
#include <libanjuta/interfaces/ianjuta-vcs.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
......@@ -60,6 +63,8 @@ struct _FileModelPrivate
gboolean filter_binary;
gboolean filter_hidden;
gboolean filter_backup;
GtkTreeView* view;
};
struct _FileModelAsyncData
......@@ -102,7 +107,7 @@ file_model_filter_file (FileModel* model,
static void
file_model_add_dummy (FileModel* model,
GtkTreeIter* iter)
GtkTreeIter* iter)
{
GtkTreeStore* store = GTK_TREE_STORE (model);
GtkTreeIter dummy;
......@@ -114,6 +119,99 @@ file_model_add_dummy (FileModel* model,
-1);
}
typedef struct
{
FileModel* model;
GtkTreeRowReference* ref;
} VcsData;
static void
file_model_vcs_status_callback(GFile *file,
AnjutaVcsStatus status,
gpointer user_data)
{
VcsData* data = user_data;
gchar* path = g_file_get_path (file);
GtkTreePath* tree_path = gtk_tree_row_reference_get_path (data->ref);
if (tree_path)
{
const gchar* color = NULL;
GtkTreeIter iter;
GtkTreeModel* model = gtk_tree_row_reference_get_model (data->ref);
switch (status)
{
case ANJUTA_VCS_STATUS_MODIFIED:
color = "yellow";
break;
case ANJUTA_VCS_STATUS_ADDED:
color = "green";
break;
case ANJUTA_VCS_STATUS_CONFLICTED:
color = "red";
break;
default:
color = "white";
}
gtk_tree_model_get_iter (model,
&iter,
tree_path);
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
COLUMN_BACKGROUND,
color,
COLUMN_STATUS,
status,
-1);
gtk_tree_path_free (tree_path);
}
g_free(path);
}
static void
file_model_free_vcs_data (VcsData *data)
{
gtk_tree_row_reference_free (data->ref);
g_free (data);
}
static void
file_model_get_vcs_status (FileModel* model,
GtkTreeIter* iter,
GFile* file)
{
GtkTreePath* path = gtk_tree_model_get_path (GTK_TREE_MODEL(model),
iter);
FileModelPrivate* priv = FILE_MODEL_GET_PRIVATE(model);
AnjutaPlugin* plugin = ANJUTA_PLUGIN(g_object_get_data (G_OBJECT(priv->view), "__plugin"));
g_return_if_fail (plugin != NULL);
IAnjutaVcs* ivcs = anjuta_shell_get_interface (plugin->shell,
IAnjutaVcs,
NULL);
if (ivcs)
{
VcsData* data = g_new0(VcsData, 1);
AnjutaAsyncNotify* notify = anjuta_async_notify_new();
data->ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (model),
path);
data->model = model;
g_signal_connect_swapped (G_OBJECT (notify), "finished",
G_CALLBACK (file_model_free_vcs_data), data);
ianjuta_vcs_query_status(ivcs,
file,
file_model_vcs_status_callback,
data,
NULL,
notify,
NULL);
}
gtk_tree_path_free (path);
}
static void
file_model_update_file (FileModel* model,
GtkTreeIter* iter,
......@@ -155,12 +253,17 @@ file_model_update_file (FileModel* model,
COLUMN_FILENAME, display_name,
COLUMN_FILE, file,
COLUMN_PIXBUF, pixbuf,
COLUMN_STATUS, ANJUTA_VCS_STATUS_NONE,
COLUMN_BACKGROUND, "white",
COLUMN_IS_DIR, is_dir,
COLUMN_SORT, g_file_info_get_sort_order(file_info),
-1);
if (is_dir)
file_model_add_dummy(model, iter);
file_model_get_vcs_status (model, iter, file);
if (pixbuf)
g_object_unref (pixbuf);
g_free(display_name);
......@@ -532,8 +635,9 @@ file_model_new (GtkTreeView* tree_view, const gchar* base_uri)
GObject* model =
g_object_new (FILE_TYPE_MODEL, "base_uri", base_uri, NULL);
GType types[N_COLUMNS] = {GDK_TYPE_PIXBUF, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_OBJECT,
G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_OBJECT,
G_TYPE_BOOLEAN, G_TYPE_INT};
FileModelPrivate* priv = FILE_MODEL_GET_PRIVATE(model);
g_signal_connect (G_OBJECT (tree_view), "row-collapsed",
G_CALLBACK (file_model_row_collapsed), model);
......@@ -543,6 +647,8 @@ file_model_new (GtkTreeView* tree_view, const gchar* base_uri)
gtk_tree_store_set_column_types (GTK_TREE_STORE (model), N_COLUMNS,
types);
priv->view = tree_view;
return FILE_MODEL(model);
}
......
......@@ -48,6 +48,8 @@ enum
COLUMN_PIXBUF,
COLUMN_FILENAME,
COLUMN_DISPLAY,
COLUMN_STATUS,
COLUMN_BACKGROUND,
COLUMN_FILE,
COLUMN_IS_DIR,
COLUMN_SORT,
......
......@@ -37,6 +37,7 @@
#include <glib/gi18n.h>
#include <libanjuta/anjuta-debug.h>
#include <libanjuta/anjuta-vcs-status.h>
typedef struct _AnjutaFileViewPrivate AnjutaFileViewPrivate;
......@@ -53,6 +54,19 @@ struct _AnjutaFileViewPrivate
G_DEFINE_TYPE (AnjutaFileView, file_view, GTK_TYPE_TREE_VIEW);
const gchar* anjuta_vcs_status_strings[] = {
NULL,
N_("Modified"),
N_("Added"),
N_("Removed"),
N_("Deleted"),
N_("Conflicted"),
N_("Outdated"),
N_("Locked"),
N_("Missing"),
N_("Unversioned")
};
enum
{
PROP_BASE_URI = 1,
......@@ -260,7 +274,9 @@ file_view_show_extended_data (AnjutaFileView* view, GtkTreeIter* iter)
{
gchar* display;
gchar time_str[128];
gtk_tree_model_get (file_model, iter, COLUMN_FILE, &file, -1);
AnjutaVcsStatus status;
gtk_tree_model_get (file_model, iter, COLUMN_FILE, &file,
COLUMN_STATUS, &status, -1);
time_t time;
file_info = g_file_query_info (file,
......@@ -269,11 +285,22 @@ file_view_show_extended_data (AnjutaFileView* view, GtkTreeIter* iter)
NULL, NULL);
time = g_file_info_get_attribute_uint64(file_info, "time::changed");
strftime(time_str, 127, "%x %X", localtime(&time));
display = g_markup_printf_escaped("%s\n"
"<small><tt>%s</tt></small>",
g_file_info_get_display_name(file_info),
time_str);
if (anjuta_vcs_status_strings[status])
{
display = g_markup_printf_escaped("%s\n"
"<small><tt>%s</tt></small>\n"
"<small>%s</small>",
g_file_info_get_display_name(file_info),
time_str,
anjuta_vcs_status_strings[status]);
}
else
{
display = g_markup_printf_escaped("%s\n"
"<small><tt>%s</tt></small>",
g_file_info_get_display_name(file_info),
time_str);
}
gtk_tree_store_set (GTK_TREE_STORE(file_model), iter,
COLUMN_DISPLAY, display,
-1);
......@@ -431,16 +458,21 @@ file_view_init (AnjutaFileView *object)
NULL);
renderer_pixbuf = gtk_cell_renderer_pixbuf_new ();
g_object_set (G_OBJECT (renderer_pixbuf), "cell-background-set", TRUE, NULL);
renderer_display = gtk_cell_renderer_text_new ();
g_object_set (G_OBJECT (renderer_pixbuf), "cell-background-set", TRUE, NULL);
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, _("Filename"));
gtk_tree_view_column_pack_start (column, renderer_pixbuf, FALSE);
gtk_tree_view_column_pack_start (column, renderer_display, FALSE);
gtk_tree_view_column_set_attributes (column, renderer_pixbuf,
"pixbuf", COLUMN_PIXBUF, NULL);
"pixbuf", COLUMN_PIXBUF,
"cell-background", COLUMN_BACKGROUND,
NULL);
gtk_tree_view_column_set_attributes (column, renderer_display,
"markup", COLUMN_DISPLAY, NULL);
"markup", COLUMN_DISPLAY,
"cell-background", COLUMN_BACKGROUND,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (object), column);
selection =
......
......@@ -231,6 +231,7 @@ file_manager_activate (AnjutaPlugin *plugin)
GTK_SHADOW_IN);
file_manager->fv = ANJUTA_FILE_VIEW (file_view_new ());
g_object_set_data (G_OBJECT(file_manager->fv), "__plugin", ANJUTA_PLUGIN(file_manager));
g_signal_connect (G_OBJECT (file_manager->fv), "file-open",
G_CALLBACK (on_file_view_open_file), file_manager);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment