diff options
author | Miroslav Grepl <mgrepl@redhat.com> | 2014-04-11 09:37:53 +0200 |
---|---|---|
committer | Miroslav Grepl <mgrepl@redhat.com> | 2014-04-11 09:37:53 +0200 |
commit | 47be9ff57e72906660bb62a515222f482131e1fb (patch) | |
tree | 2cb0ef0ba48d73b1df7cc0915754a17e19464bb6 /apol/foo_module.tcl | |
download | setools-47be9ff57e72906660bb62a515222f482131e1fb.tar.gz setools-47be9ff57e72906660bb62a515222f482131e1fb.tar.xz setools-47be9ff57e72906660bb62a515222f482131e1fb.zip |
Create setools-3.3.7 git repomaster
Diffstat (limited to 'apol/foo_module.tcl')
-rw-r--r-- | apol/foo_module.tcl | 143 |
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 +} |