# File helpers.tcl
#
# kleine Hilfsprozeduren

###############################################################################
#
# broadness_of_string { string name }
#
# Prozedur zum Ermitteln der Breite eines Textstrings in einem bestimmten Font
#
# Parameter: - string: der String, dessen Breite gesucht ist
#            - name : ID der entsprechenden Chart
#
# Rueckgabewert: zweielementige Liste: Breite und Hoehe des Strings
#
###############################################################################


proc broadness_of_string { string name } {
    

    my_trace "Entering proc broadness_of_string $string $name"

    global chart

    if {[winfo exists .chart$name.testcanvas] == 0} {
        canvas .chart$name.testcanvas -height 500 -width 500
    }
    
    .chart$name.testcanvas create text 200 200 -text $string -tag testtext -font $chart(defaultfont)

    set werte [.chart$name.testcanvas bbox testtext]
    set x1 [lindex $werte 0]
    set x2 [lindex $werte 2]
    set y1 [lindex $werte 1]
    set y2 [lindex $werte 3]
    set max_x [expr $x2 - $x1]
    set max_y [expr $y2 - $y1]
    
    .chart$name.testcanvas delete testtext
    
    return [list $max_x $max_y]

    my_trace "Leaving broadness_of_string"

}

proc raise_text { name } {

    .chart$name.canvas.draw raise text

}

# trace-Prozedur, die Meldungen im Fenster anzeigt
proc show_in_window {text name} {
    
    
    .chart$name.window.text insert end $text
    .chart$name.window.text see end

}

# trace-Prozedur, die Meldungen auf stdout ausgibt
proc my_trace { messages } {
    
    global chart
    
    if { $chart(verbose) != 0 } {
        puts stderr "> $messages"
    }

    if { $chart(chart_trace) != 0 } {
	.chart_trace.text insert end "> $messages\n"
	.chart_trace.text see end
#	update idletasks
    }
}


proc trace_window { } {

    global chart

    
    if { [winfo exists .chart_trace] == 1 } {
        focus .chart_trace
        return
    } else {
        toplevel .chart_trace
        wm title .chart_trace "Chart: Trace-Output"
    }



    text .chart_trace.text -font fixed -width 40 -height 40 -wrap word -yscrollcommand [ list .chart_trace.yscroll set ] -setgrid true
    scrollbar .chart_trace.yscroll -orient vertical -command [ list .chart_trace.text yview ] -width 10

    pack .chart_trace.text -side left -fill y
    pack .chart_trace.yscroll -side right -fill y
    
    set chart(trace_window) 1

    my_trace "Leaving proc trace_window"

}
