1 2 3 4 5 6 7 8 9 10 11 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
|
##########################################################################
# TEPAM - Tcl's Enhanced Procedure and Argument Manager
##########################################################################
#
# 1d_procedure_validation.demo: This file is part of the TEPAM demo
#
# Copyright (C) 2009, 2010 Andreas Drollinger
#
# Id: 1d_procedure_validation.demo
##########################################################################
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
##########################################################################
#### Initialization ####
DemoControl(Initialization) 1
DemoControl(IsExecutable) {0}
# This demo shows how custom argument checks can be implemented using
# the -validatecommand attribute.
package require Tk
package require tepam
namespace import -force tepam::*; # Import tepam::procedure and tepam::argument_dialogbox
#### Custom validation with standard error text ####
DemoControl(IsExecutable) {[info commands div_entire1]=={}}
# The following procedure performs integer divisions and is refusing
# the dividend/divisor pair if the integer division has a reminder.
# It is checked that each argument is an integer using the
# -validatecommand argument attribute (specifying the argument types
# as integer would do the same thing).
# Furthermore, an additional procedure attribute -validatecommand
# checks that the division is not leading to a reminder.
procedure div_entire1 {
-short_description "Integer division"
-description "This procedure performs divisions of integer values."
-args {
{a -validatecommand {string is integer %P}}
{b -validatecommand {string is integer %P}}
}
-validatecommand {expr {($a % $b)==0}}
} {
expr {$a/$b}
}
# The following lines show two procedure calls that are failing as well
# as a 3rd one that is successful. The default error messages are created
# in these examples:
div_entire1 10.0 5
div_entire1 10 3
div_entire1 10 5
#### Custom validation with custom error text ####
DemoControl(IsExecutable) {[info commands div_entire2]=={}}
# The standard error messages that are generated if a custom
# validation fails may not be very meaningful, as the last example has
# shown.
# The following example defines custom error texts via the attribute
# -validatecommand_error_text:
procedure div_entire2 {
-short_description "Integer division"
-description "This procedure performs divisions of integer values."
-args {
{a -validatecommand {string is integer %P} -validatecommand_error_text "Integer required for 'a'"}
{b -validatecommand {string is integer %P} -validatecommand_error_text "Integer required for 'b'"}
}
-validatecommand {expr {($a % $b)==0}} -validatecommand_error_text "'a' divided by 'b' has a reminder"
} {
expr {$a/$b}
}
# The next line show that the error messages may be much more meaningful
# with the text defined with -validatecommand_error_text:
div_entire2 10.0 5
div_entire2 10 3
div_entire2 10 5
##########################################################################
# Id: 1d_procedure_validation.demo,v $
# Modifications:
#
# Revision 1.1 2013/10/14 droll
# * Initial checkin of this file
##########################################################################
|