Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 90 additions & 18 deletions Project/Sources/Methods/VP Convert to picture.4dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ err_TRY
ARRAY LONGINT:C221($colPos; 0)
ARRAY LONGINT:C221($rowPos; 0)

var $sheets; $table; $cell; $style : Object
var $sheets; $table; $cell; $style; $actualStyles; $actualStyle : Object
var $lineObj; $obj; $defaultStyle : Object
var $namedStyle; $workbook; $parsedStyle; $bcObj : Object
var $strPart : Object
var $svgSource; $svgRef; $elemRef : Text
var $shrinkStr; $defaultFontSize; $fontSize; $valueStr : Text
var $placeholderLeft; $placeholderRight : Text

var $textWidth; $i; $index; $indexColWidth; $indexRowHeight; $rowCount; $colCount; $maxSvgWidth; $maxSvgHeight : Integer
var $iterX; $iterY; $svgHeight; $svgWidth; $x1; $x2; $y1; $y2; $height; $width : Integer
Expand All @@ -22,6 +23,7 @@ var $pos : Integer

var $colWidth; $rowHeight : Real
var $borderOffset : Real
var $paddingLeft; $paddingRight : Real
var $pictWidth; $pictHeight : Real
var $pictX; $pictY : Real

Expand Down Expand Up @@ -116,6 +118,12 @@ End if
// MARK:- Default Styles and Theme
If ($sheets#Null:C1517)
$table:=$sheets.data.dataTable

// styles of tables and conditional formats computed by SpreadJS (see Utils.addFormatedText)
If (Value type:C1509($sheets.actualStyleInfo)=Is object:K8:27)
$actualStyles:=$sheets.actualStyleInfo
End if

If ($sheets.data.defaultDataNode.style#Null:C1517)

Case of
Expand Down Expand Up @@ -631,9 +639,21 @@ For ($iterY; $range.y1; $range.y2)
$parsedStyle.wordWrapInfo:=Null:C1517
$borderOrientation:=False:C215
$borderOffset:=0
$paddingLeft:=0
$paddingRight:=0

$cell:=Null:C1517

// MARK: Table and conditional format style (has priority over the other styles)
$actualStyle:=Null:C1517
If ($actualStyles#Null:C1517)
If (Value type:C1509($actualStyles[String:C10($iterY)])=Is object:K8:27)
If (Value type:C1509($actualStyles[String:C10($iterY)][String:C10($iterX)])=Is object:K8:27)
$actualStyle:=$actualStyles[String:C10($iterY)][String:C10($iterX)]
svg_parseStyle($actualStyle; $parsedStyle)
End if
End if
End if

If ($table#Null:C1517)
If ($table[String:C10($iterY)]#Null:C1517)
Expand Down Expand Up @@ -945,6 +965,13 @@ End if
End while
End if

// the font color computed by SpreadJS already takes into account the color of the number format
If ($actualStyle#Null:C1517)
If (Value type:C1509($actualStyle.foreColor)=Is text:K8:3)
$parsedStyle.fill:=svg_retrieveColor($actualStyle.foreColor)
End if
End if

// MARK: Ajout de la backgroundImage
If ($parsedStyle.backgroundImage#"") | ($parsedStyle.cellTypeName="1")

Expand Down Expand Up @@ -1253,18 +1280,32 @@ End if
: (Value type:C1509($parsedStyle.formatInfo.text)=Is text:K8:3)
$valueStr:=$parsedStyle.formatInfo.text

// "_x" and "?" of the number format at the start and at the end: invisible gaps of the width of their chars
If ($parsedStyle.wordWrap#1) & ($parsedStyle.isVerticalText#1) & (($parsedStyle.textOrientation=0) | ($parsedStyle.textOrientation=NONE_TEXT_ORIENTATION))
If (Value type:C1509($parsedStyle.formatInfo.placeholderLeft)=Is text:K8:3)
$paddingLeft:=svg_getTextWidth($parsedStyle.formatInfo.placeholderLeft; $parsedStyle.fontObj)
End if
If (Value type:C1509($parsedStyle.formatInfo.placeholderRight)=Is text:K8:3)
$paddingRight:=svg_getTextWidth($parsedStyle.formatInfo.placeholderRight; $parsedStyle.fontObj)
End if
End if

If (Value type:C1509($cell.value)#Is text:K8:3)
$w:=svg_getTextWidth($valueStr; $parsedStyle.fontObj)
$w:=svg_getTextWidth($valueStr; $parsedStyle.fontObj)+$paddingLeft+$paddingRight

If ($w>(Int:C8($spaceWidth)-3)) & ($parsedStyle.isVerticalText#1)
$valueStr:="#"*Int:C8(((Int:C8($spaceWidth)-3)/svg_getTextWidth("#"; $parsedStyle.fontObj)))
$paddingLeft:=0
$paddingRight:=0
End if
Else
If ($cell.value="/OADate(@)/")
$w:=svg_getTextWidth($valueStr; $parsedStyle.fontObj)
$w:=svg_getTextWidth($valueStr; $parsedStyle.fontObj)+$paddingLeft+$paddingRight

If ($w>(Int:C8($spaceWidth)-3)) & ($parsedStyle.isVerticalText#1)
$valueStr:="#"*Int:C8(((Int:C8($spaceWidth)-3)/svg_getTextWidth("#"; $parsedStyle.fontObj)))
$paddingLeft:=0
$paddingRight:=0
End if
End if
End if
Expand All @@ -1276,9 +1317,16 @@ End if
$str:=""
var $valPart : Object
For each ($valPart; $parsedStyle.formatInfo.content)
If ($valPart.type#"fillingChar") && ($valPart.type#"placeHolder") && ($valPart.type#"numberPlaceholder")
$str:=$str+$valPart.value
End if
Case of
: ($valPart.type="fillingChar")
: ($valPart.type="numberPlaceholder")
$str:=$str+"0"
: ($valPart.type="placeholder")
// "_x": invisible gap of the width of x, which reduces the filling
$str:=$str+String:C10($valPart.value)
Else
$str:=$str+$valPart.value
End case
End for each
var $w : Real
$w:=svg_getTextWidth($str; $parsedStyle.fontObj)
Expand Down Expand Up @@ -1316,23 +1364,41 @@ End if
End if

$valueStr:=""
$placeholderLeft:=""
$placeholderRight:=""
For each ($valPart; $parsedStyle.formatInfo.content)
If ($valPart.type="fillingChar")
$valueStr:=$valueStr+($fc*$nbC)
$strPart:=New object:C1471("part1"; $valueStr; "part2"; "")
Else
If (($valPart.type#"placeHolder") && ($valPart.type#"numberPlaceholder"))
Case of
: ($valPart.type="fillingChar")
$valueStr:=$valueStr+($fc*$nbC)
$strPart:=New object:C1471("part1"; $valueStr; "part2"; "")

: ($valPart.type="placeholder") | ($valPart.type="numberPlaceholder")
// only the gaps before the text of part1 and after the text of part2 are handled
Case of
: ($strPart#Null:C1517)
$placeholderRight:=$placeholderRight+Choose:C955($valPart.type="numberPlaceholder"; "0"; String:C10($valPart.value))
: ($valueStr="")
$placeholderLeft:=$placeholderLeft+Choose:C955($valPart.type="numberPlaceholder"; "0"; String:C10($valPart.value))
End case

Else
$valueStr:=$valueStr+$valPart.value
If ($strPart#Null:C1517)
$strPart.part2:=$strPart.part2+$valPart.value
$placeholderRight:=""
End if
Else


End if
End if
End case
End for each

If (($parsedStyle.textOrientation=0) | ($parsedStyle.textOrientation=NONE_TEXT_ORIENTATION))
If ($placeholderLeft#"")
$paddingLeft:=svg_getTextWidth($placeholderLeft; $parsedStyle.fontObj)
End if
If ($placeholderRight#"") & ($parsedStyle.wordWrap#1)
$paddingRight:=svg_getTextWidth($placeholderRight; $parsedStyle.fontObj)
End if
End if

End if

End case
Expand All @@ -1342,9 +1408,9 @@ End if
End case

If ($strPart#Null:C1517)
$textWidth:=svg_getTextWidth($strPart.part1+$strPart.part2; $parsedStyle.fontObj)
$textWidth:=svg_getTextWidth($strPart.part1+$strPart.part2; $parsedStyle.fontObj)+$paddingLeft+$paddingRight
Else
$textWidth:=svg_getTextWidth($valueStr; $parsedStyle.fontObj)
$textWidth:=svg_getTextWidth($valueStr; $parsedStyle.fontObj)+$paddingLeft+$paddingRight
End if

If ($parsedStyle.shrinkToFit=1) & ($parsedStyle.wordWrap#1) & (Not:C34(($parsedStyle.isVerticalText=1) & (($parsedStyle.vAlign#TOP_VERTICAL_ALIGN) & ($parsedStyle.vAlign#NONE_VERTICAL_ALIGN))))
Expand Down Expand Up @@ -1374,6 +1440,11 @@ End if
$textWidth:=$height-4
Else
$shrinkStr:=String:C10(Num:C11($fontSize; ".")/$textWidth*($width-4); "&xml;")+"px"
// the gaps of the number format are reduced like the font
If ($textWidth>($width-4))
$paddingLeft:=$paddingLeft*($width-4)/$textWidth
$paddingRight:=$paddingRight*($width-4)/$textWidth
End if
$textWidth:=$width-4
End case
End if
Expand Down Expand Up @@ -1521,6 +1592,7 @@ End if
"shrinkToFit"; $shrinkStr; \
"textWidth"; $textWidth; \
"strPart"; $strPart; \
"paddingLeft"; $paddingLeft; "paddingRight"; $paddingRight; \
"textOrientation"; $parsedStyle.textOrientation; \
"borderOrientation"; $borderOrientation; \
"borderOffset"; $borderOffset; \
Expand Down
14 changes: 9 additions & 5 deletions Project/Sources/Methods/svg_drawCellValue.4dm
Original file line number Diff line number Diff line change
Expand Up @@ -938,14 +938,18 @@ End for each

If ($valObj.wordWrapInfo=Null:C1517) & (($valObj.textOrientation=0) | ($valObj.textOrientation=NONE_TEXT_ORIENTATION))
Case of
: ($valObj.hAlign=LEFT_HORIZONTAL_ALIGN) | ($valObj.strPart#Null:C1517)
: ($valObj.strPart#Null:C1517)
DOM SET XML ATTRIBUTE:C866($elemRef; "x"; $valObj.x+2)

// paddingLeft and paddingRight: invisible gaps of the "_x" and "?" of the number format
: ($valObj.hAlign=LEFT_HORIZONTAL_ALIGN)
DOM SET XML ATTRIBUTE:C866($elemRef; "x"; $valObj.x+2+Num:C11($valObj.paddingLeft))

: ($valObj.hAlign=CENTER_HORIZONTAL_ALIGN)
DOM SET XML ATTRIBUTE:C866($elemRef; "x"; $valObj.x+($valObj.width/2); "text-anchor"; "middle")
DOM SET XML ATTRIBUTE:C866($elemRef; "x"; $valObj.x+($valObj.width/2)+((Num:C11($valObj.paddingLeft)-Num:C11($valObj.paddingRight))/2); "text-anchor"; "middle")

: ($valObj.hAlign=RIGHT_HORIZONTAL_ALIGN)
DOM SET XML ATTRIBUTE:C866($elemRef; "x"; $valObj.x+$valObj.width-2; "text-anchor"; "end")
DOM SET XML ATTRIBUTE:C866($elemRef; "x"; $valObj.x+$valObj.width-2-Num:C11($valObj.paddingRight); "text-anchor"; "end")

End case

Expand Down Expand Up @@ -1433,11 +1437,11 @@ End for each
DOM GET XML ATTRIBUTE BY NAME:C728($elemRef; "y"; $yPos)
$part1Ref:=DOM Create XML element:C865($elemRef; "text"; "style"; $styleStr)
$part2Ref:=DOM Create XML element:C865($elemRef; "text"; "style"; $styleStr)
DOM SET XML ATTRIBUTE:C866($part1Ref; "x"; $valObj.x+2; "y"; $yPos)
DOM SET XML ATTRIBUTE:C866($part1Ref; "x"; $valObj.x+2+Num:C11($valObj.paddingLeft); "y"; $yPos)
If ($valObj.textOrientation#0) & ($valObj.textOrientation#NONE_TEXT_ORIENTATION)
DOM SET XML ATTRIBUTE:C866($part2Ref; "x"; $valObj.x+svg_getTextWidth($valObj.strPart.part1)+2; "y"; $yPos)
Else
DOM SET XML ATTRIBUTE:C866($part2Ref; "x"; $valObj.x+$valObj.width; "y"; $yPos; "text-anchor"; "end")
DOM SET XML ATTRIBUTE:C866($part2Ref; "x"; $valObj.x+$valObj.width-Num:C11($valObj.paddingRight); "y"; $yPos; "text-anchor"; "end")
End if
DOM SET XML ELEMENT VALUE:C868($part2Ref; $valObj.strPart.part2)
DOM SET XML ELEMENT VALUE:C868($part1Ref; $valObj.strPart.part1)
Expand Down
18 changes: 17 additions & 1 deletion Project/Sources/Methods/vp_getCellRange.4dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//%attributes = {"invisible":true,"preemptive":"capable"}
C_OBJECT:C1216($1; $vpObject; $2; $cells; $sheets; $workbook; $table)
C_OBJECT:C1216($1; $vpObject; $2; $cells; $sheets; $workbook; $table; $sheetTable)
C_LONGINT:C283($biggestCol; $biggestRow)
C_OBJECT:C1216($range; $0)
C_TEXT:C284($s; $currentCol; $currentRow)
Expand Down Expand Up @@ -155,6 +155,22 @@ If ($cells=Null:C1517)
End for each
End if

// the empty cells of the tables are drawn too (banded rows, borders...)
If (Value type:C1509($sheets.tables)=Is collection:K8:32)
For each ($sheetTable; $sheets.tables)
If (Value type:C1509($sheetTable.row)=Is real:K8:4) & (Value type:C1509($sheetTable.rowCount)=Is real:K8:4)
If (($sheetTable.row+$sheetTable.rowCount-1)>$biggestCol)
$biggestCol:=$sheetTable.row+$sheetTable.rowCount-1
End if
End if
If (Value type:C1509($sheetTable.col)=Is real:K8:4) & (Value type:C1509($sheetTable.colCount)=Is real:K8:4)
If (($sheetTable.col+$sheetTable.colCount-1)>$biggestRow)
$biggestRow:=$sheetTable.col+$sheetTable.colCount-1
End if
End if
End for each
End if

$range.x1:=0
$range.x2:=$biggestRow
$range.y1:=0
Expand Down
Loading
Loading