def OnNewName(self, event): tag_id = tagging.tag_name_to_id(self.edit_tag) text = event.GetEventObject() new_name = text.GetValue() for tag_name in tagging.get_all_tags(): if tagging.tag_name_to_id(tag_name) == tag_id: continue if tag_name.lower() == new_name.lower(): wx.MessageBox( ("Tag name already in use! Two tags can't have the same " "name, regardless of case."), "Error", wx.OK, ) return if not re.match('^' + expression.REG_TAG_NAME + '$', new_name): wx.MessageBox( ("Invalid input! Tag names can only contain letters, " "numbers and underscores (which will be displayed " "as a sapce). They must start with a letter."), "Error", wx.OK, ) return output.rename_tag(tag_id, new_name) if self.edit_tag in self.checked: self.checked.append(new_name) event = TagListUpdateEvent( self.GetId(), checked=self.checked ) wx.PostEvent(self, event)
def OnKeyDown(self, event): key = event.GetKeyCode() if key == wx.WXK_UP: self.popup.CursorUp() return elif key == wx.WXK_DOWN: self.popup.CursorDown() return elif key in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER) and self.popup.Shown: #self.skip_event = True self.SetInsertionPointEnd() items = self.octotagger.GetSelectedItems() print items tag = self.popup.GetSelectedSuggestion() print tag if not (items and tag): return for item in items: tagging.tag_file(item, tag) self.octotagger.update_tag_list() self.octotagger.select_tags() self.Value = "" unformatted = tagging.get_all_tags() formatted = unformatted if len(formatted) > 0: self.popup.SetSuggestions(formatted, unformatted) self.AdjustPopupPosition() self.Unbind(wx.EVT_KILL_FOCUS) self.popup.ShowWithoutActivating() self.SetFocus() self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus) else: self.popup.Hide() self.popup.Show() event.Skip() return elif key == wx.WXK_HOME: self.popup.CursorHome() elif key == wx.WXK_END: self.popup.CursorEnd() elif event.ControlDown() and unichr(key).lower() == "a": self.SelectAll() elif key == wx.WXK_ESCAPE: self.popup.Hide() return event.Skip()
def InitUI(self): """Initialize User Interface""" panel = wx.Panel(self, style=wx.BORDER_SIMPLE) empty_panel = wx.Panel(self) self.tags = [] for tag in tagging.get_all_tags(): self.tags.append(tag.replace("_", " ")) # Set sizers main_sz = wx.BoxSizer(wx.VERTICAL) main_sz.Add(panel, 1, flag=wx.EXPAND) self.SetSizer(main_sz) sizer = wx.BoxSizer(wx.VERTICAL) sz_location = wx.BoxSizer(wx.HORIZONTAL) sz_name = wx.BoxSizer(wx.HORIZONTAL) sz_options = wx.BoxSizer(wx.HORIZONTAL) sz_symlinks = wx.BoxSizer(wx.VERTICAL) sz_automatic = wx.BoxSizer(wx.HORIZONTAL) sz_tags = wx.BoxSizer(wx.VERTICAL) sz_tags_body = wx.BoxSizer(wx.HORIZONTAL) sz_sel_btn = wx.BoxSizer(wx.VERTICAL) sz_close_btn = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(sz_location, 0, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_name, 0, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_options, 0, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_tags, 1, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_close_btn, 0, flag=wx.ALL | wx.EXPAND, border=5) sz_options.Add(sz_symlinks, 1, flag=wx.ALL, border=5) sz_options.Add(sz_automatic, 1, flag=wx.ALL, border=5) # Define elements and add them to sizers # Labels txt_directory = wx.StaticText(panel, size=(80, -1), label="Location:") sz_location.Add(txt_directory, 0, flag=wx.ALL, border=5) txt_name = wx.StaticText(panel, size=(80, -1), label="Name:") sz_name.Add(txt_name, 0, flag=wx.ALL, border=5) txt_tags = wx.StaticText(panel, label="Tags: ") sz_tags.Add(txt_tags, 0, flag=wx.ALL, border=5) txt_symlinks = wx.StaticText(panel, label="Symlink method:") sz_symlinks.Add(txt_symlinks, 0) # Text controls self.tc_directory = wx.TextCtrl(panel) sz_location.Add(self.tc_directory, 1, flag=wx.ALL | wx.EXPAND, border=5) self.tc_name = wx.TextCtrl(panel) sz_name.Add(self.tc_name, 1, flag=wx.ALL | wx.EXPAND, border=5) # Radio buttons self.rb_softlinks = wx.RadioButton(panel, -1, "Softlinks") sz_symlinks.Add(self.rb_softlinks, 0, flag=wx.TOP | wx.LEFT, border=5) self.rb_hardlinks = wx.RadioButton(panel, -1, "Hardlinks") sz_symlinks.Add(self.rb_hardlinks, 0, flag=wx.LEFT, border=5) # Checkbox self.cb_automatic = wx.CheckBox(panel, label="Automatically add new tags", name="auto") sz_automatic.Add(self.cb_automatic, 0) # Buttons btn_browse = wx.Button(panel, label="Browse...") btn_browse.Bind(wx.EVT_BUTTON, self.OnBrowse) sz_location.Add(btn_browse, 0, flag=wx.ALL, border=5) btn_select_all = wx.Button(panel, label="Select all") btn_select_all.Bind(wx.EVT_BUTTON, self.OnSelectAll) sz_sel_btn.Add(btn_select_all, 0, flag=wx.ALL, border=5) btn_deselect_all = wx.Button(panel, label="Deselect all") btn_deselect_all.Bind(wx.EVT_BUTTON, self.OnDeselectAll) sz_sel_btn.Add(btn_deselect_all, 0, flag=wx.ALL, border=5) btn_ok = wx.Button(panel, label="Ok") btn_ok.Bind(wx.EVT_BUTTON, self.OnOk) sz_close_btn.Add(empty_panel, 1, flag=wx.ALL | wx.EXPAND, border=5) sz_close_btn.Add(btn_ok, 0, flag=wx.ALL, border=5) btn_cancel = wx.Button(panel, label="Cancel") btn_cancel.Bind(wx.EVT_BUTTON, self.OnClose) sz_close_btn.Add(btn_cancel, 0, flag=wx.ALL, border=5) # Tags # Check list box self.lb = wx.CheckListBox(panel, wx.ID_ANY, (0, 0), wx.DefaultSize, self.tags) sz_tags_body.Add(self.lb, 1, flag=wx.ALL | wx.EXPAND, border=5) sz_tags_body.Add(sz_sel_btn, 0, flag=wx.ALL, border=5) sz_tags.Add(sz_tags_body, 1, flag=wx.ALL | wx.EXPAND, border=5) panel.SetSizerAndFit(sizer) self.Layout() self.InitData()
def InitUI(self): """Initialize User Interface""" panel = wx.Panel(self, style=wx.BORDER_SIMPLE) empty_panel = wx.Panel(self) self.tags = [] for tag in tagging.get_all_tags(): self.tags.append(tag.replace("_", " ")) # Set sizers main_sz = wx.BoxSizer(wx.VERTICAL) main_sz.Add(panel, 1, flag=wx.EXPAND) self.SetSizer(main_sz) sizer = wx.BoxSizer(wx.VERTICAL) sz_location = wx.BoxSizer(wx.HORIZONTAL) sz_name = wx.BoxSizer(wx.HORIZONTAL) sz_options = wx.BoxSizer(wx.HORIZONTAL) sz_symlinks = wx.BoxSizer(wx.VERTICAL) sz_automatic = wx.BoxSizer(wx.HORIZONTAL) sz_tags = wx.BoxSizer(wx.VERTICAL) sz_tags_body = wx.BoxSizer(wx.HORIZONTAL) sz_sel_btn = wx.BoxSizer(wx.VERTICAL) sz_close_btn = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(sz_location, 0, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_name, 0, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_options, 0, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_tags, 1, flag=wx.ALL | wx.EXPAND, border=5) sizer.Add(sz_close_btn, 0, flag=wx.ALL | wx.EXPAND, border=5) sz_options.Add(sz_symlinks, 1, flag=wx.ALL, border=5) sz_options.Add(sz_automatic, 1, flag=wx.ALL, border=5) # Define elements and add them to sizers # Labels txt_directory = wx.StaticText(panel, size=(80, -1), label="Location:") sz_location.Add(txt_directory, 0, flag=wx.ALL, border=5) txt_name = wx.StaticText(panel, size=(80, -1), label="Name:") sz_name.Add(txt_name, 0, flag=wx.ALL, border=5) txt_tags = wx.StaticText(panel, label="Tags: ") sz_tags.Add(txt_tags, 0, flag=wx.ALL, border=5) txt_symlinks = wx.StaticText(panel, label="Symlink method:") sz_symlinks.Add(txt_symlinks, 0) # Text controls self.tc_directory = wx.TextCtrl(panel) sz_location.Add(self.tc_directory, 1, flag=wx.ALL | wx.EXPAND, border=5) self.tc_name = wx.TextCtrl(panel) sz_name.Add(self.tc_name, 1, flag=wx.ALL | wx.EXPAND, border=5) # Radio buttons self.rb_softlinks = wx.RadioButton(panel, -1, "Softlinks") sz_symlinks.Add(self.rb_softlinks, 0, flag=wx.TOP | wx.LEFT, border=5) self.rb_hardlinks = wx.RadioButton(panel, -1, "Hardlinks") sz_symlinks.Add(self.rb_hardlinks, 0, flag=wx.LEFT, border=5) # Checkbox self.cb_automatic = wx.CheckBox( panel, label="Automatically add new tags", name="auto") sz_automatic.Add(self.cb_automatic, 0) # Buttons btn_browse = wx.Button(panel, label="Browse...") btn_browse.Bind(wx.EVT_BUTTON, self.OnBrowse) sz_location.Add(btn_browse, 0, flag=wx.ALL, border=5) btn_select_all = wx.Button(panel, label="Select all") btn_select_all.Bind(wx.EVT_BUTTON, self.OnSelectAll) sz_sel_btn.Add(btn_select_all, 0, flag=wx.ALL, border=5) btn_deselect_all = wx.Button(panel, label="Deselect all") btn_deselect_all.Bind(wx.EVT_BUTTON, self.OnDeselectAll) sz_sel_btn.Add(btn_deselect_all, 0, flag=wx.ALL, border=5) btn_ok = wx.Button(panel, label="Ok") btn_ok.Bind(wx.EVT_BUTTON, self.OnOk) sz_close_btn.Add(empty_panel, 1, flag=wx.ALL | wx.EXPAND, border=5) sz_close_btn.Add(btn_ok, 0, flag=wx.ALL, border=5) btn_cancel = wx.Button(panel, label="Cancel") btn_cancel.Bind(wx.EVT_BUTTON, self.OnClose) sz_close_btn.Add(btn_cancel, 0, flag=wx.ALL, border=5) # Tags # Check list box self.lb = wx.CheckListBox( panel, wx.ID_ANY, (0, 0), wx.DefaultSize, self.tags ) sz_tags_body.Add(self.lb, 1, flag=wx.ALL | wx.EXPAND, border=5) sz_tags_body.Add(sz_sel_btn, 0, flag=wx.ALL, border=5) sz_tags.Add(sz_tags_body, 1, flag=wx.ALL | wx.EXPAND, border=5) panel.SetSizerAndFit(sizer) self.Layout()