Changeset b0f04e627847…
Parent 521958f6fd78…
by
Changes to one file · Browse files at b0f04e627847 Showing diff from parent 521958f6fd78 Diff from another changeset...
|
|
@@ -7,7 +7,7 @@ import os
import gtk
from dialog import *
-import hglib
+from shlib import shell_notify
from mercurial import hg, ui, match
class HgIgnoreDialog(gtk.Window):
@@ -54,6 +54,7 @@ hbox.pack_start(glob_button, False, False, 4)
glob_button.connect('clicked', self.add_glob, glob_entry)
glob_entry.connect('activate', self.add_glob, glob_entry)
+ self.glob_entry = glob_entry
mainvbox.pack_start(hbox, False, False)
hbox = gtk.HBox()
@@ -73,7 +74,10 @@ frame = gtk.Frame('Filters')
hbox.pack_start(frame, True, True, 4)
pattree = gtk.TreeView()
+ pattree.connect('button-press-event', self.tree_button_press)
+ pattree.set_reorderable(False)
sel = pattree.get_selection()
+ sel.set_mode(gtk.SELECTION_SINGLE)
sel.connect("changed", self.pattern_rowchanged)
col = gtk.TreeViewColumn('Patterns', gtk.CellRendererText(), text=0)
pattree.append_column(col)
@@ -107,6 +111,35 @@ glob_entry.grab_focus()
self.connect('map_event', self._on_window_map_event)
+ def tree_button_press(self, widget, event):
+ if event.button != 3:
+ return False
+ if event.state & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK):
+ return False
+
+ path = widget.get_path_at_pos(int(event.x), int(event.y))[0]
+ selection = widget.get_selection()
+ rows = selection.get_selected_rows()
+ if path[0] not in rows[1]:
+ selection.unselect_all()
+ selection.select_path(path[0])
+
+ menu = gtk.Menu()
+ menuitem = gtk.MenuItem('Remove', True)
+ menuitem.connect('activate', self.remove_ignore_line, path[0])
+ menuitem.set_border_width(1)
+ menu.append(menuitem)
+ menu.show_all()
+ menu.popup(None, None, None, 0, 0)
+ return True
+
+ def remove_ignore_line(self, menuitem, linenum):
+ model = self.pattree.get_model()
+ del model[linenum]
+ del self.ignorelines[linenum]
+ self.write_ignore_lines()
+ self.refresh()
+
def pattern_rowchanged(self, sel):
model, iter = sel.get_selected()
if not iter:
@@ -116,54 +149,62 @@ model, iter = sel.get_selected()
if not iter:
return
+ self.glob_entry.set_text(model[iter][0])
def add_glob(self, widget, glob_entry):
- pass
+ newglob = glob_entry.get_text()
+ self.ignorelines.append('glob:' + newglob)
+ self.write_ignore_lines()
+ self.refresh()
- def add_regexp(self, widget, glob_entry):
- pass
+ def add_regexp(self, widget, regexp_entry):
+ newregexp = regexp_entry.get_text()
+ self.ignorelines.append('regexp:' + newregexp)
+ self.write_ignore_lines()
+ self.refresh()
def _on_window_map_event(self, event, param):
- self._refresh_clicked(None)
+ self.refresh()
def _refresh_clicked(self, togglebutton, data=None):
- try:
- l = open(os.path.join(self.root, '.hgignore'), 'rb').readlines()
- if l[0].endswith('\r\n'):
- self.doseoln = True
- except IOError, ValueError:
- self.doseoln = os.name == 'nt'
- l = []
+ self.refresh()
- model = gtk.ListStore(str)
- for line in l:
- model.append([line.strip()])
- self.pattree.set_model(model)
- self.ignorelines = l
-
+ def refresh(self):
try: repo = hg.repository(ui.ui(), path=self.root)
- except:
- print 'no repository found'
- gtk.main_quit()
-
+ except: gtk.main_quit()
matcher = match.always(repo.root, repo.root)
changes = repo.dirstate.status(matcher, ignored=False, clean=False, unknown=True)
(lookup, modified, added, removed, deleted, unknown, ignored, clean) = changes
self.unkmodel.clear()
for u in unknown:
self.unkmodel.append([u])
+ try:
+ l = open(repo.wjoin('.hgignore'), 'rb').readlines()
+ self.doseoln = l[0].endswith('\r\n')
+ except IOError, ValueError:
+ self.doseoln = os.name == 'nt'
+ l = []
+
+ model = gtk.ListStore(str)
+ self.ignorelines = []
+ for line in l:
+ model.append([line.strip()])
+ self.ignorelines.append(line.strip())
+ self.pattree.set_model(model)
+ self.repo = repo
def write_ignore_lines(self):
- if doseoln:
+ if self.doseoln:
out = [line + '\r\n' for line in self.ignorelines]
else:
out = [line + '\n' for line in self.ignorelines]
try:
- f = open(os.path.join(self.root, '.hgignore'), 'wb')
+ f = open(self.repo.wjoin('.hgignore'), 'wb')
f.writelines(out)
f.close()
except IOError:
pass
+ shell_notify(self.repo.wjoin('.hgignore'))
def _close_clicked(self, toolbutton, data=None):
self.destroy()
@@ -185,5 +226,6 @@ gtk.gdk.threads_leave()
if __name__ == "__main__":
+ import hglib
opts = {'root' : hglib.rootpath()}
run(**opts)
|
Loading...