.NET Bindings: Ported examples for Native bridge
This patch include the following SDK examples ported to .NET to test the new Native bridge: - FirstLoadComponent - HelloTextTableShape - PathSettings - PathSubstitution - TerminationTest - WriterDemo The examples include VB.NET and F# as well to test support for non-C# .NET languages. Change-Id: I044df4777c7c091241d5b4284f4b6ee6c5de74f7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172778 Tested-by: Jenkins Reviewed-by: Hossein <hossein@libreoffice.org>
This commit is contained in:
parent
c3c7b48fa9
commit
b4289da0b4
21 changed files with 1717 additions and 4 deletions
|
@ -33,7 +33,7 @@ my_example_dirs_java = \
|
|||
DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilterDetection \
|
||||
DevelopersGuide/OfficeDev/FilterDevelopment/FlatXmlFilter_java \
|
||||
DevelopersGuide/OfficeDev/Linguistic \
|
||||
DevelopersGuide/OfficeDev/PathSettings \
|
||||
DevelopersGuide/OfficeDev/PathSettings/java \
|
||||
DevelopersGuide/OfficeDev/PathSubstitution/java \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/java \
|
||||
DevelopersGuide/ProfUNO/InterprocessConn \
|
||||
|
|
|
@ -189,6 +189,8 @@ $(eval $(call gb_Package_add_files_with_dir,odk_examples,$(SDKDIRNAME)/examples,
|
|||
DevelopersGuide/FirstSteps/FirstUnoContact/python/FirstUnoContact.py \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/cxx/FirstLoadComponent.cxx \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/cxx/Makefile \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/csharp/FirstLoadComponent.cs \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/csharp/Makefile \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/java/FirstLoadComponent.java \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/java/Makefile \
|
||||
DevelopersGuide/FirstSteps/FirstLoadComponent/basic/FirstLoadComponent.bas \
|
||||
|
@ -196,6 +198,8 @@ $(eval $(call gb_Package_add_files_with_dir,odk_examples,$(SDKDIRNAME)/examples,
|
|||
DevelopersGuide/FirstSteps/FirstLoadComponent/python/DualComponentLoader.py \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/cxx/HelloTextTableShape.cxx \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/cxx/Makefile \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/csharp/HelloTextTableShape.cs \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/csharp/Makefile \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/java/HelloTextTableShape.java \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/java/Makefile \
|
||||
DevelopersGuide/FirstSteps/HelloTextTableShape/basic/HelloTextTableShape.bas \
|
||||
|
@ -324,13 +328,20 @@ $(eval $(call gb_Package_add_files_with_dir,odk_examples,$(SDKDIRNAME)/examples,
|
|||
DevelopersGuide/OfficeDev/MenuElement.java \
|
||||
DevelopersGuide/OfficeDev/Number_Formats.java \
|
||||
DevelopersGuide/OfficeDev/OfficeConnect.java \
|
||||
DevelopersGuide/OfficeDev/PathSettings/Makefile \
|
||||
DevelopersGuide/OfficeDev/PathSettings/PathSettingsTest.java \
|
||||
DevelopersGuide/OfficeDev/PathSettings/csharp/Makefile \
|
||||
DevelopersGuide/OfficeDev/PathSettings/csharp/PathSettingsTest.cs \
|
||||
DevelopersGuide/OfficeDev/PathSettings/java/Makefile \
|
||||
DevelopersGuide/OfficeDev/PathSettings/java/PathSettingsTest.java \
|
||||
DevelopersGuide/OfficeDev/PathSubstitution/csharp/Makefile \
|
||||
DevelopersGuide/OfficeDev/PathSubstitution/csharp/PathSubstitutionTest.cs \
|
||||
DevelopersGuide/OfficeDev/PathSubstitution/java/Makefile \
|
||||
DevelopersGuide/OfficeDev/PathSubstitution/java/PathSubstitutionTest.java \
|
||||
DevelopersGuide/OfficeDev/PathSubstitution/python/path_substitution_test.py \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/cxx/Makefile \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/cxx/TerminationTest.cxx \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/csharp/Makefile \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/csharp/TerminateListener.cs \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/csharp/TerminationTest.cs \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/java/Makefile \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/java/TerminateListener.java \
|
||||
DevelopersGuide/OfficeDev/TerminationTest/java/TerminationTest.java \
|
||||
|
@ -466,6 +477,12 @@ $(eval $(call gb_Package_add_files_with_dir,odk_examples,$(SDKDIRNAME)/examples,
|
|||
cpp/counter/countermain.cxx \
|
||||
cpp/remoteclient/Makefile \
|
||||
cpp/remoteclient/remoteclient.cxx \
|
||||
dotnet/WriterDemo/csharp/Makefile \
|
||||
dotnet/WriterDemo/csharp/WriterDemo.cs \
|
||||
dotnet/WriterDemo/fsharp/Makefile \
|
||||
dotnet/WriterDemo/fsharp/WriterDemo.fs \
|
||||
dotnet/WriterDemo/vbasic/Makefile \
|
||||
dotnet/WriterDemo/vbasic/WriterDemo.vb \
|
||||
java/DocumentHandling/DocumentConverter.java \
|
||||
java/DocumentHandling/DocumentLoader.java \
|
||||
java/DocumentHandling/DocumentPrinter.java \
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.beans;
|
||||
using com.sun.star.container;
|
||||
using com.sun.star.frame;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.sheet;
|
||||
using com.sun.star.table;
|
||||
using com.sun.star.uno;
|
||||
|
||||
try
|
||||
{
|
||||
XComponentContext xContext = NativeBootstrap.bootstrap();
|
||||
if (xContext is null)
|
||||
Console.Error.WriteLine("Could not bootstrap office");
|
||||
|
||||
XMultiComponentFactory xServiceManager = xContext.getServiceManager();
|
||||
|
||||
IQueryInterface desktop = xServiceManager
|
||||
.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
|
||||
XComponentLoader xComponentLoader = desktop.query<XComponentLoader>();
|
||||
|
||||
PropertyValue[] loadProps = Array.Empty<PropertyValue>();
|
||||
XComponent xSpreadsheetComponent = xComponentLoader
|
||||
.loadComponentFromURL("private:factory/scalc", "_blank", 0, loadProps);
|
||||
|
||||
XSpreadsheetDocument xSpreadsheetDocument = xSpreadsheetComponent
|
||||
.query<XSpreadsheetDocument>();
|
||||
|
||||
XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
|
||||
xSpreadsheets.insertNewByName("MySheet", 0);
|
||||
Type elemType = xSpreadsheets.getElementType();
|
||||
Console.WriteLine(elemType.FullName);
|
||||
|
||||
Any sheet = xSpreadsheets.getByName("MySheet");
|
||||
XSpreadsheet xSpreadsheet = sheet.castOrDefault<XSpreadsheet>();
|
||||
|
||||
XCell xCell = xSpreadsheet.getCellByPosition(0, 0);
|
||||
xCell.setValue(21);
|
||||
xCell = xSpreadsheet.getCellByPosition(0, 1);
|
||||
xCell.setValue(21);
|
||||
xCell = xSpreadsheet.getCellByPosition(0, 2);
|
||||
xCell.setFormula("=sum(A1:A2)");
|
||||
|
||||
XPropertySet xCellProps = xCell.query<XPropertySet>();
|
||||
xCellProps.setPropertyValue("CellStyle", new Any("Result"));
|
||||
|
||||
XModel xSpreadsheetModel = xSpreadsheetComponent.query<XModel>();
|
||||
XController xSpreadsheetController = xSpreadsheetModel.getCurrentController();
|
||||
XSpreadsheetView xSpreadsheetView = xSpreadsheetController.query<XSpreadsheetView>();
|
||||
xSpreadsheetView.setActiveSheet(xSpreadsheet);
|
||||
|
||||
// Example usage of enum values
|
||||
xCellProps.setPropertyValue("VertJustify", new Any(CellVertJustify.TOP));
|
||||
|
||||
// Example usage of PropertyValue structs
|
||||
loadProps = new PropertyValue[1]
|
||||
{
|
||||
new PropertyValue()
|
||||
{
|
||||
Name = "AsTemplate",
|
||||
Value = new Any(true),
|
||||
}
|
||||
};
|
||||
|
||||
// Uncomment to load a Calc file as template
|
||||
//xSpreadsheetComponent = xComponentLoader.loadComponentFromURL(
|
||||
// "file:///c:/temp/DataAnalysys.ods", "_blank", 0, loadProps);
|
||||
|
||||
// Example usage of XEnumerationAccess
|
||||
XCellRangesQuery xCellQuery = sheet.castOrDefault<XCellRangesQuery>();
|
||||
XSheetCellRanges xFormulaCells = xCellQuery.queryContentCells(CellFlags.FORMULA);
|
||||
XEnumerationAccess xFormulas = xFormulaCells.getCells();
|
||||
XEnumeration xFormulaEnum = xFormulas.createEnumeration();
|
||||
|
||||
while (xFormulaEnum.hasMoreElements())
|
||||
{
|
||||
Any formulaCell = xFormulaEnum.nextElement();
|
||||
xCell = formulaCell.castOrDefault<XCell>();
|
||||
XCellAddressable xCellAddress = xCell.query<XCellAddressable>();
|
||||
Console.WriteLine($"Formula cell in column {xCellAddress.getCellAddress().Column}, row {xCellAddress.getCellAddress().Row} contains {xCell.getFormula()}");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (UnoException e)
|
||||
{
|
||||
Console.Error.WriteLine(e.Message);
|
||||
|
||||
return 1;
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
# Builds the FirstLoadComponent example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = FirstLoadComponent
|
||||
APP_LANG = cs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
|
@ -0,0 +1,300 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.awt;
|
||||
using com.sun.star.beans;
|
||||
using com.sun.star.container;
|
||||
using com.sun.star.drawing;
|
||||
using com.sun.star.frame;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.sheet;
|
||||
using com.sun.star.table;
|
||||
using com.sun.star.text;
|
||||
using com.sun.star.uno;
|
||||
|
||||
XComponentContext xRemoteContext = null;
|
||||
XMultiComponentFactory xRemoteServiceManager = null;
|
||||
|
||||
try
|
||||
{
|
||||
UseWriter();
|
||||
UseCalc();
|
||||
UseDraw();
|
||||
return 0;
|
||||
}
|
||||
catch (UnoException e)
|
||||
{
|
||||
Console.Error.WriteLine(e.Message);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void UseWriter()
|
||||
{
|
||||
// Create a new Writer document, and manipulate the text content
|
||||
XComponent xWriterComponent = NewDocComponent("swriter");
|
||||
XTextDocument xTextDocument = xWriterComponent.query<XTextDocument>();
|
||||
XText xText = xTextDocument.getText();
|
||||
|
||||
ManipulateText(xText);
|
||||
|
||||
// Get the internal service factory of the document
|
||||
XMultiServiceFactory xWriterFactory = xTextDocument.query<XMultiServiceFactory>();
|
||||
|
||||
// Insert a TextTable, and manipulate the text content of the cell
|
||||
XTextContent xTextContentTable = xWriterFactory.createInstance("com.sun.star.text.TextTable").query<XTextContent>();
|
||||
xText.insertTextContent(xText.getEnd(), xTextContentTable, false);
|
||||
|
||||
XCellRange xCellRange = xTextContentTable.query<XCellRange>();
|
||||
XCell xCell = xCellRange.getCellByPosition(0, 1);
|
||||
XText xCellText = xCell.query<XText>();
|
||||
|
||||
ManipulateText(xCellText);
|
||||
ManipulateTable(xCellRange);
|
||||
|
||||
XShape xWriterShape = xWriterFactory.createInstance("com.sun.star.drawing.RectangleShape").query<XShape>();
|
||||
xWriterShape.setSize(new Size(10000, 10000));
|
||||
XTextContent xTextContentShape = xWriterShape.query<XTextContent>();
|
||||
|
||||
xText.insertTextContent(xText.getEnd(), xTextContentShape, false);
|
||||
|
||||
// Wrap the text inside the shape
|
||||
XPropertySet xShapeProps = xWriterShape.query<XPropertySet>();
|
||||
xShapeProps.setPropertyValue("TextContourFrame", new Any(true));
|
||||
|
||||
XText xShapeText = xWriterShape.query<XText>();
|
||||
|
||||
ManipulateText(xShapeText);
|
||||
ManipulateShape(xWriterShape);
|
||||
|
||||
// Create and name a bookmark
|
||||
IQueryInterface bookmark = xWriterFactory.createInstance("com.sun.star.text.Bookmark");
|
||||
XNamed xNamed = bookmark.query<XNamed>();
|
||||
xNamed.setName("MyUniqueBookmarkName");
|
||||
|
||||
// Insert the bookmark at the end of the document
|
||||
XTextContent xTextContent = bookmark.query<XTextContent>();
|
||||
xText.insertTextContent(xText.getEnd(), xTextContent, false);
|
||||
|
||||
// Get all bookmarks from the XBookmarksSupplier
|
||||
XBookmarksSupplier xBookmarksSupplier = xWriterComponent.query<XBookmarksSupplier>();
|
||||
XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
|
||||
XTextContent xFoundBookmark = xNamedBookmarks.getByName("MyUniqueBookmarkName").cast<XTextContent>();
|
||||
XTextRange xFound = xFoundBookmark.getAnchor();
|
||||
xFound.setString(" The throat mike, glued to her neck, "
|
||||
+ "looked as much as possible like an analgesic dermadisk.");
|
||||
|
||||
// Get all tables from the XTextTablesSupplier
|
||||
XTextTablesSupplier xTablesSupplier = xWriterComponent.query<XTextTablesSupplier>();
|
||||
XNameAccess xNamedTables = xTablesSupplier.getTextTables();
|
||||
XIndexAccess xIndexedTables = xNamedTables.query<XIndexAccess>();
|
||||
|
||||
// Get the tables
|
||||
XPropertySet xTableProps = null;
|
||||
for (int i = 0; i < xIndexedTables.getCount(); i++)
|
||||
{
|
||||
xTableProps = xIndexedTables.getByIndex(i).cast<XPropertySet>();
|
||||
xTableProps.setPropertyValue("BackColor", new Any(0xC8FFB9));
|
||||
}
|
||||
}
|
||||
|
||||
void UseCalc()
|
||||
{
|
||||
// Create a new Calc document, and manipulate text in a cell
|
||||
XComponent xCalcComponent = NewDocComponent("scalc");
|
||||
XSpreadsheetDocument xCalcDocument = xCalcComponent.query<XSpreadsheetDocument>();
|
||||
XSpreadsheetDocument xSpreadsheetDocument = xCalcDocument.query<XSpreadsheetDocument>();
|
||||
|
||||
XIndexAccess xIndexedSheets = xSpreadsheetDocument.getSheets().query<XIndexAccess>();
|
||||
XCellRange xSpreadsheetCells = xIndexedSheets.getByIndex(0).cast<XCellRange>();
|
||||
|
||||
// Get cell A2 from the first sheet
|
||||
XCell xCell = xSpreadsheetCells.getCellByPosition(0, 1);
|
||||
XText xCellText = xCell.query<XText>();
|
||||
|
||||
XPropertySet xCellProps = xCell.query<XPropertySet>();
|
||||
xCellProps.setPropertyValue("IsTextWrapped", new Any(true));
|
||||
|
||||
ManipulateText(xCellText);
|
||||
ManipulateTable(xSpreadsheetCells);
|
||||
|
||||
// Get the internal service factory of the document
|
||||
XMultiServiceFactory xCalcFactory = xCalcDocument.query<XMultiServiceFactory>();
|
||||
XDrawPageSupplier xDrawPageSupplier = xIndexedSheets.getByIndex(0).cast<XDrawPageSupplier>();
|
||||
XDrawPage xDrawPage = xDrawPageSupplier.getDrawPage();
|
||||
|
||||
// Create and insert a RectangleShape, and manipulate its shape text
|
||||
XShape xCalcShape = xCalcFactory.createInstance("com.sun.star.drawing.RectangleShape").query<XShape>();
|
||||
xCalcShape.setSize(new Size(10000, 10000));
|
||||
xCalcShape.setPosition(new Point(7000, 3000));
|
||||
xDrawPage.add(xCalcShape);
|
||||
|
||||
// Wrap the text inside the shape
|
||||
XPropertySet xShapeProps = xCalcShape.query<XPropertySet>();
|
||||
xShapeProps.setPropertyValue("TextContourFrame", new Any(true));
|
||||
|
||||
XText xShapeText = xCalcShape.query<XText>();
|
||||
ManipulateText(xShapeText);
|
||||
ManipulateShape(xCalcShape);
|
||||
}
|
||||
|
||||
void UseDraw()
|
||||
{
|
||||
// Create a new Draw document, and insert a rectangle
|
||||
XComponent xDrawComponent = NewDocComponent("sdraw");
|
||||
XDrawPagesSupplier xDrawPagesSupplier = xDrawComponent.query<XDrawPagesSupplier>();
|
||||
|
||||
XIndexAccess xIndexedDrawPages = xDrawPagesSupplier.getDrawPages();
|
||||
XDrawPage xDrawPage = xIndexedDrawPages.getByIndex(0).cast<XDrawPage>();
|
||||
|
||||
// Get the internal service factory of the document
|
||||
XMultiServiceFactory xDrawFactory = xDrawComponent.query<XMultiServiceFactory>();
|
||||
XShape xDrawShape = xDrawFactory.createInstance("com.sun.star.drawing.RectangleShape").query<XShape>();
|
||||
xDrawShape.setSize(new Size(10000, 20000));
|
||||
xDrawShape.setPosition(new Point(5000, 5000));
|
||||
xDrawPage.add(xDrawShape);
|
||||
|
||||
// Wrap the text inside the shape
|
||||
XPropertySet xShapeProps = xDrawShape.query<XPropertySet>();
|
||||
xShapeProps.setPropertyValue("TextContourFrame", new Any(true));
|
||||
|
||||
XText xShapeText = xDrawShape.query<XText>();
|
||||
ManipulateText(xShapeText);
|
||||
ManipulateShape(xDrawShape);
|
||||
}
|
||||
|
||||
void ManipulateText(XText xText)
|
||||
{
|
||||
// Set the entire text at once
|
||||
xText.setString("He lay flat on the brown, pine-needled floor of the forest, "
|
||||
+ "his chin on his folded arms, and high overhead the wind blew in the tops "
|
||||
+ "of the pine trees.");
|
||||
|
||||
// Create a text cursor for selecting and formatting
|
||||
XTextCursor xTextCursor = xText.createTextCursor();
|
||||
XPropertySet xCursorProps = xTextCursor.query<XPropertySet>();
|
||||
|
||||
// Use the cursor to select "He lay", and apply bold and italic formatting
|
||||
xTextCursor.gotoStart(false);
|
||||
xTextCursor.goRight(6, true);
|
||||
|
||||
xCursorProps.setPropertyValue("CharPosture", new Any(FontSlant.ITALIC));
|
||||
xCursorProps.setPropertyValue("CharWeight", new Any(FontWeight.BOLD));
|
||||
|
||||
xTextCursor.gotoEnd(false);
|
||||
xText.insertString(xTextCursor.getStart(),
|
||||
" The mountainside sloped gently where he lay; "
|
||||
+ "but below it was steep and he could see the dark of the oiled road "
|
||||
+ "winding through the pass. There was a stream alongside the road "
|
||||
+ "and far down the pass he saw a mill beside the stream and the falling water "
|
||||
+ "of the dam, white in the summer sunlight.", false);
|
||||
xText.insertString(xTextCursor.getStart(), "\n \"Is that the mill?\" he asked.", false);
|
||||
}
|
||||
|
||||
void ManipulateTable(XCellRange xCellRange)
|
||||
{
|
||||
// Set column titles and a cell value
|
||||
XCell xCell = xCellRange.getCellByPosition(0, 0);
|
||||
XText xCellText = xCell.query<XText>();
|
||||
xCellText.setString("Quotation");
|
||||
|
||||
xCell = xCellRange.getCellByPosition(1, 0);
|
||||
xCellText = xCell.query<XText>();
|
||||
xCellText.setString("Year");
|
||||
|
||||
xCell = xCellRange.getCellByPosition(1, 1);
|
||||
xCell.setValue(1940);
|
||||
|
||||
XCellRange xSelectedCells = xCellRange.getCellRangeByName("A1:B1");
|
||||
XPropertySet xCellProps = xSelectedCells.query<XPropertySet>();
|
||||
|
||||
string backColorPropertyName = null;
|
||||
XPropertySet xTableProps = null;
|
||||
|
||||
// Format the table headers and borders
|
||||
XServiceInfo xServiceInfo = xCellRange.query<XServiceInfo>();
|
||||
if (xServiceInfo.supportsService("com.sun.star.sheet.Spreadsheet"))
|
||||
{
|
||||
backColorPropertyName = "CellBackColor";
|
||||
xSelectedCells = xCellRange.getCellRangeByName("A1:B2");
|
||||
xTableProps = xSelectedCells.query<XPropertySet>();
|
||||
}
|
||||
else if (xServiceInfo.supportsService("com.sun.star.text.TextTable"))
|
||||
{
|
||||
backColorPropertyName = "BackColor";
|
||||
xTableProps = xCellRange.query<XPropertySet>();
|
||||
}
|
||||
// Set cell background color
|
||||
xCellProps.setPropertyValue(backColorPropertyName, new Any(0x99CCFF));
|
||||
|
||||
// Set table borders (blue line, width 10)
|
||||
BorderLine theLine = new BorderLine()
|
||||
{
|
||||
Color = 0x000099,
|
||||
OuterLineWidth = 10,
|
||||
};
|
||||
|
||||
// Use the above defined line for all borders and enable them
|
||||
TableBorder bord = new TableBorder()
|
||||
{
|
||||
VerticalLine = theLine,
|
||||
HorizontalLine = theLine,
|
||||
LeftLine = theLine,
|
||||
RightLine = theLine,
|
||||
TopLine = theLine,
|
||||
BottomLine = theLine,
|
||||
|
||||
IsVerticalLineValid = true,
|
||||
IsHorizontalLineValid = true,
|
||||
IsLeftLineValid = true,
|
||||
IsRightLineValid = true,
|
||||
IsTopLineValid = true,
|
||||
IsBottomLineValid = true,
|
||||
};
|
||||
xTableProps.setPropertyValue("TableBorder", new Any(bord));
|
||||
|
||||
bord = xTableProps.getPropertyValue("TableBorder").cast<TableBorder>();
|
||||
Console.WriteLine(bord.TopLine.Color);
|
||||
}
|
||||
|
||||
void ManipulateShape(XShape xShape)
|
||||
{
|
||||
XPropertySet xShapeProps = xShape.query<XPropertySet>();
|
||||
xShapeProps.setPropertyValue("FillColor", new Any(0x99CCFF));
|
||||
xShapeProps.setPropertyValue("LineColor", new Any(0x000099));
|
||||
xShapeProps.setPropertyValue("RotateAngle", new Any(3000));
|
||||
xShapeProps.setPropertyValue("TextLeftDistance", new Any(0));
|
||||
xShapeProps.setPropertyValue("TextRightDistance", new Any(0));
|
||||
xShapeProps.setPropertyValue("TextUpperDistance", new Any(0));
|
||||
xShapeProps.setPropertyValue("TextLowerDistance", new Any(0));
|
||||
}
|
||||
|
||||
XComponent NewDocComponent(string docType)
|
||||
{
|
||||
XMultiComponentFactory xRemoteServiceManager = GetRemoteServiceManager();
|
||||
|
||||
XComponentLoader xComponentLoader = xRemoteServiceManager
|
||||
.createInstanceWithContext("com.sun.star.frame.Desktop", xRemoteContext)
|
||||
.query<XComponentLoader>();
|
||||
|
||||
string loadUrl = $"private:factory/{docType}";
|
||||
return xComponentLoader.loadComponentFromURL(loadUrl, "_blank", 0, new PropertyValue[0]);
|
||||
}
|
||||
|
||||
XMultiComponentFactory GetRemoteServiceManager()
|
||||
{
|
||||
if (xRemoteContext == null && xRemoteServiceManager == null)
|
||||
{
|
||||
xRemoteContext = NativeBootstrap.bootstrap();
|
||||
Console.WriteLine("Connected to a running office ...");
|
||||
|
||||
xRemoteServiceManager = xRemoteContext.getServiceManager();
|
||||
}
|
||||
return xRemoteServiceManager;
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
# Builds the HelloTextTableShape example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = HelloTextTableShape
|
||||
APP_LANG = cs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
|
@ -0,0 +1,75 @@
|
|||
# Builds the PathSettingsTest example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = PathSettingsTest
|
||||
APP_LANG = cs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.beans;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.uno;
|
||||
using com.sun.star.util;
|
||||
|
||||
// List of pre-defined path variables supported by the PathSettings service
|
||||
string[] predefinedPathProperties =
|
||||
{
|
||||
"Addin", "AutoCorrect", "AutoText", "Backup", "Basic",
|
||||
"Bitmap", "Config", "Dictionary", "Favorite", "Filter",
|
||||
"Gallery", "Graphic", "Help", "Linguistic", "Module",
|
||||
"Palette", "Plugin", "Storage", "Temp", "Template",
|
||||
"UIConfig", "UserConfig", "UserDictionary", "Work"
|
||||
};
|
||||
|
||||
// Provides an example for accessing and using the PathSettings service
|
||||
try
|
||||
{
|
||||
// Start a new office process and get the remote office context
|
||||
XComponentContext context = NativeBootstrap.bootstrap();
|
||||
Console.WriteLine("Connected to a running office...");
|
||||
|
||||
XPropertySet pathSettings = thePathSettings.get(context);
|
||||
WorkWithPathSettings(pathSettings);
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.Error.WriteLine(e);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Retrieve and set path properties using the PathSettings service
|
||||
void WorkWithPathSettings(XPropertySet pathSettings)
|
||||
{
|
||||
if (pathSettings != null)
|
||||
{
|
||||
foreach (string prop in predefinedPathProperties)
|
||||
{
|
||||
try
|
||||
{
|
||||
string value = pathSettings.getPropertyValue(prop).cast<string>();
|
||||
Console.WriteLine($"Property = {prop} | Path = {value}");
|
||||
}
|
||||
catch (UnknownPropertyException)
|
||||
{
|
||||
Console.Error.WriteLine($"UnknownPropertyException was thrown while accessing {prop}");
|
||||
}
|
||||
catch (WrappedTargetException)
|
||||
{
|
||||
Console.Error.WriteLine($"WrappedTargetException was thrown while accessing {prop}");
|
||||
}
|
||||
}
|
||||
|
||||
// Try to modify the work path property.
|
||||
// After running this example you should see the new value of "My Documents"
|
||||
// in the Paths tab, accessible via "Tools - Options - LibreOffice - Paths".
|
||||
// The change can be reverted through the Paths tab as well.
|
||||
try
|
||||
{
|
||||
pathSettings.setPropertyValue("Work", new Any("$(temp)"));
|
||||
string value = pathSettings.getPropertyValue("Work").cast<string>();
|
||||
Console.WriteLine("Note: The example changes your current work path setting!");
|
||||
Console.WriteLine($"The work path should now be {value}");
|
||||
}
|
||||
catch (UnknownPropertyException)
|
||||
{
|
||||
Console.Error.WriteLine("UnknownPropertyException was thrown while setting Work path");
|
||||
}
|
||||
catch (WrappedTargetException)
|
||||
{
|
||||
Console.Error.WriteLine("WrappedTargetException was thrown while setting Work path");
|
||||
}
|
||||
catch (PropertyVetoException)
|
||||
{
|
||||
Console.Error.WriteLine("PropertyVetoException was thrown while setting Work path");
|
||||
}
|
||||
catch (IllegalArgumentException)
|
||||
{
|
||||
Console.Error.WriteLine("IllegalArgumentException was thrown while setting Work path");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
# Builds the OfficeDevPathSettingsTest example of the Developers Guide.
|
||||
|
||||
PRJ=../../../..
|
||||
PRJ=../../../../..
|
||||
SETTINGS=$(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
|
@ -0,0 +1,75 @@
|
|||
# Builds the PathSubstitutionTest example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = PathSubstitutionTest
|
||||
APP_LANG = cs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.beans;
|
||||
using com.sun.star.container;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.uno;
|
||||
using com.sun.star.util;
|
||||
|
||||
// List of pre-defined path variables supported by the path substitution service
|
||||
string[] predefinedPathVariables =
|
||||
{
|
||||
"$(home)","$(inst)","$(prog)","$(temp)","$(user)", "$(username)",
|
||||
"$(work)","$(path)","$(langid)","$(vlang)"
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
// Start a new office process and get the remote office context
|
||||
XComponentContext context = NativeBootstrap.bootstrap();
|
||||
Console.WriteLine("Connected to a running office...");
|
||||
|
||||
XStringSubstitution pathSubst = context.getServiceManager()
|
||||
.createInstanceWithContext("com.sun.star.comp.framework.PathSubstitution", context)
|
||||
.query<XStringSubstitution>();
|
||||
WorkWithPathVariables(pathSubst);
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.Error.WriteLine(e);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void WorkWithPathVariables(XStringSubstitution pathSubst)
|
||||
{
|
||||
if (pathSubst != null)
|
||||
{
|
||||
foreach (string pathVar in predefinedPathVariables)
|
||||
{
|
||||
try
|
||||
{
|
||||
string value = pathSubst.getSubstituteVariableValue(pathVar);
|
||||
Console.WriteLine($"Property = {pathVar} | Path = {value}");
|
||||
}
|
||||
catch (NoSuchElementException)
|
||||
{
|
||||
Console.Error.WriteLine($"NoSuchElementException has been thrown accessing {pathVar}");
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Check the resubstitution function
|
||||
// Use $(home) as starting point and extend the path
|
||||
string value = pathSubst.getSubstituteVariableValue(predefinedPathVariables[0]);
|
||||
value += "/test";
|
||||
|
||||
Console.WriteLine($"Path = {value}");
|
||||
string resub = pathSubst.reSubstituteVariables(value);
|
||||
Console.WriteLine($"Resubstituted Path = {resub}");
|
||||
}
|
||||
catch (NoSuchElementException)
|
||||
{
|
||||
Console.Error.WriteLine($"NoSuchElementException has been thrown accessing {predefinedPathVariables[0]}");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
# Builds the TerminationTest example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = TerminationTest
|
||||
APP_LANG = cs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.frame;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.uno;
|
||||
|
||||
public class TerminateListener : WeakBase, XTerminateListener, XServiceInfo
|
||||
{
|
||||
// XTerminateListener
|
||||
public void notifyTermination(EventObject eventObject)
|
||||
{
|
||||
Console.WriteLine("About to terminate...");
|
||||
}
|
||||
|
||||
public void queryTermination(EventObject eventObject)
|
||||
{
|
||||
if (Program.atWork)
|
||||
{
|
||||
Console.WriteLine("Terminate while we are at work? You can't be serious ;-)!");
|
||||
throw new TerminationVetoException();
|
||||
}
|
||||
}
|
||||
|
||||
public void disposing(EventObject eventObject) { }
|
||||
|
||||
// XServiceInfo
|
||||
public string getImplementationName() => GetType().FullName;
|
||||
|
||||
public bool supportsService(string serviceName) => serviceName == "com.sun.star.frame.XTerminateListener";
|
||||
|
||||
public string[] getSupportedServiceNames() => new[] { "com.sun.star.frame.XTerminateListener" };
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.frame;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.uno;
|
||||
|
||||
public class Program
|
||||
{
|
||||
public static bool atWork = false;
|
||||
|
||||
private static int Main()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Connect to a new instance of the Office
|
||||
XComponentContext context = NativeBootstrap.bootstrap();
|
||||
Console.WriteLine("Connected to a running office...");
|
||||
|
||||
// Get a reference to the Desktop service
|
||||
XDesktop2 desktop = Desktop.create(context);
|
||||
|
||||
// Create our termination request listener, and register it
|
||||
TerminateListener listener = new TerminateListener();
|
||||
desktop.addTerminateListener(listener);
|
||||
|
||||
// Try to terminate while we are at work.
|
||||
atWork = true;
|
||||
bool terminated = desktop.terminate();
|
||||
Console.WriteLine("The Office {0}", terminated
|
||||
? "has been terminated"
|
||||
: "is still running, we are at work");
|
||||
|
||||
// Try to terminate when we are NOT at work.
|
||||
atWork = false;
|
||||
terminated = desktop.terminate();
|
||||
Console.WriteLine("The Office {0}", terminated
|
||||
? "has been terminated"
|
||||
: "is still running. Something else prevents termination, such as the quickstarter.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex);
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
75
odk/examples/dotnet/WriterDemo/csharp/Makefile
Normal file
75
odk/examples/dotnet/WriterDemo/csharp/Makefile
Normal file
|
@ -0,0 +1,75 @@
|
|||
# Builds the WriterDemo example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = WriterDemo
|
||||
APP_LANG = cs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
144
odk/examples/dotnet/WriterDemo/csharp/WriterDemo.cs
Normal file
144
odk/examples/dotnet/WriterDemo/csharp/WriterDemo.cs
Normal file
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
using com.sun.star.awt;
|
||||
using com.sun.star.beans;
|
||||
using com.sun.star.bridge;
|
||||
using com.sun.star.container;
|
||||
using com.sun.star.drawing;
|
||||
using com.sun.star.frame;
|
||||
using com.sun.star.lang;
|
||||
using com.sun.star.text;
|
||||
using com.sun.star.table;
|
||||
using com.sun.star.uno;
|
||||
|
||||
// Connect to a running office
|
||||
XComponentContext context = NativeBootstrap.bootstrap();
|
||||
// Create a service manager of the remote office
|
||||
XMultiComponentFactory factory = context.getServiceManager();
|
||||
|
||||
// Create the Desktop
|
||||
XDesktop desktop = Desktop.create(context);
|
||||
|
||||
// Open a new empty writer document
|
||||
XComponentLoader componentLoader = desktop.query<XComponentLoader>();
|
||||
XComponent component = componentLoader.loadComponentFromURL(
|
||||
"private:factory/swriter", "_blank", 0, Array.Empty<PropertyValue>());
|
||||
|
||||
XTextDocument textDocument = component.query<XTextDocument>();
|
||||
|
||||
// Create a text object
|
||||
XText text = textDocument.getText();
|
||||
XSimpleText simpleText = text.query<XSimpleText>();
|
||||
|
||||
// Create a cursor object
|
||||
XTextCursor cursor = simpleText.createTextCursor();
|
||||
|
||||
// Inserting some Text
|
||||
text.insertString(cursor, "The first line in the newly created text document.\n", false);
|
||||
|
||||
// Create instance of a text table with 4 columns and 4 rows
|
||||
IQueryInterface textTableI = textDocument.query<XMultiServiceFactory>().createInstance("com.sun.star.text.TextTable");
|
||||
XTextTable textTable = textTableI.query<XTextTable>();
|
||||
textTable.initialize(4, 4);
|
||||
text.insertTextContent(cursor, textTable, false);
|
||||
|
||||
// Set the table background color
|
||||
XPropertySet tablePropertySet = textTableI.query<XPropertySet>();
|
||||
tablePropertySet.setPropertyValue("BackTransparent", new Any(false));
|
||||
tablePropertySet.setPropertyValue("BackColor", new Any(0xCCCCFF));
|
||||
|
||||
// Get first row
|
||||
XTableRows tableRows = textTable.getRows();
|
||||
Any rowAny = tableRows.query<XIndexAccess>().getByIndex(0);
|
||||
|
||||
// Set a different background color for the first row
|
||||
XPropertySet firstRowPropertySet = rowAny.cast<XPropertySet>();
|
||||
firstRowPropertySet.setPropertyValue("BackTransparent", new Any(false));
|
||||
firstRowPropertySet.setPropertyValue("BackColor", new Any(0x6666AA));
|
||||
|
||||
// Fill the first table row
|
||||
InsertIntoCell("A1", "FirstColumn", textTable);
|
||||
InsertIntoCell("B1", "SecondColumn", textTable);
|
||||
InsertIntoCell("C1", "ThirdColumn", textTable);
|
||||
InsertIntoCell("D1", "SUM", textTable);
|
||||
|
||||
// Fill the remaining rows
|
||||
textTable.getCellByName("A2").setValue(22.5);
|
||||
textTable.getCellByName("B2").setValue(5615.3);
|
||||
textTable.getCellByName("C2").setValue(-2315.7);
|
||||
textTable.getCellByName("D2").setFormula("sum <A2:C2>");
|
||||
|
||||
textTable.getCellByName("A3").setValue(21.5);
|
||||
textTable.getCellByName("B3").setValue(615.3);
|
||||
textTable.getCellByName("C3").setValue(-315.7);
|
||||
textTable.getCellByName("D3").setFormula("sum <A3:C3>");
|
||||
|
||||
textTable.getCellByName("A4").setValue(121.5);
|
||||
textTable.getCellByName("B4").setValue(-615.3);
|
||||
textTable.getCellByName("C4").setValue(415.7);
|
||||
textTable.getCellByName("D4").setFormula("sum <A4:C4>");
|
||||
|
||||
// Change the CharColor and add a Shadow
|
||||
XPropertySet cursorPropertySet = cursor.query<XPropertySet>();
|
||||
cursorPropertySet.setPropertyValue("CharColor", new Any(255));
|
||||
cursorPropertySet.setPropertyValue("CharShadowed", new Any(true));
|
||||
|
||||
// Create a paragraph break
|
||||
simpleText.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, false);
|
||||
|
||||
// Inserting colored Text.
|
||||
simpleText.insertString(cursor, " This is a colored Text - blue with shadow\n", false);
|
||||
|
||||
// Create a paragraph break
|
||||
simpleText.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, false);
|
||||
|
||||
// Create a TextFrame.
|
||||
IQueryInterface textFrameI = textDocument.query<XMultiServiceFactory>().createInstance("com.sun.star.text.TextFrame");
|
||||
XTextFrame textFrame = textFrameI.query<XTextFrame>();
|
||||
|
||||
// Set the size of the frame
|
||||
Size size = new Size(15000, 400);
|
||||
textFrame.query<XShape>().setSize(size);
|
||||
|
||||
// Set anchortype
|
||||
XPropertySet framePropertySet = textFrame.query<XPropertySet>();
|
||||
framePropertySet.setPropertyValue("AnchorType", new Any(TextContentAnchorType.AS_CHARACTER));
|
||||
|
||||
// Insert the frame
|
||||
text.insertTextContent(cursor, textFrame, false);
|
||||
|
||||
// Get the text object of the frame
|
||||
XText frameText = textFrame.getText();
|
||||
XSimpleText frameSimpleText = frameText.query<XSimpleText>();
|
||||
|
||||
// Create a cursor object
|
||||
XTextCursor frameCursor = frameSimpleText.createTextCursor();
|
||||
|
||||
// Inserting some Text
|
||||
frameSimpleText.insertString(frameCursor, "The first line in the newly created text frame.", false);
|
||||
frameSimpleText.insertString(frameCursor, "\nWith this second line the height of the frame raises.", false);
|
||||
|
||||
// Create a paragraph break
|
||||
simpleText.insertControlCharacter(frameCursor, ControlCharacter.PARAGRAPH_BREAK, false);
|
||||
|
||||
// Change the CharColor and add a Shadow
|
||||
cursorPropertySet.setPropertyValue("CharColor", new Any(65536));
|
||||
cursorPropertySet.setPropertyValue("CharShadowed", new Any(false));
|
||||
|
||||
// Insert another string
|
||||
text.insertString(cursor, "\n That's all for now !!", false);
|
||||
|
||||
void InsertIntoCell(string cellName, string text, XTextTable textTable)
|
||||
{
|
||||
XCell cell = textTable.getCellByName(cellName);
|
||||
XSimpleText simpleText = cell.query<XSimpleText>();
|
||||
simpleText.setString(text);
|
||||
}
|
75
odk/examples/dotnet/WriterDemo/fsharp/Makefile
Normal file
75
odk/examples/dotnet/WriterDemo/fsharp/Makefile
Normal file
|
@ -0,0 +1,75 @@
|
|||
# Builds the WriterDemo example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = WriterDemo
|
||||
APP_LANG = fs
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
139
odk/examples/dotnet/WriterDemo/fsharp/WriterDemo.fs
Normal file
139
odk/examples/dotnet/WriterDemo/fsharp/WriterDemo.fs
Normal file
|
@ -0,0 +1,139 @@
|
|||
// This file is part of the LibreOffice project.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
open System
|
||||
open com.sun.star.awt
|
||||
open com.sun.star.beans
|
||||
open com.sun.star.bridge
|
||||
open com.sun.star.container
|
||||
open com.sun.star.drawing
|
||||
open com.sun.star.frame
|
||||
open com.sun.star.lang
|
||||
open com.sun.star.text
|
||||
open com.sun.star.table
|
||||
open com.sun.star.uno
|
||||
|
||||
let InsertIntoCell (cellName: string, text: string, textTable: XTextTable) =
|
||||
let cell = textTable.getCellByName(cellName)
|
||||
let simpleText = cell.query<XSimpleText>()
|
||||
simpleText.setString(text)
|
||||
|
||||
// Connect to a running office
|
||||
let context = NativeBootstrap.bootstrap()
|
||||
// Create a service manager of the remote office
|
||||
let factory = context.getServiceManager()
|
||||
|
||||
// Create the Desktop
|
||||
let desktop = Desktop.create(context)
|
||||
|
||||
// Open a new empty writer document
|
||||
let componentLoader = desktop.query<XComponentLoader>()
|
||||
let component_ = componentLoader.loadComponentFromURL(
|
||||
"private:factory/swriter", "_blank", 0, [||])
|
||||
|
||||
let textDocument = component_.query<XTextDocument>()
|
||||
|
||||
// Create a text object
|
||||
let text = textDocument.getText()
|
||||
let simpleText = text.query<XSimpleText>()
|
||||
|
||||
// Create a cursor object
|
||||
let cursor = simpleText.createTextCursor()
|
||||
|
||||
// Inserting some Text
|
||||
text.insertString(cursor, "The first line in the newly created text document." + Environment.NewLine, false)
|
||||
|
||||
// Create instance of a text table with 4 columns and 4 rows
|
||||
let textTableI = textDocument.query<XMultiServiceFactory>().createInstance("com.sun.star.text.TextTable")
|
||||
let textTable = textTableI.query<XTextTable>()
|
||||
textTable.initialize(4, 4)
|
||||
text.insertTextContent(cursor, textTable, false)
|
||||
|
||||
// Set the table background color
|
||||
let tablePropertySet = textTableI.query<XPropertySet>()
|
||||
tablePropertySet.setPropertyValue("BackTransparent", new Any(false))
|
||||
tablePropertySet.setPropertyValue("BackColor", new Any(0xCCCCFF))
|
||||
|
||||
// Get first row
|
||||
let tableRows = textTable.getRows()
|
||||
let rowAny = tableRows.query<XIndexAccess>().getByIndex(0)
|
||||
|
||||
// Set a different background color for the first row
|
||||
let firstRowPropertySet = rowAny.cast<XPropertySet>()
|
||||
firstRowPropertySet.setPropertyValue("BackTransparent", new Any(false))
|
||||
firstRowPropertySet.setPropertyValue("BackColor", new Any(0x6666AA))
|
||||
|
||||
// Fill the first table row
|
||||
InsertIntoCell("A1", "FirstColumn", textTable)
|
||||
InsertIntoCell("B1", "SecondColumn", textTable)
|
||||
InsertIntoCell("C1", "ThirdColumn", textTable)
|
||||
InsertIntoCell("D1", "SUM", textTable)
|
||||
|
||||
// Fill the remaining rows
|
||||
textTable.getCellByName("A2").setValue(22.5)
|
||||
textTable.getCellByName("B2").setValue(5615.3)
|
||||
textTable.getCellByName("C2").setValue(-2315.7)
|
||||
textTable.getCellByName("D2").setFormula("sum <A2:C2>")
|
||||
|
||||
textTable.getCellByName("A3").setValue(21.5)
|
||||
textTable.getCellByName("B3").setValue(615.3)
|
||||
textTable.getCellByName("C3").setValue(-315.7)
|
||||
textTable.getCellByName("D3").setFormula("sum <A3:C3>")
|
||||
|
||||
textTable.getCellByName("A4").setValue(121.5)
|
||||
textTable.getCellByName("B4").setValue(-615.3)
|
||||
textTable.getCellByName("C4").setValue(415.7)
|
||||
textTable.getCellByName("D4").setFormula("sum <A4:C4>")
|
||||
|
||||
// Change the CharColor and add a Shadow
|
||||
let cursorPropertySet = cursor.query<XPropertySet>()
|
||||
cursorPropertySet.setPropertyValue("CharColor", new Any(255))
|
||||
cursorPropertySet.setPropertyValue("CharShadowed", new Any(true))
|
||||
|
||||
// Create a paragraph break
|
||||
simpleText.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, false)
|
||||
|
||||
// Inserting colored Text.
|
||||
simpleText.insertString(cursor, " This is a colored Text - blue with shadow" + Environment.NewLine, false)
|
||||
|
||||
// Create a paragraph break
|
||||
simpleText.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, false)
|
||||
|
||||
// Create a TextFrame.
|
||||
let textFrameI = textDocument.query<XMultiServiceFactory>().createInstance("com.sun.star.text.TextFrame")
|
||||
let textFrame = textFrameI.query<XTextFrame>()
|
||||
|
||||
// Set the size of the frame
|
||||
let size = Size(15000, 400)
|
||||
textFrame.query<XShape>().setSize(size)
|
||||
|
||||
// Set anchortype
|
||||
let framePropertySet = textFrame.query<XPropertySet>()
|
||||
framePropertySet.setPropertyValue("AnchorType", new Any(TextContentAnchorType.AS_CHARACTER))
|
||||
|
||||
// Insert the frame
|
||||
text.insertTextContent(cursor, textFrame, false)
|
||||
|
||||
// Get the text object of the frame
|
||||
let frameText = textFrame.getText()
|
||||
let frameSimpleText = frameText.query<XSimpleText>()
|
||||
|
||||
// Create a cursor object
|
||||
let frameCursor = frameSimpleText.createTextCursor()
|
||||
|
||||
// Inserting some Text
|
||||
frameSimpleText.insertString(frameCursor, "The first line in the newly created text frame.", false)
|
||||
frameSimpleText.insertString(frameCursor, Environment.NewLine + "With this second line the height of the frame raises.", false)
|
||||
|
||||
// Create a paragraph break
|
||||
simpleText.insertControlCharacter(frameCursor, ControlCharacter.PARAGRAPH_BREAK, false)
|
||||
|
||||
// Change the CharColor and add a Shadow
|
||||
cursorPropertySet.setPropertyValue("CharColor", new Any(65536))
|
||||
cursorPropertySet.setPropertyValue("CharShadowed", new Any(false))
|
||||
|
||||
// Insert another string
|
||||
text.insertString(cursor, Environment.NewLine + " That's all for now !!", false)
|
75
odk/examples/dotnet/WriterDemo/vbasic/Makefile
Normal file
75
odk/examples/dotnet/WriterDemo/vbasic/Makefile
Normal file
|
@ -0,0 +1,75 @@
|
|||
# Builds the WriterDemo example of the Developers Guide.
|
||||
|
||||
PRJ = ../../../..
|
||||
SETTINGS = $(PRJ)/settings
|
||||
|
||||
include $(SETTINGS)/settings.mk
|
||||
include $(SETTINGS)/std.mk
|
||||
|
||||
# Settings
|
||||
APP_NAME = WriterDemo
|
||||
APP_LANG = vb
|
||||
|
||||
APP_SRC_DIR = $(subst /,$(PS),$(CURDIR))
|
||||
APP_BIN_DIR = $(subst /,$(PS),$(OUT_BIN))
|
||||
APP_MISC_DIR = $(subst /,$(PS),$(OUT_MISC)/$(APP_NAME))
|
||||
|
||||
APP_PROJ_NAME = $(APP_NAME).$(APP_LANG)proj
|
||||
APP_PROJ_FILE = $(APP_MISC_DIR)/$(APP_PROJ_NAME)
|
||||
|
||||
APP_EXE_NAME = $(APP_NAME)$(EXE_EXT)
|
||||
APP_EXE_FILE = $(APP_BIN_DIR)/$(APP_EXE_NAME)
|
||||
|
||||
DOTNET_FLAGS = -c Release
|
||||
LO_NUPKG_ID = LibreOffice.Bindings
|
||||
LO_NUPKG_VERSION = 0.1.0
|
||||
LO_NUPKG_DIR = $(abspath $(PRJ)/dotnet)
|
||||
|
||||
# Targets
|
||||
.PHONY: ALL
|
||||
ALL : $(APP_NAME)
|
||||
|
||||
include $(SETTINGS)/stdtarget.mk
|
||||
|
||||
$(APP_PROJ_FILE) :
|
||||
-$(MKDIR) $(@D)
|
||||
$(ECHO) "<Project Sdk=\"Microsoft.NET.Sdk\">" > $@
|
||||
$(ECHO) " <PropertyGroup>" >> $@
|
||||
$(ECHO) " <AssemblyName>$(APP_NAME)</AssemblyName>" >> $@
|
||||
$(ECHO) " <TargetFramework>net8.0</TargetFramework>" >> $@
|
||||
$(ECHO) " <OutputType>exe</OutputType>" >> $@
|
||||
$(ECHO) " <PublishSingleFile>true</PublishSingleFile>" >> $@
|
||||
$(ECHO) " <SelfContained>false</SelfContained>" >> $@
|
||||
$(ECHO) " <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>" >> $@
|
||||
$(ECHO) " <RestoreAdditionalProjectSources>$(LO_NUPKG_DIR)</RestoreAdditionalProjectSources>" >> $@
|
||||
$(ECHO) " </PropertyGroup>" >> $@
|
||||
$(ECHO) " <ItemGroup>" >> $@
|
||||
$(ECHO) " <PackageReference Include=\"$(LO_NUPKG_ID)\" Version=\"$(LO_NUPKG_VERSION)\" />" >> $@
|
||||
$(ECHO) " <Compile Include=\"$(APP_SRC_DIR)/*.$(APP_LANG)\" />" >> $@
|
||||
$(ECHO) " </ItemGroup>" >> $@
|
||||
$(ECHO) "</Project>" >> $@
|
||||
$(ECHOLINE) >> $@
|
||||
|
||||
$(APP_EXE_FILE) : $(APP_PROJ_FILE)
|
||||
-$(MKDIR) $(@D)
|
||||
$(SDK_DOTNET) publish $< $(DOTNET_FLAGS) -o $(<D)
|
||||
$(COPY) $(<D)/$(APP_EXE_NAME) $@
|
||||
|
||||
.PHONY: $(APP_NAME)
|
||||
$(APP_NAME) : $(APP_EXE_FILE)
|
||||
$(ECHO) --------------------------------------------------------
|
||||
$(ECHO) Use the following commands to run the example:
|
||||
$(ECHO) $(MAKE) run OR $(MAKE) $(APP_NAME).run
|
||||
$(ECHO)
|
||||
$(ECHO) And the following commands to clean the example:
|
||||
$(ECHO) $(MAKE) clean OR $(MAKE) $(APP_NAME).clean
|
||||
$(ECHO) --------------------------------------------------------
|
||||
|
||||
.PHONY: $(APP_NAME).run run
|
||||
$(APP_NAME).run run : $(APP_EXE_FILE)
|
||||
cd $(<D) && ./$(<F)
|
||||
|
||||
.PHONY: $(APP_NAME).clean clean
|
||||
$(APP_NAME).clean clean :
|
||||
-$(DELRECURSIVE) $(APP_MISC_DIR)
|
||||
-$(DEL) $(APP_EXE_FILE)
|
145
odk/examples/dotnet/WriterDemo/vbasic/WriterDemo.vb
Normal file
145
odk/examples/dotnet/WriterDemo/vbasic/WriterDemo.vb
Normal file
|
@ -0,0 +1,145 @@
|
|||
' This file is part of the LibreOffice project.
|
||||
'
|
||||
' This Source Code Form is subject to the terms of the Mozilla Public
|
||||
' License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
' file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
Imports System
|
||||
|
||||
Imports com.sun.star.awt
|
||||
Imports com.sun.star.beans
|
||||
Imports com.sun.star.bridge
|
||||
Imports com.sun.star.container
|
||||
Imports com.sun.star.drawing
|
||||
Imports com.sun.star.frame
|
||||
Imports com.sun.star.lang
|
||||
Imports com.sun.star.text
|
||||
Imports com.sun.star.table
|
||||
Imports com.sun.star.uno
|
||||
|
||||
Module WriterDemo
|
||||
Sub Main()
|
||||
' Connect to a running office
|
||||
Dim context As XComponentContext = NativeBootstrap.bootstrap()
|
||||
' Create a service manager of the remote office
|
||||
Dim factory As XMultiComponentFactory = context.getServiceManager()
|
||||
|
||||
' Create the Desktop
|
||||
Dim desktop_ As XDesktop = Desktop.create(context)
|
||||
|
||||
' Open a new empty writer document
|
||||
Dim componentLoader As XComponentLoader = desktop_.query(Of XComponentLoader)()
|
||||
Dim component As XComponent = componentLoader.loadComponentFromURL(
|
||||
"private:factory/swriter", "_blank", 0, Array.Empty(Of PropertyValue)())
|
||||
|
||||
Dim textDocument As XTextDocument = component.query(Of XTextDocument)()
|
||||
|
||||
' Create a text object
|
||||
Dim text As XText = textDocument.getText()
|
||||
Dim simpleText As XSimpleText = text.query(Of XSimpleText)()
|
||||
|
||||
' Create a cursor object
|
||||
Dim cursor As XTextCursor = simpleText.createTextCursor()
|
||||
|
||||
' Inserting some Text
|
||||
text.insertString(cursor, "The first line in the newly created text document." & vbLf, False)
|
||||
|
||||
' Create instance of a text table with 4 columns and 4 rows
|
||||
Dim textTableI As IQueryInterface = textDocument.query(Of XMultiServiceFactory)().createInstance("com.sun.star.text.TextTable")
|
||||
Dim textTable As XTextTable = textTableI.query(Of XTextTable)()
|
||||
textTable.initialize(4, 4)
|
||||
text.insertTextContent(cursor, textTable, False)
|
||||
|
||||
' Set the table background color
|
||||
Dim tablePropertySet As XPropertySet = textTableI.query(Of XPropertySet)()
|
||||
tablePropertySet.setPropertyValue("BackTransparent", New Any(False))
|
||||
tablePropertySet.setPropertyValue("BackColor", New Any(&HCCCCFF))
|
||||
|
||||
' Get first row
|
||||
Dim tableRows As XTableRows = textTable.getRows()
|
||||
Dim rowAny As Any = tableRows.query(Of XIndexAccess)().getByIndex(0)
|
||||
|
||||
' Set a different background color for the first row
|
||||
Dim firstRowPropertySet As XPropertySet = rowAny.cast(Of XPropertySet)()
|
||||
firstRowPropertySet.setPropertyValue("BackTransparent", New Any(False))
|
||||
firstRowPropertySet.setPropertyValue("BackColor", New Any(&H6666AA))
|
||||
|
||||
' Fill the first table row
|
||||
InsertIntoCell("A1", "FirstColumn", textTable)
|
||||
InsertIntoCell("B1", "SecondColumn", textTable)
|
||||
InsertIntoCell("C1", "ThirdColumn", textTable)
|
||||
InsertIntoCell("D1", "SUM", textTable)
|
||||
|
||||
' Fill the remaining rows
|
||||
textTable.getCellByName("A2").setValue(22.5)
|
||||
textTable.getCellByName("B2").setValue(5615.3)
|
||||
textTable.getCellByName("C2").setValue(-2315.7)
|
||||
textTable.getCellByName("D2").setFormula("sum <A2:C2>")
|
||||
|
||||
textTable.getCellByName("A3").setValue(21.5)
|
||||
textTable.getCellByName("B3").setValue(615.3)
|
||||
textTable.getCellByName("C3").setValue(-315.7)
|
||||
textTable.getCellByName("D3").setFormula("sum <A3:C3>")
|
||||
|
||||
textTable.getCellByName("A4").setValue(121.5)
|
||||
textTable.getCellByName("B4").setValue(-615.3)
|
||||
textTable.getCellByName("C4").setValue(415.7)
|
||||
textTable.getCellByName("D4").setFormula("sum <A4:C4>")
|
||||
|
||||
' Change the CharColor and add a Shadow
|
||||
Dim cursorPropertySet As XPropertySet = cursor.query(Of XPropertySet)()
|
||||
cursorPropertySet.setPropertyValue("CharColor", New Any(255))
|
||||
cursorPropertySet.setPropertyValue("CharShadowed", New Any(True))
|
||||
|
||||
' Create a paragraph break
|
||||
simpleText.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, False)
|
||||
|
||||
' Inserting colored Text.
|
||||
simpleText.insertString(cursor, " This is a colored Text - blue with shadow" & vbLf, False)
|
||||
|
||||
' Create a paragraph break
|
||||
simpleText.insertControlCharacter(cursor, ControlCharacter.PARAGRAPH_BREAK, False)
|
||||
|
||||
' Create a TextFrame.
|
||||
Dim textFrameI As IQueryInterface = textDocument.query(Of XMultiServiceFactory)().createInstance("com.sun.star.text.TextFrame")
|
||||
Dim textFrame As XTextFrame = textFrameI.query(Of XTextFrame)()
|
||||
|
||||
' Set the size of the frame
|
||||
Dim size As Size = New Size(15000, 400)
|
||||
textFrame.query(Of XShape)().setSize(size)
|
||||
|
||||
' Set anchortype
|
||||
Dim framePropertySet As XPropertySet = textFrame.query(Of XPropertySet)()
|
||||
framePropertySet.setPropertyValue("AnchorType", New Any(TextContentAnchorType.AS_CHARACTER))
|
||||
|
||||
' Insert the frame
|
||||
text.insertTextContent(cursor, textFrame, False)
|
||||
|
||||
' Get the text object of the frame
|
||||
Dim frameText As XText = textFrame.getText()
|
||||
Dim frameSimpleText As XSimpleText = frameText.query(Of XSimpleText)()
|
||||
|
||||
' Create a cursor object
|
||||
Dim frameCursor As XTextCursor = frameSimpleText.createTextCursor()
|
||||
|
||||
' Inserting some Text
|
||||
frameSimpleText.insertString(frameCursor, "The first line in the newly created text frame.", False)
|
||||
frameSimpleText.insertString(frameCursor, vbLf & "With this second line the height of the frame raises.", False)
|
||||
|
||||
' Create a paragraph break
|
||||
simpleText.insertControlCharacter(frameCursor, ControlCharacter.PARAGRAPH_BREAK, False)
|
||||
|
||||
' Change the CharColor and add a Shadow
|
||||
cursorPropertySet.setPropertyValue("CharColor", New Any(65536))
|
||||
cursorPropertySet.setPropertyValue("CharShadowed", New Any(False))
|
||||
|
||||
' Insert another string
|
||||
text.insertString(cursor, vbLf & " That's all for now !!", False)
|
||||
End Sub
|
||||
|
||||
Private Sub InsertIntoCell(cellName As String, text As String, textTable As XTextTable)
|
||||
Dim cell As XCell = textTable.getCellByName(cellName)
|
||||
Dim simpleText As XSimpleText = cell.query(Of XSimpleText)()
|
||||
simpleText.setString(text)
|
||||
End Sub
|
||||
End Module
|
Loading…
Reference in a new issue