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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 9102|回复: 20

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

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

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

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

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

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-20 18:30:47 | 显示全部楼层


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


我用log filter看了,prRailOverlapField是有变化的,只是表格生成后参数二就不调取prRailOverlapField的值了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 15:13:04 | 显示全部楼层


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


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

回复 支持 反对

使用道具 举报

 楼主| 发表于 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: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()
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-29 09:11:07 | 显示全部楼层


   
amodaman 发表于 2020-7-24 19:08
我知道问题在哪里了。

在所有改变GUI field的值的时候,不可以直接用Field的handler,要从你创建的AppFo ...


我简化了一下程序试着运行了一下,不可编辑可以切换到可编辑的,但可编辑就切换不到不可编辑。 prRailSpaceField一开始的editable值是t的话prRailOverlapField怎么选prRailSpaceField都是可编辑
/************Define Params**************/
procedure( make_it_grey()
prParamsForm~>prRailSapceField~>editable=nil
)

procedure( make_it_editable()
prParamsForm~>prRailSpaceField~>editable=t
)

procedure(prParamsFormField()
  prog(()
  prRailOverlapField = hiCreateRadioField(
      ?name 'prRailOverlapField
      ?prompt "Rail Overlap:"
      ?value "Yes"
      ?choices list("Yes" "No")
      ?callback list("make_it_grey()" "make_it_editable()")
      )
sep1=hiCreateSeparatorField(?name 'sep1)


  prRailSpaceField = hiCreateFloatField(
      ?name 'prRailSpaceField
      ?prompt "Rail Space(0~4)"
      ?value 0.0
      ?defValue 0.0
      ?range list(0 4)
     ?editable nil
      )

    hiCreateAppForm(
       ?name 'prParamsForm
       ?formTitle "Rail Params Setting"
       ?fields list(prRailOverlapField
                        sep1 prRailSpaceField)
       ?buttonLayout 'OKCancel
       ?callback "prParamsCallback()"
    )
    hiDisplayForm(prParamsForm)
);end prog
);end proce


procedure(prParamsCallback()
    prRailOverlap = prRailOverlapField->value
    prRailSpace = prRailSpaceField->value
    )

prParamsFormField()


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-30 16:12:05 | 显示全部楼层


   
amodaman 发表于 2020-7-29 10:09
把一开始的初始值设成No,不就可以了嘛。


初始  #1 value:Yes #2 editable t     运行后#2一直可编辑
初始  #1 value:No #2 editable t     运行后#2一直可编辑
初始  #1 value:Yes #2 editable nil     运行后:不可编辑,#1选择No #2可编辑,再选就都是可编辑
初始  #1 value:No #2 editable nil     运行后:不可编辑,#1选择Yes #2不可编辑,再选No,#2可编辑,接下来#1无论选什么 #2都可编辑

综合下来就是只可以从不可编辑变到可编辑状态,反过来就失效了。


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-30 18:11:01 | 显示全部楼层


   
amodaman 发表于 2020-7-30 17:22
我再次测试了一下截图中左边的代码。

第一张图是 Rail Overlap缺省是No的时候,Rail Space Field是Greyed ...


很无奈啊,在我这运行后,你说的“反复按“Yes”或者“No”,Rail Space field都会在不可编辑和可编辑状态中切换。哪里有问题?”  这个做不到,只能从不可编辑变到可编辑。
非常感谢耐心解答


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 14:47:25 | 显示全部楼层


   
amodaman 发表于 2020-7-30 18:18
不可能吧,这么简单的代码,还能有这个问题。
你的内存有问题吧。退出你的Cadence session,重新进入,只 ...


不清楚什么问题。让朋友也跑了下,和我一样的情况。616和617

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 13:42:57 | 显示全部楼层


   
amodaman 发表于 2020-8-3 15:40
我只能说这是不可能的。我这边跑了没问题,除非我们谈的不是同一个问题。 ...


今天有空又看了看程序,发现原来是make_it_grey里写成了prRailSapceField
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

X 关闭广告

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

GMT+8, 2025-10-16 12:36 , Processed in 0.017217 second(s), 4 queries , Gzip On, Redis On.

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