在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7129|回复: 20

[求助] SKILL 表格的可编辑设置

[复制链接]
发表于 2020-7-17 11:44:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
建了两个表格,希望表格二的可编辑由表格一的选项决定

procedure(prParamsFormField()
  prog(()
  prRailOverlapField = hiCreateRadioField(
      ?name 'prBoundaryPosition
      ?prompt "Rail Overlap:"
      ?value "Yes"
      ?defValue "Yes"
      ?choices list("Yes" "No"))

sep0=hiCreateSeparatorField(?name 'sep0)


  prRailSpaceField = hiCreateFloatField(
      ?name 'prRailSpaceField
      ?prompt "Rail Space(0~4)"
      ?value 0.0
      ?defValue 0.0
      ?editable prRailOverlapField->value == \"No\""
      )
……

prRailOverlapField->value == \"No\""  没有结果  ,提示是?editable 后面应是 t nil 1 0


或者采用if(prRailOverlapField->value == Yes then
……

prRailOverlapField->value一直是打开菜单时的yes,参数一点选成No后没有变化





发表于 2020-7-17 14:44:38 | 显示全部楼层
这里面的问题就是prRailOverlapField 这个Field在数值发生变化的时候本身没有触发callback,所以才会有你说的那个问题。
 楼主| 发表于 2020-7-20 18:30:47 | 显示全部楼层


amodaman 发表于 2020-7-17 14:44
这里面的问题就是prRailOverlapField 这个Field在数值发生变化的时候本身没有触发callback,所以才会有你说 ...


我用log filter看了,prRailOverlapField是有变化的,只是表格生成后参数二就不调取prRailOverlapField的值了
发表于 2020-7-20 22:33:59 | 显示全部楼层
这很自然啊,你的GUI变量prRailSpaceField  仅仅在第一次创建的时候会去看 prRailOverlapField->value == \"No\" 是否成立,但是创建之后,没有任何一个机制让它去第二次看 prRailOverlapField->value的值,所以它是否可编辑的设置不会变。这里面是缺少联动触发的机制的。
发表于 2020-7-20 22:35:01 | 显示全部楼层
用第一个Field 的callback函数去做一个刷新的过程就可以了。
 楼主| 发表于 2020-7-21 15:13:04 | 显示全部楼层


amodaman 发表于 2020-7-20 22:35
用第一个Field 的callback函数去做一个刷新的过程就可以了。


能帮忙写一段吗?我写了几个都没有作用,不知道怎么去刷新第二个参数

发表于 2020-7-21 15:21:17 | 显示全部楼层
定义一个GUI Item #1的callback函数,这个callback函数可以先定义成普通的Procedure,起的作用就是去设置另外一个GUI Item #2的值。然后你的GUI Item #1的callback函数可以简单的写成 evalstring("普通的SKILL Procedure") 这样。 Got it?
 楼主| 发表于 2020-7-24 15:28:36 | 显示全部楼层


amodaman 发表于 2020-7-21 15:21
定义一个GUI Item #1的callback函数,这个callback函数可以先定义成普通的Procedure,起的作用就是去设置另 ...


非常感谢。今天有空又试了下,Item #1 callback 用的Proc要调用Item #1的参数,会报*Error* eval: unbound variable。还有哪怕是先跑了一下能用的程序,参数有了定义,再改成有callback的,Item #2的editable也没刷新成功

procedure(prParamsOverlap()
prog((prRailSpaceEditable)
    if(prRailOverlapField->value=="Yes" then
      prRailSpaceEditable = nil
      setSGq(prRailSpaceField->editable prRailSpaceEditable value)
    else
      prRailSpaceEditable = t
      setSGq(prRailSpaceField->editable prRailSpaceEditable value)
    )
    return(list(prRailSpaceEditable))
);


发表于 2020-7-24 16:37:34 | 显示全部楼层
哪一个variable unbound?要注意变量的scope (name space)。一定可以起作用的。你把代码段贴完整上来,我帮你调。
 楼主| 发表于 2020-7-24 16:43:24 | 显示全部楼层


amodaman 发表于 2020-7-24 16:37
哪一个variable unbound?要注意变量的scope (name space)。一定可以起作用的。你把代码段贴完整上来,我 ...


/************Define Params**************/

procedure(prParamsFormField()
  prog(()
  prRailOverlapField = hiCreateRadioField(
      ?name 'prBoundaryPosition
      ?prompt "Rail Overlap:"
      ?value "No"
;      ?defValue "No"
      ?choices list("Yes" "No")
;      ?callback '( "prRailSpaceEditable=prParamsOverlap()" )
      ?callback evalstring("prParamsOverlap()")
      )
sep0=hiCreateSeparatorField(?name 'sep0)

  prRailWidthField = hiCreateFloatField(
      ?name 'prRailWidthField
      ?prompt "Rail Width(STDcells' rail width~2)"
      ?value 0.75
      ?defValue 0.75
      ?range list(0.75 2)
      )
sep1=hiCreateSeparatorField(?name 'sep1)

;if(prRailSpaceEditable(prParamsForm->prBoundaryPosition->value) then
  prRailSpaceField = hiCreateFloatField(
      ?name 'prRailSpaceField
      ?prompt "Rail Space(0~4)";
      ?value 0.0
      ?defValue 0.0
      ?range list(0 4)
;      ?editable 0
;      ?callback evalstring("prParamsOverlap(prRailOverlapField->value)")
      )

;);
sep2=hiCreateSeparatorField(?name 'sep2)

  prBottomRoutingLayerField = hiCreateStringField(
      ?name 'prBottomRoutingLayerField
      ?prompt "BottomRoutingLayer"
      ?value "M1"
      ?defValue "M1"
      )
sep3=hiCreateSeparatorField(?name 'sep3)

  prTopRoutingLayerField = hiCreateStringField(
      ?name 'prTopRoutingLayerField
      ?prompt "TopRoutingLayer"
      ?value "M2"
      ?defValue "M2"
      )
sep4=hiCreateSeparatorField(?name 'sep4)

  prPowerWidthField = hiCreateFloatField(
      ?name 'prPowerWidthField
      ?prompt "PowerWidth"
      ?defValue 1.0
      ?range list(1 3)
      )
sep5=hiCreateSeparatorField(?name 'sep5)

  prMetalWidthField = hiCreateFloatField(
      ?name 'prMetalWidthField
      ?prompt "Minimum Metal2 Width"
      ?value 0.28
      ?defValue 0.23;minimum metal1 space
      )
sep6=hiCreateSeparatorField(?name 'sep6)

  prMetalSpaceField = hiCreateFloatField(
      ?name 'prMetalSpaceField
      ?prompt "Minimum Metal2 Space"
      ?value 0.28
      ?defValue 0.23;minimum metal1 space
      )
sep7=hiCreateSeparatorField(?name 'sep7)

  prMetalRowField = hiCreateIntField(
      ?name 'prMetalRowField
      ?prompt "Number of metals in Horizontal(1~)"
      ?value 5
      ?defValue 5
      ?range list(1 nil)
      )
sep8=hiCreateSeparatorField(?name 'sep8)

  prMetalColField = hiCreateIntField(
      ?name 'prMetalColField
      ?prompt "Number of metals in Vertical(1~)"
      ?value 3
      ?defValue 3
      ?range list(1 nil)
      )
sep9=hiCreateSeparatorField(?name 'sep9)

  prMinFillerField = hiCreateListField(
      ?name 'prFillerField
      ?prompt "MinFiller"
      ?value list("tsl18fs520hdsl" "feedth_5v" "layout")
      )

    hiCreateAppForm(
       ?name 'prParamsForm
       ?formTitle "Rail Params Setting"
       ?fields list(prRailOverlapField
                        sep0 prRailWidthField
                        sep1 prRailSpaceField
                        sep2 prBottomRoutingLayerField
                        sep3 prTopRoutingLayerField
                        sep4 prPowerWidthField
                        sep5 prMetalWidthField
                        sep6 prMetalSpaceField
                        sep7 prMetalRowField
                        sep8 prMetalColField
                        sep9 prMinFillerField)
       ?buttonLayout 'OKCancel
       ?callback "prParamsCallback()"
    )
    hiDisplayForm(prParamsForm)
);end prog
);end proce

procedure(prParamsOverlap()
prog((prRailSpaceEditable)
    if(prRailOverlapField=="Yes" then
      prRailSpaceEditable = nil
      setSGq(prRailSpaceField->editable prRailSpaceEditable value)
    else
      prRailSpaceEditable = t
      setSGq(prRailSpaceField->editable prRailSpaceEditable value)
    )
    return(list(prRailSpaceEditable))
);
)
procedure(prParamsCallback()
;    prRailOverlap = prRailOverlapField->value
    prRailWidth = prRailWidthField->value
    prStdRailWidth = prRailWidthField->defValue
    prRailSpace = prRailSpaceField->value
    prBottomRoutingLayer = stringToSymbol(prBottomRoutingLayerField->value)
    prTopRoutingLayer = stringToSymbol(prTopRoutingLayerField->value)
    prPowerWidth = prPowerWidthField->value
    prPowerMetal = prTopRoutingLayerField->defValue
    prMetalWidth = prMetalWidthField->value
    prMetal1MinWidth = prMetalWidthField->defValue
    prMetalSpace = prMetalSpaceField->value
    prMetal1MinSpace = prMetalSpaceField->defValue
    prMetalRow = prMetalRowField->value
    prMetalCol = prMetalColField->value
    prMinFillerLibName = nth(0 prMinFillerField->value)
    prMinFillerCellName = nth(1 prMinFillerField->value)
    prMinFillerViewName = nth(2 prMinFillerField->value)
    )

prParamsFormField()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 04:57 , Processed in 0.021063 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表