home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / accesscont.tcl < prev    next >
Text File  |  1997-09-16  |  8KB  |  323 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)accesscont.tcl    /main/titanic/6
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)accesscont.tcl    /main/titanic/6   16 Sep 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. Class AccessControlDlg : {TemplateDialog} {
  16.     constructor
  17.     method destructor
  18.     method createActionsIf
  19.     method createApplyIf
  20.     method createRolesIf
  21.     method createRoleRightTypeIf
  22.     method createObjectsIf
  23.     method ok
  24.     method popDown
  25.     method reset
  26.     method roleRightsChanged
  27.     method selectedObjectSetChanged
  28.     method selectedRoleSetChanged
  29.     method selectedRoleRightTypeChanged
  30.     method updateActionsIf
  31.     method updateRoleRightTypeIf
  32.     method getObjectList
  33.     method init
  34.     method addSelected
  35.     method removeSelected
  36.     method getAllowed
  37.     method setAllowed
  38.     method removeAllowed
  39.     method getProhibited
  40.     method setProhibited
  41.     method removeProhibited
  42.     attribute editable
  43.     attribute childRights
  44.     attribute errorStack
  45.     attribute selectedSet
  46.     attribute allowed
  47.     attribute prohibited
  48. }
  49.  
  50. constructor AccessControlDlg {class this name} {
  51.     set this [TemplateDialog::constructor $class $this $name]
  52.     $this selectedSet [List new]
  53.     $this allowed [Dictionary new]
  54.     $this prohibited [Dictionary new]
  55.     # Start constructor user section
  56.  
  57.     $this config \
  58.         -cancelPressed {%this delete} \
  59.         -okPressed {%this ok}
  60.  
  61.     interface DlgColumn $this.top {
  62.         Label label {}
  63.         DlgRow row {
  64.         DlgColumn leftCol {}
  65.         DlgColumn rightCol {}
  66.         }
  67.     }
  68.  
  69.     [$this selectedSet] contents [.main selectedObjSet]
  70.  
  71.     $this childRights 0
  72.  
  73.     # End constructor user section
  74.     return $this
  75. }
  76.  
  77. method AccessControlDlg::destructor {this} {
  78.     # Start destructor user section
  79.     # End destructor user section
  80. }
  81.  
  82. method AccessControlDlg::createActionsIf {this} {
  83.     set actionsNgIf [NamedGroup new $this.top.row.rightCol.actions \
  84.     -label "Actions" \
  85.     -mnemonic A \
  86.     ]
  87.     set actionsIf [DlgColumn new $actionsNgIf.col]
  88.     foreach action [BrowserProcs::action2String 1023] {
  89.     set row [DlgRow new $actionsIf.$action]
  90.     Label new $row.label \
  91.         -text "$action: "
  92.     HorRadioGroup new $row.access \
  93.         -entrySet {Allowed Prohibited Undefined} \
  94.         -sensitive [$this editable] \
  95.         -selectionChanged [list $this roleRightsChanged $action %this]
  96.     }
  97. }
  98.  
  99. method AccessControlDlg::createApplyIf {this} {
  100.     PushButton new $this.apply \
  101.     -label Apply \
  102.     -activated {
  103.         set dialog [getParent %this]
  104.         $dialog autoPopDown 0
  105.         eval [$dialog okPressed]
  106.         $dialog autoPopDown 1
  107.     }
  108. }
  109.  
  110. method AccessControlDlg::createRolesIf {this} {
  111.     set roleList ""
  112.     foreach role [[$wmttoolObj corporateObj] roles] {
  113.     lappend roleList "[$role name]"
  114.     }
  115.  
  116.     set rolesNgIf [NamedGroup new $this.top.row.leftCol.roles \
  117.     -label "Roles" \
  118.     -mnemonic R \
  119.     ]
  120.     set rolesIf [TextList new $rolesNgIf.list \
  121.     -entrySet $roleList \
  122.     -selectionChanged [list $this selectedRoleSetChanged] \
  123.     ]
  124.     if [$this editable] {
  125.     $rolesIf selectionPolicy EXTENDED
  126.     } else {
  127.     $rolesIf selectionPolicy BROWSE
  128.     }
  129. }
  130.  
  131. method AccessControlDlg::createRoleRightTypeIf {this} {
  132.     set ruleTypeNgIf [NamedGroup new $this.top.row.leftCol.ruleType \
  133.     -label "Role Right" \
  134.     -mnemonic c \
  135.     -verStretchFactor 0 \
  136.     ]
  137.     set ruleTypeIf [DlgRow new $ruleTypeNgIf.row]
  138.     Label new $ruleTypeIf.label \
  139.     -text "Type: "
  140.     OptionMenu new $ruleTypeIf.type \
  141.     -entrySet {ownRight childRight} \
  142.     -selected ownRight \
  143.     -selectionChanged [list $this selectedRoleRightTypeChanged]
  144.  
  145.     if {![$this editable] || ![$this childRights]} {
  146.     $ruleTypeIf.type sensitive 0
  147.     }
  148. }
  149.  
  150. method AccessControlDlg::createObjectsIf {this} {
  151.     set arrayList [$this getObjectList]
  152.     set entrySet ""
  153.     set formatString "%-*.*s  %-*.*s"
  154.     set lengths [maxLengthList $arrayList {50}]
  155.     foreach array $arrayList {
  156.     lappend entrySet "[format $formatString \
  157.         [lindex $lengths 0] [lindex $lengths 0] [lindex $array 0] \
  158.         [lindex $lengths 1] [lindex $lengths 1] [lindex $array 1]]"
  159.     }
  160.  
  161.     set objectsNgIf [NamedGroup new $this.top.row.leftCol.objects \
  162.     -label "Objects" \
  163.     -mnemonic O \
  164.     ]
  165.     set objectsIf [TextList new $objectsNgIf.list \
  166.     -entrySet $entrySet \
  167.     -selectionChanged [list $this selectedObjectSetChanged] \
  168.     ]
  169.     if [$this editable] {
  170.     $objectsIf selectionPolicy EXTENDED
  171.     } else {
  172.     $objectsIf config \
  173.         -selectionPolicy BROWSE \
  174.         -selectedIndexSet {0}
  175.     }
  176. }
  177.  
  178. method AccessControlDlg::ok {this} {
  179.     if [$this autoPopDown] {
  180.     $this popDown
  181.     }
  182. }
  183.  
  184. method AccessControlDlg::popDown {this} {
  185.     $this delete
  186. }
  187.  
  188. method AccessControlDlg::reset {this} {
  189.     foreach action [BrowserProcs::action2String 1023] {
  190.     $this setAllowed $action 0
  191.     $this setProhibited $action 0
  192.     set actionIf $this.top.row.rightCol.actions.col.$action
  193.     if [isCommand $actionIf] {
  194.         $actionIf.label sensitive 0
  195.         $actionIf.access sensitive 0
  196.     }
  197.     }
  198. }
  199.  
  200. method AccessControlDlg::roleRightsChanged {this action access} {
  201.  
  202.     set roleList [$this.top.row.leftCol.roles.list selectedSet]
  203.     set objectIndexList [$this.top.row.leftCol.objects.list selectedIndexSet]
  204.     set type [$this.top.row.leftCol.ruleType.row.type selected]
  205.  
  206.     global $this$type
  207.     foreach index $objectIndexList {
  208.     foreach role $roleList {
  209.         set ${this}${type}($index,$role,$action) [$access selected]
  210.     }
  211.     }
  212. }
  213.  
  214. method AccessControlDlg::selectedObjectSetChanged {this} {
  215.     $this reset
  216. }
  217.  
  218. method AccessControlDlg::selectedRoleSetChanged {this} {
  219.     $this reset
  220. }
  221.  
  222. method AccessControlDlg::selectedRoleRightTypeChanged {this} {
  223.     $this reset
  224. }
  225.  
  226. method AccessControlDlg::updateActionsIf {this} {
  227.     foreach action [BrowserProcs::action2String 1023] {
  228.     set accessIf $this.top.row.rightCol.actions.col.$action.access
  229.     set allowed [$this getAllowed $action]
  230.     set prohibited [$this getProhibited $action]
  231.     if {$prohibited > 0} {
  232.         $accessIf selected Prohibited
  233.     } elseif {$allowed == $prohibited} {
  234.         $accessIf selected Undefined
  235.     } else {
  236.         $accessIf selected Allowed
  237.     }
  238.     }
  239. }
  240.  
  241. method AccessControlDlg::updateRoleRightTypeIf {this} {
  242.  
  243.     if {![$this childRights]} {
  244.     return
  245.     }
  246.     set childRights 0
  247.     if {![lempty [$this.top.row.leftCol.objects.list selectedIndexSet]]} {
  248.         set childRights 1
  249.     }
  250.  
  251.     set ruleTypeIf $this.top.row.leftCol.ruleType.row.type
  252.     if $childRights {
  253.     $ruleTypeIf sensitive 1
  254.     } else {
  255.     $ruleTypeIf config \
  256.         -selected ownRight \
  257.         -sensitive 0
  258.     }
  259. }
  260.  
  261. method AccessControlDlg::getObjectList {this} {
  262.  
  263.     set list {}
  264.     [$this selectedSet] foreach obj {
  265.         lappend list "\"[$obj getInfo Name]\" \"[$obj getInfo Type]\""
  266.     }
  267.     return $list
  268. }
  269.  
  270. method AccessControlDlg::init {this} {
  271.     set errorStack ""
  272.     set removeList ""
  273.     [$this selectedSet] foreach obj {
  274.     if [catch {$obj controlledActions} msg] {
  275.         lappend removeList $obj
  276.         if {"$errorStack" != ""} {
  277.         append errorStack "\n"
  278.         }
  279.         append errorStack $msg
  280.     }
  281.     }
  282.     $this errorStack $errorStack
  283.     foreach obj $removeList {
  284.     $this removeSelected $obj
  285.     }
  286. }
  287.  
  288. # Do not delete this line -- regeneration end marker
  289.  
  290. method AccessControlDlg::addSelected {this newSelected} {
  291.     [$this selectedSet] append $newSelected
  292.  
  293. }
  294.  
  295. method AccessControlDlg::removeSelected {this oldSelected} {
  296.     [$this selectedSet] removeValue $oldSelected
  297. }
  298.  
  299. method AccessControlDlg::getAllowed {this action} {
  300.     return [[$this allowed] set $action]
  301. }
  302.  
  303. method AccessControlDlg::setAllowed {this action newAllowed} {
  304.     [$this allowed] set $action $newAllowed
  305. }
  306.  
  307. method AccessControlDlg::removeAllowed {this action} {
  308.     [$this allowed] unset $action
  309. }
  310.  
  311. method AccessControlDlg::getProhibited {this action} {
  312.     return [[$this prohibited] set $action]
  313. }
  314.  
  315. method AccessControlDlg::setProhibited {this action newProhibited} {
  316.     [$this prohibited] set $action $newProhibited
  317. }
  318.  
  319. method AccessControlDlg::removeProhibited {this action} {
  320.     [$this prohibited] unset $action
  321. }
  322.  
  323.