home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / table.h < prev    next >
C/C++ Source or Header  |  1998-04-23  |  7KB  |  324 lines

  1. // -*- C++ -*-
  2. /* This file is part of
  3.  * ======================================================
  4.  * 
  5.  *           LyX, The Document Processor
  6.  *      
  7.  *      Copyright (C) 1995, 1996 Matthias Ettrich
  8.  *
  9.  *======================================================*/
  10. #ifndef _TABLE_H
  11. #define _TABLE_H
  12.  
  13. #ifdef __GNUG__
  14. #pragma interface
  15. #endif
  16.  
  17. #include <config.h>
  18. #include <stdio.h>
  19. #include "definitions.h"
  20. #include "lyxlex.h"
  21. #include "LString.h"
  22.  
  23. /* The features the text class offers for tables */ 
  24.  
  25. ///
  26. class LyXTable  {
  27. public:
  28.     // Are the values of these enums important? (Lgb)
  29.     enum {
  30.         APPEND_ROW = 0,
  31.         APPEND_COLUMN = 1,
  32.         DELETE_ROW = 2,
  33.         DELETE_COLUMN = 3,
  34.         TOGGLE_LINE_TOP = 4,
  35.         TOGGLE_LINE_BOTTOM = 5,
  36.         TOGGLE_LINE_LEFT = 6,
  37.         TOGGLE_LINE_RIGHT = 7,
  38.         ALIGN_LEFT = 8, // what are these alignment enums used for?
  39.         ALIGN_RIGHT = 9,
  40.         ALIGN_CENTER = 10,
  41.         DELETE_TABLE = 11,
  42.         MULTICOLUMN = 12,
  43.                 SET_ALL_LINES = 13,
  44.                 UNSET_ALL_LINES = 14,
  45.                 SET_LONGTABLE = 15,
  46.                 UNSET_LONGTABLE = 16,
  47.                 SET_PWIDTH = 17,
  48.                 APPEND_CONT_ROW = 18,
  49.                 SET_ROTATE_TABLE = 19,
  50.                 UNSET_ROTATE_TABLE = 20,
  51.                 SET_ROTATE_CELL = 21,
  52.                 UNSET_ROTATE_CELL = 22,
  53.                 SET_LINEBREAKS = 23,
  54.                 SET_LTHEAD = 24,
  55.                 SET_LTFIRSTHEAD = 25,
  56.                 SET_LTFOOT = 26,
  57.                 SET_LTLASTFOOT = 27,
  58.                 SET_LTNEWPAGE = 28
  59.     };
  60.  
  61.     enum {
  62.         CELL_NORMAL = 0,
  63.         CELL_BEGIN_OF_MULTICOLUMN = 1,
  64.         CELL_PART_OF_MULTICOLUMN = 2
  65.     };
  66.     /* konstruktor */
  67.     ///
  68.     LyXTable(int columns_arg, int rows_arg);
  69.     ///
  70.     LyXTable(LyXLex &lex);
  71.     ///
  72.     ~LyXTable();
  73.     ///
  74.     LyXTable* Clone();
  75.  
  76.     /// Returns true if there is a topline, returns false if not
  77.     bool TopLine(int cell);
  78.     /// Returns true if there is a topline, returns false if not
  79.     bool BottomLine(int cell);
  80.     /// Returns true if there is a topline, returns false if not
  81.     bool LeftLine(int cell);
  82.     /// Returns true if there is a topline, returns false if not
  83.     bool RightLine(int cell);
  84.  
  85.     ///
  86.     bool TopAlreadyDrawed(int cell);
  87.     ///
  88.     bool VeryLastRow(int cell);
  89.  
  90.     ///
  91.     int AdditionalHeight(int cell);
  92.     ///
  93.     int AdditionalWidth(int cell);
  94.    
  95.     /* returns the maximum over all rows */
  96.     ///
  97.     int WidthOfColumn(int cell);
  98.     ///
  99.     int WidthOfTable();
  100.    
  101.     /// Returns true if a complete update is necessary, otherwise false
  102.     bool SetWidthOfCell(int cell, int new_width);
  103.     /// Returns true if a complete update is necessary, otherwise false
  104.     bool SetAllLines(int cell, bool line);
  105.     /// Returns true if a complete update is necessary, otherwise false
  106.     bool SetTopLine(int cell, bool line);
  107.     /// Returns true if a complete update is necessary, otherwise false
  108.     bool SetBottomLine(int cell, bool line);
  109.     /// Returns true if a complete update is necessary, otherwise false
  110.     bool SetLeftLine(int cell, bool line);
  111.     /// Returns true if a complete update is necessary, otherwise false
  112.     bool SetRightLine(int cell, bool line);
  113.     /// Returns true if a complete update is necessary, otherwise false
  114.     bool SetAlignment(int cell, char align);
  115.         ///
  116.     bool SetPWidth(int cell, LString width);
  117.  
  118.     ///
  119.     char GetAlignment(int cell); // add approp. signedness
  120.         ///
  121.         LString GetPWidth(int cell);
  122.  
  123.     ///
  124.     int GetWidthOfCell(int cell);
  125.     ///
  126.     int GetBeginningOfTextInCell(int cell);
  127.  
  128.     ///
  129.     void AppendRow(int cell);
  130.     ///
  131.     void DeleteRow(int cell);
  132.  
  133.     ///
  134.     void AppendColumn(int cell);
  135.     ///
  136.     void DeleteColumn(int cell);
  137.  
  138.     ///
  139.     bool IsFirstCell(int cell);
  140.     ///
  141.     bool IsLastCell(int cell);
  142.  
  143.     ///
  144.     int GetNumberOfCells();
  145.     ///
  146.     int AppendCellAfterCell(int append_cell, int question_cell);
  147.     ///
  148.     int DeleteCellIfColumnIsDeleted(int cell, int delete_column_cell);
  149.     ///
  150.     int NumberOfCellsInRow(int cell);
  151.     ///
  152.     void Reinit();
  153.  
  154.     ///
  155.     void Init(int columns_arg, int rows_arg);
  156.  
  157.     ///
  158.     void Write(FILE* file);
  159.     ///
  160.     void Read(FILE* file);
  161.  
  162.     // cell <0 will tex the preamble
  163.     // returns the number of printed newlines
  164.     ///
  165.     int TexEndOfCell(LString& file, int cell);
  166.     ///
  167.     int RoffEndOfCell(FILE* file, int cell);
  168.  
  169.     ///
  170.     bool IsMultiColumn(int cell);
  171.     ///
  172.     void SetMultiColumn(int cell, int number);
  173.     ///
  174.     int UnsetMultiColumn(int cell); // returns number of new cells
  175.         ///
  176.     int row_of_cell(int cell);
  177.     ///
  178.     int column_of_cell(int cell);
  179.     ///
  180.     int rows;
  181.     ///
  182.     int columns;
  183.     ///
  184.     void SetLongTable(int what);
  185.     ///
  186.     bool IsLongTable();
  187.     ///
  188.     void SetRotateTable(int what);
  189.     ///
  190.     bool RotateTable();
  191.     ///
  192.     void SetRotateCell(int cell, int what);
  193.     ///
  194.     bool RotateCell(int cell);
  195.     ///
  196.         bool NeedRotating();
  197.         ///
  198.         void AppendContRow(int cell);
  199.         ///
  200.         bool IsContRow(int cell);
  201.         /// returns the number of the cell which continues
  202.         /// or -1 if no ContRow
  203.         int CellHasContRow(int cell);
  204.         ///
  205.         bool RowHasContRow(int cell);
  206.         ///
  207.         int FirstVirtualCell(int cell);
  208.         ///
  209.         bool ShouldBeVeryLastCell(int cell);
  210.         ///
  211.         bool ShouldBeVeryLastRow(int cell);
  212.         ///
  213.         int GetCellAbove(int cell);
  214.     ///
  215.         void SetLinebreaks(int cell, bool what);
  216.     ///
  217.         bool Linebreaks(int cell);
  218.         ///
  219.         /// Long Table Options
  220.         ///
  221.         void SetLTHead(int cell, bool first);
  222.         ///
  223.         bool RowOfLTHead(int cell);
  224.     ///
  225.         bool RowOfLTFirstHead(int cell);
  226.     ///
  227.         void SetLTFoot(int cell, bool last);
  228.     ///
  229.         bool RowOfLTFoot(int cell);
  230.     ///
  231.         bool RowOfLTLastFoot(int cell);
  232.     ///
  233.         void SetLTNewPage(int cell, bool what);
  234.     ///
  235.         bool LTNewPage(int cell);
  236. private:
  237.     ///
  238.     struct cellstruct{
  239.         ///
  240.                 int cellno;
  241.                 ///
  242.         int width_of_cell;
  243.         ///
  244.         char  multicolumn; // add approp. signedness
  245.         ///
  246.         char alignment; // add approp. signedness
  247.         ///
  248.         bool top_line;
  249.         ///
  250.         bool bottom_line;
  251.                 ///
  252.                 bool has_cont_row;
  253.                 ///
  254.                 bool linebreaks;
  255.                 ///
  256.                 int rotate;
  257.     };
  258.         ///
  259.         struct rowstruct {
  260.                 bool top_line;
  261.                 bool bottom_line;
  262.                 bool is_cont_row;
  263.                 /// This are for longtables only
  264.                 bool newpage;
  265.         };
  266.         ///
  267.         struct columnstruct {
  268.                 char alignment; // add approp. signedness
  269.                 bool left_line;
  270.                 bool right_line;
  271.                 int  width_of_column;
  272.                 LString p_width;
  273.         };
  274.     ///
  275.     int numberofcells;
  276.     ///
  277.     int* rowofcell;
  278.     ///
  279.     int* columnofcell;
  280.     ///
  281.     void set_row_column_number_info();
  282.  
  283.     ///
  284.         rowstruct *row_info;
  285.         ///
  286.         columnstruct *column_info;
  287.         ///
  288.     cellstruct** cell_info;
  289.     ///
  290.     int width_of_table;
  291.         ///
  292.         /// for long tables
  293.         ///
  294.         int endhead; // row of endhead
  295.         int endfirsthead; // row of endfirsthead
  296.         int endfoot; // row of endfoot
  297.         int endlastfoot; // row of endlastfoot
  298.    
  299.     /// Returns true if a complete update is necessary, otherwise false
  300.     bool SetWidthOfMulticolCell(int cell, int new_width);
  301.     /// Returns true if change
  302.     bool calculate_width_of_column(int column);
  303.     ///
  304.     void calculate_width_of_table();
  305.  
  306.         ///
  307.     int right_column_of_cell(int cell);
  308.  
  309.     ///
  310.     cellstruct* cellinfo_of_cell(int cell);
  311.  
  312.     ///
  313.     void delete_column(int column);
  314.  
  315.     ///
  316.     int cells_in_multicolumn(int cell);
  317.     ///
  318.     int is_long_table;
  319.     ///
  320.     int rotate;
  321. };
  322.  
  323. #endif
  324.