home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 November / Pcwk1197.iso / LOTUS / Eng-ins / ACROREAD / SUITE / DW09_S7.LSS < prev    next >
Text File  |  1996-07-10  |  12KB  |  296 lines

  1. '//-------------------------------------------
  2. '//  Script that shows how to add pages to a presentation
  3. '//  based on a bulleted list.
  4. '//---------------------------------------
  5.  
  6. ' This script, CreatePagesFromAgenda, turns  
  7. ' information in a table into agenda or 
  8. ' "to do" pages, with the name of the person responsible
  9. ' for each task and the task as the title of a page, and
  10. ' the due date in the upper right corner of the page.
  11. ' Each page has a bulleted list to be filled in by the
  12. ' person responsible for the task.  It is followed by a
  13. ' script called Main, that allows you to call
  14. ' CreatePagesFromAgenda from an icon or from
  15. ' the menu by choosing Edit - Script - Run.
  16. ' Alternatively, you could attach the script to an event
  17. ' and avoid using the sub Main.
  18. ' CreatePagesFromAgenda is designed to work with a
  19. ' three-column table containing the following information:
  20. ' The first column contains the date that the task
  21. ' is to be completed; the second column contains the task;
  22. ' and the third column contains the name of the person
  23. ' responsible for completing the task.  This script is set
  24. ' up to accommodate as many as 40 tasks. You can
  25. ' adjust that number to suit your needs. Also, you can
  26. ' have more columns containing additional information. If
  27. ' you do, you will have to adjust the script as necessary.
  28. ' Declare global constants.  These constants are text
  29. ' strings as well as numerical values.  In the case of the
  30. ' numerical values, these constants are contained in
  31. ' the file LSCONST.LSS.  You can use an Include 
  32. ' statement to include LSCONST.LSS and avoid having to
  33. ' declare these constants.  However, in the interests of
  34. ' completeness, the constants are explicitly  
  35. ' declared in this script.
  36. Const CreateAgendaPagesMessage  = "A page will " + _ 
  37. "be created for each agenda item you " + _
  38. "entered in the table. Press OK to continue."
  39. Const CreateAgendaPagesTitle  = "Create Agenda Pages"
  40. Const ColumnError1  = "Agenda pages can't be " + _
  41. "created because the columns in the table " + _ 
  42. "have been modified."
  43. Const ColumnError2  = "The table must have " + _
  44. "three columns."
  45. Const EmptyTable = "One or more cells are" + _
  46. "empty.  If you continue, the results may " + _
  47. "not be what you expect.  " +_
  48. "Click Yes to continue or No to quit." 
  49. Const NoTable = "There is no table on this page. "+ _
  50. "The script cannot run."
  51. Const NoTitle = "There is no title for the " + _
  52. "table column. This script will not run without one."
  53. Const ErrorMsg  = "Error"
  54. ' Use this constant to identify 
  55. ' which SmartMaster template you want.
  56. Const TemplateIndex  = 2
  57. ' IDOK stands for OK button clicked.
  58. Const IDOK = 1 
  59. ' IDNO stands for no button clicked.
  60. Const IDNO = 7 
  61. ' MB_OK stands for a message box with only an OK button.
  62. Const MB_OK = 0 
  63. ' MB_OKCANCEL stands for a message box 
  64. ' with OK and Cancel buttons.
  65. Const MB_OKCANCEL = 1 
  66. ' MB_YESNO stands for a message box 
  67. ' with Yes and No buttons.
  68. Const MB_YESNO = 4   
  69. ' MB_ICONSTOP stands for a message box 
  70. ' with a "Stop!" icon in it.
  71. Const MB_ICONSTOP = 16 
  72. ' MB_DEFBUTTON2 stands for a message box with
  73. ' the No button as the selected button when the Yes/No
  74. ' message box opens.
  75. Const MB_DEFBUTTON2 = 256 
  76.  
  77. Sub CreatePagesFromAgenda()
  78. ' Declare the variables that you need for this script.
  79.     Dim AgendaTableObj  As Table
  80.     Dim Cell As TextBlock
  81.     Dim TitleTextBlk As TextBlock
  82.     Dim DateTextBlk As DrawObject
  83.     Dim TitlePB As PlacementBlock
  84.     Dim AgendaText(2 To 16, 1 To 8)  As String
  85.     Dim PageTitle As String
  86.     Dim ColumnMessage As String
  87.     Dim Row As Integer
  88.     Dim Col  As Integer
  89.     Dim NumRows As Integer
  90.     Dim NumCols As Integer
  91.     Dim NumChars As Integer
  92.     Dim RetVal As Integer
  93.     Dim MaxRows As Integer
  94.     Dim TableXists  As Integer
  95.     Dim IsCellEmpty As Integer
  96.     Dim NoColumnTitle As Integer
  97. ' Put up message box that explains to user what
  98. ' this script does and ask if the user wants to
  99. ' let the script run to completion, also initialize
  100. ' the variable, RetVal, to the return 
  101. ' value of Messagebox.
  102.     RetVal = Messagebox(CreateAgendaPagesMessage, _
  103.     MB_OKCANCEL, CreateAgendaPagesTitle)
  104. ' Deselect all selected items on the current page.
  105.     Selection.ClearSelection
  106. ' Initialize variable.
  107.     TableXists = 0
  108. ' Check to see if user clicked OK in message box.
  109. ' If OK was clicked, then begin.
  110.     If(RetVal = IDOK) Then
  111.    ' Check to see that there is a table on the
  112.    ' page. If found set flag, TableXists.
  113.         Forall Obj In CurrentPage.Objects
  114.             If (Obj.IsTable) Then
  115.          ' Assign the table to the 
  116.          ' variable AgendaTableObj.
  117.                 Set AgendaTableObj = Obj
  118.                 TableXists = 1
  119.             End If
  120.         End Forall
  121.    ' If no table was found then, notify user and
  122.    ' exit script.
  123.         If (TableXists = 0)  Then
  124.             Messagebox NoTable, MB_OK, ErrorMsg
  125.             Exit Sub
  126.         End If
  127.    ' Initialize NumCols to the number of columns
  128.    ' in the table.
  129.         NumCols = AgendaTableObj.ColCount
  130.    ' Check to see if user added/deleted columns,
  131.    ' because addition or deletion will result in
  132.    ' unpredictable results. If number of columns
  133.    ' was changed, then open message box
  134.    ' informing user of unpredictable results.  
  135.         If(NumCols <> 3) Then
  136.       ' Assemble message with line break spacing.
  137.             ColumnMessage = ColumnError1 + Chr$(10) + _
  138.             Chr$(10) + ColumnError2
  139.       ' Open message box with the message you just
  140.       ' assembled.
  141.             Messagebox ColumnMessage, MB_OK, ErrorMsg
  142.         Else
  143.       ' If number of columns is correct, begin
  144.       ' processing. Determine number of rows in 
  145.       ' table and initialize MaxRows to it.
  146.             NumRows = 1
  147.             MaxRows = AgendaTableObj.RowCount
  148.       ' Set variable Cell to the first cell, that is,
  149.       ' the table column title cell.
  150.             Set Cell = AgendaTableObj.GetCell(NumRows, 1)
  151.       ' Check that column title is filled in.
  152.       ' Note, you could look for specific text
  153.       ' at this point rather than simply check that
  154.       ' the cell is not empty.
  155.             If (Strcompare(Cell.Text, "")  = 0 ) Then
  156.          ' Open message box explaining that
  157.          ' script will not run without a column
  158.          ' title. Initialize NoColumnTitle to the return
  159.          ' value of the message box, that is, when
  160.          ' user clicks the OK button, Messagebox 
  161.          ' returns a value of one. 
  162.          ' When user clicks the OK button, exit script.
  163.                 NoColumnTitle = Messagebox(NoTitle, MB_OK + _
  164.                 MB_ICONSTOP, ErrorMsg)
  165.                 If (NoColumnTitle = IDOK) Then
  166.                     Exit Sub
  167.                 End If
  168.             End If
  169.       ' As long as the table cell is not empty and 
  170.       ' the variable NumRows does not exceed the 
  171.       ' number of actual rows in the table, begin
  172.       ' processing the table cells to check that they
  173.       ' all contain text.
  174.             While((Not Strcompare(Cell.Text, " ")) And _
  175.             (NumRows < MaxRows))
  176.          ' Increment the row count, so that you begin
  177.          ' processing text with the second row 
  178.          ' (the first row contains column titles).
  179.                 NumRows = NumRows + 1
  180.                 Set Cell = AgendaTableObj.GetCell(NumRows, 1)
  181.          ' Check to see if a cell is empty.  If it is
  182.          ' empty, open a message box, then exit sub.
  183.          ' The logic here is similar to that of the
  184.          ' previous message box code.
  185.                 If (Strcompare(Cell.Text, "")  = 0 ) Then
  186.                     IsCellEmpty = Messagebox _
  187.                     (EmptyTable, MB_YESNO+MB_ICONSTOP+ _
  188.                     MB_DEFBUTTON2, ErrorMsg)
  189.                     If (IsCellEmpty = IDNO) Then
  190.                         Exit Sub
  191.                     End If
  192.                 End If
  193.             Wend
  194.       ' Cycle through the rows of the table and put text
  195.       ' into a string array.
  196.             For Row = 2 To NumRows
  197.                 
  198.          ' Get cell text and put it in variable Cell.
  199.                 Set Cell = AgendaTableObj.GetCell(Row, 1)
  200.          ' Check that cell does not contain only spaces.
  201.          ' If it does, then skip it: this will result
  202.          ' in blank entries.
  203.                 If(Not Strcompare(Cell.Text, " ")) Then
  204.             ' Cycle through the columns in each row
  205.             ' and put contents in array AgendaText.
  206.             ' Note, AgendaText has been declared
  207.             ' as an array containing 120 elements. 
  208.             ' That means it can process a table with
  209.             ' forty rows--for a larger table, adjust 
  210.             ' the bounds of the array or use a 
  211.             ' dynamic array.
  212.                     For Col = 1 To AgendaTableObj.ColCount
  213.                         Set Cell = AgendaTableObj.GetCell(Row, Col)
  214.                         AgendaText(Row, Col) = Cell.Text
  215.                     Next Col
  216.                 End If
  217.             Next Row
  218.       ' For each row concatenate the text from columns 
  219.       ' two and three. Put the concatenated text 
  220.       ' into the title placement block on the new page.
  221.             For Row = 2 To NumRows
  222.          ' Initialize the variable PageTitle.
  223.                 PageTitle = ""
  224.          ' Cycle through columns two and three 
  225.          ' of the current row.
  226.                 For Col = 2 To NumCols
  227.             ' If at last column (column three),
  228.             ' add text of column three to
  229.             ' the variable PageTitle (that is, add it to
  230.             ' the text from column two) or else
  231.             ' take text from column two and put it in
  232.             ' variable PageTitle.
  233.                     If(Col = NumCols) Then
  234.                         PageTitle = PageTitle + AgendaText(Row, _
  235.                         Col)
  236.                     Else
  237.                         PageTitle = PageTitle + AgendaText(Row, _
  238.                         Col) + ", "
  239.                     End If
  240.                 Next Col
  241.          ' Create a new page for each row in the table 
  242.          ' using the bulleted list SmartMaster look 
  243.          ' and use the contents of the variable 
  244.          ' PageTitle for the page name.
  245.                 CurrentDocument.CreatePage PageTitle, 2 
  246.          ' Make a dummy text block set variable
  247.          ' TitleTextBlk to it.
  248.                 Set TitleTextBlk = CurrentPage.CreateText(1000, _
  249.                 1000, 1000, 1000)
  250.          ' Put the concatenated text from columns
  251.          ' two and three into dummy text block.
  252.          ' Note, it is easier to manipulate text that is
  253.          ' text blocks than it is to manipulate text 
  254.          ' strings. Therefore, this script uses 
  255.          ' text blocks to manipulate text.
  256.                 TitleTextBlk.Text = PageTitle
  257.          ' Search current page to find the "Click here..."
  258.          ' block (placement block) amd assign it to the
  259.          ' variable TitlePB.
  260.                 Forall Obj In CurrentPage.Objects 
  261.                     If (Obj.PlacementBlock.PromptText = _
  262.                     "Click here to type page title") Then
  263.                         Set TitlePB  = Obj
  264.                     End If
  265.                 End  Forall
  266.          ' Insert text from dummy text block into 
  267.          ' the "Click here..." placement block.
  268.                 TitlePB.Insert TitleTextBlk
  269.          ' Deselect the selected items on the page.
  270.                 Selection.ClearSelection
  271.          ' Create a text block in the upper right 
  272.          ' corner of the page where the due date, 
  273.          ' from column one, will be inserted. Set 
  274.          ' the variable DateTextBlk as the handle 
  275.          ' to the text block. 
  276.                 Set DateTextBlk = _
  277.                 CurrentPage.CreateText(12000,10500,1000,1000)
  278.          ' Insert text from column one into the
  279.          ' due date text block.
  280.                 DateTextBlk.TextBlock.Text = "Due: " + _
  281.                 AgendaText(Row, 1)
  282.          ' Deselect the text block.
  283.                 Selection.ClearSelection
  284.             Next Row
  285.         End If
  286.     End If
  287. End Sub
  288. ' The following sub, Sub Main, makes it possible for 
  289. ' you to run the CreatePagesFromAgenda sub when you 
  290. ' choose Edit - Script - Run, or to run the 
  291. ' script from an icon; in both cases Freelance Graphics
  292. ' looks for a sub named Main to execute.
  293. Sub Main
  294.     CreatePagesFromAgenda
  295. End Sub
  296.