summaryrefslogtreecommitdiffstats
path: root/apol/foo_module.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'apol/foo_module.tcl')
-rw-r--r--apol/foo_module.tcl143
1 files changed, 143 insertions, 0 deletions
diff --git a/apol/foo_module.tcl b/apol/foo_module.tcl
new file mode 100644
index 0000000..2728267
--- /dev/null
+++ b/apol/foo_module.tcl
@@ -0,0 +1,143 @@
+# Copyright (C) 2003-2007 Tresys Technology, LLC
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+## This module is not a real analysis, but an example that serves as a
+## guide to what one must do when creating a module via embedded
+## comments. This file also serves as a template for when new
+## analysis modules are created. To include this module in apol, add
+## the file name to apol_SOURCES variable in Makefile.am.
+##
+## All this module does is display an entry box and echo the contents
+## of that box.
+
+## The name space should following the convention of Apol_Analysis_XXX, where
+## XXX is a 3-4 letter name for the analysis.
+namespace eval Apol_Analysis_foo {
+ variable vals
+ variable widgets
+
+## Within the namespace command for the module, you must call
+## Apol_Analysis::registerAnalysis. The first argument is the
+## namespace name of the module, second is the descriptive display name
+## you want to be displayed in the GUI selection box.
+ Apol_Analysis::registerAnalysis "Apol_Analysis_foo" "Analysis Template Example"
+}
+
+# Called when the tool first starts up. It is given a blank frame to
+# which create its search widgets.
+proc Apol_Analysis_foo::create {options_frame} {
+ variable vals
+ set vals(entry_string) {}
+ set l [label $options_frame.l -text "Enter Text:"]
+ set e [entry $options_frame.e -textvariable Apol_Analysis_foo::vals(entry_string) -width 25 -background white]
+ pack $l $e -side left -anchor w
+}
+
+# Called when a policy is opened.
+proc Apol_Analysis_foo::open {} {
+}
+
+# Called when a policy is closed. Typically you should reset any
+# context or option variables you have.
+proc Apol_Analysis_foo::close {} {
+ variable vals
+ set vals(entry_string) {}
+}
+
+# Return a string that describes what the module does. Do not forget
+# that during compilation, blank lines are stripped; thus \n may be
+# needed within the text.
+proc Apol_Analysis_foo::getInfo {} {
+ return "This is an analysis template dialog that simply displays the content
+of the entry box. The purpose of this analysis is to provide a
+template for new analyses."
+}
+
+# Perform a new analysis. This function is responsible for obtaining
+# a new results tab if the analysis succeeds. If the analysis was
+# successful then return an empty string; otherwise return a string
+# describing the error, removing its tab if it had made one.
+proc Apol_Analysis_foo::newAnalysis {} {
+ variable vals
+ if {$vals(entry_string) == "" } {
+ return "You must enter text in the entry box."
+ }
+ set f [Apol_Analysis::createResultTab "Foo" [array get vals]]
+ set results_box [text $f.results -bg white]
+ pack $results_box -expand yes -fill both
+ $results_box insert 0.0 "new analysis: $vals(entry_string)"
+ return
+}
+
+# Update an existing analysis. The passed in frame will contain the
+# existing results; it is this function's responsibility to clear away
+# old data and to store the current search criteria onto the tab. If
+# the analysis was successful then return an empty string; otherwise
+# return a string describing the error. On error Apol_Analysis will
+# remove its tab.
+proc Apol_Analysis_foo::updateAnalysis {f} {
+ variable vals
+ if {$vals(entry_string) == "" } {
+ return "You must enter text in the entry box."
+ }
+ Apol_Analysis::setResultTabCriteria [array get vals]
+ $f.results delete 0.0 end
+ $f.results insert 0.0 "updated analysis: $vals(entry_string)"
+ return
+}
+
+# Called whenever the user hits the reset criteria button.
+proc Apol_Analysis_foo::reset {} {
+ variable vals
+ set vals(entry_string) {}
+}
+
+# Called when the user switches to this tab. The module should
+# restore its search criteria to the values that were stored within
+# the tab.
+proc Apol_Analysis_foo::switchTab {query_options} {
+ variable vals
+ array set vals $query_options
+}
+
+# Called to save the current criteria to a file channel.
+proc Apol_Analysis_foo::saveQuery {channel} {
+ variable vals
+ foreach {key value} [array get vals] {
+ puts $channel "$key $value"
+ }
+}
+
+# Called to load a query from a file channel. The module then updates
+# its display to match the criteria.
+proc Apol_Analysis_foo::loadQuery {channel} {
+ variable vals
+ while {[gets $channel line] >= 0} {
+ set line [string trim $line]
+ # Skip empty lines and comments
+ if {$line == {} || [string index $line 0] == "#"} {
+ continue
+ }
+ regexp -line -- {^(\S+)( (.+))?} $line -> key --> value
+ set vals($key) $value
+ }
+}
+
+# Get a text widget that contains this analysis's results. This is
+# then passed to the find dialog, goto line dialog, and so forth.
+proc Apol_Analysis_foo::getTextWidget {tab} {
+ return $tab.results
+}