home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / accesscont.tcl < prev    next >
Text File  |  1996-11-11  |  8KB  |  310 lines

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