summaryrefslogtreecommitdiffstats
path: root/src/H5PL.c
Commit message (Expand)AuthorAgeFilesLines
* [svn-r26365] HDFFV-8520: Add plugin control APIs.Allen Byrne2015-03-051-20/+63
* [svn-r26216] Removed inappropriate TEXT() macro from the plugin name and chan...Dana Robinson2015-02-181-9/+21
* [svn-r26200] Fixed mixed tabs and spaces before making changes.Dana Robinson2015-02-171-56/+55
* [svn-r26036] HDFFV-8736: Patch H5PL.c and test for cygwin plugin support.Allen Byrne2015-01-261-0/+6
* [svn-r24167] HDFFV-8513, HDFFV-8522 Plugin testing in h5repack, h5dump.Allen Byrne2013-09-191-1/+5
* [svn-r24104] HDFFV-8345: add User Defined filters to h5repack.Allen Byrne2013-09-061-2/+2
* [svn-r23735] HDFFV-8445: unregonized character warning solved by changing '\/...Allen Byrne2013-06-051-1/+1
* [svn-r23713] Description:Quincey Koziol2013-05-211-2/+2
* [svn-r23549] Description:Quincey Koziol2013-04-041-29/+29
* [svn-r23547] Windows plugins will always be "dll"'s.Allen Byrne2013-04-041-1/+1
* [svn-r23543] Description:Quincey Koziol2013-04-041-54/+56
* [svn-r23536] I corrected the copyright information and added some comment in ...Raymond Lu2013-04-031-6/+5
* [svn-r23472] I updated the default search path for plugin module to be /usr/l...Raymond Lu2013-03-271-2/+2
* [svn-r23451] I took out RTLD_LAZY for dlopen.Raymond Lu2013-03-251-1/+1
* [svn-r23432] I added a new macro HDF5_PLUGIN_PRELOAD to skip plugin loading d...Raymond Lu2013-03-221-36/+62
* [svn-r23406] Correct typoAllen Byrne2013-03-201-1/+1
* [svn-r23403] Refactor windows code:Allen Byrne2013-03-201-3/+8
* [svn-r23386] More updates for Windows.Raymond Lu2013-03-191-49/+9
* [svn-r23381] More update for Windows.Raymond Lu2013-03-191-3/+72
* [svn-r23380] Description:Quincey Koziol2013-03-191-254/+348
* [svn-r23373] Some updates for Windows.Raymond Lu2013-03-181-3/+3
* [svn-r23370] Corrected macro name and removed optional function info in ERROR...Allen Byrne2013-03-181-1/+1
* [svn-r23369] Escape "\" charAllen Byrne2013-03-181-1/+1
* [svn-r23368] Correct names and add includes for windowsAllen Byrne2013-03-181-3/+2
* [svn-r23367] I took out a declaration of "DIR" for Windows support. Raymond Lu2013-03-181-4/+5
* [svn-r23360] I added Windows support to H5PL_find function.Raymond Lu2013-03-161-1/+63
* [svn-r23359] I added some macros and refactoring the code to prepare for Wind...Raymond Lu2013-03-151-93/+122
* [svn-r23350] I cleaned up some code and added comments for my previous checki...Raymond Lu2013-03-141-26/+40
* [svn-r23346] First commit for DESY project. It has the basic functionality o...Raymond Lu2013-03-131-0/+401
d='n12' href='#n12'>12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
# choosedir.tcl --
#
#	Choose directory dialog implementation for Unix/Mac.
#
# Copyright (c) 1998-2000 by Scriptics Corporation.
# All rights reserved.
# 
# RCS: @(#) $Id: choosedir.tcl,v 1.19 2006/01/25 18:22:04 dgp Exp $

# Make sure the tk::dialog namespace, in which all dialogs should live, exists
namespace eval ::tk::dialog {}
namespace eval ::tk::dialog::file {}

# Make the chooseDir namespace inside the dialog namespace
namespace eval ::tk::dialog::file::chooseDir {
    namespace import -force ::tk::msgcat::*
}

# ::tk::dialog::file::chooseDir:: --
#
#	Implements the TK directory selection dialog.
#
# Arguments:
#	args		Options parsed by the procedure.
#
proc ::tk::dialog::file::chooseDir:: {args} {
    variable ::tk::Priv
    set dataName __tk_choosedir
    upvar ::tk::dialog::file::$dataName data
    Config $dataName $args

    if {$data(-parent) eq "."} {
        set w .$dataName
    } else {
        set w $data(-parent).$dataName
    }

    # (re)create the dialog box if necessary
    #
    if {![winfo exists $w]} {
	::tk::dialog::file::Create $w TkChooseDir
    } elseif {[winfo class $w] ne "TkChooseDir"} {
	destroy $w
	::tk::dialog::file::Create $w TkChooseDir
    } else {
	set data(dirMenuBtn) $w.f1.menu
	set data(dirMenu) $w.f1.menu.menu
	set data(upBtn) $w.f1.up
	set data(icons) $w.icons
	set data(ent) $w.f2.ent
	set data(okBtn) $w.f2.ok
	set data(cancelBtn) $w.f2.cancel
	set data(hiddenBtn) $w.f2.hidden
    }
    if {$::tk::dialog::file::showHiddenBtn} {
	$data(hiddenBtn) configure -state normal
	grid $data(hiddenBtn)
    } else {
	$data(hiddenBtn) configure -state disabled
	grid remove $data(hiddenBtn)
    }

    # Dialog boxes should be transient with respect to their parent,
    # so that they will always stay on top of their parent window.  However,
    # some window managers will create the window as withdrawn if the parent
    # window is withdrawn or iconified.  Combined with the grab we put on the
    # window, this can hang the entire application.  Therefore we only make
    # the dialog transient if the parent is viewable.

    if {[winfo viewable [winfo toplevel $data(-parent)]] } {
	wm transient $w $data(-parent)
    }

    trace add variable data(selectPath) write \
	    [list ::tk::dialog::file::SetPath $w]
    $data(dirMenuBtn) configure \
	    -textvariable ::tk::dialog::file::${dataName}(selectPath)

    set data(filter) "*"
    set data(previousEntryText) ""
    ::tk::dialog::file::UpdateWhenIdle $w

    # Withdraw the window, then update all the geometry information
    # so we know how big it wants to be, then center the window in the
    # display and de-iconify it.

    ::tk::PlaceWindow $w widget $data(-parent)
    wm title $w $data(-title)

    # Set a grab and claim the focus too.

    ::tk::SetFocusGrab $w $data(ent)
    $data(ent) delete 0 end
    $data(ent) insert 0 $data(selectPath)
    $data(ent) selection range 0 end
    $data(ent) icursor end

    # Wait for the user to respond, then restore the focus and
    # return the index of the selected button.  Restore the focus
    # before deleting the window, since otherwise the window manager
    # may take the focus away so we can't redirect it.  Finally,
    # restore any grab that was in effect.

    vwait ::tk::Priv(selectFilePath)

    ::tk::RestoreFocusGrab $w $data(ent) withdraw

    # Cleanup traces on selectPath variable
    #

    foreach trace [trace info variable data(selectPath)] {
	trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1]
    }
    $data(dirMenuBtn) configure -textvariable {}

    # Return value to user
    #
    
    return $Priv(selectFilePath)
}

# ::tk::dialog::file::chooseDir::Config --
#
#	Configures the Tk choosedir dialog according to the argument list
#
proc ::tk::dialog::file::chooseDir::Config {dataName argList} {
    upvar ::tk::dialog::file::$dataName data

    # 0: Delete all variable that were set on data(selectPath) the
    # last time the file dialog is used. The traces may cause troubles
    # if the dialog is now used with a different -parent option.
    #
    foreach trace [trace info variable data(selectPath)] {
	trace remove variable data(selectPath) [lindex $trace 0] [lindex $trace 1]
    }

    # 1: the configuration specs
    #
    set specs {
	{-mustexist "" "" 0}
	{-initialdir "" "" ""}
	{-parent "" "" "."}
	{-title "" "" ""}
    }

    # 2: default values depending on the type of the dialog
    #
    if {![info exists data(selectPath)]} {
	# first time the dialog has been popped up
	set data(selectPath) [pwd]
    }

    # 3: parse the arguments
    #
    tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList

    if {$data(-title) eq ""} {
	set data(-title) "[mc "Choose Directory"]"
    }
    
    # Stub out the -multiple value for the dialog; it doesn't make sense for
    # choose directory dialogs, but we have to have something there because we
    # share so much code with the file dialogs.
    set data(-multiple) 0

    # 4: set the default directory and selection according to the -initial
    #    settings
    #
    if {$data(-initialdir) ne ""} {
	# Ensure that initialdir is an absolute path name.
	if {[file isdirectory $data(-initialdir)]} {
	    set old [pwd]
	    cd $data(-initialdir)
	    set data(selectPath) [pwd]
	    cd $old
	} else {
	    set data(selectPath) [pwd]
	}
    }

    if {![winfo exists $data(-parent)]} {
	error "bad window path name \"$data(-parent)\""
    }
}

