xref: /trunk/test/odf-validate/fixtures/t14/table_cell_fill.py (revision 33443b8350c038a180103a94fc9fbf96caa7f367)
1*33443b83SJim Jagielski#**************************************************************
2*33443b83SJim Jagielski#
3*33443b83SJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*33443b83SJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*33443b83SJim Jagielski#  distributed with this work for additional information
6*33443b83SJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*33443b83SJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*33443b83SJim Jagielski#  "License"); you may not use this file except in compliance
9*33443b83SJim Jagielski#  with the License.  You may obtain a copy of the License at
10*33443b83SJim Jagielski#
11*33443b83SJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*33443b83SJim Jagielski#
13*33443b83SJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*33443b83SJim Jagielski#  software distributed under the License is distributed on an
15*33443b83SJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*33443b83SJim Jagielski#  KIND, either express or implied.  See the License for the
17*33443b83SJim Jagielski#  specific language governing permissions and limitations
18*33443b83SJim Jagielski#  under the License.
19*33443b83SJim Jagielski
20*33443b83SJim Jagielski# usage: run-in-mode.sh <mode> <port> <outdir> fixtures/t14/table_cell_fill.py [<file.odp>]
21*33443b83SJim Jagielski# no file: writes <outdir>/table-cell-fill-<mode>.odp with an Impress table whose cells carry a solid fill with
22*33443b83SJim Jagielski#          transparency, a gradient, a hatch and no fill, in the office's current save mode.
23*33443b83SJim Jagielski# file:    loads that file and prints the fill of those cells.
24*33443b83SJim Jagielskiimport os, sys
25*33443b83SJim Jagielskiimport uno
26*33443b83SJim Jagielskifrom unohelp import FILTERS, connect, desktop, pv
27*33443b83SJim Jagielski
28*33443b83SJim Jagielskiport, out, tag = int(sys.argv[1]), os.path.abspath(sys.argv[2]), sys.argv[3]
29*33443b83SJim Jagielskios.makedirs(out, exist_ok=True)
30*33443b83SJim Jagielskidesk = desktop(connect(port))
31*33443b83SJim Jagielskidst = os.path.abspath(sys.argv[4]) if len(sys.argv) > 4 else os.path.join(out, "table-cell-fill-%s.odp" % tag)
32*33443b83SJim Jagielskiphase = "reload" if len(sys.argv) > 4 else "make"
33*33443b83SJim Jagielskiurl = uno.systemPathToFileUrl
34*33443b83SJim Jagielski
35*33443b83SJim Jagielski
36*33443b83SJim Jagielskidef fe(name):
37*33443b83SJim Jagielski    return uno.Enum("com.sun.star.drawing.FillStyle", name)
38*33443b83SJim Jagielski
39*33443b83SJim Jagielski
40*33443b83SJim Jagielskidef show(label, cell):
41*33443b83SJim Jagielski    kind = cell.FillStyle.value
42*33443b83SJim Jagielski    line = [label, kind]
43*33443b83SJim Jagielski    if kind == "SOLID":
44*33443b83SJim Jagielski        line += ["0x%06x" % cell.FillColor, cell.FillTransparence]
45*33443b83SJim Jagielski    elif kind == "GRADIENT":
46*33443b83SJim Jagielski        g = cell.FillGradient
47*33443b83SJim Jagielski        line += [g.Style.value, hex(g.StartColor), hex(g.EndColor), g.Angle]
48*33443b83SJim Jagielski    elif kind == "HATCH":
49*33443b83SJim Jagielski        h = cell.FillHatch
50*33443b83SJim Jagielski        line += [h.Style.value, hex(h.Color), h.Distance, h.Angle]
51*33443b83SJim Jagielski    print(*line)
52*33443b83SJim Jagielski
53*33443b83SJim Jagielski
54*33443b83SJim Jagielskidef cells(shape):
55*33443b83SJim Jagielski    tbl = shape.Model
56*33443b83SJim Jagielski    return [("c%d" % i, tbl.getCellByPosition(i % 2, i // 2)) for i in range(4)]
57*33443b83SJim Jagielski
58*33443b83SJim Jagielski
59*33443b83SJim Jagielskiif phase == "make":
60*33443b83SJim Jagielski    doc = desk.loadComponentFromURL("private:factory/simpress", "_blank", 0, (pv("Hidden", True),))
61*33443b83SJim Jagielski    page = doc.DrawPages.getByIndex(0)
62*33443b83SJim Jagielski    shape = doc.createInstance("com.sun.star.drawing.TableShape")
63*33443b83SJim Jagielski    page.add(shape)
64*33443b83SJim Jagielski    shape.Position = uno.createUnoStruct("com.sun.star.awt.Point", 2000, 2000)
65*33443b83SJim Jagielski    shape.Size = uno.createUnoStruct("com.sun.star.awt.Size", 12000, 6000)
66*33443b83SJim Jagielski    tbl = shape.Model
67*33443b83SJim Jagielski    tbl.Columns.insertByIndex(1, 1)
68*33443b83SJim Jagielski    tbl.Rows.insertByIndex(1, 1)
69*33443b83SJim Jagielski    print("table", tbl.Columns.Count, "x", tbl.Rows.Count)
70*33443b83SJim Jagielski    cs = cells(shape)
71*33443b83SJim Jagielski    c0, c1, c2, c3 = [c for _, c in cs]
72*33443b83SJim Jagielski    c0.FillStyle = fe("SOLID"); c0.FillColor = 0x3355aa; c0.FillTransparence = 40
73*33443b83SJim Jagielski    g = uno.createUnoStruct("com.sun.star.awt.Gradient")
74*33443b83SJim Jagielski    g.Style = uno.Enum("com.sun.star.awt.GradientStyle", "LINEAR")
75*33443b83SJim Jagielski    g.StartColor, g.EndColor, g.Angle = 0xff0000, 0x0000ff, 300
76*33443b83SJim Jagielski    g.Border, g.XOffset, g.YOffset, g.StartIntensity, g.EndIntensity, g.StepCount = 5, 50, 50, 100, 100, 0
77*33443b83SJim Jagielski    c1.FillStyle = fe("GRADIENT"); c1.FillGradient = g
78*33443b83SJim Jagielski    h = uno.createUnoStruct("com.sun.star.drawing.Hatch")
79*33443b83SJim Jagielski    h.Style = uno.Enum("com.sun.star.drawing.HatchStyle", "SINGLE")
80*33443b83SJim Jagielski    h.Color, h.Distance, h.Angle = 0x00aa00, 200, 450
81*33443b83SJim Jagielski    c2.FillStyle = fe("HATCH"); c2.FillHatch = h
82*33443b83SJim Jagielski    c3.FillStyle = fe("NONE")
83*33443b83SJim Jagielski    for n, c in cs:
84*33443b83SJim Jagielski        show(n, c)
85*33443b83SJim Jagielski    if os.path.exists(dst):
86*33443b83SJim Jagielski        os.remove(dst)
87*33443b83SJim Jagielski    doc.storeToURL(url(dst), (pv("FilterName", FILTERS["odp"]), pv("Overwrite", True)))
88*33443b83SJim Jagielski    doc.close(True)
89*33443b83SJim Jagielski    print("stored", dst)
90*33443b83SJim Jagielskielse:
91*33443b83SJim Jagielski    doc = desk.loadComponentFromURL(url(dst), "_blank", 0, (pv("Hidden", True),))
92*33443b83SJim Jagielski    page = doc.DrawPages.getByIndex(0)
93*33443b83SJim Jagielski    shape = [page.getByIndex(i) for i in range(page.Count) if page.getByIndex(i).ShapeType.endswith("TableShape")][0]
94*33443b83SJim Jagielski    for n, c in cells(shape):
95*33443b83SJim Jagielski        show(n, c)
96*33443b83SJim Jagielski    doc.close(True)
97