~ubuntu-branches/ubuntu/lucid/phatch/lucid

« back to all changes in this revision

Viewing changes to phatch/lib/pyWx/imageFileBrowser.py

  • Committer: Package Import Robot
  • Author(s): Emilio Pozuelo Monfort, Stani M, Emilio Pozuelo Monfort
  • Date: 2010-03-12 14:04:02 UTC
  • mfrom: (1.1.11) (4.1.12 sid)
  • Revision ID: package-import@ubuntu.com-20100312140402-o6g6terpbqksf1dw
Tags: 0.2.7-1
[ Stani M ]
* Upstream bugfix release (Closes LP: #472978, #487435, #516763, #516858, 
  #525999, #526047, #526235, #526237, #526489, #529343, #529429, #525831, 
  #526237, #529544, #529605, #531375, #531705, #531728, #532346, #532356, 
  #532540, #532544, #533068, #534723, #534834, #534835, #535189, #535192,
  #536820)
* debian/control: Add python-nautilus to phatch-nautilus's Depends

[ Emilio Pozuelo Monfort ]
* debian/rules:
  - Adapt for the upstream changes.
* debian/copyright:
  - Updated for the new version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program.  If not, see http://www.gnu.org/licenses/
15
15
 
 
16
# Follows PEP8
 
17
 
16
18
import os
17
 
import math
18
19
import sys
19
20
 
20
 
import Image
21
 
import ImageDraw
22
 
 
23
21
import wx
24
22
 
25
23
if __name__ == '__main__':
26
24
    _ = unicode
27
 
    sys.path.insert(0,'..')
28
 
    sys.path.insert(0,'../..')
 
25
    sys.path.insert(0, '..')
 
26
    sys.path.insert(0, '../..')
29
27
 
30
28
from lib.openImage import open_thumb
31
29
from lib.formField import IMAGE_READ_EXTENSIONS
32
30
 
33
31
import popup
34
 
from wxPil import pil_wxBitmap, pil_wxImage
 
32
from wxPil import pil_wxBitmap
35
33
 
36
 
ICON_SIZE = (64,64)
 
34
ICON_SIZE = (64, 64)
37
35
 
38
36
 
39
37
def truncate(content, length=100, suffix='...'):
40
38
    if len(content) <= length:
41
39
        return content
42
40
    else:
43
 
        return content[:length].rsplit(' ', 1)[0]+suffix
 
41
        return content[:length].rsplit(' ', 1)[0] + suffix
 
42
 
44
43
 
45
44
class ListCtrl(wx.ListCtrl):
46
 
    def __init__(self,parent,files,icon_size=ICON_SIZE,
47
 
            checkboard=False,**keyw):
48
 
        super(ListCtrl,self).__init__(parent,-1,
49
 
            style=wx.LC_ICON|wx.LC_SINGLE_SEL,**keyw)
 
45
    def __init__(self, parent, files, icon_size=ICON_SIZE,
 
46
            checkboard=False, **keyw):
 
47
        super(ListCtrl, self).__init__(parent, -1,
 
48
            style=wx.LC_ICON | wx.LC_SINGLE_SEL, **keyw)
50
49
        #create image list
51
50
        self.image_list = wx.ImageList(*icon_size)
52
51
        self.icons = {}
67
66
        for label, file in labels_files:
68
67
            self._files_to_labels[file] = label
69
68
        for index, (label, file) in enumerate(labels_files):
70
 
            item = self.InsertImageStringItem(index,
71
 
                        '',self.icons[file])
 
69
            item = self.InsertImageStringItem(index, '', self.icons[file])
72
70
            self.SetItemData(item, index)
73
71
 
74
72
    def GetLabel(self, file):
75
 
        return self._files_to_labels.get(file,file)
 
73
        return self._files_to_labels.get(file, file)
76
74
 
77
 
    def GetItemFile(self,item):
 
75
    def GetItemFile(self, item):
78
76
        return self._files[item.GetData()]
79
77
 
80
 
    def GetItemLabel(self,item):
 
78
    def GetItemLabel(self, item):
81
79
        return self._labels[item.GetData()]
82
80
 
83
 
    def Select(self,index):
84
 
        self.SetItemState(index,wx.LIST_STATE_SELECTED,
 
81
    def Select(self, index):
 
82
        self.SetItemState(index, wx.LIST_STATE_SELECTED,
85
83
            wx.LIST_STATE_SELECTED)
86
84
        self.EnsureVisible(index)
87
85
 
88
 
    def Deselect(self,index):
89
 
        self.SetItemState(index,0,
90
 
            wx.LIST_STATE_SELECTED|wx.LIST_STATE_FOCUSED)
 
86
    def Deselect(self, index):
 
87
        self.SetItemState(index, 0,
 
88
            wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
91
89
 
92
90
 
93
91
class Dialog(wx.Dialog):
94
 
    def __init__(self,parent,files,icon_size=ICON_SIZE,**keyw):
95
 
        keyw["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX
96
 
        super(Dialog,self).__init__(parent,-1,**keyw)
 
92
    def __init__(self, parent, files, icon_size=ICON_SIZE, **keyw):
 
93
        keyw["style"] = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER \
 
94
            | wx.MAXIMIZE_BOX
 
95
        super(Dialog, self).__init__(parent, -1, **keyw)
97
96
        #controls
98
97
        #this is a dialog, add first panel
99
 
        self.panel = wx.Panel(self,-1)
100
 
        self.image_path  = popup.DictionaryFileCtrl(self.panel,value=' ',
101
 
            size=(200,200), dictionary=files, extensions=IMAGE_READ_EXTENSIONS)
102
 
        self.image_list  = ListCtrl(self.panel,files,icon_size)
 
98
        self.panel = wx.Panel(self, -1)
 
99
        self.image_path = popup.DictionaryFileCtrl(self.panel, value=' ',
 
100
            size=(200, 200), dictionary=files,
 
101
            extensions=IMAGE_READ_EXTENSIONS)
 
102
        self.image_list = ListCtrl(self.panel, files, icon_size)
103
103
        self.status = wx.StaticText(self.panel, -1, "")
104
104
        self.cancel = wx.Button(self.panel, wx.ID_CANCEL, _("&Cancel"))
105
 
        self.ok     = wx.Button(self.panel, wx.ID_OK, _("&Select"))
 
105
        self.ok = wx.Button(self.panel, wx.ID_OK, _("&Select"))
106
106
        self.ok.SetDefault()
107
107
        #layout
108
 
        sizer       = wx.BoxSizer(wx.VERTICAL)
109
 
        sizer.Add(self.image_path,0, wx.ALL|wx.EXPAND,0)
110
 
        sizer.Add(self.image_list,1,wx.EXPAND)
 
108
        sizer = wx.BoxSizer(wx.VERTICAL)
 
109
        sizer.Add(self.image_path, 0, wx.ALL | wx.EXPAND, 0)
 
110
        sizer.Add(self.image_list, 1, wx.EXPAND)
111
111
        #buttons
112
 
        btn_sizer   = wx.BoxSizer(wx.HORIZONTAL)
113
 
        btn_sizer.Add(self.status, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 4)
114
 
        btn_sizer.Add(self.cancel, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 4)
115
 
        btn_sizer.Add(self.ok, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 4)
 
112
        btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
 
113
        b = 6
 
114
        btn_sizer.Add(self.status, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, b)
 
115
        btn_sizer.Add(self.cancel, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, b)
 
116
        btn_sizer.Add(self.ok, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, b)
116
117
        sizer.Add(btn_sizer, 0, wx.EXPAND, 0)
117
118
        #panel
118
119
        self.panel.SetSizer(sizer)
119
 
        panel_sizer       = wx.BoxSizer(wx.VERTICAL)
120
 
        panel_sizer.Add(self.panel,1, wx.EXPAND,0)
 
120
        panel_sizer = wx.BoxSizer(wx.VERTICAL)
 
121
        panel_sizer.Add(self.panel, 1, wx.EXPAND, 0)
121
122
        self.SetSizer(panel_sizer)
122
123
        self.Layout()
123
124
        #events
126
127
            self.image_list)
127
128
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated,
128
129
            self.image_list)
129
 
        self.Bind(wx.EVT_TEXT,self.OnText, self.image_path.path)
 
130
        self.Bind(wx.EVT_TEXT, self.OnText, self.image_path.path)
130
131
 
131
 
    def OnItemSelected(self,event):
 
132
    def OnItemSelected(self, event):
132
133
        self.selection = event.GetIndex()
133
134
        value = self.image_list.GetItemLabel(event.GetItem())
134
135
        if value != self.image_path.GetValue():
135
136
            self.image_path.SetValue(value)
136
137
        event.Skip()
137
138
 
138
 
    def OnText(self,event):
 
139
    def OnText(self, event):
139
140
        #print 'ontext',event.GetString()
140
141
        self.Select(event.GetString())
141
142
 
142
 
    def Select(self,value):
143
 
        li      = self.image_list
 
143
    def Select(self, value):
 
144
        li = self.image_list
144
145
        #if the file is in the library -> use label instead
145
146
        value = li.GetLabel(value)
146
147
        if value in li._labels:
147
148
            index = li._labels.index(value)
148
 
            item  = li.GetItem(index)
 
149
            item = li.GetItem(index)
149
150
            li.Select(index)
150
151
        elif not(self.selection is None):
151
152
            #print "deselect", self.selection
156
157
        self.image_path.Show(state)
157
158
        self.Layout()
158
159
 
159
 
    def SetValue(self,value):
 
160
    def SetValue(self, value):
160
161
        self.image_path.SetValue(value)
161
162
        self.Select(value)
162
163
 
163
 
    def OnActivated(self,event):
 
164
    def OnActivated(self, event):
164
165
        self.EndModal(wx.ID_OK)
165
166
 
166
167
 
169
170
    images = {}
170
171
    for image in glob.glob('/usr/share/icons/hicolor/48x48/apps/*.png'):
171
172
        images[os.path.basename(image)] = image
 
173
 
172
174
    class App(wx.App):
173
 
        def OnInit(self,*args,**keyw):
174
 
            frame       = wx.Frame(None,-1,'image file test',size=(600,400))
175
 
            image_list  = ListCtrl(frame,images)
176
 
            sizer       = wx.BoxSizer(wx.VERTICAL)
177
 
            sizer.Add(image_list,1,flag=wx.EXPAND)
 
175
        def OnInit(self, *args, **keyw):
 
176
            frame = wx.Frame(None, -1, 'image file test', size=(600, 400))
 
177
            image_list = ListCtrl(frame, images)
 
178
            sizer = wx.BoxSizer(wx.VERTICAL)
 
179
            sizer.Add(image_list, 1, flag=wx.EXPAND)
178
180
            frame.SetSizer(sizer)
179
181
            frame.Layout()
180
182
            frame.Show()
181
183
            self.SetTopWindow(frame)
182
 
            dialog = Dialog(frame,images,title='Select Image')
 
184
            dialog = Dialog(frame, images, title='Select Image')
183
185
            if dialog.ShowModal() == wx.ID_OK:
184
186
                print(dialog.image_path.GetValue())
185
187
            if dialog.ShowModal() == wx.ID_OK: