home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / VIEWER.JFM < prev    next >
Text File  |  1996-12-11  |  17KB  |  621 lines

  1. /****************************************************************************\
  2. *                                                                            *
  3. * Viewer.jfm  --  TMD message viewer                                         *    
  4. *                                                                            *
  5. *                                                                            *
  6. * Updated 9/19/96 by IntraBuilder Publications Group                         *
  7. * $Revision:   1.0  $                                                       *
  8. *                                                                            *
  9. * Copyright (c) 1996, Borland International, Inc. All rights reserved.       *
  10. *                                                                            *
  11. \****************************************************************************/
  12. // {End Header} Do not remove this comment//
  13. // Generated on 09/19/96
  14. //
  15. var f = new viewerForm();
  16. f.open();
  17. class viewerForm extends tmdbaseCForm from "TMDBASE.JCF" {
  18.    _sys.scripts.load("SELECT.CC")
  19.    with (this) {
  20.       height = 20;
  21.       left = 36;
  22.       top = 0;
  23.       width = 86.1667;
  24.       title = "TMD Viewer";
  25.       onServerSubmit = class::Form_onServerSubmit;
  26.       onServerLoad = class::Form_onServerLoad;
  27.    }
  28.  
  29.  
  30.    with (this.sections1 = new Query()){
  31.       left = 76;
  32.       top = 4;
  33.       sql = 'SELECT * FROM "sections.db"';
  34.       active = true;
  35.    }
  36.  
  37.  
  38.    with (this.sections1.rowset) {
  39.  
  40.    }
  41.  
  42.  
  43.    with (this.messages1 = new Query()){
  44.       left = 76;
  45.       top = 0;
  46.       sql = 'SELECT * FROM "messages.db"';
  47.       active = true;
  48.    }
  49.  
  50.  
  51.    with (this.messages1.rowset) {
  52.       fields["From"].beforeGetValue = class::messages1_from_beforeGetValue
  53.       fields["Section"].canChange = class::messages1_section_canChange
  54.       fields["Section"].beforeGetValue = class::messages1_section_beforeGetValue
  55.  
  56.       autoEdit = false;
  57.       indexName = "Thread";
  58.       canAppend = class::messages1_canAppend;
  59.       canSave = class::messages1_canSave;
  60.       onAbandon = class::browse;
  61.       onAppend = class::messages1_onAppend;
  62.       onEdit = class::messages1_onEdit;
  63.       onNavigate = class::messages1_onNavigate;
  64.       onSave = class::browse;
  65.    }
  66.  
  67.  
  68.    with (this.users1 = new Query()){
  69.       left = 76;
  70.       top = 2;
  71.       sql = 'SELECT * FROM "users.db"';
  72.       active = true;
  73.    }
  74.  
  75.  
  76.    with (this.users1.rowset) {
  77.  
  78.    }
  79.  
  80.  
  81.    with (this.button1 = new Button(this)){
  82.       left = 16;
  83.       width = 14;
  84.       text = "Prev";
  85.       onServerClick = {;if (!form.rowset.next(-1)) form.rowset.next();};
  86.    }
  87.  
  88.  
  89.    with (this.button2 = new Button(this)){
  90.       left = 30;
  91.       width = 14;
  92.       text = "Next";
  93.       onServerClick = {;if (!form.rowset.next()) form.rowset.next(-1);};
  94.    }
  95.  
  96.  
  97.    with (this.newButton = new Button(this)){
  98.       left = 44;
  99.       width = 14;
  100.       text = "New";
  101.       onServerClick = class::newButton_onServerClick;
  102.    }
  103.  
  104.  
  105.    with (this.saveButton = new Button(this)){
  106.       left = 18;
  107.       width = 14;
  108.       text = "Save";
  109.       pageno = 2;
  110.       onServerClick = class::saveButton_onServerClick;
  111.    }
  112.  
  113.  
  114.    with (this.button5 = new Button(this)){
  115.       left = 32;
  116.       width = 14;
  117.       text = "Abandon";
  118.       pageno = 2;
  119.       onServerClick = {;form.rowset.abandon()};
  120.    }
  121.  
  122.  
  123.    with (this.parentButton = new Button(this)){
  124.       left = 30;
  125.       top = 2;
  126.       width = 14;
  127.       text = "Go to parent";
  128.       onServerClick = class::parentButton_onServerClick;
  129.    }
  130.  
  131.  
  132.    with (this.HTML1 = new HTML(this)){
  133.       height = 1;
  134.       top = 4;
  135.       width = 15;
  136.       color = "black";
  137.       fontBold = false;
  138.       text = "Message #";
  139.       pageno = 0;
  140.    }
  141.  
  142.  
  143.    with (this.text1 = new Text(this)){
  144.       left = 16;
  145.       top = 4;
  146.       width = 9;
  147.       dataLink = parent.messages1.rowset.fields["Message #"];
  148.       template = "999999";
  149.       pageno = 0;
  150.    }
  151.  
  152.  
  153.    with (this.HTML2 = new HTML(this)){
  154.       height = 1;
  155.       top = 5;
  156.       width = 15;
  157.       color = "black";
  158.       fontBold = false;
  159.       text = "From";
  160.       pageno = 0;
  161.    }
  162.  
  163.  
  164.    with (this.text2 = new Text(this)){
  165.       left = 16;
  166.       top = 5;
  167.       width = 40;
  168.       dataLink = parent.messages1.rowset.fields["From"];
  169.       template = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  170.    }
  171.  
  172.  
  173.    with (this.HTML3 = new HTML(this)){
  174.       height = 1;
  175.       top = 6;
  176.       width = 15;
  177.       color = "black";
  178.       fontBold = false;
  179.       text = "To";
  180.       pageno = 0;
  181.    }
  182.  
  183.  
  184.    with (this.text3 = new Text(this)){
  185.       left = 16;
  186.       top = 6;
  187.       width = 40;
  188.       dataLink = parent.messages1.rowset.fields["To"];
  189.       pageno = 0;
  190.    }
  191.  
  192.  
  193.    with (this.HTML4 = new HTML(this)){
  194.       height = 1;
  195.       top = 7;
  196.       width = 15;
  197.       color = "black";
  198.       fontBold = false;
  199.       text = "Subject";
  200.       pageno = 0;
  201.    }
  202.  
  203.  
  204.    with (this.text4 = new Text(this)){
  205.       left = 16;
  206.       top = 7;
  207.       width = 40;
  208.       dataLink = parent.messages1.rowset.fields["Subject"];
  209.       pageno = 0;
  210.    }
  211.  
  212.  
  213.    with (this.textArea1 = new TextArea(this)){
  214.       height = 8;
  215.       top = 8;
  216.       width = 80;
  217.       dataLink = parent.messages1.rowset.fields["Body"];
  218.       pageno = 0;
  219.       readOnly = false;
  220.    }
  221.  
  222.  
  223.    with (this.replyToLabel = new HTML(this)){
  224.       height = 1;
  225.       left = 58;
  226.       top = 7;
  227.       width = 15;
  228.       color = "black";
  229.       fontBold = false;
  230.       text = "Reply to";
  231.    }
  232.  
  233.  
  234.    with (this.editLabel = new HTML(this)){
  235.       height = 1;
  236.       width = 10;
  237.       color = "black";
  238.       text = "Editing";
  239.       pageno = 2;
  240.    }
  241.  
  242.  
  243.    with (this.browseLabel = new HTML(this)){
  244.       height = 1.2353;
  245.       width = 10;
  246.       color = "black";
  247.       text = "Browsing";
  248.    }
  249.  
  250.  
  251.    with (this.statusLabel = new HTML(this)){
  252.       height = 1.2353;
  253.       top = 2;
  254.       width = 56;
  255.       visible = false;
  256.       color = "black";
  257.       text = "HTML1";
  258.       pageno = 2;
  259.    }
  260.  
  261.  
  262.    with (this.replyButton = new Button(this)){
  263.       left = 58;
  264.       width = 14;
  265.       text = "Reply";
  266.       onServerClick = class::replyButton_onServerClick;
  267.    }
  268.  
  269.  
  270.    with (this.numRepliesLabel = new HTML(this)){
  271.       height = 1.2353;
  272.       top = 16;
  273.       width = 10;
  274.       color = "black";
  275.       fontBold = false;
  276.       text = "HTML1";
  277.    }
  278.  
  279.  
  280.    with (this.dateLabel = new HTML(this)){
  281.       height = 1.2353;
  282.       left = 58;
  283.       top = 4;
  284.       width = 19;
  285.       color = "black";
  286.       fontBold = false;
  287.       text = "HTML1";
  288.    }
  289.  
  290.  
  291.    with (this.userLabel = new HTML(this)){
  292.       height = 1;
  293.       left = 16;
  294.       top = 5;
  295.       width = 33;
  296.       color = "black";
  297.       text = "HTML1";
  298.       pageno = 2;
  299.    }
  300.  
  301.  
  302.    with (this.composeLabel = new HTML(this)){
  303.       height = 1;
  304.       top = 1;
  305.       width = 10;
  306.       color = "black";
  307.       text = "Reply";
  308.       pageno = 2;
  309.    }
  310.  
  311.  
  312.    with (this.resumeButton = new Button(this)){
  313.       visible = false;
  314.       left = 44;
  315.       top = 2;
  316.       width = 14;
  317.       text = "Resume";
  318.       onServerClick = class::resumeButton_onServerClick;
  319.    }
  320.  
  321.  
  322.    with (this.html1 = new HTML(this)){
  323.       height = 1;
  324.       left = 26;
  325.       top = 4;
  326.       width = 8;
  327.       color = "black";
  328.       text = "Section";
  329.       pageno = 0;
  330.    }
  331.  
  332.  
  333.    with (this.sectionSelect = new FieldSelect(this)){
  334.       left = 34;
  335.       top = 4;
  336.       width = 20;
  337.       dataLink = parent.messages1.rowset.fields["Section"];
  338.       pageno = 0;
  339.    }
  340.  
  341.  
  342.    with (this.hiddenAction = new Hidden(this)){
  343.       left = 70;
  344.       top = 16;
  345.       value = "";
  346.       pageno = 0;
  347.    }
  348.  
  349.  
  350.    with (this.hiddenMsg = new Hidden(this)){
  351.       left = 76;
  352.       top = 16;
  353.       value = "";
  354.       pageno = 0;
  355.    }
  356.  
  357.    this.rowset = this.messages1.rowset;
  358.  
  359.    function messages1_onEdit()
  360.    {
  361.      this.parent.parent.pageno = 2;  // Display the editing page
  362.    }
  363.  
  364.    function browse()
  365.    {
  366.      this.parent.parent.statusLabel.visible = false;
  367.      this.parent.parent.pageno = 1;  // Display the browsing page
  368.    }
  369.  
  370.    function messages1_canSave()
  371.    {
  372.      var lRet = true;   // Logical return value defaults to true; assume everything is OK
  373.      var cErrors = "";  // Text to contain errors
  374.      if ( this.fields[ "From" ].value == null ) {
  375.        lRet = false;
  376.        cErrors += "- <B>From</B> field cannot be blank<BR>";
  377.      }
  378.      if ( this.fields[ "To" ].value == null ) {
  379.        lRet = false;
  380.        cErrors += "- <B>To</B> field cannot be blank<BR>";
  381.      }
  382.      if ( this.fields[ "Subject" ].value == null ) {
  383.        lRet = false;
  384.        cErrors += "- <B>Subject</B> field cannot be blank<BR>";
  385.      }
  386.      if ( !lRet ) {  // If there are problems set the error message
  387.        this.parent.parent.statusLabel.text = "The data cannot be saved because<BR>" + cErrors;
  388.      }
  389.      this.parent.parent.statusLabel.visible = !lRet;  // and display it
  390.      return lRet;    // Return success or failure
  391.    }
  392.  
  393.    function replyButton_onServerClick()
  394.    {
  395.      var nReplyTo = this.form.rowset.fields[ "Message #"   ].value;
  396.      var cTo      = this.form.rowset.fields[ "From"        ].value;
  397.      var cSubject = this.form.rowset.fields[ "Subject"     ].value;
  398.      var nRoot    = this.form.rowset.fields[ "Thread root" ].value;
  399.      var cSection = this.form.rowset.fields[ "Section"     ].value;
  400.      this.form.rowset.beginAppend();
  401.      this.form.rowset.fields[ "Reply to"    ].value = nReplyTo;
  402.      this.form.rowset.fields[ "To"          ].value = cTo;
  403.      this.form.rowset.fields[ "Subject"     ].value = cSubject;
  404.      this.form.rowset.fields[ "Thread root" ].value = nRoot;
  405.      this.form.rowset.fields[ "Section"     ].value = cSection;
  406.      this.form.compose( "Reply" );
  407.    }
  408.  
  409.    function messages1_onAppend()
  410.    {
  411.      this.fields[ "From"         ].value = this.parent.parent.userID;
  412.      this.fields[ "# of replies" ].value = 0;
  413.      this.modified = false;
  414.      this.parent.parent.pageno = 2;  // Display the editing page
  415.    }
  416.  
  417.    function refreshUnlinked()
  418.    {
  419.      if ( this.rowset.endOfSet ) {
  420.        this.replyToLabel.visible = false;
  421.        this.numRepliesLabel.text = "";
  422.        this.dateLabel.text       = "";
  423.        this.parentButton.visible = false;
  424.      }
  425.      else {
  426.        if ( this.rowset.fields[ "Reply to" ].value > 0 ) {
  427.          this.replyToLabel.text    = "Reply to " + 
  428.                                      parseInt( this.rowset.fields[ "Reply to" ].value );
  429.          this.replyToLabel.visible = true;
  430.        }
  431.        else {
  432.          // Thread root message, not a reply
  433.          this.replyToLabel.visible = false;
  434.         }
  435.        this.numRepliesLabel.text = "Replies: " + 
  436.                                    parseInt( this.rowset.fields[ "# of replies" ].value );
  437.        this.dateLabel.text       = this.rowset.fields[ "Posted" ].value;
  438.        this.parentButton.visible = this.rowset.fields[ "Reply to" ].value > 0;
  439.      }
  440.    }
  441.  
  442.    function messages1_onNavigate()
  443.    {
  444.      this.parent.parent.refreshUnlinked();
  445.      this.parent.parent.updateHMN();
  446.    }
  447.  
  448.    function Form_onServerLoad()
  449.    {
  450.      try {
  451.        this.userRowset = VIEWER.arguments[ 0 ].rowset;
  452.        this.userQuery  = this.userRowset.parent;
  453.        this.userID     = this.userRowset.fields[ "User ID"   ].value;
  454.        this.userName   = this.userRowset.fields[ "User name" ].value;
  455.        this.HMN        = this.userRowset.fields[ "HMN"       ].value;
  456.      }
  457.      catch ( Exception e ) {
  458.        this.userID   = 0;                 // Eventually will not allow access
  459.        this.userName = "Unregistered" ;   // But for now allow unregistered user
  460.        this.HMN      = 0;
  461.      } 
  462.      // Set "From" name on compose page to user name, because it will never change
  463.      this.userLabel.text = this.userName;
  464.      this.applyHMN();
  465.      if ( VIEWER.arguments.length == 2 ) {
  466.        this.hiddenMsg.value = VIEWER.arguments[ 1 ];
  467.        this.gotoMessage();
  468.      }
  469.      this.refreshUnlinked();
  470.      this.sectionSelect.rowset = this.sections1.rowset;
  471.      this.sectionSelect.field  = "Name";
  472.    }
  473.  
  474.    function messages1_from_beforeGetValue()
  475.    {
  476.      if ( this.parent.parent.endOfSet ) {
  477.        // When navigating to end-of-set
  478.        return null;
  479.      }
  480.      else if ( this.value == null ) {
  481.        // For beginAppend()
  482.        return "";
  483.      }
  484.      else {
  485.        // Normal lookup, with value in case lookup fails
  486.        var r = this.parent.parent.parent.parent.users1.rowset;
  487.        return r.applyLocate( '"User ID" = ' + parseInt( this.value ) ) ? 
  488.               r.fields[ "User name" ].value : "Unregistered";
  489.      }
  490.    }
  491.  
  492.    function messages1_canAppend()
  493.    {
  494.      this.parent.parent.bookmark = this.bookmark();
  495.      return true;
  496.    }
  497.  
  498.    function saveButton_onServerClick()
  499.    {
  500.      if ( this.form.rowset.fields[ "Reply to" ].value > 0 &&  // If reply and 
  501.           this.form.textArea1.value != "" ) {                 // body of message changed
  502.        this.form.rowset.modified = true;                      // Force modified true
  503.      }
  504.      if ( this.form.rowset.modified ) {
  505.        if ( !this.form.rowset.save() ) {  // If changed row is invalid
  506.          return;                          // do no more to allow fixes or abandon
  507.        }
  508.        if ( this.form.rowset.fields[ "Reply to" ].value > 0 ) {
  509.          // Reply
  510.          this.form.rowset.goto( this.form.bookmark );        // Goto original
  511.          this.form.rowset.fields[ "# of replies" ].value++;  // Increment reply count
  512.          this.form.rowset.save();
  513.        }
  514.        else {
  515.          // New message
  516.          this.form.rowset.fields[ "Thread root" ].value =
  517.              this.form.rowset.fields[ "Message #" ].value;   // Set thread root
  518.          this.form.rowset.goto( this.form.bookmark );        // then goto original
  519.        }
  520.      }
  521.      else {                                                  // Nothing happened, so just
  522.        this.form.rowset.goto( this.form.bookmark );          // goto original
  523.      }
  524.      this.form.refreshUnlinked();
  525.      this.form.pageno = 1;
  526.    }
  527.  
  528.    function compose( cLabel )
  529.    {
  530.      this.composeLabel.text = cLabel;  // Set compose label to "Reply" or "New"
  531.      this.rowset.refreshControls();
  532.      this.rowset.modified = false;
  533.      this.pageno = 2;                  // Switch to editing page
  534.    }
  535.  
  536.    function newButton_onServerClick()
  537.    {
  538.      this.form.rowset.beginAppend();
  539.      this.form.rowset.fields[ "Section" ].value = this.form.sectionSelect.aOptions[ 0 ];
  540.      this.form.compose( "New" );
  541.    }
  542.  
  543.    function parentButton_onServerClick()
  544.    {
  545.      if ( !this.form.resumeButton.visible ) {
  546.        this.form.threadBookmark = this.form.rowset.bookmark();
  547.        this.form.resumeButton.visible = true;
  548.        this.form.rowset.clearFilter();
  549.      }
  550.      this.form.rowset.applyLocate( '"Message #" = ' + 
  551.          parseInt( this.form.rowset.fields[ "Reply to" ].value ) );
  552.    }
  553.  
  554.    function resumeButton_onServerClick()
  555.    {
  556.      this.form.applyHMN();
  557.      this.form.rowset.goto( this.form.threadBookmark );
  558.      this.visible = false;
  559.    }
  560.  
  561.    function messages1_section_beforeGetValue()
  562.    {
  563.      if ( this.parent.parent.endOfSet ) {
  564.        // When navigating to end-of-set
  565.        return null;
  566.      }
  567.      else if ( this.value == null ) {
  568.        // For beginAppend()
  569.        return "";
  570.      }
  571.      else {
  572.        // Normal lookup, with value in case lookup fails
  573.        var r = this.parent.parent.parent.parent.sections1.rowset;
  574.        return r.applyLocate( '"Section #" = ' + parseInt( this.value ) ) ?
  575.               r.fields[ "Name" ].value : "Closed section";
  576.      }
  577.    }
  578.  
  579.    function messages1_section_canChange( newValue )
  580.    {
  581.      var r = this.parent.parent.parent.parent.sections1.rowset;
  582.      if ( r.applyLocate( '"Name" = \'' + newValue +'\'' ) ) {
  583.        this.value = r.fields[ "Section #" ].value;
  584.      }
  585.      return false;
  586.    }
  587.  
  588.    function applyHMN()
  589.    {
  590.      this.rowset.filter = '"Message #" > ' + parseInt( this.HMN );
  591.    }
  592.  
  593.    function updateHMN()
  594.    {
  595.      if ( !this.rowset.endOfSet ) {
  596.        if ( this.userID != 0 ) { // Cannot update HMN for unregistered user
  597.          if ( this.rowset.fields[ "Message #" ].value > 
  598.            this.userRowset.fields[ "HMN" ].value ) {
  599.            this.userRowset.fields[ "HMN" ].value = this.rowset.fields[ "Message #" ].value;
  600.            this.userRowset.save();
  601.          }
  602.        }
  603.      }
  604.    }  
  605.  
  606.    function gotoMessage()
  607.    {
  608.      this.rowset.applyLocate( '"Message #" = ' + parseInt( this.hiddenMsg.value ) );
  609.    }
  610.  
  611.    function Form_onServerSubmit()
  612.    {
  613.      if ( this.pageno == 2 ) {
  614.        // Abandon edit if necessary
  615.        this.abandonButton.onServerClick();
  616.      }
  617.      this.gotoMessage();
  618.    }
  619.  
  620. }
  621.