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 / modules / ValueBrowser.ycp < prev    next >
Text File  |  2006-11-29  |  5KB  |  200 lines

  1. /**
  2.  * File:        modules/ValueBrowser.ycp
  3.  * Package:     YaST2 base package
  4.  * Summary:     Useful tool for viewing any variable contents.
  5.  * Authors:     Martin Vidner <mvidner@suse.cz>
  6.  *        Dan Vesely?
  7.  * Flags:    Unstable
  8.  *
  9.  * $Id: ValueBrowser.ycp 31256 2006-06-01 15:38:47Z locilka $
  10.  */
  11.  
  12. {
  13.     module "ValueBrowser";
  14.  
  15.     textdomain "base";
  16.  
  17.     /**
  18.      * Helper function that replaces all ocurences of "\n" with "\\n", so items are not multiline :-)
  19.      * @param s string to escape
  20.      * @return string escaped string
  21.      */
  22.     string escapestring (string s) ``{
  23.     return mergestring (splitstring (s, "\n"), "\\n");
  24.     }
  25.  
  26.     /**
  27.      * Shows tree with contents of variable. This function does the job. Heavy recursion...
  28.      * @param variable variable to show.
  29.      * @param indent string that is printed before each output.
  30.      */
  31.     define string FormatSimpleType (any variable, string indent) ``{
  32.         if (is (variable, void))
  33.         {
  34.             return sformat ("%2%1 (void)", variable, indent);
  35.         }
  36.         else if (is (variable, boolean))
  37.         {
  38.             return sformat("%2%1 (boolean)", variable, indent);
  39.         }
  40.         else if (is (variable, integer))
  41.         {
  42.             return sformat("%2%1, %3 (integer)", variable, indent, tohexstring ((integer) variable));
  43.         }
  44.         else if (is (variable, float))
  45.         {
  46.             return sformat("%2%1 (float)", variable, indent);
  47.         }
  48.         else if (is (variable, string))
  49.         {
  50.             return sformat("%2%1 (string)", escapestring ((string) variable), indent);
  51.         }
  52.         else if (is (variable, locale))
  53.         {
  54.             return sformat("%2%1 (locale)", variable, indent);
  55.         }
  56.         else if (is (variable, byteblock))
  57.         {
  58.             return sformat("%2%1 (byteblock)", variable, indent);
  59.         }
  60.         else if (is (variable, symbol))
  61.         {
  62.             return sformat("%2%1 (symbol)", variable, indent);
  63.         }
  64.         else if (is (variable, path))
  65.         {
  66.             return sformat("%2%1 (path)", variable, indent);
  67.         }
  68. /*
  69. block <type>
  70.         else if (is (variable, block))
  71.         {
  72.             return sformat("%2%1 (block)", variable, indent);
  73.         }
  74. */
  75.         else
  76.             {
  77.             return nil;
  78.         }
  79.     }
  80.  
  81.  
  82.     /**
  83.      * Creates tree with contents of variable. This function creates the tree items and
  84.      * returns them as term. This offers using the generated output in your behavior,
  85.      * such as data-structure browser with editor. Heavy recursion...
  86.      *
  87.      * @param variable variable to show.
  88.      * @param indent string that is printed before each output.
  89.      */
  90.     global define term BrowseTreeHelper (any variable, string indent) ``{
  91.         string simple = FormatSimpleType (variable, indent);
  92.         if (simple != nil)
  93.         {
  94.             return `item (simple);
  95.         }
  96.         else if (is (variable, list))
  97.         {
  98.             list items = [];
  99.             foreach (any i, (list) variable, ``{
  100.             items = add (items, BrowseTreeHelper (i, ""));
  101.             });
  102.             return `item (sformat ("%1 (list)", indent), items);
  103.         }
  104.         else if (is (variable, map))
  105.         {
  106.             list items = [];
  107.             foreach (any k, any v, (map) variable, ``{
  108.             items = add (items, BrowseTreeHelper (v, sformat ("%1: ", k)));
  109.             });
  110.             return `item (sformat ("%1 (map)", indent), items);
  111.         }
  112.         else if (is (variable, term))
  113.         {
  114.             term tvariable = (term) variable;
  115.             list items = [];
  116.             integer len = size (tvariable);
  117.             integer i = 0;
  118.             while (i<len)
  119.             {
  120.                 items = add (items, BrowseTreeHelper (select (tvariable, i, nil), ""));
  121.                 i = i+1;
  122.             }
  123.             return `item (sformat ("%1%2 (term)", indent, symbolof (tvariable)), items);
  124.         }
  125.     }
  126.  
  127.     /**
  128.      * Shows tree with contents of variable.
  129.      *
  130.      * @example
  131.      *  map a = $[
  132.      *     "first" : 35,
  133.      *     "second" : [ 1, 2, 3, 4, 5],
  134.      *     "third" : $[ "a" : 15, `b: `VBox () ]
  135.      *    ];
  136.      *  ValueBrowser::BrowseTree (a);
  137.      *
  138.      * @param variable variable to show.
  139.      */
  140.     global define void BrowseTree (any variable) ``{
  141.     term items = BrowseTreeHelper (variable, "");
  142.     UI::OpenDialog(`opt(`defaultsize),
  143.                `VBox (
  144.                // translators: Tree header
  145.                `Tree (`opt (`hstretch, `vstretch), _("&Variable"), [ items ]),
  146.                `PushButton ("&OK")
  147.                )
  148.         );
  149.     UI::UserInput ();
  150.     UI::CloseDialog ();
  151.     }
  152.  
  153.     /**
  154.      * Write contents of variable to log file. This function does the job.
  155.      * Heavy recursion...
  156.      * @param variable variable to show.
  157.      * @param indent string that is printed before each output.
  158.      */
  159.     global define void DebugBrowseHelper (any variable, string indent) ``{
  160.     string simple = FormatSimpleType (variable, indent);
  161.     if (simple != nil)
  162.         {
  163.         y2debug ("%1", simple);
  164.         }
  165.     else if (is (variable, list))
  166.         {
  167.         foreach (any i, (list) variable, ``{
  168.             DebugBrowseHelper (i, indent + "  ");
  169.         });
  170.         }
  171.     else if (is (variable, map))
  172.         {
  173.         foreach (any k, any v, (map) variable, ``{
  174.             y2debug ("%2%1 (map key)", k, indent);
  175.             DebugBrowseHelper (v, sformat ("  %1", indent));
  176.         });
  177.         }
  178.     else if (is (variable, term))
  179.         {
  180.         term tvariable = (term) variable;
  181.         list items = [];
  182.         integer len = size (tvariable);
  183.         integer i = 0;
  184.         y2debug ("%1%2 (term)", indent, symbolof (tvariable));
  185.         while (i<len)
  186.             {
  187.             items = add (items, DebugBrowseHelper (select (tvariable, i, nil), ""));
  188.             i = i+1;
  189.             }
  190.         }
  191.     }
  192.     /**
  193.      * Write contents of variable to log file.
  194.      * @param variable variable to show.
  195.      */
  196.     global define void DebugBrowse (any variable) ``{
  197.     DebugBrowseHelper (variable, "");
  198.     }
  199. }
  200.