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/
25
23
if __name__ == '__main__':
27
sys.path.insert(0,'..')
28
sys.path.insert(0,'../..')
25
sys.path.insert(0, '..')
26
sys.path.insert(0, '../..')
30
28
from lib.openImage import open_thumb
31
29
from lib.formField import IMAGE_READ_EXTENSIONS
34
from wxPil import pil_wxBitmap, pil_wxImage
32
from wxPil import pil_wxBitmap
39
37
def truncate(content, length=100, suffix='...'):
40
38
if len(content) <= length:
43
return content[:length].rsplit(' ', 1)[0]+suffix
41
return content[:length].rsplit(' ', 1)[0] + suffix
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)
51
50
self.image_list = wx.ImageList(*icon_size)
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,
69
item = self.InsertImageStringItem(index, '', self.icons[file])
72
70
self.SetItemData(item, index)
74
72
def GetLabel(self, file):
75
return self._files_to_labels.get(file,file)
73
return self._files_to_labels.get(file, file)
77
def GetItemFile(self,item):
75
def GetItemFile(self, item):
78
76
return self._files[item.GetData()]
80
def GetItemLabel(self,item):
78
def GetItemLabel(self, item):
81
79
return self._labels[item.GetData()]
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)
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)
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 \
95
super(Dialog, self).__init__(parent, -1, **keyw)
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()
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)
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)
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)
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)
127
128
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated,
129
self.Bind(wx.EVT_TEXT,self.OnText, self.image_path.path)
130
self.Bind(wx.EVT_TEXT, self.OnText, self.image_path.path)
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)
138
def OnText(self,event):
139
def OnText(self, event):
139
140
#print 'ontext',event.GetString()
140
141
self.Select(event.GetString())
142
def Select(self,value):
143
def Select(self, value):
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)
150
151
elif not(self.selection is None):
151
152
#print "deselect", self.selection
170
171
for image in glob.glob('/usr/share/icons/hicolor/48x48/apps/*.png'):
171
172
images[os.path.basename(image)] = image
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)
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: