Tkabber

Artifact [7e450e6eb7]
Login

Artifact 7e450e6eb711bebb31f51994c314c35f90071475:


# $Id$

namespace eval search {
    set winid 0
}


proc search::open {jid} {
    variable winid

    set sw .search$winid
    toplevel $sw
    wm title $sw "Search in $jid"

    frame $sw.buttons
    button $sw.buttons.cancel -text Cancel -command [list destroy $sw]
    button $sw.buttons.ok -text Ok -command [list search::search $sw $jid]
    pack $sw.buttons.cancel $sw.buttons.ok -side right
    pack $sw.buttons -fill x -side bottom

    frame $sw.fields
    pack $sw.fields -expand yes -fill both

    jlib::send_iq get \
	[jlib::wrapper:createtag item \
	     -vars {xmlns jabber:iq:search}] \
	-to $jid -command [list search::recv_fields $sw $jid]
    
    incr winid
}


proc search::recv_fields {sw jid res child} {
    debugmsg search "$res $child"

    if {![cequal $res OK]} {
	return
    }

    jlib::wrapper:splitxml $child tag vars isempty chdata children

    if {[cequal [jlib::wrapper:getattr $vars xmlns] jabber:iq:search]} {
	data::fill_fields $sw.fields $children
    }


}


proc search::search {sw jid} {
    variable data

    set f $sw.fields
    set restags [data::get_tags $sw.fields]

    jlib::send_iq set [jlib::wrapper:createtag query \
			   -vars {xmlns jabber:iq:search} \
			   -subtags $restags] \
	-to $jid -command [list search::recv_items $sw $jid]
}


proc search::recv_items {sw jid res child} {
    variable data

    debugmsg search "$res $child"

    if {![cequal $res OK]} {
	return
    }

    #frame $sw.items
    #pack $sw.items -expand yes -fill both -after $sw.fields -anchor nw
    #pack forget $sw.fields

    set sww [ScrolledWindow $sw.items]
    set sf [ScrollableFrame $sww.f]
    $sww setwidget $sf
    pack $sww -expand yes -fill both -after $sw.fields -anchor nw
    pack forget $sw.fields

    set reported_fields [data::get_reported_fields $sw.fields]

    jlib::wrapper:splitxml $child tag vars isempty chdata children

    if {[cequal [jlib::wrapper:getattr $vars xmlns] jabber:iq:search]} {
	fill_items [$sf getframe] $jid $reported_fields $children
    }


}


proc search::fill_items {g jid reported_fields items} {
    variable data
    global font

    set row 0
    set col 0

    foreach field [concat jid $reported_fields] {
	set fieldcol($field) $col

	label $g.l$row$col -text $field
	grid $g.l$row$col -row $row -column $col -sticky w

	grid columnconfig $g $col -weight 1 -minsize 0

	incr col
    }

    incr row

    foreach item $items {
	jlib::wrapper:splitxml $item tag vars isempty chdata children

	switch -- $tag {
	    item {
		set itemjid [jlib::wrapper:getattr $vars jid]
		Button $g.l${row}0 -text $itemjid -font $font \
		    -helptext "Add user" \
		    -command [list message::send_subscribe_dlg $itemjid]
		grid $g.l${row}0 -row $row -column 0 -sticky w

		foreach field $children {
		    jlib::wrapper:splitxml $field tag vars isempty \
			chdata children1

		    if {[info exists fieldcol($tag)]} {
			set col $fieldcol($tag)
			label $g.l$row$col -text $chdata -font $font
			grid $g.l$row$col -row $row -column $col -sticky w
		    }
		    debugmsg search "$tag $chdata"
		}
		incr row
	    }
	    default {}
	}	
    }
}