Source code for timelinelib.wxgui.components.filechooser
# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline 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.
#
# Timeline 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 Timeline. If not, see <http://www.gnu.org/licenses/>.
import wx
import wx.lib.newevent
[docs]class FileChooser(wx.Panel):
FilePathChangedEvent, EVT_FILE_PATH_CHANGED = wx.lib.newevent.NewEvent()
BORDER = 1
[docs] def __init__(self, parent,
dialog_message=_("Choose file"),
dialog_dir="",
dialog_wildcard="*",
**kwargs):
wx.Panel.__init__(self, parent, **kwargs)
self._dialog_message = dialog_message
self._dialog_dir = dialog_dir
self._dialog_wildcard = dialog_wildcard
self._create_gui()
[docs] def GetFilePath(self):
return self._path_text_field.GetValue()
def _create_gui(self):
self._create_path_text_field()
self._create_browse_button()
self._layout_components()
def _create_path_text_field(self):
self._path_text_field = wx.TextCtrl(self)
self._path_text_field.Bind(wx.EVT_TEXT, self._on_path_text_changed)
def _on_path_text_changed(self, evt):
wx.PostEvent(self, self.FilePathChangedEvent())
def _create_browse_button(self):
self._browse_button = wx.Button(self, wx.ID_OPEN)
self._browse_button.Bind(wx.EVT_BUTTON, self._on_browse_button_click)
def _on_browse_button_click(self, evt):
dialog = wx.FileDialog(self,
message=self._dialog_message,
defaultDir=self._dialog_dir,
wildcard=self._dialog_wildcard,
style=wx.FD_OPEN)
if dialog.ShowModal() == wx.ID_OK:
self._path_text_field.SetValue(dialog.GetPath())
dialog.Destroy()
def _layout_components(self):
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self._path_text_field,
proportion=1,
flag=wx.ALL|wx.ALIGN_CENTER_VERTICAL,
border=self.BORDER)
sizer.Add(self._browse_button,
proportion=0,
flag=wx.ALL|wx.ALIGN_CENTER_VERTICAL,
border=self.BORDER)
self.SetSizer(sizer)