#!/usr/local/bin/wish

### this section is configured by the Makefile
set TkGnats(lib) ./; ##TKGNATSLIB##
###

set prid    [lindex $argv 0]
set rawflag [lindex $argv 1]

foreach f { tkpr_library.tcl tkprhelp.tcl } {
    source $TkGnats(lib)/$f
}

proc tkviewpr_raw {prid} {
    global TkGnats env
    
    wm minsize . 100 100
    
    set f [frame .top]
    pack  .top -expand true -fill both
    set f .top
    
    scrollbar $f.sb -command "$f.text yview" -relief sunken
    pack $f.sb -side left -fill y
    
    text $f.text \
            -font fixed \
            -yscrollcommand "$f.sb set" \
            -height 30 -width 80 -relief sunken -padx 4 -insertwidth 1 \
            -insertofftime 400 -borderwidth 2
    pack $f.text -side right -expand true -fill both
    
    action_bar $prid
    
    $f.text insert 1.0 [exec query-pr --full [file tail $prid]]
    $f.text configure -state disabled
    
    wm title . "TkGnats - View Problem Report: $prid"
    wm iconbitmap . @$TkGnats(lib)/tkeditpr.xbm
    wm iconname   . "$TkGnats(LogName)'s tkviewpr $prid"
}

# bail out completely
proc close_report {} {
    Exit 0
}

proc fillfrm {} {
    global frm flds Tkviewpr
    ### pre-set editable PR values to values currently in the PR

    # now the multi line textual flds
    foreach tag $Tkviewpr(multitextflds) {
	if {[info exists  flds($tag)]} {
	    set $flds($tag) [string trim $flds($tag) "\n"]
	    set frm($tag) $flds($tag)
	} else {
	    set frm($tag) "\n"
	    set flds($tag) "\n"
	}
    }
}

proc headingMsg {a {flash 1}} {
    .msg configure -text $a; update
    if {$flash} {
	foreach rep {1 2 3 4 5} {
	    foreach r {raised sunken flat} {
		.msg configure -relief $r;
		update idletasks
		after 50
	    }
	}
    }
}

proc editSelection_cmd {prid} {
    global TkGnats
    . configure -cursor watch
    update idletasks
    ###	headingMsg "Please Wait..."
    exec sh -c [format $TkGnats(pr_editor) $prid] &
    schedule_reap
    ###	after 2000 {headingMsg " "}
    after 4000
    . configure -cursor left_ptr
    close_report
}

proc action_bar {prid} {
    global TkGnats flds
    frame  .action -borderwidth 3
    pack   .action -side top
    button .action.close -borderwidth 2 -text "OK"       -command close_report
    button .action.edit  -borderwidth 2 -text "Edit..."  -command "editSelection_cmd $prid"
    button .action.email -borderwidth 2 -text "Send Email..." \
            -command "email_originator [list [ftrim $flds(Reply-To)]] \
            [list [ftrim $flds(>Responsible)]] [list [ftrim $flds(From)]] \
            [ftrim $flds(>Category)]/$prid [list [ftrim $flds(>Synopsis)]]"
####       [lrange [split [ftrim $flds(>Originator)]] 0 0]
    
    pack .action.close .action.edit .action.email -side left -padx 8
    if {! $TkGnats(edit_authorized)} {
        .action.edit configure -state disabled
    }
}