# Gets called when user presses Return in the "Selection" entry or presses OK.
#
proc ::tk::dialog::file::chooseDir::OkCmd {w} {
    upvar ::tk::dialog::file::[winfo name $w] data

    # This is the brains behind selecting non-existant directories.  Here's
    # the flowchart:
    # 1.  If the icon list has a selection, join it with the current dir,
    #     and return that value.
    # 1a.  If the icon list does not have a selection ...
    # 2.  If the entry is empty, do nothing.
    # 3.  If the entry contains an invalid directory, then...
    # 3a.   If the value is the same as last time through here, end dialog.
    # 3b.   If the value is different than last time, save it and return.
    # 4.  If entry contains a valid directory, then...
    # 4a.   If the value is the same as the current directory, end dialog.
    # 4b.   If the value is different from the current directory, change to
    #       that directory.

    set selection [tk::IconList_CurSelection $data(icons)]
    if {[llength $selection] != 0} {
	set iconText [tk::IconList_Get $data(icons) [lindex $selection 0]]
	set iconText [file join $data(selectPath) $iconText]
	Done $w $iconText
    } else {
	set text [$data(ent) get]
	if {$text eq ""} {
	    return
	}
	set text [file join {expand}[file split [string trim $text]]]
	if {![file exists $text] || ![file isdirectory $text]} {
	    # Entry contains an invalid directory.  If it's the same as the
	    # last time they came through here, reset the saved value and end
	    # the dialog.  Otherwise, save the value (so we can do this test
	    # next time).
	    if {$text eq $data(previousEntryText)} {
		set data(previousEntryText) ""
		Done $w $text
	    } else {
		set data(previousEntryText) $text
	    }
	} else {
	    # Entry contains a valid directory.  If it is the same as the
	    # current directory, end the dialog.  Otherwise, change to that
	    # directory.
	    if {$text eq $data(selectPath)} {
		Done $w $text
	    } else {
		set data(selectPath) $text
	    }
	}
    }
    return
}

proc ::tk::dialog::file::chooseDir::DblClick {w} {
    upvar ::tk::dialog::file::[winfo name $w] data
    set selection [tk::IconList_CurSelection $data(icons)]
    if {[llength $selection] != 0} {
	set filenameFragment \
		[tk::IconList_Get $data(icons) [lindex $selection 0]]
	set file $data(selectPath)
	if {[file isdirectory $file]} {
	    ::tk::dialog::file::ListInvoke $w [list $filenameFragment]
	    return
	}
    }
}    

# Gets called when user browses the IconList widget (dragging mouse, arrow
# keys, etc)
#
proc ::tk::dialog::file::chooseDir::ListBrowse {w text} {
    upvar ::tk::dialog::file::[winfo name $w] data

    if {$text eq ""} {
	return
    }

    set file [::tk::dialog::file::JoinFile $data(selectPath) $text]
    $data(ent) delete 0 end
    $data(ent) insert 0 $file
}

# ::tk::dialog::file::chooseDir::Done --
#
#	Gets called when user has input a valid filename.  Pops up a
#	dialog box to confirm selection when necessary. Sets the
#	Priv(selectFilePath) variable, which will break the "vwait"
#	loop in tk_chooseDirectory and return the selected filename to the
#	script that calls tk_getOpenFile or tk_getSaveFile
#
proc ::tk::dialog::file::chooseDir::Done {w {selectFilePath ""}} {
    upvar ::tk::dialog::file::[winfo name $w] data
    variable ::tk::Priv

    if {$selectFilePath eq ""} {
	set selectFilePath $data(selectPath)
    }
    if {$data(-mustexist)} {
	if {![file exists $selectFilePath] || ![file isdir $selectFilePath]} {
	    return
	}
    }
    set Priv(selectFilePath) $selectFilePath
}