mikshaw
  
 
 
  
 
 
Group: Members 
Posts: 4856 
Joined: July 2004 | 
  | 
Posted: Nov. 02 2007,21:17 | 
   | 
 
 
  
I see where you're going. Well, I had already started a different script using basically just the image display from the old one as a base. It currently doesn't support directories at all, and in fact will give a warning message if you drag a folder onto it. It will allow you to drag an XPM file either to the app icon or onto the interface itself (that bit probably needs a decrease in the loop time to detect quick drags), or to browse for an XPM file. The double-click I assume would be controlled by the file manager.
  I'll probably look into mashing the two scripts together in the future to see what I can make of them. I also will probably remove sxpm from the edit menu, since it's not an interactive app, and maybe use it elsewhere.
  This is my first attempt at any sort of drag and drop, so it will need much testing and debugging.
 
 | Code Sample  |  #!/bin/murgaLua
  -- XPM icon viewer -- mikshaw 2007
  dir="/usr/share/dfm/icons" editor="xpaint" --xpm_size=32
  broken_xpm_data=[[ /* XPM */ static char *broken_image[] = { /* columns rows colors chars-per-pixel */ "14 16 16 1", "  c black", ". c #800000", "X c #008000", "o c #808000", "O c navy", "+ c #800080", "@ c #008080", "# c #C0C0C0", "$ c #808080", "% c red", "& c green", "* c None", "= c blue", "- c magenta", "; c cyan", ": c gray100", /* pixels */ "          $***", " :::::::::$$**", " :########$:$*", " :###XX###$::$", " :##X&X ##    ", " :##XXX ####: ", " :###  #####: ", " :######=== :*", " :#%####=;= :*", " :#-%###==O***", " :#--%##  **: ", " :#---%#***#: ", " :#   *****#: ", " :##*****###: ", " ::*****::::: ", "  ******      " }; ]] xpm_tempfile=os.tmpname() xpm_write=io.open(xpm_tempfile,"w") if xpm_write then   xpm_write:write(broken_xpm_data)   xpm_write:close()   broken_xpm=fltk:Fl_XPM_Image(xpm_tempfile)   os.remove(xpm_tempfile) end
  myname=fltk.fl_filename_name(arg[0])..": " edvar=os.getenv("XPM_EDITOR") if edvar then editor=edvar end
  function find_stupid_space(infile)   local data=io.open(infile)   if data then     local found=0     for line in data:lines() do       if string.find(line,"^%s") then found=1; break end     end     data:close()     return found   end end
  function get_image_data(image)   local old_data=display:image()   if old_data then old_data:uncache() end   local image_data=fltk:Fl_XPM_Image(image)   if image_data and find_stupid_space(image)==0 then     display:image(image_data:copy(128,128)) --show it bigger!   else     display:image(broken_xpm)   end   current_file=image -- full path   filename=fltk.fl_filename_name(image) -- filename only   display:label(filename.."\n"..image_data:w().."x"..image_data:h().." | "..lfs.attributes(current_file).size.." bytes")   display:redraw() end
  function menu_cb()   local v=i_menu:value()   if v==1 then menu_open_newfile()   elseif v==2 and current_file then get_image_data(current_file)   elseif v==3 then os.exit(0)   elseif v>=4 and current_file then os.execute(i_menu:text().." "..current_file.." &")   end end
  function menu_open_newfile()   local filename=fltk.fl_file_chooser("XPM file...","*.xpm",dir)   if filename then     get_image_data(filename)   end end
  function dnd_check()   if Fl:event() == fltk.FL_DND_RELEASE then     Fl:paste(w)     Fl:wait()     local dropped_file=Fl:event_text()     if dropped_file then       cut_stupid_space=string.gsub(dropped_file,"^%s*","")       local new_file=string.gsub(cut_stupid_space,"^~",os.getenv("HOME"))       open_file(new_file)     end   end Fl:wait()   timer:doWait(0.05) end
  function open_file(dfile) if lfs.attributes(dfile).mode == "file" then   local filename=io.open(dfile)   if filename then     local data=filename:read("*l")     if string.find(data,"/%*%s*XPM%s*%*/") then       filename:close()       get_image_data(dfile)     end   else print(myname.."can't open "..dfile)   end else print(myname..dfile..": not a regular file") end end
  ww=200; wh=200; mh=30 images={}; icon={}; butt={} w=fltk:Fl_Window(ww,wh,"XPM Viewer")
  file_items={"&Open","&Reload","&Quit"} edit_items={"xpaint","sxpm","beaver","aterm -e vi"} i_menu=fltk:Fl_Menu_Bar(0,0,ww,mh) i_menu:callback(menu_cb) i_menu:selection_color(fltk.FL_WHITE) for i,v in ipairs(file_items) do i_menu:add("&File/"..v) end for i,v in ipairs(edit_items) do i_menu:add("&Edit/"..v) end
  timer=murgaLua.createFltkTimer() display=fltk:Fl_Box(0,mh,ww,ww-mh) -- big image
  if arg[1] then open_file(arg[1]) end timer:callback(dnd_check) timer:do_callback() w:show() Fl:run()
  |    
  -------------- http://www.tldp.org/LDP/intro-linux/html/index.html
 |