proc tkviewpr_formatted {prid} {
    global TkGnats Tkviewpr flds env
    
    frame   .mframe -borderwidth 1 -relief raised
    pack    .mframe -side top -fill x
    message .mframe.msg -aspect 10000 -text ""
    pack    .mframe.msg -side left -fill x
    
    menubutton .mframe.help -text "Help" -menu .mframe.help.m -underline 0
    menu       .mframe.help.m
    .mframe.help.m add command -label "Overview" \
            -command "helpMsg View_Overview"
    .mframe.help.m add separator
    .mframe.help.m add command -label "Field Definitions" \
            -command "helpMsg Field_Definitions"
    .mframe.help.m add separator
    .mframe.help.m add command -label "Text Fields (Description, etc)" \
            -command "helpMsg View_Text_Fields"
    .mframe.help.m add separator
    .mframe.help.m add command -label "About" \
            -command "helpMsg TkGnats_Version"
    pack       .mframe.help -side right
    
    readonly_singletext Arrival-Date  [ftrim $flds(>Arrival-Date)]  14 \
            $Tkviewpr(singletextvalue_width)
    readonly_singletext Last-Modified [ftrim $flds(>Last-Modified)] 14 \
            $Tkviewpr(singletextvalue_width)
    readonly_singletext Class         [ftrim $flds(>Class)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext State         [ftrim $flds(>State)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Priority      [ftrim $flds(>Priority)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Severity      [ftrim $flds(>Severity)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Confidential  [ftrim $flds(>Confidential)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Category      [ftrim $flds(>Category)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Submitter-Id  [ftrim $flds(>Submitter-Id)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Responsible   [ftrim $flds(>Responsible)] 14 \
            $Tkviewpr(value_width)
    readonly_singletext Originator    [ftrim $flds(>Originator)]  14 \
            $Tkviewpr(singletextvalue_width)
    readonly_singletext Reply-To      [ftrim $flds(Reply-To)]  14 \
            $Tkviewpr(singletextvalue_width)
    readonly_singletext Release       [ftrim $flds(>Release)] 14 \
            $Tkviewpr(singletextvalue_width)
    readonly_singletext Synopsis      [ftrim $flds(>Synopsis)] 14 \
            $Tkviewpr(singletextvalue_width)

    if {$TkGnats(ReleaseBased)} {
	readonly_singletext Keywords  [ftrim $flds(>Keywords)] 14 \
		$Tkviewpr(singletextvalue_width)
    }
    
    make_txt_mb $Tkviewpr(multitextflds)
    destroy .mb.insert
    .multiline.text configure -state disabled -highlightthickness 0 \
            -background $TkGnats(mtextbackround) -height 16
    bind multiline.text <Enter> ""

    action_bar $prid
    
    wm title . "TkGnats - View Problem Report: [ftrim $flds(>Category)]/[ftrim $flds(>Number)]"
    wm iconbitmap . @$TkGnats(lib)/tkeditpr.xbm
    wm iconname   . "$TkGnats(LogName)'s tkviewpr [ftrim $flds(>Number)]"
    switch_txt ">Description" $Tkviewpr(multitextflds)
}

set Tkviewpr(radioflds) {
    >State
    >Confidential
    >Severity
    >Priority
    >Class
}

set Tkviewpr(multitextflds) {
    >Description
    >How-To-Repeat
    >Environment
    >Audit-Trail
    >Unformatted
    >Fix
}

set current_multi_text ""

set prid [lindex $argv 0]
if {"$prid" == ""} {
    Msg "Missing prid argument!"
    Exit -1
}

# load the report fields
set fin [open "|query-pr --full [file tail $prid]" r]
parsepr $fin flds
load_field_defaults flds
close $fin

# Get the maximum width of the value fields for the bagged_radiobar
set Tkviewpr(value_width) 0
foreach tag [concat >Category >Responsible $Tkviewpr(radioflds)] {
    set f [ftrim $flds($tag)]
    if {[string length $f] > $Tkviewpr(value_width)} {
        set Tkviewpr(value_width) [string length $f]
    }
}
incr Tkviewpr(value_width)

# Get the maximum width of the value fields for the readonly_singletext fields
set Tkviewpr(singletextvalue_width) 0
set flist {>Originator Reply-To >Release >Synopsis >Last-Modified >Arrival-Date}
if {$TkGnats(ReleaseBased)} {
    lappend flist >Keywords
}
foreach tag $flist {
    set f [ftrim $flds($tag)]
    if {[string length $f] > $Tkviewpr(singletextvalue_width)} {
        set Tkviewpr(singletextvalue_width) [string length $f]
    }
}
incr Tkviewpr(singletextvalue_width)

fillfrm

if {"$rawflag" != ""} {
    tkviewpr_raw $prid
} {
    tkviewpr_formatted $prid
}
