field spec_tag ; # list of all tag specs
constructor new {path {title {}}} {
- global all_heads current_branch
+ global current_branch is_detached
set w $path
}
bind $w <Destroy> [cb _delete %W]
+ if {$is_detached} {
+ radiobutton $w.detachedhead_r \
+ -anchor w \
+ -text {This Detached Checkout} \
+ -value HEAD \
+ -variable @revtype
+ grid $w.detachedhead_r -sticky we -padx {0 5} -columnspan 2
+ }
+
radiobutton $w.expr_r \
-text {Revision Expression:} \
-value expr \
listbox $w_list \
-font font_diff \
-width 50 \
- -height 5 \
+ -height 10 \
-selectmode browse \
-exportselection false \
-xscrollcommand [cb _sb_set $w.list.sbx h] \
grid $w.list -sticky nswe -padx {20 5} -columnspan 2
grid columnconfigure $w 1 -weight 1
- grid rowconfigure $w 2 -weight 1
+ if {$is_detached} {
+ grid rowconfigure $w 3 -weight 1
+ } else {
+ grid rowconfigure $w 2 -weight 1
+ }
trace add variable @revtype write [cb _select]
bind $w_filter <Key-Return> [list focus $w_list]\;break
bind $w_filter <Key-Down> [list focus $w_list]
set spec_head [list]
- foreach name $all_heads {
+ foreach name [load_all_heads] {
lappend spec_head [list $name refs/heads/$name]
}
lappend spec_tag [list $name refs/tags/$name]
}
- if {[llength $spec_head] > 0} { set revtype head
+ if {$is_detached} { set revtype HEAD
+ } elseif {[llength $spec_head] > 0} { set revtype head
} elseif {[llength $spec_trck] > 0} { set revtype trck
} elseif {[llength $spec_tag ] > 0} { set revtype tag
} else { set revtype expr
set i 0
foreach spec $spec_head {
if {[lindex $spec 0] eq $current_branch} {
+ $w_list selection clear 0 end
$w_list selection set $i
break
}
}
}
+ HEAD { return HEAD }
expr { return $c_expr }
none { return {} }
default { error "unknown type of revision" }
set revtype trck
}
+method focus_filter {} {
+ if {[$w_filter cget -state] eq {normal}} {
+ focus $w_filter
+ }
+}
+
+method bind_listbox {event script} {
+ bind $w_list $event $script
+}
+
+method get_local_branch {} {
+ if {$revtype eq {head}} {
+ return [_expr $this]
+ } else {
+ return {}
+ }
+}
+
method get_tracking_branch {} {
set i [$w_list curselection]
if {$i eq {} || $revtype ne {trck}} {
error "Revision expression is empty."
}
}
+ HEAD { return HEAD }
none { return {} }
default { error "unknown type of revision" }
}
method _select {args} {
_rebuild $this $filter
- if {[$w_filter cget -state] eq {normal}} {
- focus $w_filter
- }
+ focus_filter $this
}
method _rebuild {pat} {
trck { set new $spec_trck }
tag { set new $spec_tag }
expr -
+ HEAD -
none {
set new [list]
set ste disabled
$w_list insert end $txt
}
}
+ if {$cur_specs ne {}} {
+ $w_list selection clear 0 end
+ $w_list selection set 0
+ }
if {[$w_filter cget -state] ne $ste} {
$w_list configure -state $ste