1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
#![allow(deprecated)]

use crate::TreePath;
use glib::{prelude::*, translate::*};
use std::fmt;

glib::wrapper! {
    /// List views use widgets to display their contents.
    ///   You can use [`DragSource`][crate::DragSource] to implement a drag source
    /// Interface for Drag-and-Drop destinations in [`TreeView`][crate::TreeView].
    ///
    /// # Implements
    ///
    /// [`TreeDragSourceExt`][trait@crate::prelude::TreeDragSourceExt]
    #[doc(alias = "GtkTreeDragSource")]
    pub struct TreeDragSource(Interface<ffi::GtkTreeDragSource, ffi::GtkTreeDragSourceIface>);

    match fn {
        type_ => || ffi::gtk_tree_drag_source_get_type(),
    }
}

impl TreeDragSource {
    pub const NONE: Option<&'static TreeDragSource> = None;
}

/// Trait containing all [`struct@TreeDragSource`] methods.
///
/// # Implementors
///
/// [`ListStore`][struct@crate::ListStore], [`TreeDragSource`][struct@crate::TreeDragSource], [`TreeModelFilter`][struct@crate::TreeModelFilter], [`TreeModelSort`][struct@crate::TreeModelSort], [`TreeStore`][struct@crate::TreeStore]
pub trait TreeDragSourceExt: 'static {
    /// Asks the [`TreeDragSource`][crate::TreeDragSource] to delete the row at @path, because
    /// it was moved somewhere else via drag-and-drop. Returns [`false`]
    /// if the deletion fails because @path no longer exists, or for
    /// some model-specific reason. Should robustly handle a @path no
    /// longer found in the model!
    ///
    /// # Deprecated since 4.10
    ///
    /// Use list models instead
    /// ## `path`
    /// row that was being dragged
    ///
    /// # Returns
    ///
    /// [`true`] if the row was successfully deleted
    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
    #[allow(deprecated)]
    #[doc(alias = "gtk_tree_drag_source_drag_data_delete")]
    fn drag_data_delete(&self, path: &TreePath) -> bool;

    /// Asks the [`TreeDragSource`][crate::TreeDragSource] to return a [`gdk::ContentProvider`][crate::gdk::ContentProvider] representing
    /// the row at @path. Should robustly handle a @path no
    /// longer found in the model!
    ///
    /// # Deprecated since 4.10
    ///
    /// Use list models instead
    /// ## `path`
    /// row that was dragged
    ///
    /// # Returns
    ///
    /// a [`gdk::ContentProvider`][crate::gdk::ContentProvider] for the
    ///    given @path
    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
    #[allow(deprecated)]
    #[doc(alias = "gtk_tree_drag_source_drag_data_get")]
    fn drag_data_get(&self, path: &TreePath) -> Option<gdk::ContentProvider>;

    /// Asks the [`TreeDragSource`][crate::TreeDragSource] whether a particular row can be used as
    /// the source of a DND operation. If the source doesn’t implement
    /// this interface, the row is assumed draggable.
    ///
    /// # Deprecated since 4.10
    ///
    /// Use list models instead
    /// ## `path`
    /// row on which user is initiating a drag
    ///
    /// # Returns
    ///
    /// [`true`] if the row can be dragged
    #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
    #[allow(deprecated)]
    #[doc(alias = "gtk_tree_drag_source_row_draggable")]
    fn row_draggable(&self, path: &TreePath) -> bool;
}

impl<O: IsA<TreeDragSource>> TreeDragSourceExt for O {
    #[allow(deprecated)]
    fn drag_data_delete(&self, path: &TreePath) -> bool {
        unsafe {
            from_glib(ffi::gtk_tree_drag_source_drag_data_delete(
                self.as_ref().to_glib_none().0,
                mut_override(path.to_glib_none().0),
            ))
        }
    }

    #[allow(deprecated)]
    fn drag_data_get(&self, path: &TreePath) -> Option<gdk::ContentProvider> {
        unsafe {
            from_glib_full(ffi::gtk_tree_drag_source_drag_data_get(
                self.as_ref().to_glib_none().0,
                mut_override(path.to_glib_none().0),
            ))
        }
    }

    #[allow(deprecated)]
    fn row_draggable(&self, path: &TreePath) -> bool {
        unsafe {
            from_glib(ffi::gtk_tree_drag_source_row_draggable(
                self.as_ref().to_glib_none().0,
                mut_override(path.to_glib_none().0),
            ))
        }
    }
}

impl fmt::Display for TreeDragSource {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        f.write_str("TreeDragSource")
    }
}