# Python imports

# Lib imports
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GdkPixbuf


# Application imports


class IconGridWidget(Gtk.IconView):
    """docstring for IconGridWidget"""

    def __init__(self):
        super(IconGridWidget, self).__init__()

        self._store = None

        self._setup_styling()
        self._setup_signals()
        self._set_up_dnd()
        self._load_widgets()

        self.show_all()

    def get_store(self):
        return self._store

    def _setup_styling(self):
        self.set_pixbuf_column(0)
        self.set_text_column(1)

        self.set_item_orientation(1)
        self.set_selection_mode(3)
        self.set_item_width(96)
        self.set_item_padding(8)
        self.set_margin(12)
        self.set_row_spacing(18)
        self.set_columns(-1)
        self.set_spacing(12)
        self.set_column_spacing(18)

    def _setup_signals(self):
        ...

    def _setup_additional_signals(self, grid_icon_single_click,
                                        grid_icon_double_click,
                                        grid_set_selected_items,
                                        grid_on_drag_set,
                                        grid_on_drag_data_received,
                                        grid_on_drag_motion):

        self.connect("button_release_event", grid_icon_single_click)
        self.connect("item-activated",       grid_icon_double_click)
        self.connect("selection-changed",    grid_set_selected_items)
        self.connect("drag-data-get",        grid_on_drag_set)
        self.connect("drag-data-received",   grid_on_drag_data_received)
        self.connect("drag-motion",          grid_on_drag_motion)

    def _load_widgets(self):
        self._store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None)
        self.set_model(self._store)

    def _set_up_dnd(self):
        URI_TARGET_TYPE  = 80
        uri_target       = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
        targets          = [ uri_target ]
        action           = Gdk.DragAction.COPY
        self.enable_model_drag_dest(targets, action)
        self.enable_model_drag_source(0, targets, action)
