home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 1997 November
/
PCWorld_1997-11_cd.bin
/
software
/
programy
/
komix
/
DATA.Z
/
confvdbobj.tcl
< prev
next >
Wrap
Text File
|
1996-11-06
|
12KB
|
431 lines
#---------------------------------------------------------------------------
#
# (c) Cadre Technologies Inc. 1996
#
# File: @(#)confvdbobj.tcl /main/hindenburg/4
# Author: <generated>
# Description:
#---------------------------------------------------------------------------
# SccsId = @(#)confvdbobj.tcl /main/hindenburg/4 6 Nov 1996 Copyright 1996 Cadre Technologies Inc.
# Start user added include file section
# End user added include file section
require "browsdbobj.tcl"
require "versionobj.tcl"
Class ConfVDbObj : {BrowsDbObj VersionObj ConfigVersion} {
method destructor
constructor
method promoter
method addPhaseVersions
method changeLinks
method copyVersion
method deselectObjects
method name
method newObjects
method phaseVersions
method removeObjects
method removeVersion
method selectObject
method versionInLabel
}
method ConfVDbObj::destructor {this} {
# Start destructor user section
[$this customFileVersionSet] delete
[$this controlledListSet] delete
# End destructor user section
$this BrowsDbObj::destructor
$this VersionObj::destructor
}
constructor ConfVDbObj {class this name} {
set this [ConfigVersion::constructor $class $this $name]
set this [BrowsDbObj::constructor $class $this $name]
set this [VersionObj::constructor $class $this $name]
return $this
}
selfPromoter ConfigVersion {this} {
ConfVDbObj promote $this
}
method ConfVDbObj::promoter {this} {
$this BrowsDbObj::promoter
set customFileVersionSet $this.${CustFVUiObj::uiClass}:0
if {! [isCommand $customFileVersionSet]} {
CustFVUiObj new $customFileVersionSet -parent $this
}
$this customFileVersionSet $customFileVersionSet
set controlledListSet $this.${CListUiObj::uiClass}:0
if {! [isCommand $controlledListSet]} {
CListUiObj new $controlledListSet -parent $this
}
$this controlledListSet $controlledListSet
}
method ConfVDbObj::addPhaseVersions {this} {
set proj [$this project]
set phaseList ""
foreach phase ${BrowserProcs::phases} {
set phaseName [lindex $phase 0]
set phaseType [lindex $phase 1]
if {[[$proj findPhase "$phaseName" "$phaseType"] isNil] ||
[[$this findPhaseVersion "$phaseName" "$phaseType"] isNil]} {
lappend phaseList "$phaseName"
}
}
if [lempty $phaseList] {
wmtkinfo "A PhaseVersion already exists for each Phase"
return
}
set objectSpecList ""
foreach phaseName $phaseList {
set id [lsearch -regexp \
${BrowserProcs::phases} \
[format "%s%s" $phaseName {[ |\t|\n\]*}] \
]
set phaseType [lindex [lindex ${BrowserProcs::phases} $id] 1]
set typeSpec [getObjectSpec [$wmttoolObj objectHdlr] \
PhaseVersion $phaseType \
]
if {"$typeSpec" != ""} {
set icon [$typeSpec smallIcon]
} else {
set icon ""
}
lappend objectSpecList [list $icon $phaseName]
}
require "browsviewd.tcl"
set box $wmttoolObj.newPhaseV
ClassMaker::extend BrowsViewDialog NewPhaseVBrowsViewDialog dbObj
NewPhaseVBrowsViewDialog new $box \
-title "New Phase Version" \
-headerSpecList {{Name 20 ascii {none}}} \
-objectSpecList $objectSpecList \
-dbObj $this \
-cancelPressed {%this delete} \
-okPressed {
set proj [[%this dbObj] project]
foreach object [[%this view] selectedSet] {
set phaseName [$object label]
# get phase type
foreach phase ${BrowserProcs::phases} {
if {"[lindex $phase 0]" == "$phaseName"} {
set phaseType [lindex $phase 1]
break
}
}
# find predecessor phase
set predPhase ""
set predName $phaseName
set predType $phaseType
while {! ("$predPhase" != "" && [$predPhase isA Phase])} {
set id 0
set found 0
foreach phase ${BrowserProcs::phases} {
if {"[lindex $phase 0]" == "$predName" &&
"[lindex $phase 1]" == "$predType"} {
set found 1
break
}
incr id 1
}
if {(! $found) || ($id == 0)} {
set predName ""
break
}
set predPhase \
[lindex ${BrowserProcs::phases} [expr $id - 1]]
set predName [lindex $predPhase 0]
set predType [lindex $predPhase 1]
set predPhase [$proj findPhase "$predName" "$predType"]
}
# find successor phase
set succPhase ""
set succName $phaseName
set succType $phaseType
set len [llength ${BrowserProcs::phases}]
while {! ("$succPhase" != "" && [$succPhase isA Phase])} {
set id 0
set found 0
foreach phase ${BrowserProcs::phases} {
if {"[lindex $phase 0]" == "$succName" &&
"[lindex $phase 1]" == "$succType"} {
set found 1
break
}
incr id 1
}
if {(! $found) || ($id >= [expr $len - 1])} {
set succName ""
break
}
set succPhase \
[lindex ${BrowserProcs::phases} [expr $id + 1]]
set succName [lindex $succPhase 0]
set succType [lindex $succPhase 1]
set succPhase [$proj findPhase "$succName" "$succType"]
}
if {"$predPhase" != "" && [$predPhase isA Phase]} {
set script "[%this dbObj] createPhaseVersionBehind \
[list $phaseName] [list $phaseType] $predPhase"
} elseif {"$succPhase" != "" && [$succPhase isA Phase]} {
set script "[%this dbObj] createPhaseVersionBefore \
[list $phaseName] [list $phaseType] $succPhase"
} else {
set lastPhase [$proj lastPhase]
if [$lastPhase isNil] {
set createBehind 0
} else {
set createBehind 1
foreach phase ${BrowserProcs::phases} {
if {"[$lastPhase name]" == "[lindex $phase 0]" &&
"[$lastPhase type]" == "[lindex $phase 1]"} {
set createBehind 0
break
}
}
}
if $createBehind {
set script "[%this dbObj] createPhaseVersionBehind \
[list $phaseName] [list $phaseType] $lastPhase"
} else {
set script "[%this dbObj] createPhaseVersion \
[list $phaseName] [list $phaseType]"
}
}
$wmttoolObj startCommand tcl \
"$script" "" \
"Creating phase version '$phaseName'..." \
{1 0} 1
}
%this delete
}
$box popUp
}
proc ConfVDbObj::associations {} {
return {phaseVersions customFileVersionSet \
controlledListSet accessRuleSet}
}
method ConfVDbObj::changeLinks {this} {
ClassMaker::extend TemplateDialog ChangeLinksTemplateDialog dbObj
ChangeLinksTemplateDialog new $wmttoolObj.changeLink \
-modal yes \
-title "Change Link(s)" \
-dbObj $this \
-helpPressed {.main helpOnName changeLink} \
-cancelPressed {%this delete} \
-okPressed {
set status [%this.top.status selected]
set script ""
foreach obj [$wmttoolObj selectedObjSet] {
set found 0
foreach link [$obj configVersionLinks] {
if {"[$link configVersion]" == "[%this dbObj]"} {
set found 1
break
}
}
if {! $found} {
wmtkerror "link to [$obj getInfo Type] \
'[$obj getInfo Name]' not found"
continue
}
if {"$script" != ""} {
append script " ;"
}
append script " $link status $status"
}
if {"$script" != ""} {
$wmttoolObj startCommand tcl "$script" "" "" {1 0} 1
}
%this delete
}
interface DlgColumn $wmttoolObj.changeLink.top {
Label messageLab {
text "Link Status:"
}
VerRadioGroup status {
entrySet {fixed dynamicFrozen}
}
}
if {[llength [$wmttoolObj selectedObjSet]] == 1} {
$wmttoolObj.changeLink.top.status selected \
[[lindex [$wmttoolObj selectedObjSet] 0] getInfo Link]
} else {
$wmttoolObj.changeLink.top.status selected fixed
}
$wmttoolObj.changeLink popUp
}
proc ConfVDbObj::childTypes {assoc} {
if {[lsearch -exact "[ConfVDbObj::associations]" "$assoc"] == -1} {
return ""
}
set childTypes [BrowserProcs::childTypes $assoc]
case "$childTypes" in {
{PhaseVersion} {
set childTypes ""
foreach phase ${BrowserProcs::phases} {
set phaseType [lindex $phase 1]
if {[lsearch -exact $childTypes "$phaseType"] != -1} continue
lappend childTypes "$phaseType"
}
return "$childTypes"
}
{default} {
return "$childTypes"
}
}
}
proc ConfVDbObj::controlledLists {} {
return {
"[[$this ConfigVersion::config] configVersionList]"
"[[$this ConfigVersion::config] customFileList]"
"[$this customFileVersionLinkList]"
"[$this phaseVersionLinkList]"
}
}
method ConfVDbObj::copyVersion {this} {
set versionList ""
foreach version [[$this project] configVersions] {
if {"$version" == "$this"} continue
lappend versionList [list \
$version "[[$version ConfigVersion::config] name]"
]
}
BrowserProcs::copyVersion $this $versionList
}
method ConfVDbObj::deselectObjects {this} {
set script ""
foreach obj [$wmttoolObj selectedObjSet] {
if {"$script" != ""} {
append script " ;"
}
append script " $this deselectVersion $obj"
}
$wmttoolObj startCommand tcl "$script" "" "" {1 0} 1
}
proc ConfVDbObj::infoProperties {} {
return [concat \
[BrowserProcs::infoProperties] \
{Status Version Comments Created Updated Frozen "Controlled Actions"
"Created By"} \
]
}
method ConfVDbObj::name {this} {
return "[[$this ConfigVersion::config] name]"
}
method ConfVDbObj::newObjects {this} {
set script ""
foreach obj [$wmttoolObj selectedObjSet] {
if {"$script" != ""} {
append script " ;"
}
append script " $this derive -phaseVersion $obj"
}
$wmttoolObj startCommand tcl "$script" "" "" {1 0} 1
}
method ConfVDbObj::phaseVersions {this} {
set phaseVersions ""
foreach link [$this phaseVersionLinks] {
set phaseV [$link phaseVersion]
$phaseV setInfo ConfigPhaseLink $link
lappend phaseVersions $phaseV
}
return $phaseVersions
}
method ConfVDbObj::removeObjects {this} {
set box $wmttoolObj.removeWarning
ClassMaker::extend WarningDialog RemoveObjectsWarningDialog dbObj
RemoveObjectsWarningDialog new $box \
-title "Delete Warning" \
-message [BrowserProcs::removeMessage] \
-dbObj $this \
-helpPressed {.main helpOnName removeWarning} \
-cancelPressed {%this delete} \
-okPressed {
set dbObj [%this dbObj]
set script ""
foreach obj [$wmttoolObj selectedObjSet] {
if {"$script" != ""} {
append script " ;"
}
append script " $dbObj removeObject $obj"
}
$wmttoolObj startCommand tcl "$script" "" "" {1 0} 1
%this delete
}
$box popUp
}
method ConfVDbObj::removeVersion {this} {
BrowserProcs::removeVersion \
"[$this getParent Project]" "[$this ConfigVersion::config]" "$this"
}
method ConfVDbObj::selectObject {this mode} {
set versionList ""
foreach phaseV [$this phaseVersions] {
set workingList([$phaseV phase]) $phaseV
}
case "$mode" in {
{new} {
set phaseList ""
foreach phase [[$this project] phases] {
if [info exists workingList($phase)] continue
lappend phaseList $phase
}
}
{default} {
set phaseList ""
foreach obj [$wmttoolObj selectedObjSet] {
lappend phaseList [$obj phase]
}
}
}
foreach phase $phaseList {
set phaseName [$phase name]
if [info exists workingList($phase)] {
set working $workingList($phase)
} else {
set working [ORB::nil]
}
foreach version [$phase phaseVersions] {
if [$version isSame $working] continue
if {"[$version status]" == "working"} continue
lappend versionList [list $version "$phaseName"]
}
}
BrowserProcs::selectObject $this $versionList $mode
}
method ConfVDbObj::versionInLabel {this} {
return 1
}
# Do not delete this line -- regeneration end marker