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 / x11_proposal.ycp < prev    next >
Text File  |  2006-11-29  |  10KB  |  342 lines

  1. /**************
  2. FILE          : x11_proposal.ycp
  3. ***************
  4. PROJECT       : YaST2
  5.               :
  6. AUTHOR        : Marcus Sch├ñfer <ms@suse.de>
  7.               :
  8. BELONGS TO    : YaST2
  9.               : (X11 integration part using SaX2/ISaX)
  10.               :
  11. DESCRIPTION   : Proposal function dispatcher for
  12.               : X11 configuration
  13.               :
  14.               :
  15. STATUS        : Development
  16. **************/
  17. /**
  18.  * File:        proposal/x11_proposal.ycp
  19.  * Package:     X11 Configuration
  20.  * Summary:     Installation Proposal for X11 stuff
  21.  * Authors:     Marcus Schaefer <ms@suse.de>
  22.  *
  23.  */
  24. {
  25. textdomain "x11";
  26.  
  27. import "Report";
  28. import "Installation";
  29. import "Arch";
  30. import "Confirm";
  31. import "XMessages";
  32. import "XLib";
  33. import "Package";
  34.  
  35. include "x11/x11Dialog.ycp";
  36.  
  37. //===================================================
  38. // Initialize proposal parameters
  39. //---------------------------------------------------
  40. string  func  = (string) WFM::Args(0);
  41. map     param = (map)    WFM::Args(1);
  42. map     ret   = $[];
  43.  
  44. //==========================================
  45. // Check for installed packages...
  46. //------------------------------------------
  47. if (
  48.     (Arch::x11_setup_needed ()) ||
  49.     (Installation::x11_setup_needed ())
  50. ) {
  51.     list<string> requiredPacs = [
  52.         "xorg-x11", "xorg-x11-server","xorg-x11-server-glx","libusb",
  53.         "sax2", "sax2-gui", "sax2-ident", "sax2-tools","sax2-libsax",
  54.         "sax2-libsax-perl"
  55.     ];
  56.  
  57.     // remove unavailable packages
  58.     requiredPacs = filter(string pac, requiredPacs, {return Pkg::PkgProperties(pac) != nil;} );
  59.  
  60.     y2milestone("required X11 packages: %1", requiredPacs);
  61.  
  62.     boolean package = Package::InstallAllMsg (
  63.         requiredPacs, XMessages::pacsMissing
  64.     );
  65.     y2milestone ("x11 package status is: <%1>",package);
  66.     if (! package) {
  67.         return $[];
  68.     }
  69. }
  70. //===================================================
  71. // Handle Arch flag
  72. //---------------------------------------------------
  73. if (
  74.     (! Arch::x11_setup_needed ()) ||
  75.     (! Installation::x11_setup_needed ()) ||
  76.     (! Package::Installed ("sax2-gui"))
  77. ) {
  78.     if ( func != "Description" ) {
  79.         ret = $[
  80.             "rich_text_title"       : "",
  81.             "menu_title"            : "",
  82.             "id"                    : "",
  83.             "preformatted_proposal" : "<b> </b>",
  84.             "success"               : true
  85.         ];
  86.         return ret;
  87.     } else {
  88.         return ret;
  89.     }
  90. }
  91. //===================================================
  92. // Create proposal for installation/configuration...
  93. //---------------------------------------------------
  94. if ( func == "MakeProposal" ) {
  95.     //======================================
  96.     // Initialize library cache
  97.     //--------------------------------------
  98.     if (! (boolean)XLib::isInitialized()) {
  99.         y2milestone ("Loading library cache...");
  100.         XLib::loadApplication();
  101.     }
  102.     //======================================
  103.     // Reading library cache data
  104.     //--------------------------------------
  105.     y2milestone ("Reading libsax cache data...");
  106.     string    resolution  = (string)  XLib::getActiveResolution();
  107.     string    colorDepth  = (string)  XLib::getActiveColorDepth();
  108.     string    cardName    = (string)  XLib::getCardName();
  109.     string    monitorName = (string)  XLib::getMonitorName();
  110.     boolean    has3D       = (boolean) XLib::hasOpenGLFeatures();
  111.     boolean    is3DCard    = (boolean) XLib::has3DCapabilities();
  112.     boolean isNoteBook  = (boolean) XLib::isExternalVGANoteBook();
  113.     boolean isNoteBookHW= (boolean) XLib::isNoteBookHardware();
  114.     boolean extVGAactive= (boolean) XLib::isExternalVGAactive();
  115.     list    monitorSize = (list)    XLib::getDisplaySize();
  116.     string  monitorInch = (string)  monitorSize[0]:"undef";
  117.  
  118.     //======================================
  119.     // Prepare proposal
  120.     //--------------------------------------
  121.     string UL = "<ul>";
  122.     string LU = "</ul>";
  123.     string LI = "<li>";
  124.     string IL = "</li>";
  125.     string proposal = "";
  126.     string colorCount = "";
  127.     if (colorDepth == "24") {
  128.         colorCount = "16.7 Mio. " + XMessages::colors;
  129.     }
  130.     if (colorDepth == "16") {
  131.         colorCount = "65536 " + XMessages::colors;
  132.     }
  133.     if (colorDepth == "15") {
  134.         colorCount = "32768 " + XMessages::colors;
  135.     }
  136.     if (colorDepth == "8") {
  137.         colorCount = "256 "   + XMessages::colors;
  138.     }
  139.     if (monitorName == "undef") {
  140.         monitorName = XMessages::unconfigured;
  141.     }
  142.     //======================================
  143.     // Create proposal
  144.     //--------------------------------------
  145.     proposal = UL;
  146.     //======================================
  147.     // Graphics card name...
  148.     //--------------------------------------
  149.     proposal = proposal
  150.     + LI
  151.         + XMessages::graphicsCard + cardName
  152.     + IL;
  153.     //======================================
  154.     // Monitor name and resolution...
  155.     //--------------------------------------
  156.     if (monitorInch == "undef") {
  157.         proposal = proposal
  158.         + LI
  159.             + XMessages::monitor + "<a href=\"sax-monitor\">"
  160.             + monitorName + "</a> " + "(<a href=\"sax-displaysize\">"
  161.             + XMessages::Aspect + " " + XMessages::unconfigured + "</a>)"
  162.             + " - (<a href=\"sax-resolution\">" + resolution  + "</a>)"
  163.         + IL;
  164.     } else {
  165.         proposal = proposal
  166.         + LI
  167.             + XMessages::monitor + "<a href=\"sax-monitor\">"
  168.             + monitorName + "</a> " + "(<a href=\"sax-displaysize\">"
  169.             + monitorSize[0]:"" + " " + XMessages::Inches + ", "
  170.             + XMessages::Aspect + " " + monitorSize[1]:"" + ":"
  171.             + monitorSize[2]:"" + "</a>)" + " - (<a href=\"sax-resolution\">"
  172.             + resolution  + "</a>)"
  173.         + IL;
  174.     }
  175.     //======================================
  176.     // Colordepth and number of colors...
  177.     //--------------------------------------
  178.     proposal = proposal
  179.     + LI
  180.         + XMessages::colorDepth + "<a href=\"sax-colors\">"
  181.         + colorDepth + "</a> Bit (" + colorCount + ")"
  182.     + IL;
  183.     //======================================
  184.     // 3D acceleration status/availability
  185.     //--------------------------------------
  186.     if (is3DCard) {
  187.         string status = XMessages::deactivated;
  188.         if (has3D) {
  189.             status = XMessages::activated;
  190.         }
  191.         proposal = proposal
  192.         + LI
  193.             + XMessages::acceleration + "<a href=\"sax-3d\">"
  194.             + status + "</a>"
  195.         + IL;
  196.     }
  197.     //======================================
  198.     // External VGA on NoteBooks
  199.     //--------------------------------------
  200.     if (isNoteBook) {
  201.         string status = XMessages::deactivated;
  202.         if (extVGAactive) {
  203.             status = XMessages::activated;
  204.         }
  205.         proposal = proposal
  206.         + LI
  207.             + XMessages::externalvga + "<a href=\"sax-ext-vga\">"
  208.             + status + "</a>"
  209.         + IL;
  210.     } else {
  211.         if ((isNoteBookHW) && (! XMessages::popupDone)) {
  212.             XMessages::popupDone = true;
  213.             y2milestone ("X11: DualHead Mode not supported with this NoteBook");
  214.             //warnNoteBookPopup();
  215.         }
  216.     }
  217.     //======================================
  218.     // Test your configuration now
  219.     //--------------------------------------
  220.     proposal = proposal
  221.     + LI
  222.         + "<a href=\"sax-test\">"
  223.         + XMessages::testConfig + "</a>"
  224.     + IL;
  225.     //======================================
  226.     // End proposal...
  227.     //--------------------------------------
  228.     proposal = proposal + LU;
  229.     ret = $[
  230.         "preformatted_proposal" : proposal,
  231.         "links" : [
  232.             "sax-monitor",
  233.             "sax-resolution",
  234.             "sax-displaysize",
  235.             "sax-colors",
  236.             "sax-3d",
  237.             "sax-ext-vga",
  238.             "sax-test"
  239.         ]
  240.     ];
  241.     return ret;
  242. }
  243. //===================================================
  244. // Handle user requests...
  245. //---------------------------------------------------
  246. else if ( func == "AskUser" ) {
  247.     any chosenID = param["chosen_id"]:nil;
  248.     if (chosenID == "sax-monitor") {
  249.         y2milestone("X11: setup monitor...");
  250.         string vendor = XLib::getMonitorVendor();
  251.         string model  = XLib::getMonitorModel();
  252.         map<string,list> cdb = XLib::getMonitorCDB();
  253.         list selectedMonitor = setupMonitor ( cdb,vendor,model );
  254.         y2milestone("X11: setup monitor <%1>",selectedMonitor);
  255.         XLib::setMonitorCDB ( (list<string>)selectedMonitor );
  256.     }
  257.     if (chosenID == "sax-resolution") {
  258.         y2milestone("X11: setup resolution...");
  259.         string selectedRes = setupResolutions (
  260.             XLib::getAvailableResolutionNames(),
  261.             XLib::getActiveResolutionString()
  262.         );
  263.         y2milestone("X11: setup resolution <%1>",selectedRes);
  264.         XLib::setResolution ( selectedRes );
  265.     }
  266.     if (chosenID == "sax-displaysize") {
  267.         y2milestone("X11: setup displaysize...");
  268.         list<string> currentSize = XLib::getDisplaySize();
  269.         list<string> selectedSize = setupDisplaySize (
  270.             currentSize[0]:"15",
  271.             currentSize[1]:"4" + "/" + currentSize[2]:"3"
  272.         );
  273.         y2milestone("X11: setup displaysize <%1>",selectedSize);
  274.         XLib::setDisplaySize ( selectedSize );
  275.     }
  276.     if (chosenID == "sax-colors") {
  277.         y2milestone("X11: setup color depth...");
  278.         string depth = XLib::getActiveColorDepth();
  279.         string colstr = "256 [ 8 bit ]";
  280.         if (depth == "15") {
  281.             colstr = "32768 [ 15 bit ]";
  282.         }
  283.         if (depth == "16") {
  284.             colstr = "65536 [ 16 bit ]";
  285.         }
  286.         if (depth == "24") {
  287.             colstr = "16.7 Mio. [ 24 Bit ]";
  288.         }
  289.         string selectedColor = setupColors ( colstr );
  290.         y2milestone("X11: setup color depth <%1>",selectedColor);
  291.         XLib::setDefaultColorDepth ( selectedColor );
  292.     }
  293.     if (chosenID == "sax-3d") {
  294.         y2milestone("X11: setup 3D...");
  295.         boolean has3D = XLib::hasOpenGLFeatures();
  296.         y2milestone("X11: setup 3D <%1>",has3D);
  297.         if (! has3D) {
  298.             XLib::activate3D();
  299.         } else {
  300.             XLib::deactivate3D();
  301.         }
  302.     }
  303.     if (chosenID == "sax-ext-vga") {
  304.         y2milestone("X11: setup external VGA...");
  305.         boolean extVGAactive = XLib::isExternalVGAactive();
  306.         y2milestone("X11: setup external VGA <%1>",extVGAactive);
  307.         if (! extVGAactive) {
  308.             XLib::activateExternalVGA();
  309.         } else {
  310.             XLib::deactivateExternalVGA();
  311.         }
  312.     }
  313.     if (chosenID == "sax-test") {
  314.         y2milestone("X11: running a test server now...");
  315.         boolean testStatus = XLib::testConfiguration();
  316.         y2milestone("X11: test run returns <%1>",testStatus);
  317.         y2milestone("X11: refer to /var/log/Xorg.99.log for details");
  318.     }
  319.     if (chosenID == "x11_conf") {
  320.         infoPopup();
  321.     }
  322. }
  323. //===================================================
  324. // Handle proposal description...
  325. //---------------------------------------------------
  326. else if ( func == "Description" ) {
  327.     ret = $[
  328.         "rich_text_title" : XMessages::proposalTitle,
  329.         "menu_title"      : XMessages::proposalMenuTitle,
  330.         "id"              : "x11_conf"
  331.     ];
  332. }
  333. //===================================================
  334. // writing configuration
  335. //---------------------------------------------------
  336. else if ( func == "Write" ) {
  337.     boolean success = XLib::writeConfiguration();
  338.     ret = $[ "success" : success ];
  339. }
  340. return ret;
  341. }
  342.