Skip to content
This repository has been archived by the owner on Feb 3, 2020. It is now read-only.

Commit

Permalink
rename and create-directory actions
Browse files Browse the repository at this point in the history
  • Loading branch information
baverman committed Jul 11, 2011
1 parent 631c28f commit dd14666
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 7 deletions.
8 changes: 2 additions & 6 deletions fmd/app.py
Expand Up @@ -17,8 +17,7 @@ def __init__(self):
self.wg.add_window(self.window)

self.clipboard = clipboard.Clipboard()
self.feedback = FeedbackManager()
self.window.feedback = FeedbackHelper(self.feedback, self.window)
self.window.feedback = self.feedback = FeedbackManager()

self.activator = Activator()
self.activator.bind_accel('application/quit', 'Quit', '<ctrl>q', self.quit)
Expand Down Expand Up @@ -59,7 +58,4 @@ def open(self, uri):
self.filelist.set_uri(uri)

def quit(self, *args):
gtk.main_quit()

def show_feedback(self, text, category='info'):
self.feedback.add_feedback(self.window, TextFeedback(text, category))
gtk.main_quit()
59 changes: 58 additions & 1 deletion fmd/filelist.py
Expand Up @@ -4,6 +4,9 @@

from uxie.search import InteractiveSearch
from uxie.tree import SelectionListStore
from uxie.feedback import FeedbackHelper
from uxie.misc import InputDialog
from uxie.utils import idle

from .iconview import FmdIconView

Expand Down Expand Up @@ -32,6 +35,9 @@ def init(activator):
ctx.bind_accel('focus-location', 'Activate location bar',
'<ctrl>l', FileList.activate_location)

ctx.bind_accel('create-directory', 'Create directory',
'<ctrl><shift>n', FileList.mkdir)

with activator.on('filelist-active') as ctx:
ctx.bind_accel('goto-parent', 'Navigate to parent directory',
'<alt>Up', FileList.navigate_parent)
Expand All @@ -50,6 +56,8 @@ def init(activator):
ctx.bind_accel('delete-permanently', 'Force delete',
'<shift>Delete', FileList.force_delete, 10)

ctx.bind_accel('rename', 'Rename', 'F2', FileList.rename)


class History(object):
def __init__(self):
Expand Down Expand Up @@ -116,6 +124,8 @@ def __init__(self, clipboard, executor):

text_cell = gtk.CellRendererText()
view.text_renderer = text_cell
text_cell.props.mode = gtk.CELL_RENDERER_MODE_EDITABLE
text_cell.props.editable = True
view.set_attributes(text_cell, text=1, sensitive=3)

self.sw.add(view)
Expand All @@ -132,7 +142,13 @@ def __init__(self, clipboard, executor):

@property
def feedback(self):
return self.view.get_toplevel().feedback
try:
return self._feedback
except AttributeError:
pass

self._feedback = FeedbackHelper(self.view.get_toplevel().feedback, self.view.window)
return self._feedback

def _search(self, text, direction, skip):
idx = sidx = self.view.get_cursor()[0] if self.view.get_cursor() else 0
Expand Down Expand Up @@ -412,3 +428,44 @@ def force_delete(self):
if df: df.cancel()
self.force_delete_feedback = self.feedback.show(
'Files will be deleted permanently', 'warn', 3000)

def rename(self):
if len(self.model.selection) == 1:
dialog = InputDialog('Rename', self.widget.get_toplevel())

fi = self.model[self.model.selection.keys()[0]][2]
fname = fi.get_edit_name()

dialog.entry.set_text(fname)

fname_without_extension, sep, _ = fname.rpartition('.')
if sep and fname_without_extension:
idle(dialog.entry.select_region, 0, len(fname_without_extension))

if dialog.run() == gtk.RESPONSE_ACCEPT:
newname = dialog.entry.get_text()
gfile = self.current_folder.get_child(fi.get_name())
try:
gfile.set_display_name(newname)
except Exception, e:
self.feedback.show(str(e), 'error')
else:
self.feedback.show('Renamed', 'done')

dialog.destroy()

def mkdir(self):
dialog = InputDialog('New directory', self.widget.get_toplevel())
dialog.entry.set_text('NewDirectory')

if dialog.run() == gtk.RESPONSE_ACCEPT:
name = dialog.entry.get_text()
gfile = self.current_folder.get_child_for_display_name(name)
try:
gfile.make_directory()
except Exception, e:
self.feedback.show(str(e), 'error')
else:
self.feedback.show('Directory created', 'done')

dialog.destroy()
29 changes: 29 additions & 0 deletions fmd/iconview.py
Expand Up @@ -5,6 +5,8 @@
from gtk.gdk import Rectangle, CONTROL_MASK, SHIFT_MASK
from gtk import keysyms

from uxie.utils import send_focus_change

class DrawItem(object):
__slots__ = ['ix', 'iy', 'iwidth', 'iheight',
'tx', 'ty', 'twidth', 'theight', 'width', 'height', 'x', 'y']
Expand Down Expand Up @@ -110,6 +112,33 @@ def set_cursor(self, path, select=True, select_between=False):
def get_cursor(self):
return self.cursor

def start_editing(self, path):
event = gtk.gdk.Event(gtk.gdk.NOTHING)
item = self.item_cache[path]
xoffset = int(self._hadj.value)
area = Rectangle(item.x + item.tx - xoffset, item.y + item.ty, item.twidth, item.theight)
path = ','.join(map(str, path))

entry = self.text_renderer.start_editing(event, self, path, area, area, 0)
entry.start_editing(event)

window = gtk.Window(gtk.WINDOW_POPUP)
window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_UTILITY)
window.add(entry)
entry.show()
entry.realize()
entry.size_allocate(area)

win = self.window
window.window.reparent(win, 0, 0)
entry.size_allocate(area)
window.resize(item.twidth, item.theight)
window.move(item.x + item.tx - xoffset, item.y + item.ty)
window.show()

send_focus_change(entry, True)
return entry

def _draw_item(self, item, row, xoffset, earea):
flags = 0
if self.model.is_selected(row.path):
Expand Down

0 comments on commit dd14666

Please sign in to comment.