Patch title: Release 81 bulk changes
Abstract:
File: /pliant/appli/photo/photo.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/data/id.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/resampling.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/graphic/misc/float.pli"
module "/pliant/admin/file.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/data/id.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/resampling.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/graphic/misc/float.pli"
module "/pliant/admin/file.pli"
module "/pliant/fullpliant/this_computer.pli"
module "jpeg.pli"
module "jpeg.pli"
module "env.pli"
module "load.pli"
module "load.pli"
module "print.pli"




method page send_photo filename max_size_x max_size_y format
method page photo_send filename max_size_x max_size_y format quality -> status
  arg_rw HtmlPage page ; arg Str filename ; arg Int max_size
  arg_rw HtmlPage page ; arg Str filename ; arg Int max_size
  status := load_photo filename "" (var Link:ImagePrototype 
  if max_size_x<1 or max_size_y<1
    return
  var Str opt := "reference_temperature "+(string page:reference_temperature)+" screen_temperature "+(string page:screen_temperature)
  status := photo_load filename opt (var Link:ImagePrototype photo)
  if status=failure
    return
  var Float f := min (min max_size_x/photo:size_x max_size_y
  var Int size_x := cast photo:size_x*f Int
  var Int size_y := cast photo:size_y*f Int
  if size_x<>photo:size_x or size_y<>photo:size_y
    var Link:ImageResampling rs :> new ImageResampling
    rs bind photo photo:x0 photo:y0 photo:x1 photo:y1 size_x
    photo :> rs
  implicit page
    reset_http_answer
    http_request answer_mime_type := "image/"+format
    http_request send_header
    status := photo save http_stream "filter [dq]."+format+"
    http_request send_footer


  if status=failure
    return
  var Float f := min (min max_size_x/photo:size_x max_size_y
  var Int size_x := cast photo:size_x*f Int
  var Int size_y := cast photo:size_y*f Int
  if size_x<>photo:size_x or size_y<>photo:size_y
    var Link:ImageResampling rs :> new ImageResampling
    rs bind photo photo:x0 photo:y0 photo:x1 photo:y1 size_x
    photo :> rs
  implicit page
    reset_http_answer
    http_request answer_mime_type := "image/"+format
    http_request send_header
    status := photo save http_stream "filter [dq]."+format+"
    http_request send_footer


method page photo root_path preview_size_x preview_size_y st
  arg_rw HtmlPage page ; arg Str root_path ; arg Int preview
method page photo root_path
  arg_rw HtmlPage page ; arg Str root_path
  implicit page
    if (virtual_path 0 1)<>"/"
      return
    var Str subpath := virtual_path 1 virtual_path:len
  implicit page
    if (virtual_path 0 1)<>"/"
      return
    var Str subpath := virtual_path 1 virtual_path:len
    if subpath=""
      para
        var Float r_temp := reference_temperature
        input "Reference color temperature: " r_temp
        var Float s_temp := screen_temperature
        input "Screen color temperature: " s_temp
        button "Update"
          reference_temperature := r_temp
          screen_temperature := s_temp
          reload_page
    if (virtual_path virtual_path:len-1)="/"
    if (virtual_path virtual_path:len-1)="/"
      var Array:FileInfo files := file_list root_path+subpat
      var Array:FileInfo files := file_list root_path+subpath standard+directories+relative
      table columns 2 border 0
        for (var Int i) 0 files:size-1
      table columns 2 border 0
        for (var Int i) 0 files:size-1
          cell
            image files:i:name_without_path+"?preview+"+gene
          cell
            text files:i:name_without_path ; eol
            small
              text (jpeg_get_comment files:i:name)
          if files:i:is_directory
            cell
              link files:i:name files:i:name
            cell
              void
          else
            cell
              image files:i:name+"?preview+"+generate_id files:i:name
            cell
              text files:i:name ; eol
              small
                text (jpeg_get_comment root_path+subpath+files:i:name)
    eif (options option "preview")
    eif (options option "preview")
      send_photo root_path+subpath preview_size_x preview_si
      photo_send root_path+subpath list_size_x list_size_y image_format image_quality
    eif (options option "standard")
    eif (options option "standard")
      send_photo root_path+subpath standard_size_x standard_
      photo_send root_path+subpath edit_size_x edit_size_y image_format image_quality
    eif (options option "hq")
    eif (options option "hq")
      send_photo root_path+subpath 2^30 2^30 format quality
      photo_send root_path+subpath 2^30 2^30 image_format image_quality
    else
    else
      image (subpath (subpath search_last "/" -1)+1 subpath:
      if allowed:"edit_photo"
        para
          var Str commands := jpeg_get_comment root_path+sub
          var Str rotate := shunt (commands option "rotate_l
          select "Rotate: " rotate
            option "" ""
            option "left" "rotate_left"
            option "right" "rotate_right"
          var Float exposure := commands option "exposure" F
          input "Exposure: " exposure length 5
          var Float contrast := commands option "contrast" F
          input "Contrast: " contrast length 5
          var Float temperature := commands option "temperat
          input "Color temperature: " temperature length 4 n
          page button "Update"
            var Str cmd := ""
            if rotate<>""
              cmd += " "+rotate
            if exposure=defined
              cmd += " exposure "+string:exposure
            if contrast=defined
              cmd += " contrast "+string:contrast
            if temperature=defined
              cmd += " temperature "+string:temperature
            if cmd<>commands
              jpeg_set_comment root_path+subpath cmd
            reload_page
  
method page photo root_path
  arg_rw HtmlPage page ; arg Str root_path
  page photo root_path 250 250 750 750 "png" 0.90
      image (subpath (subpath search_last "/" -1)+1 subpath:len)+"?standard+"+generate_id ; eol
      if allowed:"photo_edit"
        var Str commands := jpeg_get_comment root_path+subpath
        var Str rotate := shunt (commands option "rotate_left") "rotate_left" (commands option "rotate_right") "rotate_right" ""
        select "Rotate: " rotate noeol
          option "" ""
          option "left" "rotate_left"
          option "right" "rotate_right"
        var Float exposure := commands option "exposure" Float
        input "Exposure: " exposure length 5 noeol
        var Float contrast := commands option "contrast" Float
        input "Contrast: " contrast length 5 noeol
        var Float temperature := commands option "temperature" Float
        input "Color temperature: " temperature length 4 noeol noeol
        page button "Update" noeol
          var Str cmd := ""
          if rotate<>""
            cmd += " "+rotate
          if exposure=defined
            cmd += " exposure "+string:exposure
          if contrast=defined
            cmd += " contrast "+string:contrast
          if temperature=defined
            cmd += " temperature "+string:temperature
          if cmd<>commands
            jpeg_set_comment root_path+subpath cmd
          reload_page
      if allowed:"photo_print"
        fixed [   ]
        icon "/pliant/appli/photo/printer.png"
          title "Print photo"
          var Float mm_x := 100 ; var Float mm_y := 100
          var Float offset_x := 0 ; var Float offset_y := 0
          input "Photo size on paper: " mm_x length 3 noeol ; [ x ]
          input "" mm_y length 3 noeol ; [ (horizontal x vertical in mm)] ; eol
          input "Photo offset on paper: " offset_x length 3 noeol ; [ , ]
          input "" offset_y length 3 noeol ; [ (horizontal, vertical in mm)] ; eol
          var Str queue := default_printer
          select "Printer: " queue
            each p this_computer:env:"printer"
              option p:"label" keyof:p
          button "print it"
            var ExtendedStatus status := photo_print root_path+subpath mm_x mm_y offset_x offset_y queue
            if status=success
              goto_backward
            else
              text "failed: "+status:message


export '. photo'


export '. photo'