Method for displaying editable characters in a divided table cell
A divided table cell is generated by selecting one cell in a table and creating a new cell to display over the selected cell. Both cells contain a constraint that define an area where that cell cannot display objects. Objects comprise alphanumeric characters, graphical symbols or any representation in a table cell. The cells are displayed over top of each other such that the display area of one cell coincides with the constraint area of the other cell. The display shows a divided cell capable of accepting and editing objects. The divided cell also retains the characteristics of other cells in the table. The object layout in a cell with a constraint utilizes test rectangles to calculate the height and width of the displayable area of the cell. An initial test rectangle is calculated using the full width of the cell and the height of the objects to be placed in it. The initial test rectangle is then modified by applying the constraint to the initial test rectangle and removing all the sections, preferably rectangular sections, of the initial test rectangle that intersect the constraint. The resulting objects that fit in the modified test rectangle are presented in the display.
Latest Microsoft Patents:
The field of the invention relates to the display of objects, particularly linguistic and other communicative symbols, in a table cell, and specifically, to display objects, capable of being edited, in a divided table cell.
BACKGROUND OF THE INVENTIONTables are used extensively in today's computing environment. The uses of tables include organizing topics under categories, creating financial reports, organizing employee records, as well as many other ways where it is desirable to manage or represent related data. Because of the many uses of tables, word processing, spreadsheet, database, and desktop publishing applications have all provided functional support for the use of tables.
As the use of tables proliferate, the demands for more sophisticated table support in the applications while making them easier to use has increased. Examples of these increased demands include simpler table creation and manipulation, the display of borders around the table and the individual cells within the table and providing calculation functions on the cells within the table. These increased demands are present for tables wherever they are found: in word processing, spreadsheet, database, and desktop publishing applications. Effective presentation of data is the goal.
One demand that has risen is to create a divided cell in a table. For example, diagonally divided cells are most commonly used in a table to block off specific cells of the table signifying that no entries may exist for that cell. However, other needs for divided cells also exist. These needs include incorporating objects in a divided cell. Objects comprise linguistic and other communicative symbols, including alphanumeric characters, graphic symbols, or any representation in a table cell.
To address this need, one existing implementation includes drawing a line to divide the cell diagonally in either direction (i.e., from the Northwest corner of the cell to the Southeast, or from the Northeast corner to the Southwest) as well as drawing an “X” over the cell. However, in this implementation, the drawing of the diagonal line renders the cell uneditable. This drawback also creates an inconsistency from a user interface standpoint. The cell with a diagonal drawing creates an inconsistency because it is an anomaly within the table. Unlike the other cells in the table, no data may be placed in the cell and it is uneditable.
Other implementations that attempt to get around this uneditability of a divided cell with a diagonal include creating a separate text object that floats above the diagonal cell on the display. However, in this implementation, the text object is distinct from the table structure providing unwanted side effects. For example, whenever the table cell is resized or the format of the cell is changed, a separate editing step is required to modify the “floated” text object so that it conforms with the rest of the table.
And yet another implementation includes restricting the text to a fixed-pitch grid and drawing lines through the breaks in the letters. However, this also requires multiple editing steps when parameters of the cell are changed. In addition, this solution does not work when the font in the text is one of the commonly used proportional spaced fonts.
Accordingly, there is a need in the art to generate a divided cell, which provides editing on both sides of the division and minimizes the steps required when editing objects in the cell and manipulating the parameters of the cell.
SUMMARY OF THE INVENTIONThe present invention meets the needs described above by providing a method for generating a divided cell and displaying objects in the divided cell in such a manner as to allow for efficient editing of the objects. Objects comprise alphanumeric characters, graphic symbols or any representation in a table cell. For purposes of discussion, however, the present invention is described in terms of characters in a cell, but will apply to any object that may be placed in a cell.
A divided cell is generated by creating a new cell and displaying the new cell on top of a cell in the display. Each cell contains constraints. Characters contained in each cell are laid out such that no character in each cell is displayed in an area defined by a constraint.
The divided cell is generated by first selecting a cell in the table. The divided cell will be displayed at this cell location. The method of selecting the cell can be any method recognized by the application, including navigating to the cell using a keyboard entry device or clicking on the cell with a mouse input device. After the cell is selected, a new cell is generated. The new cell is structurally and functionally similar to the existing cell. The new cell is created using whatever cell creation mechanism is supported by the table and the application.
After the new cell is created, constraints are developed for each of the cells. Characteristics of the constraints include: 1) the constraint for the cell prevents any of the characters contained in that cell from being displayed in the area defined by the constraint; and 2) the constraint area defined for one cell contains the displayable area for the other cell. After generating the constraints for both cells, any characters that are currently contained in both cells or that are entered into the cells are arranged such that they do not intersect any of the area defined by the constraints in the respective cells.
After the object layout is completed, the new cell is displayed over the existing cell along with a divider. The display now contains a divided cell, made up of two cells and a divider. Each cell in the divided cell will function like any other cell in the table. Each cell can be formatted, edited independently or collectively, in the same manner as any other cell in the table. This editing can be performed by selecting the side of the divided cell the user desires to edit. The user selects the desired side of the divided cell by either 1) clicking on the side of the divided cell the user wishes to edit or reformat using a mouse input device or 2) navigating to the desired side of the divided cell using arrow and/or tab keys on a keyboard input device.
The display address of the two cells that make up the divided cell is the same because it occupies the same location in the display. However, to distinguish between the two cells, additional parameters are stored with each cell to keep them distinct. These parameters include whether the cell is part of a divided cell, how the cell is divided, and which part of the division constitutes the displayable area for that cell.
When either of the cells that make up the divided cell is edited, the constraint is recalculated, if necessary. Then the cell that is edited reapplies the constraint and modifies the display based on the edited characters.
To perform the object layout in the cell with a constraint, a first test rectangle is defined. The test rectangle has a width that is the width of the cell and a height that is based on the height of the tallest character from the set of characters that fit within the width of the first test rectangle. The test rectangle represents a line in the cell that will contain characters. The constraint in the cell is then applied to the first test rectangle. The section of the first test rectangle that intersects the area of the cell constraint is removed. It is preferable that the removed section be rectangular. The removal of the section intersecting the constraint modifies the width of the first test rectangle. A second test rectangle is generated to reflect the width of the modified first test rectangle while using the height of the first test rectangle.
If a height based on the tallest character from the set of characters that fit within the width of the second test rectangle is less than the height of the first test rectangle, then the another set of test rectangles may be calculated to provide a more proportional match between the height space allocation in the cell with the height of the character set of that fits within the width of the test rectangle.
After determining the final height and width of a test rectangle, the characters that fit into the width of this test rectangle are displayed on a line of the cell within the area defined by the final test rectangle. The object layout procedure is reiterated for as many lines in the cell as necessary to display the characters until all the characters are displayed or the procedure runs out of display area. In the case where the procedure runs out of display area, characters that do not fit into the display area remain in an overflow buffer and are not visible in the diagonal cell.
It should be recognized that text in a table is not always drawn horizontally, left to right. For example, Chinese vertical text is drawn vertically right to left, and bidirectional Hebrew or Arabic text is drawn horizontally, sometimes left to right, sometimes right to left. While the description of the present invention focuses on objects displayed horizontally, it is also considered within the scope of the present invention to display objects that are not typically displayed horizontally, left to right (i.e., vertical Chinese text or bidirectional Hebrew or Arabic text). It is further considered within the scope to display objects in the diagonal cell using different display schemes, such as displaying horizontal text in one side of the diagonal cell and displaying vertical text in the other side.
In addition, those skilled in the art will also recognize that the vertical position of the first line space is an arbitrary decision. This decision can be made to suit the needs of table display features such as centering or bottoming the location of text in a cell, or “lefting” or “righting” vertical text in a cell.
BRIEF DESCRIPTION OF THE DRAWINGS
The present invention is directed toward a method for displaying editable characters in a divided table cell. In one embodiment, the invention may be incorporated into a desktop publishing application program, such as the application entitled “Publisher”, marketed by Microsoft Corporation of Redmond, Wash. Briefly described, the method of generating a divided table cell includes the user selecting a table cell to be divided. Next the user defines how to divide the table cell. A new cell is then created with display constraints. The constraints are developed based on how the table cell is divided. The constraints define in which area of the cell characters cannot be displayed. For example, in a diagonal cell, a constraint will be a triangular shape formed by two adjacent edges of the cell and the diagonal line that joins the two free ends of the adjacent edges. The initial cell and the new cell may have different constraints so that when they are displayed on top of each other, the characters located in each of the cells do not overwrite each other. The object layout is then performed by incorporating the constraint in each cell to display the characters in each cell such that they do not overlap the constraint.
The object layout in each cell is performed by first defining a test rectangle in the cell, the test rectangle defines a line of the cell to display characters. The width of the test rectangle is the full width of the cell, and the height of the test rectangle is based on the height of the tallest character that would be displayed in the test rectangle. A constraint is then applied to the test rectangle. The constraint defines an area where characters may not be displayed. Sections of the test rectangle that intersect the constraint are removed creating a new test rectangle. It is preferable that the removed sections be rectangular. If a height based on the tallest character from the set of characters that fit within the width of the new test rectangle is less than the height based on the tallest character from the set of characters that fit within the width of the initial text rectangle, another test rectangle may be calculated to modify the height of the new test rectangle. The characters that fit the final test rectangle are then displayed in the cell.
Exemplary Operating Environment
With reference to
A number of program modules may be stored in the drives and RAM 25, including an operating system 35, one or more application programs 36, other program modules 37, and program data 38. A user may enter commands and information into the personal computer 20 through a keyboard 40 and pointing device, such as a mouse 42. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 21 through a serial port interface 46 that is coupled to the system bus, but may be connected by other interfaces, such as a game port or a universal serial bus (USB). A monitor 47 or other type of display device is also connected to the system bus 23 via an interface, such as a video adapter 48. In addition to the monitor, personal computers typically include other peripheral output devices (not shown), such as speakers or printers.
The personal computer 20 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 49. The remote computer 49 may be a server, a router, a peer device or other common network node, and typically includes many or all of the elements described relative to the personal computer 20, although only a memory storage device 50 has been illustrated in
When used in a LAN networking environment, the personal computer 20 is connected to the LAN 51 through a network interface 53. When used in a WAN networking environment, the personal computer 20 typically includes a modem 54 or other means for establishing communications over the WAN 52, such as the Internet. The modem 54, which may be internal or external, is connected to the system bus 23 via the serial port interface 46. In a networked environment, program modules depicted relative to the personal computer 20, or portions thereof, may be stored in the remote memory storage device. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used.
Generally, the table contains an R×C number of cells. The “R” representing the number of rows in the table and the “C” representing the number of columns in the table. The table may also include title bars, legends, and other components (not shown) to help depict the information in the table. The table in
In the case of diagonal cells, the two cells that define the diagonal cell only have characters displayed in the unconstrained areas 410 for cell 8 and 420 for cell 9. Cell 8 has a triangular constraint 405 that prevents any characters contained in cell 8 from being displayed in the triangular constraint 405. Similarly, cell 9 has an opposing triangular constraint 415 that prevents any characters contained in cell 9 from being displayed in the triangular constraint 415.
Note that the characters contained in the cells that make up the diagonal cell are independent of each other. In one embodiment, any characters that are in cell 8 upon the creation of cell 9 remain in cell 8. The possibility exists, however, that when cell 9 is created, the characters that are in cell 8 are copied and displayed in cell 9 as well. Another alternative is to divide the original characters, e.g. those in cell 8, into two bodies, according to the presence of break characters, such as end-of-paragraph marks. This is a design choice left to those implementing the invention.
One skilled in the art will recognize that the triangular constraint need not extend from one corner of the cell to the other. The constraint can be defined as any portion of the cell. Furthermore, the constraints need not be triangular. A cell division that creates two rectangles versus a diagonal cell may be preferred. In such a case, the constraints would be designed to define two rectangular areas of the cell.
The method 500 then proceeds to step 515 where the diagonal direction is selected. In one embodiment, there are two diagonal directions in which to divide a cell. The diagonal may divides the cell from the Northwest corner to the Southeast corner of the cell or from the Northeast corner to the Southwest corner. Consequently, in step 515, the selection of which direction to make the diagonal is performed. Where the selection is performed by the user, it may be performed through the use of a dialogue box presented to the user. The user is given the option to select one of the two diagonals, and the user selects one through the use of a mouse input device or keyboard.
As stated above, it should be recognized that a cell may be divided in many ways. For example, different ways to divide a cell include vertically across the middle of the cell, horizontally across the middle of the cell or even a stair-step diagonal. Similarly, it should be recognized by one skilled in the art that several different forms may be simultaneously supported. Having several different divisions may necessitate additional selection criteria where the user is asked to select which division he or she wishes to apply in addition to the selection of the direction of the division (e.g., diagonal) as mentioned with respect to step 515.
After the diagonal direction has been selected, the method 500 continues by creating a new cell in step 520. The new cell is created using whatever routine the current application and table support in generating a new cell. In one embodiment, the new cell initially starts with the same formatting characteristics as the selected cell. However, once created, the new cell may be formatted independently of the selected cell or any other cell in the table. In addition, because the cell is a structure of the table and not a completely independent object, the new cell will respond to any executed table operations that can be performed on other cells in the table. These operations include resizing, reformatting, and editing.
The method 500 then proceeds to step 525 where a triangular constraint is generated for the new cell as well as the selected cell. In one embodiment, a triangular constraint is defined as an array of 3 points, each point corresponding to a vertex of the triangular constraint. Both cells receive a different array defining their respective triangular constraint. The selected cell receives an array of points defining a triangular constraint which defines the triangular area bounded by two adjacent sides and the selected diagonal direction. In the case where a Northwest/Southeast diagonal direction is selected, the array of points define a triangular area located in the lower left-hand portion of the cell (e.g., see triangular constraint 405 in
It will be recognized by those skilled in the art that there are many ways to define the shape of the constraint in a cell. Any number of points and/or functions may be used to generate any number of geometric shapes that can act as a constraint area.
The method 500 then continues to place characters in both cells incorporating their respective triangular constraints in step 530. Normally, without a constraint, characters are displayed in the cell using the full height and width of the cell. However, the constraint defines an area of the cell where characters cannot be displayed. Any characters that were in the cell prior to the application of the constraint are now rearranged to avoid the constraint.
Therefore, in step 530, after the triangular constraint is applied to the selected cell, the characters that existed in the selected cell are rearranged in the selected cell taking into account the triangular constraint defined for the selected cell. Similarly, any characters that are placed in the new cell are now arranged in the new cell taking into account the opposing triangular constraint.
Proceeding to step 535, the method 500 continues to display the new cell over the selected cell, along with a diagonal, creating the diagonal cell. What is presented on the display in the area previously occupied by just the selected cell, is information contained within two cells separated by a diagonal. The diagonal line may or may not be visible on the display. Each of the cells contains a constraint preventing the characters in one cell from using a portion of that cell, the constrained portion representing the displayable area of the other cell and the diagonal. In addition, the constraint for each cell also takes into account the varying border thickness that can be applied to the diagonal. When the cells are displayed on top of each other, none of the characters in either cell overlap.
Continuing to step 540, the method 500 continues by rearranging the selected cell or new cell when any of the characters are edited. Because the diagonal cell comprises two cells, the characters displayed in the diagonal cell are editable just as any other cell in the table. After any edits are performed, the characters in the cell being edited are again rearranged using the applicable constraint. For example, if the edits are performed on characters contained in the new cell, the edited characters will be rearranged in the new cell such that they do not overlap the opposing triangular constraint. This rearranging of characters can be performed by recalculating the constraint for each edit or by caching the constraint thereby not requiring a recalculation of the constraint every time the text is edited. Either way, the diagonal cell now depicts the rearranged characters.
Therefore, in one embodiment, when the upper right-hand portion of the cell is edited, the modified characters in the selected cell are rearranged and bounded by the triangular constraint so that the modified characters are only displayed in the upper right-hand portion of the diagonal. When the lower left-hand portion of the display is edited, the modified characters in the new cell are rearranged and bounded by the opposing triangular constraint so that they are only displayed in the lower left-hand portion of the diagonal.
It will be recognized by one skilled in the art that a rearrangement also occurs when functions, other than editing, are performed on the cell that effect the object layout. For example, if the diagonal cell, or the table row, or column containing the diagonal cell, is resized to be made smaller, the displayable area has changed. In this case, new constraints are generated based on the new size of the diagonal cell, the triangular constraint is reapplied to the selected cell and the opposing triangular constraint is reapplied to the new cell. The characters displayed in the selected cell and new cell, and therefore the diagonal cell as well, are modified based on the application of the new constraints.
The method 500 then ends at step 545.
Now referring to
When the constraint 615 is applied to cell 605 and to the test rectangle 620 (
In
After displaying the characters “This is text” 633 (
It will be recognized that
Referring now to
As stated earlier, objects comprise alphanumeric characters, graphic symbols or any representation in a table cell. Although for purposes of discussion, characters will be used to describe the invention, the invention also applies to any object.
The method 700 continues to step 707 where a linespace in the cell is selected. The linespace is the vertical position on the cell where the next placement of characters will begin. For example, the linespace may start at the top left-hand corner, and the characters are placed in the cell beginning at that spot until no more characters fit within the width of the cell. The linespace then advances to the next line, based on the height of the characters displayed, and represents where the next set of characters are displayed.
After selecting the linespace, a test rectangle A is generated in step 710. The test rectangle A has the full width of the cell and a height based on the tallest character from the set of characters that fit within the width of the test rectangle. Generally, a test rectangle represents a displayable line of the cell that contains characters. A test rectangle is a formatting aid used to arrange characters in a line of a cell before displaying the characters in the cell. A test rectangle has a certain height and width depending on the cell's width and the height of the characters that are placed in it. After determining how many characters fit within the test rectangle, those characters are placed in the linespace of the cell.
To determine the height of test rectangle A, the width is defaulted to be the full width of the cell. The height of the test rectangle A is determined by taking into account the height of the tallest character from the set of characters that fit within the width of test rectangle A. At the completion of step 710, a height and width of test rectangle A and number of characters that fit in test rectangle A are known.
After generating the test rectangle A in step 710, the method 700 proceeds to step 715 where a new test rectangle B is generated that takes into account the constraint in the cell. A constraint in the cell may be at different locations at different linespaces in the cell. For example, in a cell with a Northwest/Southeast diagonal, the diagonal constraint at the top of the cell intersects most of the line starting very close to the left-hand side. Yet, at linespaces near the bottom of the Northwest/Southeast diagonal only a little of the cell's line intersects the constraint, i.e., close to the right-hand side of the cell. Because the test rectangle A is a representation of the line beginning at a linespace in the cell, where the constraint intersects the line will be the same as where the constraint intersects the test rectangle A.
Therefore in step 715, the constraint is applied to the test rectangle A to determine where the constraint intersects the test rectangle A and consequently, where the constraint intersects the line at the current linespace in the cell. It is desirable to remove the area of test rectangle A that intersects the constraint. And again, it is preferable that the removed area be rectangular. To perform this, the test rectangle A is divided into subsections. Each subsection that intersects the constraint is removed from the test rectangle A. The result is a test rectangle B that may be narrower than test rectangle A. It will be recognized by one skilled in the art that the narrower the subsections are defined, the greater the probability that the test rectangle B will be at the maximum width without overlapping the constraint.
At step 720, the method 700 then calculates the height of test rectangle B based on the height of the tallest character from the set of characters that fit within the width of test rectangle B. Test rectangle B may have a different width then test rectangle A. Because of the different width, it is possible that a fewer number of characters, i.e., a smaller character set, fit in test rectangle B than in test rectangle A. And because of the possibility of a smaller character set, the height of the tallest character in the smaller character set may be different from the height of the tallest character in the character set used for test rectangle A. For example, in the instance where a cell has a diagonal constraint and the test rectangle A represents a line located in the middle, vertically, of the cell, approximately half of the test rectangle A is removed to generate test rectangle B because of the constraint (see
It is possible to display the characters using the initial height of test rectangle B. However, this may allocate too much vertical space in the cell for the characters in test rectangle B giving an unnatural visual proportion of size of characters compared to the vertical space between the lines in the cell (see
To address these effects, the height calculated based on the tallest character from the set of characters that fit within the width of test rectangle B is compared to the height of test rectangle A in step 725.
If the calculated height based on the tallest character that fits into test rectangle B is less than the height of the test rectangle A, then additional formatting needs to be performed, and the method 700 proceeds to step 730. However, if the calculated height based on the tallest character that fits into test rectangle B is equal to the height of the test rectangle A, then the height of test rectangle B should not be modified, and the method 700 proceeds to step 755.
In the case where the calculated height based on the tallest character that fits into test rectangle B is less than the height of test rectangle A, the method 700 proceeds at step 730 to calculate a new height and width of another test rectangle to provide a better fit of characters in the cell line at the linespace. Test rectangle C is formed using the entire width of the cell and the height based on the tallest character that fits into test rectangle B.
Proceeding to step 735, test rectangle D is then generated by applying the constraint to test rectangle C. Test rectangle D is generated by removing the sections of test rectangle C that intersect the constraint. Because the height of the test rectangle C is smaller than the height of the test rectangle A, i.e., it is formed because the smaller character height in test rectangle B, it is possible that fewer sections of the test rectangle C need to be removed to generate test rectangle D than was required to be removed from test rectangle A to form test rectangle B. Hence, because fewer sections may be removed, test rectangle D may have a greater width than test rectangle B. Also, because of test rectangle D's potentially greater width, more characters may be able to be placed in test rectangle D than in test rectangle B. Having more characters placed in the test rectangle (and eventually in the linespace) and having the height of the test rectangle (the vertical area in the linespace allocated to the characters) more in proportion to the characters displayed in the linespace provides three benefits. First, it allows more characters to be displayed in the cell, thereby providing more efficient use of the space in the cell. Second, it provides a more pleasing visual image where the vertical spacing used for characters is more in proportion with the size of the characters. And third, it ensures that when characters are formatted, the layout of the text preceding those characters are not affected, which could be very disorienting to a user editing the document if allowed to occur.
After test rectangle D is calculated, a height based on the tallest character that fits into test rectangle D is determined in step 740 using the current width of the test rectangle D. A final comparison of the height based on the tallest character that fits into test rectangle D versus the height of test rectangle C is performed in step 745. If the height based on the tallest character that fits into test rectangle D is less than or equal to the height of test rectangle C, then method 700 proceeds to step 755 where the characters are placed at the linespace in the cell. At this point, it should be recognized by those skilled in the art that it is possible to perform another, if not several, iterations of test rectangle calculations to determine if there is even a closer fit of a test rectangle in the cell line (for example, calculating test rectangles E and F). However, while more iterations may be performed, the degree to which a closer fit is achieved decreases drastically as the iterations increase. This requires that one implementing this invention offset the minimal advances achieved by additional iterations with the cost of computation time and resources. In addition, the complexity of implementing this method is also dependent on the type of constraint used. For example, if the constraint is known in advance to be an increasing diagonal (i.e., a diagonal progressing from the Northwest corner to the Southeast corner), the width of the test rectangle would be known immediately without the need for several iterations.
Continuing with method 700, if in step 745 the height based on the tallest character that fits into test rectangle D is greater than the height of test rectangle C, then an invalid result has occurred, and the method 700 proceeds to advance to the next linespace within the cell in step 760. Under this condition, no characters are placed at the linespace. All the characters used to calculate the four test rectangles A-D remain undisplayed and will be saved to determine if they can be displayed in the cell line at the next linespace.
At step 755, the method 700 places the characters from the test rectangle at the linespace in the cell. A valid character set that fits in the cell line at the line space without overlapping the constraint has been determined and therefore can be displayed in the cell. This step 755 is entered either from step 725 or step 745. If step 755 is entered from step 725, the characters that fit into test rectangle B are displayed at the linespace. If step 755 is entered after step 745, the characters that fit into test rectangle D are displayed at the linespace.
At step 760, the method 700 advances to the next linespace in the cell. The next linespace is determined by moving down a vertical distance equal to the height allocated for the characters for the previous linespace. However, the vertical distance to advance to the next linespace can be arbitrary. The smaller the vertical distance, the more densely packed the layout will be. Whereas the larger the vertical distance, the less densely packed and less costly (in terms of computation time) the layout will be.
Proceeding to step 762, the method 700 checks to see if there are additional characters to display and available space in the display area, at the next linespace, for another test rectangle. If there are more characters and available space, then the method 700 branches back to step 710 where it generates another test rectangle A. However in this instance, the test rectangle A is generated at the next linespace in the cell. Method 700 then proceeds to place the characters at the next linespace in the method just described above. Therefore, method 700 continues to display characters around a constraint in a cell until either there are no characters left or there is no display room left to display the characters.
If at step 762 there is not enough room for another test rectangle or no more characters exist to display, then the method 700 continues to step 765 where it stops.
In summary, the present invention is directed towards generating a divided cell in a table, capable of being edited. In one embodiment, a diagonal cell is generated by selecting one cell in the table and creating a new cell to display over the selected cell. Both cells contain a constraint that define an area where that cell cannot display characters. The selected cell contains a triangular constraint, and the new cell contains an opposing triangular constraint. The cells are displayed over top of each other, along with a diagonal, such that the display area of one cell coincides with the constraint area of the other cell. The display shows a diagonal cell capable of accepting characters and having the characteristics of other cells in the table.
To perform the object layout in a cell with a constraint, an embodiment of the present invention utilizes test rectangles to calculate the height and width of the displayable area of the cell. An initial test rectangle is calculated using the full width of the cell and the height based on the tallest character to be placed in it. The initial test rectangle is then modified by applying the constraint to the initial test rectangle and removing all the sections of the initial test rectangle that intersect the constraint. The resulting characters that fit in the modified test rectangle are presented in the display. In one embodiment, another iteration of the test rectangle method is performed if the characters that fit in the modified test rectangle have a smaller height than those that fit within the initial test rectangle.
Alternative embodiments will become apparent to those skilled in the art to which the present invention pertains without departing from its spirit and scope. Accordingly, the scope of the present invention is described by the appended claims and is supported by the foregoing description.
Claims
1-15. (canceled)
16. In a computer system having a display, a method for displaying objects contained in a cell of a table bounded by a constraint, comprising the steps of:
- selecting a linespace within a cell, wherein the linespace represents a location in the cell;
- generating a first test rectangle having the width equal to the width of the cell and a height based on the height of a first set characters;
- applying a constraint to the first test rectangle;
- modifying the first test rectangle by removing the area of the first test rectangle that intersects the constraint;
- determining a second set of objects that will fit into the modified first test rectangle;
- displaying the second set of objects at the linespace of the cell; and
- advancing to the next linespace within the cell;
17. The method of claim 16, wherein the steps of displaying the second set of objects at the linespace comprises:
- in the event that the height based on the second set of objects is less than the height of the first test rectangle, then
- generating a second test rectangle having the width equal to the width of the cell and the height based on the height of the second set of characters,
- modifying the second test rectangle by removing the area of the second test rectangle that intersects the constraint,
- determining a third set of objects that will fit into the modified second test rectangle; and
- in the event that the height of the third set of objects is less than or equal to the height of the modified test rectangle, displaying the second set of objects at the linespace in the cell.
18. The method of claim 16, wherein the constraint is a triangular constraint comprising two adjacent edges of the cell and a diagonal.
19. In a computer system having a display, a method for displaying objects in a diagonal cell in a table, comprising the steps of:
- selecting a first cell in the table;
- generating a second cell in the table;
- placing objects in the first cell and the second cell;
- applying a triangular constraint to the first cell and an opposing triangular constraint to the second cell;
- generating a first test rectangle representing a first set of objects in a line of the first cell that do not overlap the triangular constraint;
- generating a second test rectangle representing a second set of objects in a line of the second cell that do not overlap the opposing triangular constraint; and
- overlapping the display of the objects represented by the first test rectangle in the line of the first cell with the display of the objects represented by the second test rectangle in the line of the second cell.
20. The method of claim 19, wherein the step of generating a first test rectangle comprises the steps of:
- generating a first test rectangle having the width equal to the width of the first cell and a height based on a height of a first subset of characters;
- generating a modified first test rectangle by removing the area of the first test rectangle that intersects the triangular constraint; and
- determining a second subset of objects that will fit into the modified test rectangle;
21. The method of claim 20 further comprising the steps of:
- in the event the height of the second subset of objects is less than the height of the first test rectangle,
- generating a third test rectangle having the width equal to the width of the first cell and the height based on the height of the second subset of characters,
- generating a modified third test rectangle by removing the area of the first test rectangle that intersects the triangular constraint,
- determining a third subset of objects that will fit into the modified third test rectangle;
- in the event that the height of the third subset of objects is greater than the height of the modified third test rectangle, advancing to the next linespace without placing any objects in the line of the first cell; and
- in the event that the height of the third subset of objects is less than or equal to the height of the modified third test rectangle, placing the third subset of objects represented by the modified third test rectangle in the line of the first cell.
22. The method of claim 19, wherein the step of generating a second test rectangle comprises the steps of:
- generating a second test rectangle having the width equal to the width of the second cell and a height based on a height of a first subset of characters;
- generating a modified second test rectangle by removing the area of the second test rectangle that intersects the opposing triangular constraint; and
- determining a second subset of objects that will fit into the modified test rectangle;
23. The method of claim 22 further comprising the steps of: in the event the height of the second subset of objects is less than the second test rectangle,
- generating a third test rectangle having the width equal to the width of the first cell and the height based on the height of the second subset of characters,
- generating a modified third test rectangle by removing the area of the
- second test rectangle that intersects the opposing triangular constraint,
- determining a third subset of objects that will fit into the modified third test rectangle;
- in the event that the height of the third subset of objects is greater than the height of the modified third test rectangle, advancing to the next linespace without displaying any objects in the line of the second cell; and
- in the event that the height of the third set of objects is less than or equal to the height of the modified test rectangle, placing the third subset of objects represented by the modified third test rectangle in the line of the second cell.
24. The method of claim 19 further comprising the steps of:
- editing the objects contained within the first cell; and
- modifying the first test rectangle based on the edited objects contained within the first cell.
25. The method of claim 19 further comprising the steps of:
- editing the objects contained within the second cell; and
- modifying the second test rectangle based on the edited objects contained within the second cell.
26. The method of claim 19 further comprising the steps of:
- resizing the first cell such that all objects contained in the first cell are displayed when the triangular constraint is applied to the first cell; and
- resizing the second cell such that all objects contained in the second cell are displayed when the opposing triangular constraint is applied to the second cell.
27. The method of claim 19, wherein the triangular constraint comprises two adjacent edges of the first cell and a diagonal.
28. The method of claim 19, wherein the opposing triangular constraint comprises two adjacent edges of the second cell and a diagonal.
29. The method of claim 19, wherein the objects contained in second cell are capable of being formatted independently of the objects in the first cell.
Type: Application
Filed: Jan 17, 2006
Publication Date: Sep 14, 2006
Applicant: Microsoft Corporation (Redmond, WA)
Inventors: Siddharth Agrawal (Redmond, WA), Bret Ahlstrom (Renton, WA), Meredith McClurg (Bellevue, WA), Cy Cedar (Bellevue, WA)
Application Number: 11/333,871
International Classification: G06F 17/00 (20060101);