home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
root
/
usr
/
share
/
YaST2
/
clients
/
view_anymsg.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
6KB
|
237 lines
/*
* view_anymsg.ycp
*
* small script for easy /var/log/* and /proc/* viewing
*
* Author: Klaus Kaempf <kkaempf@suse.de>
*
* $Id: view_anymsg.ycp 25377 2005-09-06 07:56:23Z jsuchome $
*
* Reads a \n separated list of filenames from
* /var/lib/YaST2/filenames
* Lines starting with "#" are ignored (comments)
* A line starting with "*" is taken as the default filename, the "*" is stripped
*
* All files are listed in an editable combo box, where the user can
* easily switch between files and even add a new file
*
* At finish, the list of filenames is written back to
* /var/lib/YaST2/filenames
* adapting the default line (starting with "*") accordingly.
*
* The default is either given as WFM::Args(0) or is the file last viewed.
*/
{
textdomain "repair";
import "Directory";
import "FileUtils";
import "Label";
string vardir = Directory::vardir;
// Check if the filename list is present
if (!FileUtils::Exists (vardir + "/filenames"))
{
SCR::Execute(.target.bash, "/bin/cp " + Directory::ydatadir + "/filenames " + vardir + "/filenames");
}
// get filename list
string filenames = (string) SCR::Read(.target.string, vardir + "/filenames");
if ((filenames == nil)
|| (size (filenames) <= 0))
{
filenames = "/var/log/boot.msg\n/var/log/messages\n";
}
// convert \n separated string to ycp list.
list<string> all_files = splitstring (filenames, "\n");
boolean set_default = false;
list<term> combo_files = [];
// check if default given as argument
string filename = "";
if ((size(WFM::Args()) > 0)
&& is(WFM::Args(0), string))
{
filename = (string)WFM::Args(0);
if (filename != "")
{
combo_files = [ `item(`id(filename), filename, true) ];
set_default = true;
}
}
// build up ComboBox
foreach (string name, all_files,
{
// empty lines or lines starting with "#" are ignored
if (name != ""
&& substring (name, 0, 1) != "#")
{
// the default is either given via WFM::Args() -> filename != ""
// or by a filename starting with "*"
if (substring (name, 0, 1) == "*")
{
name = substring (name, 1); // strip leading "*"
if (name != filename) // do not add it twice
{
combo_files =
add (combo_files,`item (`id(name),name, !set_default));
}
if (!set_default)
{
if (filename == "")
filename = name;
set_default = true;
}
}
else if (name != filename) // do not add it twice
{
combo_files = add (combo_files, `item(`id(name), name));
}
}
});
if (!set_default
&& (filename != ""))
{
all_files = add (all_files, "*" + filename);
combo_files = add (combo_files, `item(`id(filename), filename));
}
// set up dialogue
UI::OpenDialog( `opt(`decorated, `defaultsize ),
`VBox(
`HSpacing( 70 ), // force width
`HBox (`HSpacing (1.0), `ComboBox (`id(`custom_file), `opt(`editable, `notify, `hstretch), "", combo_files), `HStretch()),
`VSpacing( 0.3 ),
`VWeight( 1,
`HBox(
`VSpacing( 18 ), // force height
`HSpacing( 0.7 ),
`LogView( `id(`log ),
"",
3, // height
0 ), // number of lines to show
`HSpacing( 0.7 )
)
),
`VSpacing( 0.3 ),
`PushButton( `id(`ok), Label::OKButton() ),
`VSpacing( 0.3 )
)
);
string file_contents = "";
boolean go_on = true;
// wait until user clicks "OK"
// check if ComboBox selected and change view accordingly
while (go_on)
{
// read file contents
file_contents = (string)SCR::Read (.target.string, filename);
// Fill the LogView with file contents
UI::ChangeWidget( `id(`log ), `Value, file_contents );
string heading = sformat( _("System Log (%1)"), filename );
UI::ChangeWidget( `id(`log ), `Label, heading);
// wait for user input
symbol ret = (symbol)UI::UserInput();
// clicked "OK" -> exit
if (ret == `ok)
{
go_on = false;
}
else if (ret == `cancel) // close window
{
UI::CloseDialog();
return true;
}
else if (ret == `custom_file)
{
// adapt to combo box settings
string new_file = (string)UI::QueryWidget(`id(`custom_file), `Value);
if (new_file != nil)
{
filename = new_file;
}
}
else
{
y2milestone ("bad UserInput (%1)", ret);
}
}
// write new list of filenames
list<string> new_files = [];
set_default = false;
// re-build list to get new default correct
foreach (string file, all_files,
{
if (substring (file, 0, 1) == "*")
{
string old_default = substring (file, 1); // strip leading "*"
if (old_default == filename) // default unchanged
{
new_files = add (new_files, file);
set_default = true;
}
else // new default
{
new_files = add (new_files, old_default);
}
}
else if (file != "")
{
if (file == filename) // mark new default
{
new_files = add (new_files, "*" + filename);
set_default = true;
}
else
{
new_files = add (new_files, file);
}
}
});
// if we don't have a default by now, it wasn't in the list before
// so add it here.
if (!set_default
&& (filename != ""))
{
new_files = add (new_files, "*" + filename);
}
new_files = toset (new_files);
// convert ycp list back to \n separated string
filenames = mergestring (new_files, "\n") + "\n";
SCR::Write(.target.string, vardir + "/filenames", filenames);
UI::CloseDialog();
return true;
}