~gtg-contributors/gtg/backends20

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
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Gettings Things Gnome! - a personal organizer for the GNOME desktop
# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program 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 General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program.  If not, see <http://www.gnu.org/licenses/>.
# -----------------------------------------------------------------------------

"""
TaskClipboard allows to cut/copy the content of a TaskView accross multiples
taskeditors, preserving subtasks
"""
class TaskClipboard():
    def __init__(self,req):
        self.description = None
        self.content = []
        self.req = req
        
    """"take two gtk.TextIter as parameter and copy the
    """
    def copy(self,start,stop,bullet=None):
        self.clear()
        #Now, we take care of the normal, cross application clipboard
        text = start.get_text(stop)
        if text and bullet:
            #we replace the arrow by the original "-"
            newtext = text.replace(bullet, "-")
            self.description = newtext
        elif text:
            self.description = text
        
        end_line = start.copy()
        #we take line after line in the selection
        nextline = True
        while end_line.get_line() <= stop.get_line() and nextline:
            nextline = end_line.forward_line()
            end_line.backward_char()
            #we want to detect subtasks in the selection
            tags = end_line.get_tags()+end_line.get_toggled_tags(False)
            is_subtask = False
            for ta in tags :
                if (ta.get_data('is_subtask')):
                    is_subtask = True
                    tid = ta.get_data('child')
                    tas = self.req.get_task(tid)
                    tas.set_to_keep()
                    tas.sync()
                    self.content.append(['subtask', tid])
            if not is_subtask:
                if end_line.get_line() < stop.get_line():
                    self.content.append(['text', "%s\n" %start.get_text(end_line)])
                else:
                    self.content.append(['text', start.get_text(stop)])
            end_line.forward_char()
            start.forward_line()

    def paste_text(self):
        return self.description
        
    def paste(self):
        return self.content
    
    def clear(self):
        self.descriptiion = None
        self.content = []