#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'write_xlsx'

workbook  = WriteXLSX.new('comments2.xlsx')

text_wrap  = workbook.add_format(text_wrap: 1, valign: 'top')
worksheet1 = workbook.add_worksheet
worksheet2 = workbook.add_worksheet
worksheet3 = workbook.add_worksheet
worksheet4 = workbook.add_worksheet
worksheet5 = workbook.add_worksheet
worksheet6 = workbook.add_worksheet
worksheet7 = workbook.add_worksheet
worksheet8 = workbook.add_worksheet

# Variables that we will use in each example.
cell_text = ''
comment   = ''

###############################################################################
#
# Example 1. Demonstrates a simple cell comments without formatting.
#            comments.
#

# Set up some formatting.
worksheet1.set_column('C:C', 25)
worksheet1.set_row(2, 50)
worksheet1.set_row(5, 50)

# Simple ascii string.
cell_text = 'Hold the mouse over this cell to see the comment.'

comment = 'This is a comment.'

worksheet1.write('C3', cell_text, text_wrap)
worksheet1.write_comment('C3', comment)

cell_text = 'This is a UTF-8 string.'
comment   = '☺'

worksheet1.write('C6', cell_text, text_wrap)
worksheet1.write_comment('C6', comment)

###############################################################################
#
# Example 2. Demonstrates visible and hidden comments.
#

# Set up some formatting.
worksheet2.set_column('C:C', 25)
worksheet2.set_row(2, 50)
worksheet2.set_row(5, 50)

cell_text = 'This cell comment is visible.'

comment = 'Hello.'

worksheet2.write('C3', cell_text, text_wrap)
worksheet2.write_comment('C3', comment, visible: 1)

cell_text = "This cell comment isn't visible (the default)."

comment = 'Hello.'

worksheet2.write('C6', cell_text, text_wrap)
worksheet2.write_comment('C6', comment)

###############################################################################
#
# Example 3. Demonstrates visible and hidden comments set at the worksheet
#            level.
#

# Set up some formatting.
worksheet3.set_column('C:C', 25)
worksheet3.set_row(2, 50)
worksheet3.set_row(5, 50)
worksheet3.set_row(8, 50)

# Make all comments on the worksheet visible.
worksheet3.show_comments

cell_text = 'This cell comment is visible, explicitly.'

comment = 'Hello.'

worksheet3.write('C3', cell_text, text_wrap)
worksheet3.write_comment('C3', comment, visible: 1)

cell_text =
  'This cell comment is also visible because we used show_comments().'

comment = 'Hello.'

worksheet3.write('C6', cell_text, text_wrap)
worksheet3.write_comment('C6', comment)

cell_text = 'However, we can still override it locally.'

comment = 'Hello.'

worksheet3.write('C9', cell_text, text_wrap)
worksheet3.write_comment('C9', comment, visible: 0)

###############################################################################
#
# Example 4. Demonstrates changes to the comment box dimensions.
#

# Set up some formatting.
worksheet4.set_column('C:C', 25)
worksheet4.set_row(2,  50)
worksheet4.set_row(5,  50)
worksheet4.set_row(8,  50)
worksheet4.set_row(15, 50)

worksheet4.show_comments

cell_text = 'This cell comment is default size.'

comment = 'Hello.'

worksheet4.write('C3', cell_text, text_wrap)
worksheet4.write_comment('C3', comment)

cell_text = 'This cell comment is twice as wide.'

comment = 'Hello.'

worksheet4.write('C6', cell_text, text_wrap)
worksheet4.write_comment('C6', comment, x_scale: 2)

cell_text = 'This cell comment is twice as high.'

comment = 'Hello.'

worksheet4.write('C9', cell_text, text_wrap)
worksheet4.write_comment('C9', comment, y_scale: 2)

cell_text = 'This cell comment is scaled in both directions.'

comment = 'Hello.'

worksheet4.write('C16', cell_text, text_wrap)
worksheet4.write_comment('C16', comment, x_scale: 1.2, y_scale: 0.8)

cell_text = 'This cell comment has width and height specified in pixels.'

comment = 'Hello.'

