/*
* Copyright (C) 2010 ammonkey
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License
* version 3.0 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3.0 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* .
*
* Author: ammonkey
*/
#include
#include "fm-directory-view.h"
#include "marlin-global-preferences.h"
#include "eel-i18n.h"
static AtkObject *fm_icon_view_get_accessible (GtkWidget *widget);
static void fm_icon_view_zoom_normal (FMDirectoryView *view);
static void fm_icon_view_zoom_level_changed (FMDirectoryView *view);
G_DEFINE_TYPE (FMIconView, fm_icon_view, FM_TYPE_ABSTRACT_ICON_VIEW)
static void
fm_icon_view_class_init (FMIconViewClass *klass)
{
FMDirectoryViewClass *fm_directory_view_class;
GtkWidgetClass *gtkwidget_class;
gtkwidget_class = GTK_WIDGET_CLASS (klass);
gtkwidget_class->get_accessible = fm_icon_view_get_accessible;
fm_directory_view_class = FM_DIRECTORY_VIEW_CLASS (klass);
fm_directory_view_class->zoom_normal = fm_icon_view_zoom_normal;
fm_directory_view_class->zoom_level_changed = fm_icon_view_zoom_level_changed;
}
static void
fm_icon_view_init (FMIconView *icon_view)
{
FMAbstractIconView *view = FM_ABSTRACT_ICON_VIEW (icon_view);
/* initialize the icon view properties */
//exo_icon_view_set_layout_mode (view->icons, EXO_ICON_VIEW_LAYOUT_ROW);
/*exo_icon_view_set_row_spacing (view->icons, 0);
exo_icon_view_set_margin (view->icons, 3);*/
g_object_set (G_OBJECT (icon_view), "text-beside-icons", FALSE, NULL);
/* setup the icon renderer */
//g_object_set (FM_DIRECTORY_VIEW (view)->icon_renderer, "ypad", 0u, NULL);
/* setup the name renderer (wrap only very long names) */
/*g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer,
"wrap-mode", PANGO_WRAP_WORD_CHAR,
"wrap-width", 1280,
"xalign", 0.0f,
"yalign", 0.5f,
NULL);*/
g_settings_bind (marlin_icon_view_settings, "zoom-level",
icon_view, "zoom-level", 0);
}
static AtkObject*
fm_icon_view_get_accessible (GtkWidget *widget)
{
AtkObject *object;
/* query the atk object for the icon view class */
object = (*GTK_WIDGET_CLASS (fm_icon_view_parent_class)->get_accessible) (widget);
/* set custom Atk properties for the icon view */
if (G_LIKELY (object != NULL))
{
atk_object_set_description (object, _("Icon directory listing"));
atk_object_set_name (object, _("Icon view"));
atk_object_set_role (object, ATK_ROLE_DIRECTORY_PANE);
}
return object;
}
static void
fm_icon_view_zoom_normal (FMDirectoryView *view)
{
MarlinZoomLevel zoom;
zoom = g_settings_get_enum (marlin_icon_view_settings, "default-zoom-level");
g_settings_set_enum (marlin_icon_view_settings, "zoom-level", zoom);
}
static void
fm_icon_view_zoom_level_changed (FMDirectoryView *view)
{
gint wrap_width;
g_return_if_fail (FM_IS_DIRECTORY_VIEW (view));
/* determine the "wrap-width" depending on the "zoom-level" */
switch (view->zoom_level)
{
case MARLIN_ZOOM_LEVEL_SMALLEST:
wrap_width = 48;
break;
case MARLIN_ZOOM_LEVEL_SMALLER:
wrap_width = 64;
break;
case MARLIN_ZOOM_LEVEL_SMALL:
wrap_width = 72;
break;
case MARLIN_ZOOM_LEVEL_NORMAL:
wrap_width = 112;
break;
default:
wrap_width = 128;
break;
}
/* set the new "wrap-width" for the text renderer */
g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer, "wrap-width", wrap_width, "zoom-level", view->zoom_level, NULL);
//g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer, "zoom-level", view->zoom_level, NULL);
/* set the new "size" for the icon renderer */
g_object_set (FM_DIRECTORY_VIEW (view)->icon_renderer, "size", marlin_zoom_level_to_icon_size (view->zoom_level), "zoom-level", view->zoom_level, NULL);
exo_icon_view_invalidate_sizes (FM_ABSTRACT_ICON_VIEW (view)->icons);
}