#/bin/python import gtk import hildon import os import gobject import os.path import string import fileinput global f_icon s_path=["home","user"] f_icon="/usr/share/icons/hicolor/48x48/hildon/general_folder.png" global s_txtview s_txtview='leafpad ' global lbl_s2 global selected global selected_file global win global st_lbl global show_hidden show_hidden=0 global copy global copy_name global l_val l_val='' global path global type type=[] path=s_path global icons icons=[] global f_opt f_opt=[] global s_icon global list,lbl,sel global fav fav=[] s_icon='/usr/share/icons/hicolor/48x48/hildon/filemanager_unknown_file.png' ################################# type config loading def refresh(): global list,lbl,path,sel reload(list,path,lbl,sel) cfgfile=os.path.expanduser('~')+"/.homunculus" if os.path.exists(cfgfile): fh=open(cfgfile) types=string.split(fh.read(),"\n") try: for tps in types: if tps[0:1]=='#' or tps=='': pass else: gb=string.split(tps,'[::]') if gb[0][0:2]=="!f": f_opt.append((gb[1],gb[2],gb[0][3:])) elif gb[0][0:2]=="!b": fav.append((gb[1],gb[2])) else: type.append((gb[0],gb[2],gb[1])) icons.append(gb[1]) except: print 'Configuration file error' fh.close() # print type ################################## def fullpath(path): fp='/' for b in path: fp=fp+b+'/' return fp def reload(list,pth,lbl,sel): global type,lbl_st2,f_icon,f_opt,s_icon sel.remove_column(0) list.clear() do,fo=get_list(pth) fp=fullpath(pth) lbl.set_label(fp) r1=gtk.CellRendererPixbuf() r2=gtk.CellRendererText() r1.set_fixed_size(64,64) col=sel.append_column(list,gtk.CellRendererText(),text=1) col.clear() col.pack_start(r1,0) col.pack_start(r2,1) #col.add_attribute(r1, 'stock-id', 0) col.add_attribute(r2, 'text', 1) col.add_attribute(r1, 'pixbuf', 2) #il=gtk.stock_list_ids() #for ff in il: # print ff tbs=0 for fl in do: #tmp=gtk.Invisible() #pbb=tmp.render_icon('gtk-directory',gtk.ICON_SIZE_MENU) new_icon=f_icon for xx in f_opt: folder,ficon,fopt=xx if('/'+folder==fl): new_icon=ficon pbb=gtk.gdk.pixbuf_new_from_file_at_size(new_icon,48,48) iter=list.append(['',fl,pbb]) for fl in fo: pbb=None icon=s_icon for xx in type: ext,cmd,ico=xx if string.lower(fl[-len(ext):])==ext: icon=ico if ico==".self": tbs=tbs+1 #print tbs #cnt(' '+str(tbs)) while gtk.events_pending(): gtk.main_iteration() pbb=gtk.gdk.pixbuf_new_from_file_at_size(fp+fl,64,64) icon=None if icon: if icon[0:1]=='/': pbb=gtk.gdk.pixbuf_new_from_file_at_size(icon,48,48) else: tmp=gtk.Invisible() pbb=tmp.render_icon(icon,gtk.ICON_SIZE_MENU) iter=list.append([None,fl,pbb]) lbl.set_label(fullpath(pth)) col.set_property("text-column",1) change(sel,0,list,lbl,sel) def cnt(cn): global lbl_st2 lbl_st2.set_label(cn) while gtk.events_pending(): gtk.main_iteration() def bup(widget,list,lbl,sel): global path global l_val l_val=path path=path[:-1] reload(list,path,lbl,sel) def bhid(widget,list,lbl,sel): global path global l_val global show_hidden l_val=show_hidden if show_hidden==0: show_hidden=1 reload(list,path,lbl,sel) return 1 else: show_hidden=0 reload(list,path,lbl,sel) return 1 def get_list(pth): global show_hidden,f_opt fp=fullpath(pth) files=os.listdir(fp) fo=[] do=[] out=[] for x in files: if os.path.isdir(fp+str(x)): if x[0:1]=='.': if show_hidden: do.append("/" + x) else: for xx in f_opt: folder,icon,opt=xx if x==folder and opt=='SHOW': do.append("/" + x) else: do.append("/" + x) if os.path.isfile(fp+str(x)):##########files stat=os.stat(fp+str(x)) if x[0:1]=='.': if show_hidden: fo.append(x) else: fo.append(x) return sorted(do),sorted(fo) def normsize(size): if size>1024*1024: out=str(size/(1024*1024))+" mb" return out if size>1024: out=str(size/1024)+" kb" return out if size<1024: out=str(size)+" bytes" return out def change(widget,data,list,lbl,sel): global l_val global path global type global win global st_lbl global selected global selected_file val=sel.get_current_text() fp=fullpath(path) if val==None: return 0 dir=os.path.isdir(fp+str(val[1:])) ##tut lezet warning, potom razbirusj selected_file=val if dir: st_lbl.set_label('Folder') selected=fp+str(val[1:]) else: st_lbl.set_label(normsize(os.path.getsize(fp+val))) selected=fp+val if l_val==val: if dir: path.append(val[1:]) reload(list,path,lbl,sel) else: for tp in type: ext,cmd,ico=tp val2=string.lower(val) tmp=val2[-len(ext):] if tmp==ext: cmd=string.replace(cmd,'#d', fp[:-1]) cmd=string.replace(cmd,'#f', val) note=hildon.hildon_banner_show_information(win, '0', "Executing...") os.system(cmd) l_val=val def astext(widget): global win,selected,s_txtview,st_lbl if st_lbl.get_label()=='Folder': note=hildon.hildon_banner_show_information(win, '0', "Folder can't been opened as text!") else: note=hildon.hildon_banner_show_information(win, '0', "Executing...") os.system(s_txtview + selected + ' &') def popup(widget,menu): global win menu.popup(win) def fav_popup(widget,menu,mmenu): #global win menu.popup(mmenu) def bcopy(widget): global lbl_st2,selected,copy,copy_name,selected_file,win copy=selected+" cp" lbl_st2.set_label("Copy "+selected_file) copy_name=selected_file gtk.Clipboard().set_text(selected) note=hildon.hildon_banner_show_information(win, '0', "File selected") def bpaste(widget): global copy,lbl_st2,path,copy_name fp=fullpath(path) if copy[-3:]==" cp": os.system("cp -r '"+copy[:-3]+"' '" + fp +copy_name+"_coppy'") copy_name="" copy="" lbl_st2.set_label("") note=hildon.hildon_banner_show_information(win, '0', "File pasted") if copy[-4:]==" cut": os.system("mv '"+copy[:-4]+"' '" + fp +"'") copy="" lbl_st2.set_label("") note=hildon.hildon_banner_show_information(win, '0', "File moved") refresh() def bcut(widget): global lbl_st2,selected,copy,selected_file,win copy=selected+" cut" lbl_st2.set_label("Cut "+selected_file) note=hildon.hildon_banner_show_information(win, '0', "File selected") def brename(widget): global selected, selected_file,win dialog=gtk.Dialog() dialog.set_transient_for(win) dialog.set_title('Rename') dialog.add_button('Ok',1) dialog.add_button('Cancel',0) txt=gtk.Entry() dialog.connect('response',renameok,txt) capt=gtk.Label() if selected_file[:1]=="/": sf=selected_file[1:] else: sf=selected_file capt.set_label('Rename '+ sf +' ?') dialog.vbox.add(capt) dialog.vbox.add(txt) txt.set_text(sf) dialog.show_all() dialog.run() def renameok(widget,arg,txtc): global selected,path txt=txtc.get_text() fp=fullpath(path) widget.destroy() #print arg if arg==1: os.system('mv "'+selected+'" "'+fp+txt+'"') note=hildon.hildon_banner_show_information(win, '0', "Renamed..") refresh() def bdel(widget): global selected, selected_file,win dialog=gtk.Dialog() dialog.set_transient_for(win) dialog.set_title('Delete') dialog.add_button('Yes',1) dialog.add_button('No',0) dialog.connect('response',delok) capt=gtk.Label() if selected_file[:1]=="/": sf=selected_file[1:] else: sf=selected_file capt.set_label('Delete '+ sf +' ?') dialog.vbox.add(capt) dialog.show_all() dialog.run() def delok(widget,resp): widget.destroy() if resp==1: os.system('rm -r "'+selected+'"') note=hildon.hildon_banner_show_information(win, '0', "Deleted..") refresh() def bnew(widget): dialog=gtk.Dialog() dialog.set_transient_for(win) dialog.set_title('New') dialog.add_button('Folder',1) dialog.add_button('File',2) dialog.add_button('Cancel',0) txt=gtk.Entry() dialog.connect('response',newok,txt) capt=gtk.Label() capt.set_label('New...') dialog.vbox.add(capt) dialog.vbox.add(txt) txt.set_text('New_Name') dialog.show_all() dialog.run() def newok(widget,resp,txt): widget.destroy() global path fp=fullpath(path) if resp==1: os.system('mkdir "'+fp+txt.get_text()+'"') note=hildon.hildon_banner_show_information(win, '0', "Created folder..") refresh() if resp==2: aa=os.system('echo "">"'+fp+txt.get_text()+'"') note=hildon.hildon_banner_show_information(win, '0', "created file..") refresh() def setpath(widget,dir): global path pth=string.split(dir[1:],"/") path=pth refresh() ################################## fp=fullpath(path) ################################## gtk.set_application_name('Homunculus File Manager') win=hildon.Window() table=gtk.Table(10,10,True) b_up=gtk.Button("Up","Up") b_hid=gtk.ToggleButton("Hidden") lbl=gtk.Label() st_lbl=gtk.Label() lbl_st2=gtk.Label() sel=hildon.TouchSelector(text=True) list=gtk.ListStore(gobject.TYPE_STRING,gobject.TYPE_STRING,gtk.gdk.Pixbuf) #### menu2 pmenu=hildon.AppMenu() p_cut=gtk.Button("Cut") p_copy=gtk.Button("Copy") p_paste=gtk.Button("Paste") p_new=gtk.Button("New File") p_newf=gtk.Button("New Folder") p_prop=gtk.Button("Properties") p_rename=gtk.Button("Rename") p_del=gtk.Button("Delete") pmenu.append(p_new) #pmenu.append(p_newf) pmenu.append(p_cut) pmenu.append(p_copy) pmenu.append(p_paste) #pmenu.append(p_prop) sdelaju pozze pmenu.append(p_rename) pmenu.append(p_del) p_cut.connect("clicked",bcut) p_copy.connect("clicked",bcopy) p_paste.connect("clicked",bpaste) p_rename.connect("clicked",brename) p_del.connect("clicked",bdel) p_new.connect("clicked",bnew) b_pop=gtk.Button("File") b_mark=gtk.Button("Bookmarks") b_com=gtk.Button("Commands") b_pop.connect("clicked",popup,pmenu) ##### menu menu=hildon.AppMenu() v_but=gtk.Button("View as text") v_but.connect("clicked",astext) menu.append(v_but) #pmenu.append(v_but) menu.append(b_mark) #menu.append(b_com) pmenu.show_all() menu.show_all() win.set_app_menu(menu) fav_menu=hildon.AppMenu() ## win.connect("destroy",gtk.main_quit) b_up.connect("clicked",bup,list,lbl,sel) sel.connect('changed',change,list,lbl,sel) b_hid.connect("clicked",bhid,list,lbl,sel) b_mark.connect("clicked",fav_popup,fav_menu,menu) #######for cfav=0 fav_b=[] for favs in fav: dir,capt=favs fav_b.append(gtk.Button(capt)) fav_menu.append(fav_b[cfav]) fav_b[cfav].connect('clicked',setpath,dir) cfav=cfav+1 lbl.set_label(fp) reload(list,path,lbl,sel) fav_menu.show_all() ############### table.attach(b_pop,8,10,6,8) table.attach(b_up,8,10,8,10) table.attach(b_hid,8,10,0,1) table.attach(lbl,0,8,0,1) table.attach(sel,0,8,1,9) table.attach(st_lbl,0,4,9,10) table.attach(lbl_st2,4,8,9,10) win.add(table) win.show_all() gtk.main() ##################################