| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 typedef void EditCellRangeFunction(CellRange range); | 5 typedef void EditCellRangeFunction(CellRange range); |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Spreadsheet widget. | 8 * Spreadsheet widget. |
| 9 */ | 9 */ |
| 10 class SpreadsheetPresenter implements SpreadsheetListener, SelectionListener { | 10 class SpreadsheetPresenter implements SpreadsheetListener, SelectionListener { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 SpreadsheetPresenter(this._spreadsheet, this._window, this._rowShift, this._co
lumnShift, | 122 SpreadsheetPresenter(this._spreadsheet, this._window, this._rowShift, this._co
lumnShift, |
| 123 this._rows, this._columns) { | 123 this._rows, this._columns) { |
| 124 Document doc = _window.document; | 124 Document doc = _window.document; |
| 125 | 125 |
| 126 // Must do this first | 126 // Must do this first |
| 127 _popupHandler = new PopupHandler(doc); | 127 _popupHandler = new PopupHandler(doc); |
| 128 | 128 |
| 129 // Create UI elements under a common parent | 129 // Create UI elements under a common parent |
| 130 Element parent = doc.query("#spreadsheets"); | 130 Element parent = doc.query("#spreadsheets"); |
| 131 | 131 |
| 132 _spreadsheetElement = doc.createElement("div"); | 132 _spreadsheetElement = new Element.tag("div"); |
| 133 _spreadsheetElement.id = "spreadsheet-${_spreadsheet.name}"; | 133 _spreadsheetElement.id = "spreadsheet-${_spreadsheet.name}"; |
| 134 _spreadsheetElement.attributes["class"] = "spreadsheetContainer"; | 134 _spreadsheetElement.attributes["class"] = "spreadsheetContainer"; |
| 135 _spreadsheetElement.style.setProperty("z-index", "${_zIndex++}"); | 135 _spreadsheetElement.style.setProperty("z-index", "${_zIndex++}"); |
| 136 parent.nodes.add(_spreadsheetElement); | 136 parent.nodes.add(_spreadsheetElement); |
| 137 | 137 |
| 138 _tableScrollContainer = doc.createElement("div"); | 138 _tableScrollContainer = new Element.tag("div"); |
| 139 _tableScrollContainer.id = "tableScrollContainer-${_spreadsheet.name}"; | 139 _tableScrollContainer.id = "tableScrollContainer-${_spreadsheet.name}"; |
| 140 _tableScrollContainer.attributes["class"] = "tableScrollContainer"; | 140 _tableScrollContainer.attributes["class"] = "tableScrollContainer"; |
| 141 _spreadsheetElement.nodes.add(_tableScrollContainer); | 141 _spreadsheetElement.nodes.add(_tableScrollContainer); |
| 142 | 142 |
| 143 _createTable(doc); | 143 _createTable(doc); |
| 144 _createMoveDragger(doc); | 144 _createMoveDragger(doc); |
| 145 _createResizeDragger(doc); | 145 _createResizeDragger(doc); |
| 146 | 146 |
| 147 _createSpreadsheetLayout(doc); | 147 _createSpreadsheetLayout(doc); |
| 148 _createFormulaInput(doc); | 148 _createFormulaInput(doc); |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 _selectionManager.setOrigin(_rowShift, _columnShift); | 549 _selectionManager.setOrigin(_rowShift, _columnShift); |
| 550 } else { | 550 } else { |
| 551 _selectionManager.updateSelection(); | 551 _selectionManager.updateSelection(); |
| 552 _redrawHeaders(); | 552 _redrawHeaders(); |
| 553 } | 553 } |
| 554 } | 554 } |
| 555 | 555 |
| 556 // Create the cell display dropdown. | 556 // Create the cell display dropdown. |
| 557 SelectElement _createCellDisplay(Document doc, String parentId, List<String> v
alues) { | 557 SelectElement _createCellDisplay(Document doc, String parentId, List<String> v
alues) { |
| 558 Element parent = doc.query('#$parentId'); | 558 Element parent = doc.query('#$parentId'); |
| 559 SelectElement element = doc.createElement("select"); | 559 SelectElement element = new Element.tag("select"); |
| 560 StringBuffer sb = new StringBuffer(); | 560 StringBuffer sb = new StringBuffer(); |
| 561 values.forEach((String value) { | 561 values.forEach((String value) { |
| 562 sb.add("<option>"); | 562 sb.add("<option>"); |
| 563 sb.add(value); | 563 sb.add(value); |
| 564 sb.add("</option>"); | 564 sb.add("</option>"); |
| 565 }); | 565 }); |
| 566 element.innerHTML = sb.toString(); | 566 element.innerHTML = sb.toString(); |
| 567 element.on.change.add( | 567 element.on.change.add( |
| 568 (Event e) { | 568 (Event e) { |
| 569 _cellDisplay = element.selectedIndex; | 569 _cellDisplay = element.selectedIndex; |
| 570 _table.resetTableContents(_rows, _columns); | 570 _table.resetTableContents(_rows, _columns); |
| 571 recalculateViewport(); | 571 recalculateViewport(); |
| 572 }); | 572 }); |
| 573 parent.nodes.add(element); | 573 parent.nodes.add(element); |
| 574 return element; | 574 return element; |
| 575 } | 575 } |
| 576 | 576 |
| 577 void _createCellDisplaySelector(Document doc) { | 577 void _createCellDisplaySelector(Document doc) { |
| 578 _cellDisplayElement = _createCellDisplay(doc, "debugbar", | 578 _cellDisplayElement = _createCellDisplay(doc, "debugbar", |
| 579 ["Show Values","Show Contents","Show Paste Contents","Show Styles","Show
Datatypes", | 579 ["Show Values","Show Contents","Show Paste Contents","Show Styles","Show
Datatypes", |
| 580 "Show Dependencies","Show Forward Dependencies"]); | 580 "Show Dependencies","Show Forward Dependencies"]); |
| 581 } | 581 } |
| 582 | 582 |
| 583 void _createFormulaInput(Document doc) { | 583 void _createFormulaInput(Document doc) { |
| 584 _formulaDiv = doc.createElement("div"); | 584 _formulaDiv = new Element.tag("div"); |
| 585 _formulaDiv.id = "formulaDiv-${_spreadsheet.name}"; | 585 _formulaDiv.id = "formulaDiv-${_spreadsheet.name}"; |
| 586 _formulaDiv.attributes["class"] = "formulaDiv fadeOut"; | 586 _formulaDiv.attributes["class"] = "formulaDiv fadeOut"; |
| 587 _spreadsheetElement.nodes.add(_formulaDiv); | 587 _spreadsheetElement.nodes.add(_formulaDiv); |
| 588 | 588 |
| 589 _formulaInput = doc.createElement("input"); | 589 _formulaInput = new Element.tag("input"); |
| 590 _formulaInput.id = "formulaInput-${_spreadsheet.name}"; | 590 _formulaInput.id = "formulaInput-${_spreadsheet.name}"; |
| 591 _formulaInput.attributes["class"] = "formulaInput"; | 591 _formulaInput.attributes["class"] = "formulaInput"; |
| 592 _formulaDiv.nodes.add(_formulaInput); | 592 _formulaDiv.nodes.add(_formulaInput); |
| 593 | 593 |
| 594 _formulaInputMeasure = doc.createElement("div"); | 594 _formulaInputMeasure = new Element.tag("div"); |
| 595 _formulaInputMeasure.id = "formulaInputMeasure-${_spreadsheet.name}"; | 595 _formulaInputMeasure.id = "formulaInputMeasure-${_spreadsheet.name}"; |
| 596 _formulaInputMeasure.attributes["class"] = "formulaInputMeasure"; | 596 _formulaInputMeasure.attributes["class"] = "formulaInputMeasure"; |
| 597 _spreadsheetElement.nodes.add(_formulaInputMeasure); | 597 _spreadsheetElement.nodes.add(_formulaInputMeasure); |
| 598 | 598 |
| 599 _formulaInput.on.click.add((MouseEvent e) { | 599 _formulaInput.on.click.add((MouseEvent e) { |
| 600 _formulaEditing = true; | 600 _formulaEditing = true; |
| 601 _hideFormulaCellSelecting(); | 601 _hideFormulaCellSelecting(); |
| 602 }); | 602 }); |
| 603 | 603 |
| 604 _formulaInput.on.keyDown.add((KeyboardEvent e) { | 604 _formulaInput.on.keyDown.add((KeyboardEvent e) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 // Clear the cell contents | 654 // Clear the cell contents |
| 655 location.markDirty(); | 655 location.markDirty(); |
| 656 _selectionManager.selectionChanged(); | 656 _selectionManager.selectionChanged(); |
| 657 print("Error parsing formula '${value}': ${exception}"); | 657 print("Error parsing formula '${value}': ${exception}"); |
| 658 } | 658 } |
| 659 } | 659 } |
| 660 }); | 660 }); |
| 661 } | 661 } |
| 662 | 662 |
| 663 void _createMoveDragger(Document doc) { | 663 void _createMoveDragger(Document doc) { |
| 664 _moveDragger = doc.createElement("div"); | 664 _moveDragger = new Element.tag("div"); |
| 665 _moveDragger.id = "moveDragger-${_spreadsheet.name}"; | 665 _moveDragger.id = "moveDragger-${_spreadsheet.name}"; |
| 666 _moveDragger.attributes["class"] = "moveDragger"; | 666 _moveDragger.attributes["class"] = "moveDragger"; |
| 667 _moveDragger.style.setProperty("left", HtmlUtils.toPx(3)); | 667 _moveDragger.style.setProperty("left", HtmlUtils.toPx(3)); |
| 668 _moveDragger.style.setProperty("top", HtmlUtils.toPx(3)); | 668 _moveDragger.style.setProperty("top", HtmlUtils.toPx(3)); |
| 669 _spreadsheetElement.nodes.add(_moveDragger); | 669 _spreadsheetElement.nodes.add(_moveDragger); |
| 670 | 670 |
| 671 _moveDragger.on.mouseDown.add((MouseEvent e) { | 671 _moveDragger.on.mouseDown.add((MouseEvent e) { |
| 672 _moveToTop(); | 672 _moveToTop(); |
| 673 _hideInnerMenu(true); | 673 _hideInnerMenu(true); |
| 674 | 674 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 693 }); | 693 }); |
| 694 }); | 694 }); |
| 695 | 695 |
| 696 _setUndragFunction((MouseEvent e) { | 696 _setUndragFunction((MouseEvent e) { |
| 697 _window.document.body.style.setProperty("cursor", "auto"); | 697 _window.document.body.style.setProperty("cursor", "auto"); |
| 698 }); | 698 }); |
| 699 }); | 699 }); |
| 700 } | 700 } |
| 701 | 701 |
| 702 void _createResizeDragger(Document doc) { | 702 void _createResizeDragger(Document doc) { |
| 703 _resizeDragger = doc.createElement("div"); | 703 _resizeDragger = new Element.tag("div"); |
| 704 _resizeDragger.id = "resizeDragger-${_spreadsheet.name}"; | 704 _resizeDragger.id = "resizeDragger-${_spreadsheet.name}"; |
| 705 _resizeDragger.attributes["class"] = "resizeDragger"; | 705 _resizeDragger.attributes["class"] = "resizeDragger"; |
| 706 _spreadsheetElement.nodes.add(_resizeDragger); | 706 _spreadsheetElement.nodes.add(_resizeDragger); |
| 707 | 707 |
| 708 _resizeDragger.on.mouseDown.add((MouseEvent e) { | 708 _resizeDragger.on.mouseDown.add((MouseEvent e) { |
| 709 _moveToTop(); | 709 _moveToTop(); |
| 710 | 710 |
| 711 // Hide popups | 711 // Hide popups |
| 712 _hideFormula(); | 712 _hideFormula(); |
| 713 _popupHandler.deactivatePopup(); | 713 _popupHandler.deactivatePopup(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 757 _setUndragFunction((MouseEvent e) { | 757 _setUndragFunction((MouseEvent e) { |
| 758 _window.document.body.style.setProperty("cursor", "auto"); | 758 _window.document.body.style.setProperty("cursor", "auto"); |
| 759 }); | 759 }); |
| 760 }); | 760 }); |
| 761 | 761 |
| 762 _refreshResizeDragger(); | 762 _refreshResizeDragger(); |
| 763 } | 763 } |
| 764 | 764 |
| 765 // Initialize the HTML elements used to indicate dragging | 765 // Initialize the HTML elements used to indicate dragging |
| 766 void _createSpreadsheetLayout(Document doc) { | 766 void _createSpreadsheetLayout(Document doc) { |
| 767 DivElement columnDraggerElement = doc.createElement("div"); | 767 DivElement columnDraggerElement = new Element.tag("div"); |
| 768 columnDraggerElement.id = "columnDragger-${_spreadsheet.name}"; | 768 columnDraggerElement.id = "columnDragger-${_spreadsheet.name}"; |
| 769 columnDraggerElement.attributes["class"] = "columnDragger rowColDragger"; | 769 columnDraggerElement.attributes["class"] = "columnDragger rowColDragger"; |
| 770 | 770 |
| 771 DivElement rowDraggerElement = doc.createElement("div"); | 771 DivElement rowDraggerElement = new Element.tag("div"); |
| 772 rowDraggerElement.id = "rowDragger-${_spreadsheet.name}"; | 772 rowDraggerElement.id = "rowDragger-${_spreadsheet.name}"; |
| 773 rowDraggerElement.attributes["class"] = "rowDragger rowColDragger"; | 773 rowDraggerElement.attributes["class"] = "rowDragger rowColDragger"; |
| 774 | 774 |
| 775 _spreadsheetElement.nodes.add(columnDraggerElement); | 775 _spreadsheetElement.nodes.add(columnDraggerElement); |
| 776 _spreadsheetElement.nodes.add(rowDraggerElement); | 776 _spreadsheetElement.nodes.add(rowDraggerElement); |
| 777 | 777 |
| 778 _dragIndicators = new List<DivElement>(2); | 778 _dragIndicators = new List<DivElement>(2); |
| 779 _dragIndicators[COL] = columnDraggerElement; | 779 _dragIndicators[COL] = columnDraggerElement; |
| 780 _dragIndicators[ROW] = rowDraggerElement; | 780 _dragIndicators[ROW] = rowDraggerElement; |
| 781 } | 781 } |
| 782 | 782 |
| 783 void _createTable(Document doc) { | 783 void _createTable(Document doc) { |
| 784 // Create the table | 784 // Create the table |
| 785 _table = new HtmlTable(_spreadsheet, _spreadsheetElement); | 785 _table = new HtmlTable(_spreadsheet, _spreadsheetElement); |
| 786 | 786 |
| 787 _setTableWidth(_spreadsheet.getColumnEnd(_columns)); | 787 _setTableWidth(_spreadsheet.getColumnEnd(_columns)); |
| 788 for (int r = 0; r <= _rows; r++) { | 788 for (int r = 0; r <= _rows; r++) { |
| 789 _addTableRowHtml(r); | 789 _addTableRowHtml(r); |
| 790 } | 790 } |
| 791 | 791 |
| 792 // Create two divs -- the outer one has "overflow:scroll" and has the same w
idth and height | 792 // Create two divs -- the outer one has "overflow:scroll" and has the same w
idth and height |
| 793 // as the visible scpreadsheet area. The inner one has the same width and h
eight as the | 793 // as the visible scpreadsheet area. The inner one has the same width and h
eight as the |
| 794 // entire active spreadsheet area. When the outer div is scrolled, the view
port is shifted | 794 // entire active spreadsheet area. When the outer div is scrolled, the view
port is shifted |
| 795 // to match the scroll coordinates. | 795 // to match the scroll coordinates. |
| 796 | 796 |
| 797 // Inner div | 797 // Inner div |
| 798 _tableScrollDiv = doc.createElement("div"); | 798 _tableScrollDiv = new Element.tag("div"); |
| 799 _tableScrollDiv.id = "tableScrollDiv-${_spreadsheet.name}"; | 799 _tableScrollDiv.id = "tableScrollDiv-${_spreadsheet.name}"; |
| 800 _tableScrollDiv.attributes["class"] = "tableScrollDiv"; | 800 _tableScrollDiv.attributes["class"] = "tableScrollDiv"; |
| 801 _tableScrollContainer.style.setProperty("left", "0px"); | 801 _tableScrollContainer.style.setProperty("left", "0px"); |
| 802 _tableScrollContainer.style.setProperty("top", "0px"); | 802 _tableScrollContainer.style.setProperty("top", "0px"); |
| 803 _tableScrollContainer.nodes.add(_tableScrollDiv); | 803 _tableScrollContainer.nodes.add(_tableScrollDiv); |
| 804 _tableSizeChanged(); | 804 _tableSizeChanged(); |
| 805 | 805 |
| 806 _tableScrollContainer.on.scroll.add((e) { | 806 _tableScrollContainer.on.scroll.add((e) { |
| 807 if (_scrolledByKeyboard) { | 807 if (_scrolledByKeyboard) { |
| 808 _scrolledByKeyboard = false; | 808 _scrolledByKeyboard = false; |
| (...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1721 _spreadsheet.execute(command); | 1721 _spreadsheet.execute(command); |
| 1722 } else { | 1722 } else { |
| 1723 if (rowOrCol == COL) { | 1723 if (rowOrCol == COL) { |
| 1724 _spreadsheet.setColumnWidth(index, size); | 1724 _spreadsheet.setColumnWidth(index, size); |
| 1725 } else { | 1725 } else { |
| 1726 _spreadsheet.setRowHeight(index, size); | 1726 _spreadsheet.setRowHeight(index, size); |
| 1727 } | 1727 } |
| 1728 } | 1728 } |
| 1729 } | 1729 } |
| 1730 } | 1730 } |
| OLD | NEW |