worksheet4.write('C19', cell_text, text_wrap)
worksheet4.write_comment('C19', comment, width: 200, height: 20)

###############################################################################
#
# Example 5. Demonstrates changes to the cell comment position.
#

worksheet5.set_column('C:C', 25)
worksheet5.set_row(2,  50)
worksheet5.set_row(5,  50)
worksheet5.set_row(8,  50)
worksheet5.set_row(11, 50)

worksheet5.show_comments

cell_text = 'This cell comment is in the default position.'

comment = 'Hello.'

worksheet5.write('C3', cell_text, text_wrap)
worksheet5.write_comment('C3', comment)

cell_text = 'This cell comment has been moved to another cell.'

comment = 'Hello.'

worksheet5.write('C6', cell_text, text_wrap)
worksheet5.write_comment('C6', comment, start_cell: 'E4')

cell_text = 'This cell comment has been moved to another cell.'

comment = 'Hello.'

worksheet5.write('C9', cell_text, text_wrap)
worksheet5.write_comment('C9', comment, start_row: 8, start_col: 4)

cell_text = 'This cell comment has been shifted within its default cell.'

comment = 'Hello.'

worksheet5.write('C12', cell_text, text_wrap)
worksheet5.write_comment('C12', comment, x_offset: 30, y_offset: 12)

###############################################################################
#
# Example 6. Demonstrates changes to the comment background colour.
#

worksheet6.set_column('C:C', 25)
worksheet6.set_row(2, 50)
worksheet6.set_row(5, 50)
worksheet6.set_row(8, 50)

worksheet6.show_comments

cell_text = 'This cell comment has a different colour.'

comment = 'Hello.'

worksheet6.write('C3', cell_text, text_wrap)
worksheet6.write_comment('C3', comment, color: 'green')

cell_text = 'This cell comment has the default colour.'

comment = 'Hello.'

worksheet6.write('C6', cell_text, text_wrap)
worksheet6.write_comment('C6', comment)

cell_text = 'This cell comment has a different colour.'

comment = 'Hello.'

worksheet6.write('C9', cell_text, text_wrap)
worksheet6.write_comment('C9', comment, color: '#FF6600')

###############################################################################
#
# Example 7. Demonstrates how to set the cell comment author.
#

worksheet7.set_column('C:C', 30)
worksheet7.set_row(2,  50)
worksheet7.set_row(5,  50)
worksheet7.set_row(8,  50)

author = ''
cell   = 'C3'

cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
            "by #{author}' (blank) in the status bar at the bottom"

comment = 'Hello.'

worksheet7.write(cell, cell_text, text_wrap)
worksheet7.write_comment(cell, comment)

author    = 'Ruby'
cell      = 'C6'
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
            "by #{author}' in the status bar at the bottom"

comment = 'Hello.'

worksheet7.write(cell, cell_text, text_wrap)
worksheet7.write_comment(cell, comment, author: author)

author    = '€'
cell      = 'C9'
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
            "by #{author}' in the status bar at the bottom"
comment = 'Hello.'

worksheet7.write(cell, cell_text, text_wrap)
worksheet7.write_comment(cell, comment, author: author)

###############################################################################
#
# Example 8. Demonstrates the need to explicitly set the row height.
#

# Set up some formatting.
worksheet8.set_column('C:C', 25)
worksheet8.set_row(2, 80)

worksheet8.show_comments

cell_text =
  'The height of this row has been adjusted explicitly using ' +
  'set_row(). The size of the comment box is adjusted ' +
  'accordingly by Excel::Writer::XLSX.'

comment = 'Hello.'

worksheet8.write('C3', cell_text, text_wrap)
worksheet8.write_comment('C3', comment)

cell_text =
  'The height of this row has been adjusted by Excel due to the ' +
  'text wrap property being set. Unfortunately this means that ' +
  'the height of the row is unknown to Excel::Writer::XLSX at ' +
  "run time and thus the comment box is stretched as well.\n\n" +
  'Use set_row() to specify the row height explicitly to avoid ' +
  'this problem.'

comment = 'Hello.'

worksheet8.write('C6', cell_text, text_wrap)
worksheet8.write_comment('C6', comment)

workbook.close
