def __log_handler__(self, *args): try: do_open = self.logFile.closed logname = self.logFile.name except: do_open = True logname = "" if do_open: if self.device.logname: logname = self.device.logname self.message("logfile from config file %s " % logname) else: fd = FileDialog(self) logname = fd.go(logname) try: if self.device.logmode not in "wa": self.device.logmode = "a" _print(3, "force _a_ppend") self.logFile = open(logname, self.device.logmode) self.al_log['relief'] = SUNKEN self.message("Logging ON: %s" % self.logFile.name) except: self.message("Error open logfile: %s" % logname) else: self.message("Logging OFF: %s" % self.logFile.name) self.logFile.flush() self.logFile.close() self.al_log['relief'] = RAISED
def openSaveFileWindow(self): saveLocation = FileDialog.saveFileDialog(self) if saveLocation != False: saveLocation += FileDialog.fileExtensionGrabber(self.originalPic) newImage = Image.new('RGB', (self.imageHeight, self.imageWidth)) newImage.putdata(self.picToEditData) newImage.save(saveLocation)
def __log_handler__(self, *args): try: do_open = self.logFile.closed logname = self.logFile.name except: do_open = True logname = "" if do_open: if self.device.logname: logname = self.device.logname self.message("logfile from config file %s " % logname) else: fd = FileDialog(self) logname = fd.go(logname) try: if self.device.logmode not in "wa": self.device.logmode = "a" print "force _a_ppend" self.logFile = open(logname, self.device.logmode) self.al_log['relief'] = SUNKEN self.message("Logging ON: %s" % self.logFile.name) except: self.message("Error open logfile: %s" % logname) else: self.message("Logging OFF: %s" % self.logFile.name) self.logFile.flush() self.logFile.close() self.al_log['relief'] = RAISED
def run_script(self): self.stop_loop() fdlg = FileDialog(self.win,title="Run Script") input_dir = "/home/cversek/gitwork/umass-physics/teis/python/src/pyTEIS/scripts/" #FIXME #os.getcwd() filepath = fdlg.go(dir_or_file = input_dir, pattern="*.py", ) if filepath: self.disable_controls() self.abort_script_button.config(state='normal') self._mode = "scripting" self.app.run_script(filepath) self._script_loop()
def _load_file(self): global patchlist d = FileDialog(self.frame) # is it possible to set the icon for the file dialog? patchfile = d.go() if patchfile is None: return else: source = open(patchfile, 'r') App.filename.set(os.path.basename(patchfile)) for line in source: m = re.search('^((['+ALLBANKS+'G])(\d)? (\d+))', line) if m: patchlist.append((MidiOut,m.group(2),m.group(3),int(m.group(4)))) return
def openFileExplorerWindow(self): ogPicHolder = self.originalPic self.originalPic = FileDialog.openFileNameDialog(self) if self.originalPic == False: self.originalPic = ogPicHolder self.destination = 'images/001' + FileDialog.fileExtensionGrabber( self.originalPic) im = Image.open(self.originalPic) self.imageHeight, self.imageWidth = im.size im.save(self.destination) self.picToEditData = im.getdata() self.redSaturationValue = 0 self.greenSaturationValue = 0 self.blueSaturationValue = 0 self.redVibranceValue = 0 self.greenVibranceValue = 0 self.blueVibranceValue = 0 self.updateMainPage()
def __init__(self, *args, **kwds): # begin wxGlade: FilePanel.__init__ kwds["style"] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER) self.window_1_pane_2 = wx.Panel(self.window_1, -1) self.window_1_pane_1 = wx.Panel(self.window_1, -1) self.actions_sizer_staticbox = wx.StaticBox(self, -1, _("Actions")) self.add_button = wx.BitmapButton(self, -1, wx.Bitmap(ADD_REPO(),wx.BITMAP_TYPE_ANY)) self.del_button = wx.BitmapButton(self, -1, wx.Bitmap(DEL_REPO(),wx.BITMAP_TYPE_ANY)) self.share_button = wx.BitmapButton(self, -1, wx.Bitmap(SHARE(),wx.BITMAP_TYPE_ANY)) self.unshare_button = wx.BitmapButton(self, -1, wx.Bitmap(UNSHARE(),wx.BITMAP_TYPE_ANY)) self.preview_button = wx.BitmapButton(self, -1, wx.Bitmap(PREVIEW(),wx.BITMAP_TYPE_ANY)) self.tag_value = wx.TextCtrl(self, -1, "") self.edit_button = wx.BitmapButton(self, -1, wx.Bitmap(EDIT(),wx.BITMAP_TYPE_ANY)) self.tree_list = wx.gizmos.TreeListCtrl(self.window_1_pane_1, -1) self.dir_list = wx.ListCtrl(self.window_1_pane_2, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) self.__set_properties() self.__do_layout() # end wxGlade isz = (16, 16) tree_il = wx.ImageList(isz[0], isz[1]) self.tree_fldridx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.tree_fldropenidx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz)) self.tree_list.SetImageList(tree_il) self.tree_il = tree_il dir_il = wx.ImageList(isz[0], isz[1]) self.dir_fldridx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.dir_fileidx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, isz)) self.dir_list.SetImageList(dir_il, wx.IMAGE_LIST_SMALL) self.dir_il = dir_il # build dir list view self.dir_list.InsertColumn(0, _("Name")) self.dir_list.InsertColumn(IS_SHARED_COL, _("Shared"), wx.LIST_FORMAT_RIGHT) self.dir_list.InsertColumn(TAG_COL, _("Tag")) self.dir_list.SetColumnWidth(0, wx.LIST_AUTOSIZE_USEHEADER) self.dir_list.SetColumnWidth(IS_SHARED_COL, wx.LIST_AUTOSIZE_USEHEADER) self.dir_list.SetColumnWidth(TAG_COL, wx.LIST_AUTOSIZE_USEHEADER) # specific stuff self.facade = get_facade() self.list_state = SelectedListState(self) self.tree_state = SelectedTreeState(self) self.current_state = None self.bind_controls() # build tree list view self.tree_list.AddColumn(_("Explorer")) self.tree_list.AddColumn(_("#shared")) self.tree_list.AddColumn(_("full path")) self.tree_list.SetMainColumn(0) self.tree_list.SetColumnWidth(0, 150) self.tree_list.SetColumnWidth(NB_SHARED_COL, 40) self.root = self.tree_list.AddRoot(_("File System...")) # shared file preview self.file_dlg = FileDialog(self, -1) wx.Dialog.SetTitle(self.file_dlg, _("Your shared files"))
class FilePanel(wx.Panel): """Display shared file and allow user add/remove some""" def __init__(self, *args, **kwds): # begin wxGlade: FilePanel.__init__ kwds["style"] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER) self.window_1_pane_2 = wx.Panel(self.window_1, -1) self.window_1_pane_1 = wx.Panel(self.window_1, -1) self.actions_sizer_staticbox = wx.StaticBox(self, -1, _("Actions")) self.add_button = wx.BitmapButton(self, -1, wx.Bitmap(ADD_REPO(),wx.BITMAP_TYPE_ANY)) self.del_button = wx.BitmapButton(self, -1, wx.Bitmap(DEL_REPO(),wx.BITMAP_TYPE_ANY)) self.share_button = wx.BitmapButton(self, -1, wx.Bitmap(SHARE(),wx.BITMAP_TYPE_ANY)) self.unshare_button = wx.BitmapButton(self, -1, wx.Bitmap(UNSHARE(),wx.BITMAP_TYPE_ANY)) self.preview_button = wx.BitmapButton(self, -1, wx.Bitmap(PREVIEW(),wx.BITMAP_TYPE_ANY)) self.tag_value = wx.TextCtrl(self, -1, "") self.edit_button = wx.BitmapButton(self, -1, wx.Bitmap(EDIT(),wx.BITMAP_TYPE_ANY)) self.tree_list = wx.gizmos.TreeListCtrl(self.window_1_pane_1, -1) self.dir_list = wx.ListCtrl(self.window_1_pane_2, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) self.__set_properties() self.__do_layout() # end wxGlade isz = (16, 16) tree_il = wx.ImageList(isz[0], isz[1]) self.tree_fldridx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.tree_fldropenidx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz)) self.tree_list.SetImageList(tree_il) self.tree_il = tree_il dir_il = wx.ImageList(isz[0], isz[1]) self.dir_fldridx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.dir_fileidx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, isz)) self.dir_list.SetImageList(dir_il, wx.IMAGE_LIST_SMALL) self.dir_il = dir_il # build dir list view self.dir_list.InsertColumn(0, _("Name")) self.dir_list.InsertColumn(IS_SHARED_COL, _("Shared"), wx.LIST_FORMAT_RIGHT) self.dir_list.InsertColumn(TAG_COL, _("Tag")) self.dir_list.SetColumnWidth(0, wx.LIST_AUTOSIZE_USEHEADER) self.dir_list.SetColumnWidth(IS_SHARED_COL, wx.LIST_AUTOSIZE_USEHEADER) self.dir_list.SetColumnWidth(TAG_COL, wx.LIST_AUTOSIZE_USEHEADER) # specific stuff self.facade = get_facade() self.list_state = SelectedListState(self) self.tree_state = SelectedTreeState(self) self.current_state = None self.bind_controls() # build tree list view self.tree_list.AddColumn(_("Explorer")) self.tree_list.AddColumn(_("#shared")) self.tree_list.AddColumn(_("full path")) self.tree_list.SetMainColumn(0) self.tree_list.SetColumnWidth(0, 150) self.tree_list.SetColumnWidth(NB_SHARED_COL, 40) self.root = self.tree_list.AddRoot(_("File System...")) # shared file preview self.file_dlg = FileDialog(self, -1) wx.Dialog.SetTitle(self.file_dlg, _("Your shared files")) # EVENTS def bind_controls(self): """bind all controls with facade""" self.add_button.Bind(wx.EVT_BUTTON, self.on_browse) self.del_button.Bind(wx.EVT_BUTTON, self.on_remove) self.share_button.Bind(wx.EVT_BUTTON, self.on_share) self.unshare_button.Bind(wx.EVT_BUTTON, self.on_unshare) self.edit_button.Bind(wx.EVT_BUTTON, self.on_tag) self.preview_button.Bind(wx.EVT_BUTTON, self.on_preview) self.dir_list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select_list) self.dir_list.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.on_popup_list) self.tree_list.Bind(wx.EVT_TREE_SEL_CHANGING, self.on_select_tree) self.tree_list.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.on_popup_tree) self.tree_list.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.on_expand) def on_browse(self, evt): """add shared directory to list""" # pop up to choose repository dlg = wx.DirDialog(self, message=_("Choose your repository"), defaultPath = os.path.expanduser("~/"), style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON) if dlg.ShowModal() == wx.ID_OK: # path chosen path = dlg.GetPath() self.facade.add_repository(path) self.facade.expand_dir(path) dlg.Destroy() def on_remove(self, evt): """remove shared directory from repository""" file_name = self.tree_list.GetItemText(self.tree_list.GetSelection(), FULL_PATH_COL) repositories = self.facade.get_document("cache").get_repositories() if file_name and os.path.exists(file_name) and file_name in repositories: self.dir_list.DeleteAllItems() self.tree_list.SelectItem(self.root) item = self.facade.get_file_container(file_name) self.tree_list.DeleteChildren(item.get_data()) self.tree_list.Delete(item.get_data()) self.facade.remove_repository(file_name) def on_share(self, evt): """share selected files or directory""" if self.current_state: self.current_state.on_share(evt) evt.Skip() def on_unshare(self, evt): """cancel sharing of selected files or directory""" if self.current_state: self.current_state.on_unshare(evt) evt.Skip() def on_tag(self, evt): """cancel sharing of selected files or directory""" if self.current_state: self.current_state.on_tag(evt) evt.Skip() def on_preview(self, evt): """display all shared files in a FileDialog""" self.file_dlg.Show(do_show=not self.file_dlg.IsShown()) evt.Skip() def on_expand(self, evt): """put into cache new information when dir expanded in tree""" self.current_state = self.tree_state file_name = self.tree_list.GetItemText(evt.GetItem(), FULL_PATH_COL) if evt.GetItem() != self.root: self.facade.expand_dir(abspath(file_name)) self.facade.expand_children('gui', abspath(file_name)) evt.Skip() def on_select_list(self, evt): """new shared directory selecetd""" self.current_state = self.list_state dir_name = self.tree_list.GetItemText(self.tree_list.GetSelection(), FULL_PATH_COL) file_name = self.dir_list.GetItemText(self.dir_list.GetNextItem(-1, state=wx.LIST_STATE_SELECTED)) full_path = abspath(os.path.join(dir_name, file_name)) data = self.facade.get_container('gui', full_path) # update tag self.tag_value.SetValue(data._tag) def on_select_tree(self, evt): """new shared directory selecetd""" self.current_state = self.tree_state file_name = self.tree_list.GetItemText(evt.GetItem(), FULL_PATH_COL) if evt.GetItem() != self.root: # update list data = self.facade.get_container('gui', abspath(file_name)) self._display_dir_content(data) # update tag self.tag_value.SetValue(data._tag) def on_popup_list(self, evt): item = evt.GetItem() print item.GetText() def on_popup_tree(self, evt): item = evt.GetItem() print self.tree_list.GetItemText(item, FULL_PATH_COL) def _display_dir_content(self, dir_container): """update list view with content of directory""" self.dir_list.DeleteAllItems() for name, container in dir_container.iteritems(): if isinstance(container, DirContainer): index = self.dir_list.InsertImageStringItem(sys.maxint, name, self.dir_fldridx) self.dir_list.SetStringItem(index, IS_SHARED_COL, str(container._shared)) self.dir_list.SetStringItem(index, TAG_COL, container._tag) else: index = self.dir_list.InsertImageStringItem(sys.maxint, name, self.dir_fileidx) self.dir_list.SetStringItem(index, IS_SHARED_COL, str(container._shared)) self.dir_list.SetStringItem(index, TAG_COL, container._tag) self.dir_list.SetColumnWidth(0, wx.LIST_AUTOSIZE) self.dir_list.SetColumnWidth(TAG_COL, wx.LIST_AUTOSIZE) self.dir_list.SetColumnWidth(IS_SHARED_COL, wx.LIST_AUTOSIZE) def reset_files(self): """reset view""" self.tree_list.DeleteChildren(self.root) self.dir_list.DeleteAllItems() def cb_update_tree(self, container): """synchronize tree list with sharing container""" # update tree self._add_container_in_tree(self.root, container) # update list selected_item = None try: selected_item = self.tree_list.GetItemText(self.tree_list.GetSelection(), FULL_PATH_COL) except: # no selection pass if selected_item: data = self.facade.get_container('gui', abspath(selected_item)) self._display_dir_content(data) # update file dialog self.file_dlg.refresh() def _add_container_in_tree(self, parent, container): """format item in tree view""" child = self._add_item_in_tree(parent, container) for key, container in container.iteritems(): if isinstance(container, DirContainer): self._add_container_in_tree(child, container) def _add_item_in_tree(self, parent, container): """add items in tree""" # create item if container.get_data() is None: name = os.path.basename(container.path) child = self.tree_list.AppendItem(parent, name) container.set_data(child) self.tree_list.SetItemImage(child, self.tree_fldridx, which = wx.TreeItemIcon_Normal) self.tree_list.SetItemImage(child, self.tree_fldropenidx, which = wx.TreeItemIcon_Expanded) else: child = container.get_data() nb_shared = container.nb_shared() if nb_shared == SHARING_ALL: str_shared = "All" else: str_shared = str(nb_shared) self.tree_list.SetItemText(child, u"%s"% str_shared, NB_SHARED_COL) self.tree_list.SetItemText(child, container.path, FULL_PATH_COL) return child def _get_selected_listitems(self): """returns all selected items in dir list""" result = [] item = -1; while len(result) < self.dir_list.GetSelectedItemCount(): item = self.dir_list.GetNextItem(item, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED) if item == -1: break; else: result.append(item) return result def __set_properties(self): """init widgets properties""" # begin wxGlade: FilePanel.__set_properties self.add_button.SetToolTipString(_("Add repository")) self.add_button.SetSize(self.add_button.GetBestSize()) self.del_button.SetToolTipString(_("Remove repository")) self.del_button.SetSize(self.del_button.GetBestSize()) self.share_button.SetToolTipString(_("Share")) self.share_button.SetSize(self.share_button.GetBestSize()) self.unshare_button.SetToolTipString(_("Unshare")) self.unshare_button.SetSize(self.unshare_button.GetBestSize()) self.preview_button.SetToolTipString(_("Preview your shared files")) self.preview_button.SetSize(self.preview_button.GetBestSize()) self.tag_value.SetToolTipString(_("Complementary information on file")) self.edit_button.SetToolTipString(_("Apply comment")) self.edit_button.SetSize(self.edit_button.GetBestSize()) # end wxGlade def __do_layout(self): """set up widgets""" # begin wxGlade: FilePanel.__do_layout file_sizer = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_1 = wx.BoxSizer(wx.HORIZONTAL) actions_sizer = wx.StaticBoxSizer(self.actions_sizer_staticbox, wx.HORIZONTAL) actions_sizer.Add(self.add_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) actions_sizer.Add(self.del_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) actions_sizer.Add(self.share_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) actions_sizer.Add(self.unshare_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) actions_sizer.Add(self.preview_button, 0, wx.ADJUST_MINSIZE, 0) actions_sizer.Add(self.tag_value, 1, wx.LEFT|wx.EXPAND|wx.FIXED_MINSIZE, 3) actions_sizer.Add(self.edit_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) file_sizer.Add(actions_sizer, 0, wx.ALL|wx.EXPAND, 3) sizer_1.Add(self.tree_list, 1, wx.EXPAND, 0) self.window_1_pane_1.SetAutoLayout(True) self.window_1_pane_1.SetSizer(sizer_1) sizer_1.Fit(self.window_1_pane_1) sizer_1.SetSizeHints(self.window_1_pane_1) sizer_2.Add(self.dir_list, 1, wx.EXPAND, 0) self.window_1_pane_2.SetAutoLayout(True) self.window_1_pane_2.SetSizer(sizer_2) sizer_2.Fit(self.window_1_pane_2) sizer_2.SetSizeHints(self.window_1_pane_2) self.window_1.SplitVertically(self.window_1_pane_1, self.window_1_pane_2, 200) file_sizer.Add(self.window_1, 1, wx.EXPAND, 0) self.SetAutoLayout(True) self.SetSizer(file_sizer) file_sizer.Fit(self) file_sizer.SetSizeHints(self)
def __init__(self, parent, id, cb_modified=lambda x: sys.stdout.write(str(x))): # set members self.do_modified = cb_modified args = (parent, id) kwds = {} # begin wxGlade: FilePanel.__init__ kwds["style"] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER) self.window_1_pane_2 = wx.Panel(self.window_1, -1) self.window_1_pane_1 = wx.Panel(self.window_1, -1) self.actions_sizer_staticbox = wx.StaticBox(self, -1, _("Actions")) self.label_2 = wx.StaticText(self, -1, _("Tag:")) self.tag_value = wx.TextCtrl(self, -1, "") self.edit_button = wx.BitmapButton(self, -1, wx.Bitmap(EDIT(),wx.BITMAP_TYPE_ANY)) self.share_button = wx.BitmapButton(self, -1, wx.Bitmap(SHARE(),wx.BITMAP_TYPE_ANY)) self.unshare_button = wx.BitmapButton(self, -1, wx.Bitmap(UNSHARE(),wx.BITMAP_TYPE_ANY)) self.tree_list = wx.gizmos.TreeListCtrl(self.window_1_pane_1, -1) self.dir_list = wx.ListCtrl(self.window_1_pane_2, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) self.__set_properties() self.__do_layout() # end wxGlade # Popup menus self.tree_menu = wx.Menu() self.add_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Add directory')) self.tree_menu.AppendItem(self.add_item) self.del_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Remove directory')) self.tree_menu.AppendItem(self.del_item) self.tree_menu.AppendSeparator() self.share_all_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Share recursively')) self.tree_menu.AppendItem(self.share_all_item) self.unshare_all_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Unshare recursively')) self.tree_menu.AppendItem(self.unshare_all_item) self.list_menu = wx.Menu() self.tag_item = wx.MenuItem(self.list_menu, wx.NewId(), _('Tag')) self.list_menu.AppendItem(self.tag_item) self.share_item = wx.MenuItem(self.list_menu, wx.NewId(), _('Share')) self.list_menu.AppendItem(self.share_item) self.unshare_item = wx.MenuItem(self.list_menu, wx.NewId(), _('Unshare')) self.list_menu.AppendItem(self.unshare_item) # images isz = (16, 16) tree_il = wx.ImageList(isz[0], isz[1]) self.tree_fldridx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.tree_fldropenidx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz)) self.tree_list.SetImageList(tree_il) self.tree_il = tree_il dir_il = wx.ImageList(isz[0], isz[1]) self.dir_fldridx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.dir_fileidx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, isz)) self.dir_list.SetImageList(dir_il, wx.IMAGE_LIST_SMALL) self.dir_il = dir_il # build dir list view self.dir_list.InsertColumn(0, _("Name")) self.dir_list.InsertColumn(SIZE_COL, _("Size"), wx.LIST_FORMAT_RIGHT) self.dir_list.InsertColumn(SHARED_COL, _("Shared"), wx.LIST_FORMAT_RIGHT) self.dir_list.InsertColumn(TAG_COL, _("Tag")) self.dir_list.SetColumnWidth(NAME_COL, 150) self.dir_list.SetColumnWidth(SIZE_COL, 60) self.dir_list.SetColumnWidth(SHARED_COL, wx.LIST_AUTOSIZE_USEHEADER) self.dir_list.SetColumnWidth(TAG_COL, wx.LIST_AUTOSIZE_USEHEADER) # specific stuff self.list_state = SelectedListState(self) self.tree_state = SelectedTreeState(self) self.current_state = None self.bind_controls() # build tree list view self.tree_list.AddColumn(_("Explorer")) self.tree_list.AddColumn(_("#shared")) self.tree_list.AddColumn(_("full path")) self.tree_list.SetMainColumn(0) self.tree_list.SetColumnWidth(0, 150) self.tree_list.SetColumnWidth(NB_SHARED_COL, 40) self.root = self.tree_list.AddRoot(_("File System...")) # shared file preview self.file_dlg = FileDialog(self, -1) wx.Dialog.SetTitle(self.file_dlg, _("Your shared files"))
class FilePanel(wx.Panel): """Display shared file and allow user add/remove some""" def __init__(self, parent, id, cb_modified=lambda x: sys.stdout.write(str(x))): # set members self.do_modified = cb_modified args = (parent, id) kwds = {} # begin wxGlade: FilePanel.__init__ kwds["style"] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER) self.window_1_pane_2 = wx.Panel(self.window_1, -1) self.window_1_pane_1 = wx.Panel(self.window_1, -1) self.actions_sizer_staticbox = wx.StaticBox(self, -1, _("Actions")) self.label_2 = wx.StaticText(self, -1, _("Tag:")) self.tag_value = wx.TextCtrl(self, -1, "") self.edit_button = wx.BitmapButton(self, -1, wx.Bitmap(EDIT(),wx.BITMAP_TYPE_ANY)) self.share_button = wx.BitmapButton(self, -1, wx.Bitmap(SHARE(),wx.BITMAP_TYPE_ANY)) self.unshare_button = wx.BitmapButton(self, -1, wx.Bitmap(UNSHARE(),wx.BITMAP_TYPE_ANY)) self.tree_list = wx.gizmos.TreeListCtrl(self.window_1_pane_1, -1) self.dir_list = wx.ListCtrl(self.window_1_pane_2, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) self.__set_properties() self.__do_layout() # end wxGlade # Popup menus self.tree_menu = wx.Menu() self.add_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Add directory')) self.tree_menu.AppendItem(self.add_item) self.del_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Remove directory')) self.tree_menu.AppendItem(self.del_item) self.tree_menu.AppendSeparator() self.share_all_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Share recursively')) self.tree_menu.AppendItem(self.share_all_item) self.unshare_all_item = wx.MenuItem(self.tree_menu, wx.NewId(), _('Unshare recursively')) self.tree_menu.AppendItem(self.unshare_all_item) self.list_menu = wx.Menu() self.tag_item = wx.MenuItem(self.list_menu, wx.NewId(), _('Tag')) self.list_menu.AppendItem(self.tag_item) self.share_item = wx.MenuItem(self.list_menu, wx.NewId(), _('Share')) self.list_menu.AppendItem(self.share_item) self.unshare_item = wx.MenuItem(self.list_menu, wx.NewId(), _('Unshare')) self.list_menu.AppendItem(self.unshare_item) # images isz = (16, 16) tree_il = wx.ImageList(isz[0], isz[1]) self.tree_fldridx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.tree_fldropenidx = tree_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz)) self.tree_list.SetImageList(tree_il) self.tree_il = tree_il dir_il = wx.ImageList(isz[0], isz[1]) self.dir_fldridx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.dir_fileidx = dir_il.Add(wx.ArtProvider_GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, isz)) self.dir_list.SetImageList(dir_il, wx.IMAGE_LIST_SMALL) self.dir_il = dir_il # build dir list view self.dir_list.InsertColumn(0, _("Name")) self.dir_list.InsertColumn(SIZE_COL, _("Size"), wx.LIST_FORMAT_RIGHT) self.dir_list.InsertColumn(SHARED_COL, _("Shared"), wx.LIST_FORMAT_RIGHT) self.dir_list.InsertColumn(TAG_COL, _("Tag")) self.dir_list.SetColumnWidth(NAME_COL, 150) self.dir_list.SetColumnWidth(SIZE_COL, 60) self.dir_list.SetColumnWidth(SHARED_COL, wx.LIST_AUTOSIZE_USEHEADER) self.dir_list.SetColumnWidth(TAG_COL, wx.LIST_AUTOSIZE_USEHEADER) # specific stuff self.list_state = SelectedListState(self) self.tree_state = SelectedTreeState(self) self.current_state = None self.bind_controls() # build tree list view self.tree_list.AddColumn(_("Explorer")) self.tree_list.AddColumn(_("#shared")) self.tree_list.AddColumn(_("full path")) self.tree_list.SetMainColumn(0) self.tree_list.SetColumnWidth(0, 150) self.tree_list.SetColumnWidth(NB_SHARED_COL, 40) self.root = self.tree_list.AddRoot(_("File System...")) # shared file preview self.file_dlg = FileDialog(self, -1) wx.Dialog.SetTitle(self.file_dlg, _("Your shared files")) # EVENTS def bind_controls(self): """bind all controls with facade""" # selection self.dir_list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select_list) self.dir_list.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.on_popup_list) self.tree_list.Bind(wx.EVT_TREE_SEL_CHANGING, self.on_select_tree) self.tree_list.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.on_popup_tree) self.tree_list.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.on_expand) # button self.share_button.Bind(wx.EVT_BUTTON, self.on_share) self.unshare_button.Bind(wx.EVT_BUTTON, self.on_unshare) self.edit_button.Bind(wx.EVT_BUTTON, self.on_tag) # popu menus self.Bind(wx.EVT_MENU, self.on_browse, id=self.add_item.GetId()) self.Bind(wx.EVT_MENU, self.on_remove, id=self.del_item.GetId()) self.Bind(wx.EVT_MENU, self.on_share, id=self.share_all_item.GetId()) self.Bind(wx.EVT_MENU, self.on_unshare, id=self.unshare_all_item.GetId()) self.Bind(wx.EVT_MENU, self.on_tag, id=self.tag_item.GetId()) self.Bind(wx.EVT_MENU, self.on_share, id=self.share_item.GetId()) self.Bind(wx.EVT_MENU, self.on_unshare, id=self.unshare_item.GetId()) def on_browse(self, evt): """add shared directory to list""" # pop up to choose repository dlg = wx.DirDialog(self, message=_("Choose your repository"), defaultPath = os.path.expanduser("~/"), style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON) if dlg.ShowModal() == wx.ID_OK: # path chosen path = dlg.GetPath() get_facade().add_file(path) get_facade().recursive_share((path, True)) dlg.Destroy() def on_remove(self, evt): """remove shared directory from repository""" file_name = self.tree_list.GetItemText(self.tree_list.GetSelection(), FULL_PATH_COL) repositories = get_facade().get_document().get_repositories() if file_name and os.path.exists(file_name) and file_name in repositories: self.dir_list.DeleteAllItems() self.tree_list.SelectItem(self.root) item = get_facade().get_file_container(file_name) self.tree_list.DeleteChildren(item.get_data()) self.tree_list.Delete(item.get_data()) get_facade().del_file(file_name) self.do_modified(True) def on_share(self, evt): """share selected files or directory""" if self.current_state: self.current_state.on_share(evt) evt.Skip() def on_unshare(self, evt): """cancel sharing of selected files or directory""" if self.current_state: self.current_state.on_unshare(evt) evt.Skip() def on_tag(self, evt): """cancel sharing of selected files or directory""" if self.current_state: self.current_state.on_tag(evt) evt.Skip() def on_preview(self, evt): """display all shared files in a FileDialog""" self.file_dlg.activate() self.file_dlg.Show(do_show=not self.file_dlg.IsShown()) evt.Skip() def on_expand(self, evt): """put into cache new information when dir expanded in tree""" self.current_state = self.tree_state file_name = self.tree_list.GetItemText(evt.GetItem(), FULL_PATH_COL) if evt.GetItem() != self.root: get_facade().expand_dir(abspath(file_name)) get_facade().expand_children(abspath(file_name)) evt.Skip() def on_select_list(self, evt): """new shared directory selecetd""" self.current_state = self.list_state dir_name = self.tree_list.GetItemText(self.tree_list.GetSelection(), FULL_PATH_COL) file_name = self.dir_list.GetItemText(self.dir_list.GetNextItem(-1, state=wx.LIST_STATE_SELECTED)) full_path = abspath(os.path.join(dir_name, file_name)) data = get_facade().get_file_container(full_path) def on_select_tree(self, evt): """new shared directory selecetd""" self.current_state = self.tree_state file_name = self.tree_list.GetItemText(evt.GetItem(), FULL_PATH_COL) if not file_name: self.dir_list.DeleteAllItems() else: if evt.GetItem() != self.root: data = get_facade().get_file_container(abspath(file_name)) self._display_dir_content(data) def on_popup_list(self, evt): item = evt.GetItem() self.PopupMenu(self.list_menu) def on_popup_tree(self, evt): item = evt.GetItem() self.tree_list.SelectItem(item) self.PopupMenu(self.tree_menu) def _display_dir_content(self, dir_container): """update list view with content of directory""" self.dir_list.DeleteAllItems() for name, container in dir_container.iteritems(): if isinstance(container, DirContainer): index = self.dir_list.InsertImageStringItem(sys.maxint, unicode(name, ENCODING), self.dir_fldridx) self.dir_list.SetItemTextColour(index, wx.LIGHT_GREY) else: index = self.dir_list.InsertImageStringItem(sys.maxint, unicode(name, ENCODING), self.dir_fileidx) self.dir_list.SetStringItem(index, SIZE_COL, formatbytes(container.size, kiloname="Ko", meganame="Mo", bytename="o")) self.dir_list.SetItemTextColour(index, container._shared and wx.BLUE or wx.BLACK) self.dir_list.SetStringItem(index, SHARED_COL, str(container._shared)) self.dir_list.SetStringItem(index, TAG_COL, container._tag) self.dir_list.SetColumnWidth(TAG_COL, wx.LIST_AUTOSIZE) def cb_update_tree(self, container): """synchronize tree list with sharing container""" # update tree self._add_container_in_tree(self.root, container) # update list try: selected_item = self.tree_list.GetItemText(self.tree_list.GetSelection(), FULL_PATH_COL) data = get_facade().get_file_container(abspath(selected_item)) self._display_dir_content(data) except: #no selection pass self.tree_list.Expand(self.root) def _add_container_in_tree(self, parent, container): """format item in tree view""" child = self._add_item_in_tree(parent, container) for key, container in container.iteritems(): if isinstance(container, DirContainer): self._add_container_in_tree(child, container) def _add_item_in_tree(self, parent, container): """add items in tree""" # create item container_path = container.get_path() if container.get_data() is None: name = os.path.basename(container_path) child = self.tree_list.AppendItem(parent, unicode(name, ENCODING)) container.set_data(child) self.tree_list.SetItemImage(child, self.tree_fldridx, which = wx.TreeItemIcon_Normal) self.tree_list.SetItemImage(child, self.tree_fldropenidx, which = wx.TreeItemIcon_Expanded) else: child = container.get_data() nb_shared = container.nb_shared() str_shared = str(nb_shared) self.tree_list.SetItemText(child, u"%s"% str_shared, NB_SHARED_COL) self.tree_list.SetItemText(child, unicode(container_path, ENCODING), FULL_PATH_COL) return child def _get_selected_listitems(self): """returns all selected items in dir list""" result = [] item = -1; while len(result) < self.dir_list.GetSelectedItemCount(): item = self.dir_list.GetNextItem(item, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED) if item == -1: break; else: result.append(item) return result def on_change_facade(self): """setter""" self.file_dlg.on_change_facade() def __set_properties(self): """init widgets properties""" # begin wxGlade: FilePanel.__set_properties self.tag_value.SetToolTipString(_("Complementary information on file")) self.edit_button.SetToolTipString(_("Tag")) self.edit_button.SetSize(self.edit_button.GetBestSize()) self.share_button.SetToolTipString(_("Share")) self.share_button.SetSize(self.share_button.GetBestSize()) self.unshare_button.SetToolTipString(_("Unshare")) self.unshare_button.SetSize(self.unshare_button.GetBestSize()) # end wxGlade def __do_layout(self): """set up widgets""" # begin wxGlade: FilePanel.__do_layout file_sizer = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_1 = wx.BoxSizer(wx.HORIZONTAL) actions_sizer = wx.StaticBoxSizer(self.actions_sizer_staticbox, wx.HORIZONTAL) actions_sizer.Add(self.label_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0) actions_sizer.Add(self.tag_value, 1, wx.LEFT|wx.RIGHT|wx.EXPAND|wx.FIXED_MINSIZE, 5) actions_sizer.Add(self.edit_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) actions_sizer.Add(self.share_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) actions_sizer.Add(self.unshare_button, 0, wx.EXPAND|wx.FIXED_MINSIZE, 0) file_sizer.Add(actions_sizer, 0, wx.ALL|wx.EXPAND, 3) sizer_1.Add(self.tree_list, 1, wx.EXPAND, 0) self.window_1_pane_1.SetAutoLayout(True) self.window_1_pane_1.SetSizer(sizer_1) sizer_1.Fit(self.window_1_pane_1) sizer_1.SetSizeHints(self.window_1_pane_1) sizer_2.Add(self.dir_list, 1, wx.EXPAND, 0) self.window_1_pane_2.SetAutoLayout(True) self.window_1_pane_2.SetSizer(sizer_2) sizer_2.Fit(self.window_1_pane_2) sizer_2.SetSizeHints(self.window_1_pane_2) self.window_1.SplitVertically(self.window_1_pane_1, self.window_1_pane_2, 180) file_sizer.Add(self.window_1, 1, wx.EXPAND, 0) self.SetAutoLayout(True) self.SetSizer(file_sizer) file_sizer.Fit(self) file_sizer.SetSizeHints(self) # end wxGlade # reset splitter since bug in wxGlade self.window_1.SplitVertically(self.window_1_pane_1, self.window_1_pane_2, 180)
from FileDialog import FileDialog import sys from PyQt5.QtWidgets import QApplication if __name__ == '__main__': app = QApplication(sys.argv) ui = FileDialog() ui.show() sys.exit(app.exec_())