##########################################################################
# TEPAM - Tcl's Enhanced Procedure and Argument Manager
##########################################################################
#
# 1_procedure_introduction.demo: This file is part of the TEPAM demo
#
# Copyright (C) 2009, 2010 Andreas Drollinger
# 
# Id: 1_procedure_introduction.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 gives a very short overview about the major features of the
# advanced procedure and argument manager. This basically includes:
#   - Procedure declaration
#   - Interactive procedure help query
#   - Procedure call with several argument definition variations
#   - Interactive procedure call and argument definitions

   package require Tk
   package require tepam
   namespace import -force tepam::*; # Import tepam::procedure and tepam::argument_dialogbox

#### Procedure definition ####

DemoControl(IsExecutable) {[info commands {display message}]=={}}

# This first example section declares the sub procedure 'display message' that has
# several arguments. The last one is an unnamed argument while the others are named 
# arguments.

   procedure {display message} {
      -return            -
      -short_description "Displays a simple message box"
      -description       "This procedure allows displaying a configurable message box."
      -args {
         {-mtype -default Warning -choices {Info Warning Error} -description "M. type"}
         {-font -type font -default {Arial 10 italic} -description "Message font"}
         {-level -type integer -optional -range {1 10} -description "Message level"}
         {-fg -type color -default black -description "Message color"}
         {-bg -type color -optional -description "Background color"}
         {-no_border -type none -description "Use a splash window style (no border)"}
         {-log_file -type file -optional -description "Optional message log file"}
         {text -type string -multiple -description "Multiple text lines to display"}
      }
      -example {
         display message "The document hasn't yet been saved!"
         display message -fg red -bg black "Please save first the document"
      }
   } {
      puts "display message:"
      foreach var {mtype font level fg bg no_border log_file text} {
         if {[info exists $var]} {
            puts  "  $var=[set $var]"
         }
      }
   }

#### Procedure help ####

DemoControl(IsExecutable) {[info commands {display message}]!={} && !$Executed}

# Simply call de declared procedure with the -help option to get the information to
# the procedure and its arguments.

   display message -help

#### Correct procedure calls ####

DemoControl(IsExecutable) {[info commands {display message}]!={} && !$Executed}

# The specified procedure can be called in many ways:

   display message "The document hasn't yet been saved!"
   display message -fg red -bg black "Please save first the document"
   display message -mtype Error -no_border "Why is here no border?"
   display message -font {Courier 12} -level 10 "Is there enough space?" "Reduce otherwise the font size!"

#### Incorrect procedure calls ####

DemoControl(IsExecutable) {[info commands {display message}]!={} && !$Executed}

# The next lines show how wrong arguments specifications are recognized.

   # The argument 'text' is mandatory:
   display message -font {Courier 12}

   # Unknown options are leading to an error:
   display message -category warning "Hello"

   # The argument types are automatically checked. For example the colors:
   display message -fg MyColor "Hello"

   # Choice lists have to be respected:
   display message -mtype "Fatal" "Hello"

   # Ranges have to be respected:
   display message -level 12 "Hello"

#### Interactive procedure call ####

DemoControl(IsExecutable) {[info commands {display message}]!={}}

# The most intuitive way to call the procedure is using an interactive form that allows
# specifying all arguments. This form will automatically be opened when the declared
# procedure is called with the -interactive option.

   display message -interactive

#### Documentation generation ####

DemoControl(IsExecutable) {[info commands {display message}]!={}}

# The TEPAM documentation generation package allows generating documentation for the 
# specified procedures in various formats. This demo section opens a dialog box to 
# define the document name, and generates then the documentation based on the 
# specified file format.

   # Load TEPAM Doc Gen package
   package require tepam::doc_gen

   # Get the document file name
   set DocFile [tk_getSaveFile \
                   -filetypes {{Text *.txt} {HTML *.html} {POD *.pod} {"Tcllib doctools" *.dt}}]

   # Extract the document type
   set DocFormat [string toupper [string range [file extension $DocFile] 1 end]]
   
   # Generate the document. In case of a HTML document copy also the CSS stylesheet 
   # to the document destination folder. In case of an unknown document type 
   # generate an error message.
   if {$DocFile!=""} {
      if {[lsearch -exact {TXT HTML POD DT} $DocFormat]<0} {
         tk_messageBox -message "Extension '$DocFormat' of file '$DocFile' unknown!\
                                 Chose either extension .txt, .html, .pod or .dt"
      } else {
         tepam::doc_gen::generate -format $DocFormat -dest_file $DocFile {display message}
         if {$DocFormat=="HTML"} {
            file copy -force [pwd]/tepam_doc_stylesheet.css [file dirname $DocFile]
         }
      }
   }

##########################################################################
# Id: 1_procedure_introduction.demo
# Modifications:
#
# Revision 1.2  2013/10/14 droll
# * Add the documentation generation section
#
# Revision 1.1  2010/02/11 21:54:38  droll
# * TEPAM module checkin
##########################################################################
