Need help with connected / linked pop-up menus


want select preset.

what did create 2 pop-up menus. first preset folders , second presets folder.

each pop-up group has pop-up , static field current choise.

 

after selecting different value first pop-up menu want have second popup menu filled new, right presets of folder.

the first time works correct.

however when selecting different folder see "preset table"  filled correct new preset of folder. static field below second pop-up menu shows first value of correct new presets. second pop-up menu still contains presets of first folder , not new folder.

yet in observer see preset table contains right , new presets.

 

my code below.

i based on sample in sdk manual.

question: how can update second pop-up menu pop-up menu shows right presets.

 

code below

 

local lrapplication = import 'lrapplication' local lrpathutils = import 'lrpathutils' local lrfileutils = import 'lrfileutils'  local lrbinding = import "lrbinding" local lrdialogs = import "lrdialogs"local lrfunctioncontext = import "lrfunctioncontext" local lrview = import "lrview" local bind = lrview.bind -- shortcut bind() method  --     https://github.com/kikito/inspect.lua local inspect = require 'inspect'  local logfilename = 'presetlist' local mylogger = import 'lrlogger'( logfilename ) mylogger:enable( "logfile" ) local logpath  --[[-------------------------------------------------------------------------- name          emptylogfile purpose          clears existing log file.  cookbook: http://cookbooks.adobe.com/post_clearing_your_logfile_automatically-19677.html ----------------------------------------------------------------------------]] function emptylogfile()  --local mylogger = import 'lrlogger'( 'stash' )  mylogger:disable()    logpath = lrpathutils.child(lrpathutils.getstandardfilepath('documents'), logfilename .. ".log")  if lrfileutils.exists( logpath )  local success, reason = lrfileutils.delete( logpath )  if not success  logger:error("error deleting existing logfile!" .. reason)  end  end  mylogger:enable( "logfile" ) end  --[[-------------------------------------------------------------------------- name          getlocationlogfile. purpose          returns full path of current log file. ----------------------------------------------------------------------------]] function getlocationlogfile()  return logpath end  local function getpresetfolders()  -- folders presets     local lrpresetfolders = lrapplication.developpresetfolders()     local presetfoldercache = {}  local record = {}      i, fo in ipairs( lrpresetfolders )  record = {title = fo:getname(), value = fo }   --record = {title = fo:getname(), value = fo:getname() }  --mylogger:info( "folder name = " .. fo:getname() )  table.insert ( presetfoldercache, record )  end   --     mylogger:info("voor de listing")  --     mylogger:info("preset folders : " .. inspect (  presetfoldercache ) )  return presetfoldercache end  local function getpresets ( folderobject )  local presets = folderobject:getdeveloppresets()  local presetcache = {}  local record = {}   j, p in ipairs( presets )  record = {title = p:getname(), value = p:getname() }   --record = {title = p:getname(), value = p:getname() }  mylogger:info( "getpresets = " .. p:getname() )  table.insert ( presetcache, record )  end   mylogger:info("presets : " .. inspect (  presetcache ) )  return presetcache end  local function choosepreset()   emptylogfile()   local presetfolders = getpresetfolders()  local currentpresetfolder = presetfolders[1]["value"]  local presets = getpresets ( currentpresetfolder )  mylogger:info(presets)   --     mylogger:info("preset folders : " .. inspect (  presetfolders ) )  lrfunctioncontext.callwithcontext( 'pop-up example', function( context )   local f = lrview.osfactory() -- obtain view factory  local properties = lrbinding.makepropertytable( context ) -- make prop table   -- create keys initial values  properties.presetfolder = presetfolders[1]["value"] -- radio buttons , pop-up menu  properties.preset = presets[1]["value"]   properties:addobserver( 'presetfolder', function( properties, key, newvalue )  mylogger:info("observer - preset list" )  currentpresetfolder = properties.presetfolder  presets = getpresets ( currentpresetfolder )  mylogger:info(presets)   mylogger:info("observer - preset table: " .. inspect ( presets ) )   --     set new value  properties.preset = presets[1]["value"]  mylogger:info("observer: " .. presets[1]["title"] )  end )  --     mylogger:info("presetfolder = " .. properties.presetfolder )  --     mylogger:info("preset = " .. properties.preset )   local contents = f:column { -- create view hierarchy  fill_horizontal = 1,  spacing = f:control_spacing(),  bind_to_object = properties, -- default bound table 1 made   f:group_box {  title = "preset folders",  fill_horizontal = 1,  spacing = f:control_spacing(),  f:popup_menu {  value = bind 'presetfolder', -- current value bound same key static text  items = presetfolders  },  f:static_text {  fill_horizontal = 1,  title = bind 'presetfolder', -- bound same key current selection  },  },  f:group_box {  title = "presets",  fill_horizontal = 1,  spacing = f:control_spacing(),  f:popup_menu {  value = bind 'preset', -- current value bound same key static text  items = presets  --     items = getpresets ( currentpresetfolder )  },  f:static_text {  fill_horizontal = 1,  title = bind 'preset', -- bound same key current selection  },  },  }   local result = lrdialogs.presentmodaldialog( -- invoke dialog  {  title = "select preset",  contents = contents,  }  )  end  ) end  -- display dialogs choosepreset()  

if popup items not fixed (and in case, it's not), can bind property.

 

rob



More discussions in Lightroom SDK


adobe

Comments

Popular posts from this blog

Adobe Acrobat Pro , Terminal Server Use

Thread: transmission-daemon isn't playing nice: "409: Conflict"

Thread: gpg: Conflicting Commands