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