summaryrefslogtreecommitdiffstats
path: root/svtools/inc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /svtools/inc
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'svtools/inc')
-rw-r--r--svtools/inc/FltCallDialogParameter.hxx46
-rw-r--r--svtools/inc/bitmaps.hlst128
-rw-r--r--svtools/inc/borderline.hrc40
-rw-r--r--svtools/inc/errtxt.hrc158
-rw-r--r--svtools/inc/framestatuslistener.hxx91
-rw-r--r--svtools/inc/langtab.hrc445
-rw-r--r--svtools/inc/mousefunction.hxx133
-rw-r--r--svtools/inc/pch/precompiled_svt.cxx12
-rw-r--r--svtools/inc/pch/precompiled_svt.hxx327
-rw-r--r--svtools/inc/strings.hxx27
-rw-r--r--svtools/inc/table/defaultinputhandler.hxx58
-rw-r--r--svtools/inc/table/gridtablerenderer.hxx116
-rw-r--r--svtools/inc/table/tablecontrol.hxx173
-rw-r--r--svtools/inc/table/tablecontrolinterface.hxx237
-rw-r--r--svtools/inc/table/tableinputhandler.hxx63
-rw-r--r--svtools/inc/table/tablemodel.hxx454
-rw-r--r--svtools/inc/table/tablerenderer.hxx249
-rw-r--r--svtools/inc/table/tablesort.hxx80
-rw-r--r--svtools/inc/table/tabletypes.hxx52
-rw-r--r--svtools/inc/uiobject.hxx38
20 files changed, 2927 insertions, 0 deletions
diff --git a/svtools/inc/FltCallDialogParameter.hxx b/svtools/inc/FltCallDialogParameter.hxx
new file mode 100644
index 000000000..0a45e65d7
--- /dev/null
+++ b/svtools/inc/FltCallDialogParameter.hxx
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <tools/fldunit.hxx>
+
+class FilterConfigItem;
+class SvStream;
+class Graphic;
+namespace weld
+{
+class Window;
+}
+
+struct FltCallDialogParameter
+{
+ weld::Window* pWindow;
+ FieldUnit eFieldUnit;
+ OUString aFilterExt;
+
+ // In and Out PropertySequence for all filter dialogs
+ css::uno::Sequence<css::beans::PropertyValue> aFilterData;
+
+ FltCallDialogParameter(weld::Window* pW, FieldUnit eFiUni)
+ : pWindow(pW)
+ , eFieldUnit(eFiUni){};
+};
diff --git a/svtools/inc/bitmaps.hlst b/svtools/inc/bitmaps.hlst
new file mode 100644
index 000000000..5aa57db63
--- /dev/null
+++ b/svtools/inc/bitmaps.hlst
@@ -0,0 +1,128 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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/.
+ */
+
+#pragma once
+
+inline constexpr OUStringLiteral BMP_IMPRESS_SC = u"res/sx03123.png";
+inline constexpr OUStringLiteral BMP_BITMAP_SC = u"res/sx03125.png";
+inline constexpr OUStringLiteral BMP_CALC_SC = u"res/sx03126.png";
+inline constexpr OUStringLiteral BMP_CALCTEMPLATE_SC = u"res/sx03127.png";
+inline constexpr OUStringLiteral BMP_DATABASE_SC = u"res/sx03129.png";
+inline constexpr OUStringLiteral BMP_IMPRESSTEMPLATE_SC = u"res/sx03130.png";
+inline constexpr OUStringLiteral BMP_GIF_SC = u"res/sx03137.png";
+inline constexpr OUStringLiteral BMP_HTML_SC = u"res/sx03139.png";
+inline constexpr OUStringLiteral BMP_JPG_SC = u"res/sx03140.png";
+inline constexpr OUStringLiteral BMP_MATH_SC = u"res/sx03144.png";
+inline constexpr OUStringLiteral BMP_MATHTEMPLATE_SC = u"res/sx03145.png";
+inline constexpr OUStringLiteral BMP_FILE_SC = u"res/sx03150.png";
+inline constexpr OUStringLiteral BMP_PCD_SC = u"res/sx03152.png";
+inline constexpr OUStringLiteral BMP_PCT_SC = u"res/sx03153.png";
+inline constexpr OUStringLiteral BMP_PCX_SC = u"res/sx03154.png";
+inline constexpr OUStringLiteral BMP_SIM_SC = u"res/sx03155.png";
+inline constexpr OUStringLiteral BMP_TEXTFILE_SC = u"res/sx03156.png";
+inline constexpr OUStringLiteral BMP_TIFF_SC = u"res/sx03158.png";
+inline constexpr OUStringLiteral BMP_WMF_SC = u"res/sx03160.png";
+inline constexpr OUStringLiteral BMP_WRITER_SC = u"res/sx03162.png";
+inline constexpr OUStringLiteral BMP_WRITERTEMPLATE_SC = u"res/sx03163.png";
+inline constexpr OUStringLiteral BMP_FIXEDDEV_SC = u"res/sx03164.png";
+inline constexpr OUStringLiteral BMP_REMOVABLEDEV_SC = u"res/sx03165.png";
+inline constexpr OUStringLiteral BMP_CDROMDEV_SC = u"res/sx03166.png";
+inline constexpr OUStringLiteral BMP_NETWORKDEV_SC = u"res/sx03167.png";
+inline constexpr OUStringLiteral BMP_TABLE_SC = u"res/sx03188.png";
+inline constexpr OUStringLiteral BMP_DXF_SC = u"res/sx03217.png";
+inline constexpr OUStringLiteral BMP_MET_SC = u"res/sx03218.png";
+inline constexpr OUStringLiteral BMP_PNG_SC = u"res/sx03219.png";
+inline constexpr OUStringLiteral BMP_SVM_SC = u"res/sx03222.png";
+inline constexpr OUStringLiteral BMP_WEBP_SC = u"res/sx03223.png";
+inline constexpr OUStringLiteral BMP_GLOBAL_DOC_SC = u"res/sx03226.png";
+inline constexpr OUStringLiteral BMP_DRAW_SC = u"res/sx03227.png";
+inline constexpr OUStringLiteral BMP_DRAWTEMPLATE_SC = u"res/sx03228.png";
+inline constexpr OUStringLiteral BMP_OO_DATABASE_DOC_SC = u"res/sx03245.png";
+inline constexpr OUStringLiteral BMP_OO_DRAW_DOC_SC = u"res/sx03246.png";
+inline constexpr OUStringLiteral BMP_OO_MATH_DOC_SC = u"res/sx03247.png";
+inline constexpr OUStringLiteral BMP_OO_GLOBAL_DOC_SC = u"res/sx03248.png";
+inline constexpr OUStringLiteral BMP_OO_IMPRESS_DOC_SC = u"res/sx03249.png";
+inline constexpr OUStringLiteral BMP_OO_CALC_DOC_SC = u"res/sx03250.png";
+inline constexpr OUStringLiteral BMP_OO_WRITER_DOC_SC = u"res/sx03251.png";
+inline constexpr OUStringLiteral BMP_OO_DRAW_TEMPLATE_SC = u"res/sx03252.png";
+inline constexpr OUStringLiteral BMP_OO_IMPRESS_TEMPLATE_SC = u"res/sx03253.png";
+inline constexpr OUStringLiteral BMP_OO_CALC_TEMPLATE_SC = u"res/sx03254.png";
+inline constexpr OUStringLiteral BMP_OO_WRITER_TEMPLATE_SC = u"res/sx03255.png";
+inline constexpr OUStringLiteral BMP_EXTENSION_SC = u"res/sx03256.png";
+inline constexpr OUStringLiteral BMP_IMPRESS_LC = u"res/lx03123.png";
+inline constexpr OUStringLiteral BMP_BITMAP_LC = u"res/lx03125.png";
+inline constexpr OUStringLiteral BMP_CALC_LC = u"res/lx03126.png";
+inline constexpr OUStringLiteral BMP_CALCTEMPLATE_LC = u"res/lx03127.png";
+inline constexpr OUStringLiteral BMP_DATABASE_LC = u"res/lx03129.png";
+inline constexpr OUStringLiteral BMP_IMPRESSTEMPLATE_LC = u"res/lx03130.png";
+inline constexpr OUStringLiteral BMP_GIF_LC = u"res/lx03137.png";
+inline constexpr OUStringLiteral BMP_HTML_LC = u"res/lx03139.png";
+inline constexpr OUStringLiteral BMP_JPG_LC = u"res/lx03140.png";
+inline constexpr OUStringLiteral BMP_MATH_LC = u"res/lx03144.png";
+inline constexpr OUStringLiteral BMP_MATHTEMPLATE_LC = u"res/lx03145.png";
+inline constexpr OUStringLiteral BMP_FILE_LC = u"res/lx03150.png";
+inline constexpr OUStringLiteral BMP_PCD_LC = u"res/lx03152.png";
+inline constexpr OUStringLiteral BMP_PCT_LC = u"res/lx03153.png";
+inline constexpr OUStringLiteral BMP_PCX_LC = u"res/lx03154.png";
+inline constexpr OUStringLiteral BMP_SIM_LC = u"res/lx03155.png";
+inline constexpr OUStringLiteral BMP_TEXTFILE_LC = u"res/lx03156.png";
+inline constexpr OUStringLiteral BMP_TIFF_LC = u"res/lx03158.png";
+inline constexpr OUStringLiteral BMP_WMF_LC = u"res/lx03160.png";
+inline constexpr OUStringLiteral BMP_WRITER_LC = u"res/lx03162.png";
+inline constexpr OUStringLiteral BMP_WRITERTEMPLATE_LC = u"res/lx03163.png";
+inline constexpr OUStringLiteral BMP_FIXEDDEV_LC = u"res/lx03164.png";
+inline constexpr OUStringLiteral BMP_REMOVABLEDEV_LC = u"res/lx03165.png";
+inline constexpr OUStringLiteral BMP_CDROMDEV_LC = u"res/lx03166.png";
+inline constexpr OUStringLiteral BMP_NETWORKDEV_LC = u"res/lx03167.png";
+inline constexpr OUStringLiteral BMP_TABLE_LC = u"res/lx03188.png";
+inline constexpr OUStringLiteral BMP_FOLDER_LC = u"res/lx03189.png";
+inline constexpr OUStringLiteral BMP_DXF_LC = u"res/lx03217.png";
+inline constexpr OUStringLiteral BMP_MET_LC = u"res/lx03218.png";
+inline constexpr OUStringLiteral BMP_PNG_LC = u"res/lx03219.png";
+inline constexpr OUStringLiteral BMP_SVM_LC = u"res/lx03222.png";
+inline constexpr OUStringLiteral BMP_WEBP_LC = u"res/lx03223.png";
+inline constexpr OUStringLiteral BMP_GLOBAL_DOC_LC = u"res/lx03226.png";
+inline constexpr OUStringLiteral BMP_DRAW_LC = u"res/lx03227.png";
+inline constexpr OUStringLiteral BMP_DRAWTEMPLATE_LC = u"res/lx03228.png";
+inline constexpr OUStringLiteral BMP_OO_DATABASE_DOC_LC = u"res/lx03245.png";
+inline constexpr OUStringLiteral BMP_OO_DRAW_DOC_LC = u"res/lx03246.png";
+inline constexpr OUStringLiteral BMP_OO_MATH_DOC_LC = u"res/lx03247.png";
+inline constexpr OUStringLiteral BMP_OO_GLOBAL_DOC_LC = u"res/lx03248.png";
+inline constexpr OUStringLiteral BMP_OO_IMPRESS_DOC_LC = u"res/lx03249.png";
+inline constexpr OUStringLiteral BMP_OO_CALC_DOC_LC = u"res/lx03250.png";
+inline constexpr OUStringLiteral BMP_OO_WRITER_DOC_LC = u"res/lx03251.png";
+inline constexpr OUStringLiteral BMP_OO_DRAW_TEMPLATE_LC = u"res/lx03252.png";
+inline constexpr OUStringLiteral BMP_OO_IMPRESS_TEMPLATE_LC = u"res/lx03253.png";
+inline constexpr OUStringLiteral BMP_OO_CALC_TEMPLATE_LC = u"res/lx03254.png";
+inline constexpr OUStringLiteral BMP_OO_WRITER_TEMPLATE_LC = u"res/lx03255.png";
+inline constexpr OUStringLiteral BMP_EXTENSION_LC = u"res/lx03256.png";
+inline constexpr OUStringLiteral BMP_HTML_32 = u"res/lx03139_32.png";
+inline constexpr OUStringLiteral BMP_OO_DATABASE_DOC_32 = u"res/lx03245_32.png";
+inline constexpr OUStringLiteral BMP_OO_DRAW_DOC_32 = u"res/lx03246_32.png";
+inline constexpr OUStringLiteral BMP_OO_MATH_DOC_32 = u"res/lx03247_32.png";
+inline constexpr OUStringLiteral BMP_OO_GLOBAL_DOC_32 = u"res/lx03248_32.png";
+inline constexpr OUStringLiteral BMP_OO_IMPRESS_DOC_32 = u"res/lx03249_32.png";
+inline constexpr OUStringLiteral BMP_OO_CALC_DOC_32 = u"res/lx03250_32.png";
+inline constexpr OUStringLiteral BMP_OO_WRITER_DOC_32 = u"res/lx03251_32.png";
+inline constexpr OUStringLiteral BMP_OO_WRITER_TEMPLATE_32 = u"res/lx03255_32.png";
+inline constexpr OUStringLiteral BMP_PLUGIN = u"res/plugin.png";
+inline constexpr OUStringLiteral RID_BMP_FOLDER = u"svtools/res/folder.png";
+inline constexpr OUStringLiteral BMP_CURRENT = u"svtools/res/ed01.png";
+inline constexpr OUStringLiteral BMP_MODIFIED = u"svtools/res/ed02.png";
+inline constexpr OUStringLiteral BMP_NEW = u"svtools/res/ed03.png";
+inline constexpr OUStringLiteral BMP_DELETED = u"svtools/res/ed04.png";
+inline constexpr OUStringLiteral BMP_CURRENTNEW = u"svtools/res/ed05.png";
+inline constexpr OUStringLiteral BMP_PRIMARYKEY = u"svtools/res/ed06.png";
+inline constexpr OUStringLiteral BMP_CURRENT_PRIMARYKEY = u"svtools/res/ed07.png";
+inline constexpr OUStringLiteral BMP_FILTER = u"svtools/res/ed08.png";
+inline constexpr OUStringLiteral BMP_HEADERFOOTER = u"svtools/res/ed09.png";
+
+inline constexpr OUStringLiteral BMP_TAB_LOCK = u"cmd/sc_lock.png";
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/svtools/inc/borderline.hrc b/svtools/inc/borderline.hrc
new file mode 100644
index 000000000..cfa4b22b1
--- /dev/null
+++ b/svtools/inc/borderline.hrc
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ */
+#pragma once
+
+#include <editeng/borderline.hxx>
+#include <unotools/resmgr.hxx>
+
+#define NC_(Context, String) TranslateId(Context, reinterpret_cast<char const *>(u8##String))
+
+const std::pair<TranslateId, SvxBorderLineStyle> RID_SVXSTR_BORDERLINE[] =
+{
+ { NC_("RID_SVXSTR_BORDERLINE", "None"), SvxBorderLineStyle::NONE },
+ { NC_("RID_SVXSTR_BORDERLINE", "Solid"), SvxBorderLineStyle::SOLID },
+ { NC_("RID_SVXSTR_BORDERLINE", "Dotted"), SvxBorderLineStyle::DOTTED },
+ { NC_("RID_SVXSTR_BORDERLINE", "Dashed"), SvxBorderLineStyle::DASHED },
+ { NC_("RID_SVXSTR_BORDERLINE", "Double"), SvxBorderLineStyle::DOUBLE },
+ { NC_("RID_SVXSTR_BORDERLINE", "Thin Thick, Small Gap"), SvxBorderLineStyle::THINTHICK_SMALLGAP },
+ { NC_("RID_SVXSTR_BORDERLINE", "Thin Thick, Medium Gap"), SvxBorderLineStyle::THINTHICK_MEDIUMGAP },
+ { NC_("RID_SVXSTR_BORDERLINE", "Thin Thick, Large Gap"), SvxBorderLineStyle::THINTHICK_LARGEGAP },
+ { NC_("RID_SVXSTR_BORDERLINE", "Thick Thin, Small Gap"), SvxBorderLineStyle::THICKTHIN_SMALLGAP },
+ { NC_("RID_SVXSTR_BORDERLINE", "Thick Thin, Medium Gap"), SvxBorderLineStyle::THICKTHIN_MEDIUMGAP },
+ { NC_("RID_SVXSTR_BORDERLINE", "Thick Thin, Large Gap"), SvxBorderLineStyle::THICKTHIN_LARGEGAP },
+ { NC_("RID_SVXSTR_BORDERLINE", "Embossed"), SvxBorderLineStyle::EMBOSSED },
+ { NC_("RID_SVXSTR_BORDERLINE", "Engraved"), SvxBorderLineStyle::ENGRAVED },
+ { NC_("RID_SVXSTR_BORDERLINE", "Outset"), SvxBorderLineStyle::OUTSET },
+ { NC_("RID_SVXSTR_BORDERLINE", "Inset"), SvxBorderLineStyle::INSET },
+ { NC_("RID_SVXSTR_BORDERLINE", "Fine Dashed"), SvxBorderLineStyle::FINE_DASHED },
+ { NC_("RID_SVXSTR_BORDERLINE", "Double Thin"), SvxBorderLineStyle::DOUBLE_THIN },
+ { NC_("RID_SVXSTR_BORDERLINE", "Dash Dot"), SvxBorderLineStyle::DASH_DOT },
+ { NC_("RID_SVXSTR_BORDERLINE", "Dash Dot Dot"), SvxBorderLineStyle::DASH_DOT_DOT }
+};
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/errtxt.hrc b/svtools/inc/errtxt.hrc
new file mode 100644
index 000000000..639b7e49a
--- /dev/null
+++ b/svtools/inc/errtxt.hrc
@@ -0,0 +1,158 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <svtools/sfxecode.hxx>
+#include <svtools/soerr.hxx>
+
+#define NC_(Context, String) TranslateId(Context, reinterpret_cast<char const *>(u8##String))
+
+const ErrMsgCode RID_ERRCTX[] =
+{
+ { NC_("RID_ERRCTX", "Error") , ErrCode(ERRCTX_ERROR) },
+ { NC_("RID_ERRCTX", "Warning") , ErrCode(ERRCTX_WARNING) },
+ { NC_("RID_ERRCTX", "$(ERR) loading the template $(ARG1)") , ErrCode(ERRCTX_SFX_LOADTEMPLATE) },
+ { NC_("RID_ERRCTX", "$(ERR) saving the document $(ARG1)"), ErrCode(ERRCTX_SFX_SAVEDOC) },
+ { NC_("RID_ERRCTX", "$(ERR) saving the document $(ARG1)"), ErrCode(ERRCTX_SFX_SAVEASDOC) },
+ { NC_("RID_ERRCTX", "$(ERR) displaying doc. information for document $(ARG1)") , ErrCode(ERRCTX_SFX_DOCINFO) },
+ { NC_("RID_ERRCTX", "$(ERR) writing document $(ARG1) as template") , ErrCode(ERRCTX_SFX_DOCTEMPLATE) },
+ { NC_("RID_ERRCTX", "$(ERR) copying or moving document contents") , ErrCode(ERRCTX_SFX_MOVEORCOPYCONTENTS) },
+ { NC_("RID_ERRCTX", "$(ERR) starting the Document Manager") , ErrCode(ERRCTX_SFX_DOCMANAGER) },
+ { NC_("RID_ERRCTX", "$(ERR) loading document $(ARG1)") , ErrCode(ERRCTX_SFX_OPENDOC) },
+ { NC_("RID_ERRCTX", "$(ERR) creating a new document") , ErrCode(ERRCTX_SFX_NEWDOCDIRECT) },
+ { NC_("RID_ERRCTX", "$(ERR) creating a new document") , ErrCode(ERRCTX_SFX_NEWDOC) },
+ { NC_("RID_ERRCTX", "$(ERR) expanding entry") , ErrCode(ERRCTX_SFX_CREATEOBJSH) },
+ { NC_("RID_ERRCTX", "$(ERR) loading BASIC of document $(ARG1)") , ErrCode(ERRCTX_SFX_LOADBASIC) },
+ { NC_("RID_ERRCTX", "$(ERR) searching for an address"), ErrCode(ERRCTX_SFX_SEARCHADDRESS) },
+ { {}, ERRCODE_NONE }
+};
+
+const std::pair<TranslateId, ErrCodeClass> RID_ERRHDL_CLASS[] =
+{
+ { NC_("RID_ERRHDL", "Abort") , ErrCodeClass::Abort },
+ { NC_("RID_ERRHDL", "Nonexistent object") , ErrCodeClass::NotExists },
+ { NC_("RID_ERRHDL", "Object already exists") , ErrCodeClass::AlreadyExists },
+ { NC_("RID_ERRHDL", "Object not accessible") , ErrCodeClass::Access },
+ { NC_("RID_ERRHDL", "Inadmissible path") , ErrCodeClass::Path },
+ { NC_("RID_ERRHDL", "Locking problem") , ErrCodeClass::Locking },
+ { NC_("RID_ERRHDL", "Wrong parameter") , ErrCodeClass::Parameter },
+ { NC_("RID_ERRHDL", "Resource exhausted") , ErrCodeClass::Space },
+ { NC_("RID_ERRHDL", "Action not supported") , ErrCodeClass::NotSupported },
+ { NC_("RID_ERRHDL", "Read Error") , ErrCodeClass::Read },
+ { NC_("RID_ERRHDL", "Write Error") , ErrCodeClass::Write },
+ { NC_("RID_ERRHDL", "unknown") , ErrCodeClass::Unknown },
+ { NC_("RID_ERRHDL", "Version Incompatibility") , ErrCodeClass::Version },
+ { NC_("RID_ERRHDL", "General Error") , ErrCodeClass::General },
+ { NC_("RID_ERRHDL", "Incorrect format") , ErrCodeClass::Format },
+ { NC_("RID_ERRHDL", "Error creating object") , ErrCodeClass::Create },
+ { NC_("RID_ERRHDL", "Inadmissible value or data type") , ErrCodeClass::Sbx },
+ { NC_("RID_ERRHDL", "BASIC runtime error") , ErrCodeClass::Runtime },
+ { NC_("RID_ERRHDL", "BASIC syntax error") , ErrCodeClass::Compiler },
+ { {}, ErrCodeClass::NONE }
+};
+
+const ErrMsgCode RID_ERRHDL[] =
+{
+ { NC_("RID_ERRHDL", "General Error") , ErrCode(1) },
+ { NC_("RID_ERRHDL", "General input/output error.") , ERRCODE_IO_GENERAL },
+ { NC_("RID_ERRHDL", "Invalid file name.") , ERRCODE_IO_MISPLACEDCHAR },
+ { NC_("RID_ERRHDL", "Nonexistent file.") , ERRCODE_IO_NOTEXISTS },
+ { NC_("RID_ERRHDL", "File already exists.") , ERRCODE_IO_ALREADYEXISTS },
+ { NC_("RID_ERRHDL", "The object is not a directory.") , ERRCODE_IO_NOTADIRECTORY },
+ { NC_("RID_ERRHDL", "The object is not a file.") , ERRCODE_IO_NOTAFILE },
+ { NC_("RID_ERRHDL", "The specified device is invalid.") , ERRCODE_IO_INVALIDDEVICE },
+ { NC_("RID_ERRHDL", "The object cannot be accessed\ndue to insufficient user rights.") , ERRCODE_IO_ACCESSDENIED },
+ { NC_("RID_ERRHDL", "Sharing violation while accessing the object.") , ERRCODE_IO_LOCKVIOLATION },
+ { NC_("RID_ERRHDL", "No more space on device.") , ERRCODE_IO_OUTOFSPACE },
+ { NC_("RID_ERRHDL", "This operation cannot be run on\nfiles containing wildcards.") , ERRCODE_IO_ISWILDCARD },
+ { NC_("RID_ERRHDL", "This operation is not supported on this operating system.") , ERRCODE_IO_NOTSUPPORTED },
+ { NC_("RID_ERRHDL", "There are too many files open.") , ERRCODE_IO_TOOMANYOPENFILES },
+ { NC_("RID_ERRHDL", "Data could not be read from the file.") , ERRCODE_IO_CANTREAD },
+ { NC_("RID_ERRHDL", "The file could not be written.") , ERRCODE_IO_CANTWRITE },
+ { NC_("RID_ERRHDL", "The operation could not be run due to insufficient memory.") , ERRCODE_IO_OUTOFMEMORY },
+ { NC_("RID_ERRHDL", "The seek operation could not be run.") , ERRCODE_IO_CANTSEEK },
+ { NC_("RID_ERRHDL", "The tell operation could not be run.") , ERRCODE_IO_CANTTELL },
+ { NC_("RID_ERRHDL", "Incorrect file version.") , ERRCODE_IO_WRONGVERSION },
+ { NC_("RID_ERRHDL", "Incorrect file format.") , ERRCODE_IO_WRONGFORMAT },
+ { NC_("RID_ERRHDL", "The file name contains invalid characters.") , ERRCODE_IO_INVALIDCHAR },
+ { NC_("RID_ERRHDL", "An unknown I/O error has occurred.") , ERRCODE_IO_UNKNOWN },
+ { NC_("RID_ERRHDL", "An invalid attempt was made to access the file.") , ERRCODE_IO_INVALIDACCESS },
+ { NC_("RID_ERRHDL", "The file could not be created.") , ERRCODE_IO_CANTCREATE },
+ { NC_("RID_ERRHDL", "The operation was started under an invalid parameter.") , ERRCODE_IO_INVALIDPARAMETER },
+ { NC_("RID_ERRHDL", "The operation on the file was aborted.") , ERRCODE_IO_ABORT },
+ { NC_("RID_ERRHDL", "Path to the file does not exist.") , ERRCODE_IO_NOTEXISTSPATH },
+ { NC_("RID_ERRHDL", "An object cannot be copied into itself.") , ERRCODE_IO_RECURSIVE },
+ { NC_("RID_ERRHDL", "The specified template could not be found.") , ERRCODE_SFX_TEMPLATENOTFOUND },
+ { NC_("RID_ERRHDL", "The file cannot be used as template.") , ERRCODE_SFX_NOTATEMPLATE },
+ { NC_("RID_ERRHDL", "This document has already been opened for editing.") , ERRCODE_SFX_ALREADYOPEN },
+ { NC_("RID_ERRHDL", "The wrong password has been entered.") , ERRCODE_SFX_WRONGPASSWORD },
+ { NC_("RID_ERRHDL", "Error reading file.") , ERRCODE_SFX_DOLOADFAILED },
+ { NC_("RID_ERRHDL", "Document opened as read-only cannot be saved over itself.") , ERRCODE_SFX_DOCUMENTREADONLY },
+ { NC_("RID_ERRHDL", "General OLE Error.") , ERRCODE_SFX_OLEGENERAL },
+ { NC_("RID_ERRHDL", "The host name $(ARG1) could not be resolved.") , ERRCODE_INET_NAME_RESOLVE },
+ { NC_("RID_ERRHDL", "Could not establish Internet connection to $(ARG1).") , ERRCODE_INET_CONNECT },
+ { NC_("RID_ERRHDL", "Error reading data from the Internet.\nServer error message: $(ARG1).") , ERRCODE_INET_READ },
+ { NC_("RID_ERRHDL", "Error transferring data to the Internet.\nServer error message: $(ARG1).") , ERRCODE_INET_WRITE },
+ { NC_("RID_ERRHDL", "General Internet error has occurred.") , ERRCODE_INET_GENERAL },
+ { NC_("RID_ERRHDL", "The requested Internet data is not available in the cache and cannot be transmitted as the Online mode has not be activated.") , ERRCODE_INET_OFFLINE },
+ { NC_("RID_ERRHDL", "The contents could not be created.") , ERRCODE_SFX_CANTCREATECONTENT },
+ { NC_("RID_ERRHDL", "The file name is too long for the target file system.") , ERRCODE_IO_NAMETOOLONG },
+ { NC_("RID_ERRHDL", "The input syntax is invalid.") , ERRCODE_SFX_INVALIDSYNTAX },
+ { NC_("RID_ERRHDL", "This document contains attributes that cannot be saved in the selected format.\nPlease save the document in a %PRODUCTNAME %PRODUCTVERSION file format."), ERRCODE_IO_NOTSTORABLEINBINARYFORMAT },
+ { NC_("RID_ERRHDL", "The maximum number of documents that can be opened at the same time has been reached. You need to close one or more documents before you can open a new document."), ERRCODE_SFX_NOMOREDOCUMENTSALLOWED },
+ { NC_("RID_ERRHDL", "Could not create backup copy.") , ERRCODE_SFX_CANTCREATEBACKUP },
+ { NC_("RID_ERRHDL", "An attempt was made to execute a macro.\nFor security reasons, macro support is disabled."), ERRCODE_SFX_MACROS_SUPPORT_DISABLED },
+ { NC_("RID_ERRHDL", "Execution of macros is disabled. Macros are signed, but the document (containing document events) is not signed."), ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_CONTENT_UNSIGNED },
+ { NC_("RID_ERRHDL", "This document contains macros.\n\nMacros may contain viruses. Execution of macros is disabled due to the current macro security setting in %PRODUCTNAME - Preferences - %PRODUCTNAME - Security.\n\nTherefore, some functionality may not be available.") , ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_MAC },
+ { NC_("RID_ERRHDL", "This document contains macros.\n\nMacros may contain viruses. Execution of macros is disabled due to the current macro security setting in Tools - Options - %PRODUCTNAME - Security.\n\nTherefore, some functionality may not be available.") , ERRCODE_SFX_DOCUMENT_MACRO_DISABLED },
+ { NC_("RID_ERRHDL", "The encrypted document contains unexpected non-encrypted streams.\n\nThis could be the result of document manipulation.\n\nWe recommend that you do not trust the content of the current document.\nExecution of macros is disabled for this document.\n ") , ERRCODE_SFX_INCOMPLETE_ENCRYPTION },
+ { NC_("RID_ERRHDL", "Invalid data length.") , ERRCODE_IO_INVALIDLENGTH },
+ { NC_("RID_ERRHDL", "Function not possible: path contains current directory.") , ERRCODE_IO_CURRENTDIR },
+ { NC_("RID_ERRHDL", "Function not possible: device (drive) not identical.") , ERRCODE_IO_NOTSAMEDEVICE },
+ { NC_("RID_ERRHDL", "Device (drive) not ready.") , ERRCODE_IO_DEVICENOTREADY },
+ { NC_("RID_ERRHDL", "Wrong checksum.") , ERRCODE_IO_BADCRC },
+ { NC_("RID_ERRHDL", "Function not possible: write protected.") , ERRCODE_IO_WRITEPROTECTED },
+ { NC_("RID_ERRHDL", "The password of a shared spreadsheet cannot be set or changed.\nDeactivate sharing mode first."), ERRCODE_SFX_SHARED_NOPASSWORDCHANGE },
+ { NC_("RID_ERRHDL", "File format error found at $(ARG1)(row,col)."), ERRCODE_SFX_FORMAT_ROWCOL },
+ { NC_("RID_ERRHDL", "The filter for this file format is disabled in configuration. Please contact your systems administrator."), ERRCODE_IO_FILTERDISABLED },
+ { {}, ERRCODE_NONE }
+};
+
+const ErrMsgCode RID_SO_ERROR_HANDLER[] =
+{
+ { NC_("RID_ERRHDL", "General OLE error."),
+ ERRCODE_SO_GENERALERROR },
+ { NC_("RID_ERRHDL", "The action cannot be executed in the object's current state."),
+ ERRCODE_SO_CANNOT_DOVERB_NOW },
+ { NC_("RID_ERRHDL", "The object does not support any actions."),
+ ERRCODE_SO_NOVERBS },
+ { NC_("RID_ERRHDL", "Object does not support this action."),
+ ERRCODE_SO_NOTIMPL },
+ { {}, ERRCODE_NONE }
+};
+
+const ErrMsgCode RID_SO_ERRCTX[] =
+{
+ { NC_("RID_ERRHDL", "$(ERR) activating object") , ErrCode(ERRCTX_SO_DOVERB) },
+ { {}, ERRCODE_NONE }
+};
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/framestatuslistener.hxx b/svtools/inc/framestatuslistener.hxx
new file mode 100644
index 000000000..6b4920039
--- /dev/null
+++ b/svtools/inc/framestatuslistener.hxx
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <com/sun/star/frame/XFrameActionListener.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/basemutex.hxx>
+
+#include <unordered_map>
+
+namespace com :: sun :: star :: frame { class XDispatch; }
+namespace com :: sun :: star :: frame { class XFrame; }
+namespace com :: sun :: star :: uno { class XComponentContext; }
+
+namespace svt
+{
+
+class FrameStatusListener : public css::frame::XStatusListener,
+ public css::frame::XFrameActionListener,
+ public css::lang::XComponent,
+ public ::cppu::BaseMutex,
+ public ::cppu::OWeakObject
+{
+ public:
+ FrameStatusListener( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XFrame >& xFrame );
+ virtual ~FrameStatusListener() override;
+
+ // methods to support status forwarder, known by the old sfx2 toolbox controller implementation
+ void addStatusListener( const OUString& aCommandURL );
+ void bindListener();
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ // XComponent
+ virtual void SAL_CALL dispose() override;
+ virtual void SAL_CALL addEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener ) override;
+ virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override;
+
+ // XEventListener
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ // XStatusListener
+ virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override = 0;
+
+ // XFrameActionListener
+ virtual void SAL_CALL frameAction( const css::frame::FrameActionEvent& Action ) override;
+
+ protected:
+ struct Listener
+ {
+ Listener( const css::util::URL& rURL, const css::uno::Reference< css::frame::XDispatch >& rDispatch ) :
+ aURL( rURL ), xDispatch( rDispatch ) {}
+
+ css::util::URL aURL;
+ css::uno::Reference< css::frame::XDispatch > xDispatch;
+ };
+
+ typedef std::unordered_map< OUString,
+ css::uno::Reference< css::frame::XDispatch > > URLToDispatchMap;
+
+ bool m_bDisposed : 1;
+ css::uno::Reference< css::frame::XFrame > m_xFrame;
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ URLToDispatchMap m_aListenerMap;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/langtab.hrc b/svtools/inc/langtab.hrc
new file mode 100644
index 000000000..cb2343735
--- /dev/null
+++ b/svtools/inc/langtab.hrc
@@ -0,0 +1,445 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <i18nlangtag/lang.h>
+#include <unotools/resmgr.hxx>
+
+#define NC_(Context, String) TranslateId(Context, reinterpret_cast<char const *>(u8##String))
+
+const std::pair<TranslateId, LanguageType> STR_ARR_SVT_LANGUAGE_TABLE[] =
+{
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "[None]") , LANGUAGE_NONE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Unknown") , LANGUAGE_DONTKNOW },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Default") , LANGUAGE_SYSTEM },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Default") , LANGUAGE_USER_SYSTEM_CONFIG },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Afrikaans (South Africa)") , LANGUAGE_AFRIKAANS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Albanian") , LANGUAGE_ALBANIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic") , LANGUAGE_ARABIC_PRIMARY_ONLY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Algeria)") , LANGUAGE_ARABIC_ALGERIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Bahrain)") , LANGUAGE_ARABIC_BAHRAIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Chad)") , LANGUAGE_USER_ARABIC_CHAD },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Comoros)") , LANGUAGE_USER_ARABIC_COMOROS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Djibouti)") , LANGUAGE_USER_ARABIC_DJIBOUTI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Egypt)") , LANGUAGE_ARABIC_EGYPT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Eritrea)") , LANGUAGE_USER_ARABIC_ERITREA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Iraq)") , LANGUAGE_ARABIC_IRAQ },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Israel)") , LANGUAGE_USER_ARABIC_ISRAEL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Jordan)") , LANGUAGE_ARABIC_JORDAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Kuwait)") , LANGUAGE_ARABIC_KUWAIT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Lebanon)") , LANGUAGE_ARABIC_LEBANON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Libya)") , LANGUAGE_ARABIC_LIBYA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Mauritania)") , LANGUAGE_USER_ARABIC_MAURITANIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Morocco)") , LANGUAGE_ARABIC_MOROCCO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Oman)") , LANGUAGE_ARABIC_OMAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Palestine)") , LANGUAGE_USER_ARABIC_PALESTINE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Qatar)") , LANGUAGE_ARABIC_QATAR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Saudi Arabia)") , LANGUAGE_ARABIC_SAUDI_ARABIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Somalia)") , LANGUAGE_USER_ARABIC_SOMALIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Sudan)") , LANGUAGE_USER_ARABIC_SUDAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Syria)") , LANGUAGE_ARABIC_SYRIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Tunisia)") , LANGUAGE_ARABIC_TUNISIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (UAE)") , LANGUAGE_ARABIC_UAE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arabic (Yemen)") , LANGUAGE_ARABIC_YEMEN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Aragonese") , LANGUAGE_USER_ARAGONESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Armenian, Eastern (Armenia)") , LANGUAGE_ARMENIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Assamese") , LANGUAGE_ASSAMESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Azerbaijani Latin") , LANGUAGE_AZERI_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Azerbaijani Cyrillic") , LANGUAGE_AZERI_CYRILLIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Basque") , LANGUAGE_BASQUE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bengali (India)") , LANGUAGE_BENGALI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bulgarian") , LANGUAGE_BULGARIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Belarusian") , LANGUAGE_BELARUSIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Catalan") , LANGUAGE_CATALAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Catalan (Valencian)") , LANGUAGE_USER_CATALAN_VALENCIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Chinese (traditional)") , LANGUAGE_CHINESE_TRADITIONAL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Chinese (simplified)") , LANGUAGE_CHINESE_SIMPLIFIED },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Chinese (Hong Kong)") , LANGUAGE_CHINESE_HONGKONG },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Chinese (Singapore)") , LANGUAGE_CHINESE_SINGAPORE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Chinese (Macau)") , LANGUAGE_CHINESE_MACAU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Church Slavic") , LANGUAGE_USER_CHURCH_SLAVIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Croatian") , LANGUAGE_CROATIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Czech") , LANGUAGE_CZECH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Danish") , LANGUAGE_DANISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Dutch (Netherlands)") , LANGUAGE_DUTCH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Dutch (Belgium)") , LANGUAGE_DUTCH_BELGIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (USA)") , LANGUAGE_ENGLISH_US },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (UK)") , LANGUAGE_ENGLISH_UK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English, OED spelling (UK)") , LANGUAGE_USER_ENGLISH_UK_OXENDICT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Australia)") , LANGUAGE_ENGLISH_AUS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Canada)") , LANGUAGE_ENGLISH_CAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (New Zealand)") , LANGUAGE_ENGLISH_NZ },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Ireland)") , LANGUAGE_ENGLISH_EIRE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (South Africa)") , LANGUAGE_ENGLISH_SAFRICA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Jamaica)") , LANGUAGE_ENGLISH_JAMAICA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Caribbean)") , LANGUAGE_ENGLISH_CARIBBEAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Belize)") , LANGUAGE_ENGLISH_BELIZE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Trinidad)") , LANGUAGE_ENGLISH_TRINIDAD },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Zimbabwe)") , LANGUAGE_ENGLISH_ZIMBABWE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Philippines)") , LANGUAGE_ENGLISH_PHILIPPINES },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (India)") , LANGUAGE_ENGLISH_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Estonian") , LANGUAGE_ESTONIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Finnish") , LANGUAGE_FINNISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Faroese") , LANGUAGE_FAEROESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Persian") , LANGUAGE_FARSI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (France)") , LANGUAGE_FRENCH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Belgium)") , LANGUAGE_FRENCH_BELGIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Canada)") , LANGUAGE_FRENCH_CANADIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Switzerland)") , LANGUAGE_FRENCH_SWISS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Luxembourg)") , LANGUAGE_FRENCH_LUXEMBOURG },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Monaco)") , LANGUAGE_FRENCH_MONACO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Gascon") , LANGUAGE_USER_GASCON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "German (Germany)") , LANGUAGE_GERMAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "German (Switzerland)") , LANGUAGE_GERMAN_SWISS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "German (Austria)") , LANGUAGE_GERMAN_AUSTRIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "German (Luxembourg)") , LANGUAGE_GERMAN_LUXEMBOURG },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "German (Liechtenstein)") , LANGUAGE_GERMAN_LIECHTENSTEIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Greek") , LANGUAGE_GREEK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Gujarati") , LANGUAGE_GUJARATI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hebrew") , LANGUAGE_HEBREW },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hindi") , LANGUAGE_HINDI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hungarian") , LANGUAGE_HUNGARIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Icelandic") , LANGUAGE_ICELANDIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Indonesian") , LANGUAGE_INDONESIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Italian (Italy)") , LANGUAGE_ITALIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Italian (Switzerland)") , LANGUAGE_ITALIAN_SWISS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Japanese") , LANGUAGE_JAPANESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kannada") , LANGUAGE_KANNADA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kashmiri (Kashmir)") , LANGUAGE_KASHMIRI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kashmiri (India)") , LANGUAGE_KASHMIRI_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kazakh") , LANGUAGE_KAZAKH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Konkani") , LANGUAGE_KONKANI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Korean (RoK)") , LANGUAGE_KOREAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Latvian") , LANGUAGE_LATVIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Lithuanian") , LANGUAGE_LITHUANIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Macedonian") , LANGUAGE_MACEDONIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Malay (Malaysia)") , LANGUAGE_MALAY_MALAYSIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Malay (Brunei Darussalam)") , LANGUAGE_MALAY_BRUNEI_DARUSSALAM },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Malayalam") , LANGUAGE_MALAYALAM },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Manipuri") , LANGUAGE_MANIPURI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Marathi") , LANGUAGE_MARATHI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Nepali (Nepal)") , LANGUAGE_NEPALI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Nepali (India)") , LANGUAGE_NEPALI_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Norwegian, Bokmål") , LANGUAGE_NORWEGIAN_BOKMAL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Norwegian, Nynorsk") , LANGUAGE_NORWEGIAN_NYNORSK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Odia") , LANGUAGE_ODIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Polish") , LANGUAGE_POLISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Portuguese (Angola)") , LANGUAGE_USER_PORTUGUESE_ANGOLA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Portuguese (Portugal)") , LANGUAGE_PORTUGUESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Portuguese (Brazil)") , LANGUAGE_PORTUGUESE_BRAZILIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Punjabi") , LANGUAGE_PUNJABI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Rhaeto-Romance") , LANGUAGE_RHAETO_ROMAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Romanian (Romania)") , LANGUAGE_ROMANIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Romanian (Moldova)") , LANGUAGE_ROMANIAN_MOLDOVA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Russian") , LANGUAGE_RUSSIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sanskrit") , LANGUAGE_SANSKRIT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Cyrillic (Serbia and Montenegro)") , LANGUAGE_SERBIAN_CYRILLIC_SAM },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Latin (Serbia and Montenegro)") , LANGUAGE_SERBIAN_LATIN_SAM },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Cyrillic (Serbia)") , LANGUAGE_USER_SERBIAN_CYRILLIC_SERBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Latin (Serbia)") , LANGUAGE_USER_SERBIAN_LATIN_SERBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Cyrillic (Montenegro)") , LANGUAGE_USER_SERBIAN_CYRILLIC_MONTENEGRO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Latin (Montenegro)") , LANGUAGE_USER_SERBIAN_LATIN_MONTENEGRO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Serbian Latin") , LANGUAGE_SERBIAN_LATIN_LSO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sidama") , LANGUAGE_USER_SIDAMA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sindhi, Devanagari") , LANGUAGE_SINDHI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sindhi, Arabic") , LANGUAGE_SINDHI_PAKISTAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Slovak") , LANGUAGE_SLOVAK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Slovenian") , LANGUAGE_SLOVENIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Spain)") , LANGUAGE_SPANISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Mexico)") , LANGUAGE_SPANISH_MEXICAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Guatemala)") , LANGUAGE_SPANISH_GUATEMALA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Costa Rica)") , LANGUAGE_SPANISH_COSTARICA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Panama)") , LANGUAGE_SPANISH_PANAMA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Dom. Rep.)") , LANGUAGE_SPANISH_DOMINICAN_REPUBLIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Venezuela)") , LANGUAGE_SPANISH_VENEZUELA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Colombia)") , LANGUAGE_SPANISH_COLOMBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Peru)") , LANGUAGE_SPANISH_PERU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Argentina)") , LANGUAGE_SPANISH_ARGENTINA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Ecuador)") , LANGUAGE_SPANISH_ECUADOR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Chile)") , LANGUAGE_SPANISH_CHILE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Uruguay)") , LANGUAGE_SPANISH_URUGUAY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Paraguay)") , LANGUAGE_SPANISH_PARAGUAY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Bolivia)") , LANGUAGE_SPANISH_BOLIVIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (El Salvador)") , LANGUAGE_SPANISH_EL_SALVADOR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Honduras)") , LANGUAGE_SPANISH_HONDURAS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Nicaragua)") , LANGUAGE_SPANISH_NICARAGUA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Puerto Rico)") , LANGUAGE_SPANISH_PUERTO_RICO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Swahili (Kenya)") , LANGUAGE_SWAHILI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Swedish (Sweden)") , LANGUAGE_SWEDISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Swedish (Finland)") , LANGUAGE_SWEDISH_FINLAND },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tajik") , LANGUAGE_TAJIK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tamil") , LANGUAGE_TAMIL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tatar") , LANGUAGE_TATAR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Telugu") , LANGUAGE_TELUGU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Thai") , LANGUAGE_THAI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Turkish") , LANGUAGE_TURKISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Urdu (Pakistan)") , LANGUAGE_URDU_PAKISTAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Urdu (India)") , LANGUAGE_URDU_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ukrainian") , LANGUAGE_UKRAINIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Uzbek Latin") , LANGUAGE_UZBEK_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Uzbek Cyrillic") , LANGUAGE_UZBEK_CYRILLIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Welsh") , LANGUAGE_WELSH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Latin") , LANGUAGE_USER_LATIN_VATICAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Esperanto") , LANGUAGE_USER_ESPERANTO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kinyarwanda (Rwanda)") , LANGUAGE_USER_KINYARWANDA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Maori") , LANGUAGE_MAORI_NEW_ZEALAND },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Galician") , LANGUAGE_GALICIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Dhivehi") , LANGUAGE_DHIVEHI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Northern Sotho") , LANGUAGE_SEPEDI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Gaelic (Scotland)") , LANGUAGE_GAELIC_SCOTLAND },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Mongolian Cyrillic") , LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Mongolian Mongolian") , LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Interlingua") , LANGUAGE_USER_INTERLINGUA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bosnian") , LANGUAGE_BOSNIAN_BOSNIA_HERZEGOVINA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bengali (Bangladesh)") , LANGUAGE_BENGALI_BANGLADESH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Occitan") , LANGUAGE_USER_OCCITAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Khmer") , LANGUAGE_KHMER },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kurdish, Northern (Turkey)") , LANGUAGE_USER_KURDISH_TURKEY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kurdish, Northern (Syria)") , LANGUAGE_USER_KURDISH_SYRIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kurdish, Central (Iraq)") , LANGUAGE_USER_KURDISH_IRAQ },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kurdish, Central (Iran)") , LANGUAGE_USER_KURDISH_IRAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kurdish, Southern (Iran)") , LANGUAGE_USER_KURDISH_SOUTHERN_IRAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kurdish, Southern (Iraq)") , LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sardinian") , LANGUAGE_USER_SARDINIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Dzongkha") , LANGUAGE_DZONGKHA_BHUTAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Swahili (Tanzania)") , LANGUAGE_USER_SWAHILI_TANZANIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Lao") , LANGUAGE_LAO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Irish") , LANGUAGE_GAELIC_IRELAND },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tibetan (PR China)") , LANGUAGE_TIBETAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Georgian") , LANGUAGE_GEORGIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Frisian") , LANGUAGE_FRISIAN_NETHERLANDS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tswana (South Africa)") , LANGUAGE_TSWANA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Zulu") , LANGUAGE_ZULU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Vietnamese") , LANGUAGE_VIETNAMESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Breton") , LANGUAGE_USER_BRETON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kalaallisut") , LANGUAGE_USER_KALAALLISUT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ndebele, South") , LANGUAGE_USER_NDEBELE_SOUTH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Southern Sotho") , LANGUAGE_SESOTHO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Swazi") , LANGUAGE_USER_SWAZI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tsonga") , LANGUAGE_TSONGA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Venda") , LANGUAGE_VENDA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tswana (Botswana)") , LANGUAGE_USER_TSWANA_BOTSWANA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Xhosa") , LANGUAGE_XHOSA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sinhala") , LANGUAGE_SINHALESE_SRI_LANKA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Moore") , LANGUAGE_USER_MOORE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bambara") , LANGUAGE_USER_BAMBARA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Akan") , LANGUAGE_USER_AKAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Luxembourgish") , LANGUAGE_USER_LUXEMBOURGISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Friulian") , LANGUAGE_USER_FRIULIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Fijian") , LANGUAGE_USER_FIJIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Afrikaans (Namibia)") , LANGUAGE_USER_AFRIKAANS_NAMIBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Namibia)") , LANGUAGE_USER_ENGLISH_NAMIBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Walloon") , LANGUAGE_USER_WALLOON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Coptic") , LANGUAGE_USER_COPTIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tigrigna (Eritrea)") , LANGUAGE_TIGRIGNA_ERITREA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tigrigna (Ethiopia)") , LANGUAGE_TIGRIGNA_ETHIOPIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Amharic") , LANGUAGE_AMHARIC_ETHIOPIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kirghiz") , LANGUAGE_KIRGHIZ },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "German (Belgium)") , LANGUAGE_USER_GERMAN_BELGIUM },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Chuvash") , LANGUAGE_USER_CHUVASH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Burmese") , LANGUAGE_BURMESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hausa (Nigeria)") , LANGUAGE_HAUSA_NIGERIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hausa (Ghana)") , LANGUAGE_USER_HAUSA_GHANA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Éwé") , LANGUAGE_USER_EWE_GHANA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Ghana)") , LANGUAGE_USER_ENGLISH_GHANA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sango") , LANGUAGE_USER_SANGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tagalog") , LANGUAGE_USER_TAGALOG },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ganda") , LANGUAGE_USER_GANDA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Lingala") , LANGUAGE_USER_LINGALA_DRCONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Low German") , LANGUAGE_USER_LOW_GERMAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hiligaynon") , LANGUAGE_USER_HILIGAYNON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Nyanja") , LANGUAGE_USER_NYANJA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kashubian") , LANGUAGE_USER_KASHUBIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Spanish (Cuba)") , LANGUAGE_USER_SPANISH_CUBA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tetun (Indonesia)") , LANGUAGE_USER_TETUN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Quechua (Bolivia, North)") , LANGUAGE_USER_QUECHUA_NORTH_BOLIVIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Quechua (Bolivia, South)") , LANGUAGE_USER_QUECHUA_SOUTH_BOLIVIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Somali") , LANGUAGE_SOMALI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Inari (Finland)") , LANGUAGE_SAMI_INARI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Lule (Norway)") , LANGUAGE_SAMI_LULE_NORWAY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Lule (Sweden)") , LANGUAGE_SAMI_LULE_SWEDEN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Northern (Finland)") , LANGUAGE_SAMI_NORTHERN_FINLAND },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Northern (Norway)") , LANGUAGE_SAMI_NORTHERN_NORWAY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Northern (Sweden)") , LANGUAGE_SAMI_NORTHERN_SWEDEN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Skolt (Finland)") , LANGUAGE_SAMI_SKOLT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Southern (Norway)") , LANGUAGE_SAMI_SOUTHERN_NORWAY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Southern (Sweden)") , LANGUAGE_SAMI_SOUTHERN_SWEDEN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Kildin (Russia)") , LANGUAGE_USER_SAMI_KILDIN_RUSSIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Guarani (Paraguay)") , LANGUAGE_GUARANI_PARAGUAY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bodo") , LANGUAGE_USER_BODO_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Dogri") , LANGUAGE_USER_DOGRI_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Maithili") , LANGUAGE_USER_MAITHILI_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Santali") , LANGUAGE_USER_SANTALI_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tetun (Timor-Leste)") , LANGUAGE_USER_TETUN_TIMOR_LESTE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Turkmen") , LANGUAGE_TURKMEN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Maltese") , LANGUAGE_MALTESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tok Pisin") , LANGUAGE_USER_TOK_PISIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Shuswap") , LANGUAGE_USER_SHUSWAP },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Oromo") , LANGUAGE_OROMO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Greek, Ancient") , LANGUAGE_USER_ANCIENT_GREEK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Yiddish (Israel)") , LANGUAGE_USER_YIDDISH_ISRAEL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Quechua (Ecuador)") , LANGUAGE_QUECHUA_ECUADOR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Uyghur") , LANGUAGE_UIGHUR_CHINA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Asturian") , LANGUAGE_USER_ASTURIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sorbian, Upper") , LANGUAGE_UPPER_SORBIAN_GERMANY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sorbian, Lower") , LANGUAGE_LOWER_SORBIAN_GERMANY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Latgalian") , LANGUAGE_USER_LATGALIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Maore") , LANGUAGE_USER_MAORE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bushi") , LANGUAGE_USER_BUSHI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tahitian") , LANGUAGE_USER_TAHITIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Malagasy, Plateau") , LANGUAGE_MALAGASY_PLATEAU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Papiamentu (Netherlands Antilles)") , LANGUAGE_PAPIAMENTU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Papiamento (Aruba)") , LANGUAGE_USER_PAPIAMENTU_ARUBA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sardinian, Campidanese") , LANGUAGE_USER_SARDINIAN_CAMPIDANESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sardinian, Gallurese") , LANGUAGE_USER_SARDINIAN_GALLURESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sardinian, Logudorese") , LANGUAGE_USER_SARDINIAN_LOGUDORESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sardinian, Sassarese") , LANGUAGE_USER_SARDINIAN_SASSARESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bafia") , LANGUAGE_USER_BAFIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Gikuyu") , LANGUAGE_USER_GIKUYU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Yoruba") , LANGUAGE_YORUBA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Rusyn (Ukraine)") , LANGUAGE_USER_RUSYN_UKRAINE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Rusyn (Slovakia)") , LANGUAGE_USER_RUSYN_SLOVAKIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kabyle Latin") , LANGUAGE_TAMAZIGHT_LATIN_ALGERIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Yiddish (USA)") , LANGUAGE_USER_YIDDISH_US },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hawaiian") , LANGUAGE_HAWAIIAN_UNITED_STATES },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Limbu") , LANGUAGE_USER_LIMBU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Lojban") , LANGUAGE_USER_LOJBAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Haitian") , LANGUAGE_USER_HAITIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Beembe") , LANGUAGE_USER_BEEMBE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bekwel") , LANGUAGE_USER_BEKWEL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kituba (Congo)") , LANGUAGE_USER_KITUBA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Lari") , LANGUAGE_USER_LARI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Mbochi") , LANGUAGE_USER_MBOCHI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Teke-Eboo") , LANGUAGE_USER_TEKE_EBOO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Teke-Ibali") , LANGUAGE_USER_TEKE_IBALI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Teke-Tyee") , LANGUAGE_USER_TEKE_TYEE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Vili") , LANGUAGE_USER_VILI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "KeyID") , LANGUAGE_USER_KEYID },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Pali Latin") , LANGUAGE_USER_PALI_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kyrgyz (China)") , LANGUAGE_USER_KYRGYZ_CHINA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Komi-Zyrian") , LANGUAGE_USER_KOMI_ZYRIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Komi-Permyak") , LANGUAGE_USER_KOMI_PERMYAK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Pitjantjatjara") , LANGUAGE_USER_PITJANTJATJARA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Malawi)") , LANGUAGE_USER_ENGLISH_MALAWI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Erzya") , LANGUAGE_USER_ERZYA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Mari, Meadow") , LANGUAGE_USER_MARI_MEADOW },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Papiamento (Curaçao)") , LANGUAGE_USER_PAPIAMENTU_CURACAO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Papiamento (Bonaire)") , LANGUAGE_USER_PAPIAMENTU_BONAIRE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Khanty") , LANGUAGE_USER_KHANTY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Livonian") , LANGUAGE_USER_LIVONIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Moksha") , LANGUAGE_USER_MOKSHA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Mari, Hill") , LANGUAGE_USER_MARI_HILL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Nganasan") , LANGUAGE_USER_NGANASAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Olonets") , LANGUAGE_USER_OLONETS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Veps") , LANGUAGE_USER_VEPS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Võro") , LANGUAGE_USER_VORO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Nenets") , LANGUAGE_USER_NENETS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Aka (Central African Republic)") , LANGUAGE_USER_AKA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Aka (Congo)") , LANGUAGE_USER_AKA_CONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Dibole") , LANGUAGE_USER_DIBOLE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Doondo") , LANGUAGE_USER_DOONDO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kaamba") , LANGUAGE_USER_KAAMBA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Koongo (Congo)") , LANGUAGE_USER_KOONGO_CONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kunyi") , LANGUAGE_USER_KUNYI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ngungwel") , LANGUAGE_USER_NGUNGWEL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Njyem (Congo)") , LANGUAGE_USER_NJYEM_CONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Punu") , LANGUAGE_USER_PUNU_CONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Suundi") , LANGUAGE_USER_SUUNDI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Teke-Kukuya") , LANGUAGE_USER_TEKE_KUKUYA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tsaangi") , LANGUAGE_USER_TSAANGI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Yaka (Congo)") , LANGUAGE_USER_YAKA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Yaka (Democratic Republic of the Congo)") , LANGUAGE_USER_YAKA_DRCONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Yombe (Congo)") , LANGUAGE_USER_YOMBE_CONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "N'ko") , LANGUAGE_USER_NKO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Udmurt") , LANGUAGE_USER_UDMURT },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Tibetan (India)") , LANGUAGE_USER_TIBETAN_INDIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Cornish") , LANGUAGE_USER_CORNISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sami, Pite (Sweden)") , LANGUAGE_USER_SAMI_PITE_SWEDEN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ngäbere") , LANGUAGE_USER_NGAEBERE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kumyk") , LANGUAGE_USER_KUMYK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Nogai") , LANGUAGE_USER_NOGAI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Karakalpak Latin") , LANGUAGE_USER_KARAKALPAK_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ladin") , LANGUAGE_USER_LADIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Burkina Faso)") , LANGUAGE_USER_FRENCH_BURKINA_FASO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Puinave") , LANGUAGE_USER_PUINAVE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Maninkakan, Eastern, Latin") , LANGUAGE_USER_MANINKAKAN_EASTERN_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Avar") , LANGUAGE_USER_AVAR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Cree, Plains, Latin") , LANGUAGE_USER_CREE_PLAINS_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Cree, Plains, Syllabics") , LANGUAGE_USER_CREE_PLAINS_SYLLABICS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Lengo") , LANGUAGE_USER_LENGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Côte d'Ivoire)") , LANGUAGE_FRENCH_COTE_D_IVOIRE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Mali)") , LANGUAGE_FRENCH_MALI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Senegal)") , LANGUAGE_FRENCH_SENEGAL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Benin)") , LANGUAGE_USER_FRENCH_BENIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Niger)") , LANGUAGE_USER_FRENCH_NIGER },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Togo)") , LANGUAGE_USER_FRENCH_TOGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kven Finnish") , LANGUAGE_USER_KVEN_FINNISH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Venetian") , LANGUAGE_USER_VENETIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Gambia)") , LANGUAGE_USER_ENGLISH_GAMBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Aranese") , LANGUAGE_USER_OCCITAN_ARANESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arpitan (France)") , LANGUAGE_USER_ARPITAN_FRANCE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arpitan (Italy)") , LANGUAGE_USER_ARPITAN_ITALY },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Arpitan (Switzerland)") , LANGUAGE_USER_ARPITAN_SWITZERLAND },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Botswana)") , LANGUAGE_USER_ENGLISH_BOTSWANA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Interlingue Occidental") , LANGUAGE_USER_INTERLINGUE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Apatani") , LANGUAGE_USER_APATANI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Mauritius)") , LANGUAGE_USER_ENGLISH_MAURITIUS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "French (Mauritius)") , LANGUAGE_USER_FRENCH_MAURITIUS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Silesian") , LANGUAGE_USER_SILESIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Hungarian (Szekely-Hungarian Rovas)") , LANGUAGE_USER_HUNGARIAN_ROVAS },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Malaysia)") , LANGUAGE_ENGLISH_MALAYSIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Manchu") , LANGUAGE_USER_MANCHU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Xibe") , LANGUAGE_USER_XIBE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kituba (Democratic Republic of the Congo)"), LANGUAGE_USER_KITUBA_DRCONGO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Fon"), LANGUAGE_USER_FON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Plautdietsch"), LANGUAGE_USER_PLAUTDIETSCH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Armenian, Eastern (Russia)") , LANGUAGE_USER_ARMENIAN_RUSSIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Armenian, Eastern (Iran)") , LANGUAGE_USER_ARMENIAN_IRAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Armenian, Western (Armenia)") , LANGUAGE_USER_ARMENIAN_WESTERN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Armenian, Classical (Armenia)") , LANGUAGE_USER_ARMENIAN_CLASSICAL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Malay Arabic (Malaysia)") , LANGUAGE_USER_MALAY_ARABIC_MALAYSIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Malay Arabic (Brunei Darussalam)") , LANGUAGE_USER_MALAY_ARABIC_BRUNEI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Juǀ’hoan") , LANGUAGE_USER_JUHOAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Naro") , LANGUAGE_USER_NARO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Iloko") , LANGUAGE_USER_ILOKO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Zambia)") , LANGUAGE_USER_ENGLISH_ZAMBIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Sri Lanka)") , LANGUAGE_USER_ENGLISH_SRI_LANKA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Nigeria)") , LANGUAGE_USER_ENGLISH_NIGERIA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Kabardian") , LANGUAGE_USER_KABARDIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Guadeloupean Creole French") , LANGUAGE_USER_GUADELOUPEAN_CREOLE_FRENCH },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Ligurian") , LANGUAGE_USER_LIGURIAN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Minangkabau") , LANGUAGE_USER_MINANGKABAU },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sundanese") , LANGUAGE_USER_SUNDANESE },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Hong Kong)") , LANGUAGE_ENGLISH_HONG_KONG_SAR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Kenya)") , LANGUAGE_USER_ENGLISH_KENYA },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Pali Thai") , LANGUAGE_USER_PALI_THAI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Cabécar") , LANGUAGE_USER_CABECAR },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Bribri") , LANGUAGE_USER_BRIBRI },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Denmark)") , LANGUAGE_USER_ENGLISH_DENMARK },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Sesotho") , LANGUAGE_USER_SESOTHO_LESOTHO },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Klingon") , LANGUAGE_USER_KLINGON },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "English (Israel)") , LANGUAGE_USER_ENGLISH_ISRAEL },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Interslavic Latin") , LANGUAGE_USER_INTERSLAVIC_LATIN },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Interslavic Cyrillic") , LANGUAGE_USER_INTERSLAVIC_CYRILLIC },
+ { NC_("STR_ARR_SVT_LANGUAGE_TABLE", "Pennsylvania Dutch") , LANGUAGE_USER_PENNSYLVANIA_DUTCH }
+};
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/mousefunction.hxx b/svtools/inc/mousefunction.hxx
new file mode 100644
index 000000000..00313b0f4
--- /dev/null
+++ b/svtools/inc/mousefunction.hxx
@@ -0,0 +1,133 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include "table/tabletypes.hxx"
+
+#include <salhelper/simplereferenceobject.hxx>
+
+class MouseEvent;
+
+namespace svt::table
+{
+class ITableControl;
+
+//= FunctionResult
+
+enum FunctionResult
+{
+ ActivateFunction,
+ ContinueFunction,
+ DeactivateFunction,
+
+ SkipFunction
+};
+
+//= MouseFunction
+
+class MouseFunction : public ::salhelper::SimpleReferenceObject
+{
+public:
+ MouseFunction() {}
+ MouseFunction(const MouseFunction&) = delete;
+ MouseFunction& operator=(const MouseFunction&) = delete;
+ virtual FunctionResult handleMouseMove(ITableControl& i_tableControl, MouseEvent const& i_event)
+ = 0;
+ virtual FunctionResult handleMouseDown(ITableControl& i_tableControl, MouseEvent const& i_event)
+ = 0;
+ virtual FunctionResult handleMouseUp(ITableControl& i_tableControl, MouseEvent const& i_event)
+ = 0;
+
+protected:
+ virtual ~MouseFunction() override {}
+};
+
+//= ColumnResize
+
+class ColumnResize final : public MouseFunction
+{
+public:
+ ColumnResize()
+ : m_nResizingColumn(COL_INVALID)
+ {
+ }
+
+public:
+ // MouseFunction
+ virtual FunctionResult handleMouseMove(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+ virtual FunctionResult handleMouseDown(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+ virtual FunctionResult handleMouseUp(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+
+private:
+ ColPos m_nResizingColumn;
+};
+
+//= RowSelection
+
+class RowSelection final : public MouseFunction
+{
+public:
+ RowSelection()
+ : m_bActive(false)
+ {
+ }
+
+public:
+ // MouseFunction
+ virtual FunctionResult handleMouseMove(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+ virtual FunctionResult handleMouseDown(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+ virtual FunctionResult handleMouseUp(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+
+private:
+ bool m_bActive;
+};
+
+//= ColumnSortHandler
+
+class ColumnSortHandler final : public MouseFunction
+{
+public:
+ ColumnSortHandler()
+ : m_nActiveColumn(COL_INVALID)
+ {
+ }
+
+public:
+ // MouseFunction
+ virtual FunctionResult handleMouseMove(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+ virtual FunctionResult handleMouseDown(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+ virtual FunctionResult handleMouseUp(ITableControl& i_tableControl,
+ MouseEvent const& i_event) override;
+
+private:
+ ColPos m_nActiveColumn;
+};
+
+} // namespace svt::table
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/pch/precompiled_svt.cxx b/svtools/inc/pch/precompiled_svt.cxx
new file mode 100644
index 000000000..56e1a70fe
--- /dev/null
+++ b/svtools/inc/pch/precompiled_svt.cxx
@@ -0,0 +1,12 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ */
+
+#include "precompiled_svt.hxx"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/pch/precompiled_svt.hxx b/svtools/inc/pch/precompiled_svt.hxx
new file mode 100644
index 000000000..6632d92d8
--- /dev/null
+++ b/svtools/inc/pch/precompiled_svt.hxx
@@ -0,0 +1,327 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ */
+
+/*
+ This file has been autogenerated by update_pch.sh. It is possible to edit it
+ manually (such as when an include file has been moved/renamed/removed). All such
+ manual changes will be rewritten by the next run of update_pch.sh (which presumably
+ also fixes all possible problems, so it's usually better to use it).
+
+ Generated on 2021-04-08 13:56:44 using:
+ ./bin/update_pch svtools svt --cutoff=4 --exclude:system --include:module --exclude:local
+
+ If after updating build fails, use the following command to locate conflicting headers:
+ ./bin/update_pch_bisect ./svtools/inc/pch/precompiled_svt.hxx "make svtools.build" --find-conflicts
+*/
+
+#include <sal/config.h>
+#if PCH_LEVEL >= 1
+#include <algorithm>
+#include <cassert>
+#include <chrono>
+#include <cmath>
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+#include <deque>
+#include <float.h>
+#include <functional>
+#include <initializer_list>
+#include <iomanip>
+#include <limits.h>
+#include <limits>
+#include <map>
+#include <math.h>
+#include <memory>
+#include <new>
+#include <optional>
+#include <ostream>
+#include <set>
+#include <stddef.h>
+#include <string.h>
+#include <string>
+#include <string_view>
+#include <type_traits>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+#include <boost/property_tree/ptree_fwd.hpp>
+#endif // PCH_LEVEL >= 1
+#if PCH_LEVEL >= 2
+#include <osl/diagnose.h>
+#include <osl/endian.h>
+#include <osl/file.hxx>
+#include <osl/interlck.h>
+#include <osl/mutex.hxx>
+#include <osl/thread.h>
+#include <osl/time.h>
+#include <rtl/alloc.h>
+#include <rtl/bootstrap.hxx>
+#include <rtl/character.hxx>
+#include <rtl/instance.hxx>
+#include <rtl/math.h>
+#include <rtl/math.hxx>
+#include <rtl/ref.hxx>
+#include <rtl/strbuf.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/stringconcat.hxx>
+#include <rtl/stringutils.hxx>
+#include <rtl/tencinfo.h>
+#include <rtl/textcvt.h>
+#include <rtl/textenc.h>
+#include <rtl/unload.h>
+#include <rtl/uri.hxx>
+#include <rtl/ustrbuf.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <rtl/uuid.h>
+#include <sal/backtrace.hxx>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+#include <sal/saldllapi.h>
+#include <sal/types.h>
+#include <sal/typesizes.h>
+#include <vcl/BinaryDataContainer.hxx>
+#include <vcl/GraphicExternalLink.hxx>
+#include <vcl/Scanline.hxx>
+#include <vcl/accessiblefactory.hxx>
+#include <vcl/alpha.hxx>
+#include <vcl/animate/Animation.hxx>
+#include <vcl/animate/AnimationBitmap.hxx>
+#include <vcl/bitmap.hxx>
+#include <vcl/bitmap/BitmapTypes.hxx>
+#include <vcl/bitmapex.hxx>
+#include <vcl/checksum.hxx>
+#include <vcl/commandevent.hxx>
+#include <vcl/ctrl.hxx>
+#include <vcl/dllapi.h>
+#include <vcl/dockwin.hxx>
+#include <vcl/errcode.hxx>
+#include <vcl/event.hxx>
+#include <vcl/fntstyle.hxx>
+#include <vcl/font.hxx>
+#include <vcl/gfxlink.hxx>
+#include <vcl/graph.hxx>
+#include <vcl/graphicfilter.hxx>
+#include <vcl/help.hxx>
+#include <vcl/idle.hxx>
+#include <vcl/image.hxx>
+#include <vcl/imapobj.hxx>
+#include <vcl/keycod.hxx>
+#include <vcl/keycodes.hxx>
+#include <vcl/mapmod.hxx>
+#include <vcl/outdev.hxx>
+#include <vcl/prntypes.hxx>
+#include <vcl/ptrstyle.hxx>
+#include <vcl/region.hxx>
+#include <vcl/scopedbitmapaccess.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/syswin.hxx>
+#include <vcl/task.hxx>
+#include <vcl/timer.hxx>
+#include <vcl/transfer.hxx>
+#include <vcl/vclenum.hxx>
+#include <vcl/vclptr.hxx>
+#include <vcl/vectorgraphicdata.hxx>
+#include <vcl/virdev.hxx>
+#include <vcl/weld.hxx>
+#include <vcl/window.hxx>
+#include <vcl/windowstate.hxx>
+#endif // PCH_LEVEL >= 2
+#if PCH_LEVEL >= 3
+#include <basegfx/basegfxdllapi.h>
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/basicrange.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/tuple/b2ituple.hxx>
+#include <basegfx/tuple/b3dtuple.hxx>
+#include <basegfx/utils/common.hxx>
+#include <basegfx/vector/b2dsize.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <basegfx/vector/b2enums.hxx>
+#include <basegfx/vector/b2ivector.hxx>
+#include <com/sun/star/accessibility/AccessibleEventId.hpp>
+#include <com/sun/star/accessibility/AccessibleStateType.hpp>
+#include <com/sun/star/awt/Key.hpp>
+#include <com/sun/star/awt/KeyGroup.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/beans/Property.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/beans/PropertyState.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XFastPropertySet.hpp>
+#include <com/sun/star/beans/XMultiPropertySet.hpp>
+#include <com/sun/star/beans/XPropertiesChangeListener.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/XPropertySetOption.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/beans/XVetoableChangeListener.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/container/XNameReplace.hpp>
+#include <com/sun/star/datatransfer/DataFlavor.hpp>
+#include <com/sun/star/datatransfer/XTransferable2.hpp>
+#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
+#include <com/sun/star/datatransfer/clipboard/XClipboardOwner.hpp>
+#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
+#include <com/sun/star/datatransfer/dnd/DropTargetDragEvent.hpp>
+#include <com/sun/star/datatransfer/dnd/DropTargetDropEvent.hpp>
+#include <com/sun/star/datatransfer/dnd/XDragGestureListener.hpp>
+#include <com/sun/star/datatransfer/dnd/XDragSourceListener.hpp>
+#include <com/sun/star/datatransfer/dnd/XDropTargetListener.hpp>
+#include <com/sun/star/embed/Aspects.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <com/sun/star/frame/XTerminateListener.hpp>
+#include <com/sun/star/i18n/Calendar2.hpp>
+#include <com/sun/star/i18n/ForbiddenCharacters.hpp>
+#include <com/sun/star/i18n/LanguageCountryInfo.hpp>
+#include <com/sun/star/i18n/LocaleDataItem2.hpp>
+#include <com/sun/star/i18n/LocaleItem.hpp>
+#include <com/sun/star/i18n/NativeNumberXmlAttributes.hpp>
+#include <com/sun/star/i18n/TransliterationModules.hpp>
+#include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
+#include <com/sun/star/i18n/reservedWords.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/lang/EventObject.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <com/sun/star/uno/Any.h>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Exception.hpp>
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/RuntimeException.hpp>
+#include <com/sun/star/uno/Sequence.h>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/Type.h>
+#include <com/sun/star/uno/Type.hxx>
+#include <com/sun/star/uno/TypeClass.hdl>
+#include <com/sun/star/uno/XAggregation.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/uno/XInterface.hpp>
+#include <com/sun/star/uno/XWeak.hpp>
+#include <com/sun/star/util/Date.hpp>
+#include <com/sun/star/util/DateTime.hpp>
+#include <com/sun/star/util/Time.hpp>
+#include <com/sun/star/util/URLTransformer.hpp>
+#include <com/sun/star/view/PrintableState.hpp>
+#include <comphelper/broadcasthelper.hxx>
+#include <comphelper/comphelperdllapi.h>
+#include <comphelper/lok.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/propagg.hxx>
+#include <comphelper/propertycontainer.hxx>
+#include <comphelper/propertycontainerhelper.hxx>
+#include <comphelper/propstate.hxx>
+#include <comphelper/sequence.hxx>
+#include <comphelper/string.hxx>
+#include <comphelper/uno3.hxx>
+#include <cppu/cppudllapi.h>
+#include <cppu/unotype.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase.hxx>
+#include <cppuhelper/compbase_ex.hxx>
+#include <cppuhelper/cppuhelperdllapi.h>
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/interfacecontainer.h>
+#include <cppuhelper/interfacecontainer.hxx>
+#include <cppuhelper/propshlp.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/weakagg.hxx>
+#include <cppuhelper/weakref.hxx>
+#include <i18nlangtag/lang.h>
+#include <i18nlangtag/languagetag.hxx>
+#include <i18nutil/i18nutildllapi.h>
+#include <i18nutil/transliteration.hxx>
+#include <o3tl/cow_wrapper.hxx>
+#include <o3tl/deleter.hxx>
+#include <o3tl/safeint.hxx>
+#include <o3tl/strong_int.hxx>
+#include <o3tl/typed_flags_set.hxx>
+#include <o3tl/underlyingenumvalue.hxx>
+#include <officecfg/Office/Common.hxx>
+#include <salhelper/thread.hxx>
+#include <sot/exchange.hxx>
+#include <sot/formats.hxx>
+#include <sot/sotdllapi.h>
+#include <svl/hint.hxx>
+#include <svl/macitem.hxx>
+#include <svl/poolitem.hxx>
+#include <svl/svldllapi.h>
+#include <svl/typedwhich.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
+#include <tools/color.hxx>
+#include <tools/date.hxx>
+#include <tools/datetime.hxx>
+#include <tools/debug.hxx>
+#include <tools/degree.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/fldunit.hxx>
+#include <tools/fontenum.hxx>
+#include <tools/fract.hxx>
+#include <tools/gen.hxx>
+#include <tools/globname.hxx>
+#include <tools/link.hxx>
+#include <tools/long.hxx>
+#include <tools/mapunit.hxx>
+#include <tools/ref.hxx>
+#include <tools/solar.h>
+#include <tools/stream.hxx>
+#include <tools/time.hxx>
+#include <tools/toolsdllapi.h>
+#include <tools/urlobj.hxx>
+#include <typelib/typeclass.h>
+#include <typelib/typedescription.h>
+#include <typelib/uik.h>
+#include <ucbhelper/content.hxx>
+#include <uno/any2.h>
+#include <uno/data.h>
+#include <uno/sequence2.h>
+#include <unotools/accessiblestatesethelper.hxx>
+#include <unotools/calendarwrapper.hxx>
+#include <unotools/configitem.hxx>
+#include <unotools/configmgr.hxx>
+#include <unotools/localedatawrapper.hxx>
+#include <unotools/nativenumberwrapper.hxx>
+#include <unotools/options.hxx>
+#include <unotools/streamwrap.hxx>
+#include <unotools/syslocale.hxx>
+#include <unotools/transliterationwrapper.hxx>
+#include <unotools/unotoolsdllapi.h>
+#endif // PCH_LEVEL >= 3
+#if PCH_LEVEL >= 4
+#include <svtools/brwbox.hxx>
+#include <svtools/brwhead.hxx>
+#include <svtools/colorcfg.hxx>
+#include <svtools/htmlkywd.hxx>
+#include <svtools/htmltokn.h>
+#include <svtools/svtdllapi.h>
+#include <svtools/svtresid.hxx>
+#include <svtools/valueset.hxx>
+#endif // PCH_LEVEL >= 4
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/strings.hxx b/svtools/inc/strings.hxx
new file mode 100644
index 000000000..d6210eec9
--- /dev/null
+++ b/svtools/inc/strings.hxx
@@ -0,0 +1,27 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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/.
+ */
+
+#pragma once
+
+#include <rtl/ustring.hxx>
+
+// no need to translate this
+// the items in this string have to be in the same order as the STR_FIELD_* strings are added to the
+// field label list of the dialog
+inline constexpr OUStringLiteral STR_LOGICAL_FIELD_NAMES = u"FirstName;LastName;Company;Department;Street;Zip;City;State;Country;PhonePriv;PhoneComp;PhoneOffice;PhoneCell;PhoneOther;Pager;Fax;EMail;URL;Title;Position;Code;AddrForm;AddrFormMail;Id;CalendarURL;InviteParticipant;Note;Altfield1;Altfield2;Altfield3;Altfield4";
+
+#define STR_DESCRIPTION_SMATH_DOC "StarMath 2.0 - 5.0"
+#define STR_DESCRIPTION_SCHART_DOC "StarChart 3.0 - 5.0"
+#define STR_DESCRIPTION_SDRAW_DOC "StarDraw 3.0 / 5.0 (StarImpress)"
+#define STR_DESCRIPTION_SCALC_DOC "StarCalc 3.0 - 5.0"
+#define STR_DESCRIPTION_SIMPRESS_DOC "StarImpress 4.0 / 5.0"
+#define STR_DESCRIPTION_SWRITER_DOC "StarWriter 3.0 - 5.0"
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/svtools/inc/table/defaultinputhandler.hxx b/svtools/inc/table/defaultinputhandler.hxx
new file mode 100644
index 000000000..add1a0693
--- /dev/null
+++ b/svtools/inc/table/defaultinputhandler.hxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <table/tableinputhandler.hxx>
+#include <rtl/ref.hxx>
+#include <mousefunction.hxx>
+
+#include <vector>
+
+
+namespace svt::table
+{
+
+ class DefaultInputHandler final : public ITableInputHandler
+ {
+ public:
+ DefaultInputHandler();
+ virtual ~DefaultInputHandler() override;
+
+ virtual bool MouseMove ( ITableControl& _rControl, const MouseEvent& rMEvt ) override;
+ virtual bool MouseButtonDown ( ITableControl& _rControl, const MouseEvent& rMEvt ) override;
+ virtual bool MouseButtonUp ( ITableControl& _rControl, const MouseEvent& rMEvt ) override;
+ virtual bool KeyInput ( ITableControl& _rControl, const KeyEvent& rKEvt ) override;
+ virtual bool GetFocus ( ITableControl& _rControl ) override;
+ virtual bool LoseFocus ( ITableControl& _rControl ) override;
+
+ private:
+ bool delegateMouseEvent( ITableControl& i_control, const MouseEvent& i_event,
+ FunctionResult ( MouseFunction::*i_handlerMethod )( ITableControl&, const MouseEvent& ) );
+
+ rtl::Reference< MouseFunction > pActiveFunction;
+ std::vector< rtl::Reference< MouseFunction > > aMouseFunctions;
+ };
+
+
+} // namespace svt::table
+
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/gridtablerenderer.hxx b/svtools/inc/table/gridtablerenderer.hxx
new file mode 100644
index 000000000..e372de324
--- /dev/null
+++ b/svtools/inc/table/gridtablerenderer.hxx
@@ -0,0 +1,116 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <table/tablemodel.hxx>
+#include <vcl/image.hxx>
+
+#include <memory>
+
+
+namespace svt::table
+{
+
+
+ struct GridTableRenderer_Impl;
+
+
+ //= GridTableRenderer
+
+ /** a default implementation for the ->ITableRenderer interface
+
+ This class is able to paint a table grid, table headers, and cell
+ backgrounds according to the selected/active state of cells.
+ */
+ class GridTableRenderer final : public ITableRenderer
+ {
+ private:
+ ::std::unique_ptr< GridTableRenderer_Impl > m_pImpl;
+
+ public:
+ /** creates a table renderer associated with the given model
+
+ @param _rModel
+ the model which should be rendered. The caller is responsible
+ for lifetime control, that is, the model instance must live
+ at least as long as the renderer instance lives
+ */
+ GridTableRenderer( ITableModel& _rModel );
+ virtual ~GridTableRenderer() override;
+
+ /** determines whether or not to paint grid lines
+ */
+ bool useGridLines() const;
+
+ /** controls whether or not to paint grid lines
+ */
+ void useGridLines( bool const i_use );
+
+ public:
+ // ITableRenderer overridables
+ virtual void PaintHeaderArea(
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle ) override;
+ virtual void PaintColumnHeader( ColPos _nCol,
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ const StyleSettings& _rStyle ) override;
+ virtual void PrepareRow( RowPos _nRow, bool i_hasControlFocus, bool _bSelected,
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rRowArea,
+ const StyleSettings& _rStyle ) override;
+ virtual void PaintRowHeader(
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ const StyleSettings& _rStyle ) override;
+ virtual void PaintCell( ColPos const i_col,
+ bool i_hasControlFocus, bool _bSelected,
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ const StyleSettings& _rStyle ) override;
+ virtual void ShowCellCursor( vcl::Window& _rView, const tools::Rectangle& _rCursorRect) override;
+ virtual void HideCellCursor( vcl::Window& _rView ) override;
+ virtual bool FitsIntoCell(
+ css::uno::Any const & i_cellContent,
+ OutputDevice& i_targetDevice, tools::Rectangle const & i_targetArea
+ ) const override;
+ virtual bool GetFormattedCellString(
+ css::uno::Any const & i_cellValue,
+ OUString & o_cellString
+ ) const override;
+
+ private:
+ struct CellRenderContext;
+
+ void impl_paintCellContent(
+ CellRenderContext const & i_context
+ );
+ void impl_paintCellImage(
+ CellRenderContext const & i_context,
+ Image const & i_image
+ );
+ void impl_paintCellText(
+ CellRenderContext const & i_context,
+ OUString const & i_text
+ );
+ };
+
+} // namespace svt::table
+
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tablecontrol.hxx b/svtools/inc/table/tablecontrol.hxx
new file mode 100644
index 000000000..ecb6ea52c
--- /dev/null
+++ b/svtools/inc/table/tablecontrol.hxx
@@ -0,0 +1,173 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <table/tablemodel.hxx>
+#include <vcl/accessibletable.hxx>
+
+#include <vcl/ctrl.hxx>
+#include <vcl/seleng.hxx>
+
+#include <memory>
+
+namespace svt::table
+{
+ class TableControl_Impl;
+
+
+ //= TableControl
+
+ /** a basic control which manages table-like data, i.e. a number of cells
+ organized in <code>m</code> rows and <code>n</code> columns.
+
+ The control itself does not do any assumptions about the concrete data
+ it displays, this is encapsulated in an instance supporting the
+ ->ITableModel interface.
+
+ Also, the control does not do any assumptions about how the model's
+ content is rendered. This is the responsibility of a component
+ supporting the ->ITableRenderer interface (the renderer is obtained from
+ the model).
+
+ The control supports the concept of a <em>current</em> (or <em>active</em>
+ cell).
+ The control supports accessibility, this is encapsulated in IAccessibleTable
+ */
+ class TableControl final : public Control, public vcl::table::IAccessibleTable
+ {
+ private:
+ std::shared_ptr<TableControl_Impl> m_pImpl;
+
+
+ public:
+ TableControl( vcl::Window* _pParent, WinBits _nStyle );
+ virtual ~TableControl() override;
+ virtual void dispose() override;
+
+ /// sets a new table model
+ void SetModel( const PTableModel& _pModel );
+ /// retrieves the current table model
+ PTableModel GetModel() const;
+
+ /** retrieves the current row
+
+ The current row is the one which contains the active cell.
+
+ @return
+ the row index of the active cell, or ->ROW_INVALID
+ if there is no active cell, e.g. because the table does
+ not contain any rows or columns.
+ */
+ sal_Int32 GetCurrentRow() const override;
+
+ ITableControl&
+ getTableControlInterface();
+
+ /** retrieves the current column
+
+ The current col is the one which contains the active cell.
+
+ @return
+ the column index of the active cell, or ->COL_INVALID
+ if there is no active cell, e.g. because the table does
+ not contain any rows or columns.
+ */
+ sal_Int32 GetCurrentColumn() const override;
+
+ /** activates the cell at the given position
+ */
+ void GoTo( ColPos _nColumnPos, RowPos _nRow);
+
+ virtual void Resize() override;
+ void Select();
+
+ /**after removing a row, updates the vector which contains the selected rows
+ if the row, which should be removed, is selected, it will be erased from the vector
+ */
+ SelectionEngine* getSelEngine();
+ vcl::Window& getDataWindow();
+
+ // Window overridables
+ virtual void GetFocus() override;
+ virtual void LoseFocus() override;
+ virtual void KeyInput( const KeyEvent& rKEvt ) override;
+ virtual void StateChanged( StateChangedType i_nStateChange ) override;
+
+ /** Creates and returns the accessible object of the whole GridControl. */
+ virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleControl( sal_Int32 _nIndex ) override;
+ virtual OUString GetAccessibleObjectName(vcl::table::AccessibleTableControlObjType eObjType, sal_Int32 _nRow, sal_Int32 _nCol) const override;
+ virtual void GoToCell( sal_Int32 _nColumnPos, sal_Int32 _nRow ) override;
+ virtual OUString GetAccessibleObjectDescription(vcl::table::AccessibleTableControlObjType eObjType) const override;
+ virtual void FillAccessibleStateSet( ::utl::AccessibleStateSetHelper& rStateSet, vcl::table::AccessibleTableControlObjType eObjType ) const override;
+
+ // temporary methods
+ // Those do not really belong into the public API - they're intended for firing A11Y-related events. However,
+ // firing those events should be an implementation internal to the TableControl resp. TableControl_Impl,
+ // instead of something triggered externally.
+ void commitCellEventIfAccessibleAlive( sal_Int16 const i_eventID, const css::uno::Any& i_newValue, const css::uno::Any& i_oldValue );
+ void commitTableEventIfAccessibleAlive( sal_Int16 const i_eventID, const css::uno::Any& i_newValue, const css::uno::Any& i_oldValue );
+
+
+ // IAccessibleTable
+ virtual tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const override;
+ virtual void GrabFocus() override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > GetAccessible() override;
+ virtual vcl::Window* GetAccessibleParentWindow() const override;
+ virtual vcl::Window* GetWindowInstance() override;
+ virtual sal_Int32 GetAccessibleControlCount() const override;
+ virtual bool ConvertPointToControlIndex( sal_Int32& _rnIndex, const Point& _rPoint ) override;
+ virtual sal_Int32 GetRowCount() const override;
+ virtual sal_Int32 GetColumnCount() const override;
+ virtual bool ConvertPointToCellAddress( sal_Int32& _rnRow, sal_Int32& _rnColPos, const Point& _rPoint ) override;
+ virtual tools::Rectangle calcHeaderRect( bool _bIsColumnBar ) override;
+ virtual tools::Rectangle calcHeaderCellRect( bool _bIsColumnBar, sal_Int32 nPos) override;
+ virtual tools::Rectangle calcTableRect() override;
+ virtual tools::Rectangle calcCellRect( sal_Int32 _nRowPos, sal_Int32 _nColPos ) override;
+ virtual tools::Rectangle GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex) override;
+ virtual sal_Int32 GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint) override;
+ virtual void FillAccessibleStateSetForCell( ::utl::AccessibleStateSetHelper& _rStateSet, sal_Int32 _nRow, sal_uInt16 _nColumnPos ) const override;
+ virtual OUString GetRowName(sal_Int32 _nIndex) const override;
+ virtual OUString GetColumnName( sal_Int32 _nIndex ) const override;
+ virtual bool HasRowHeader() override;
+ virtual bool HasColHeader() override;
+ virtual OUString GetAccessibleCellText(sal_Int32 _nRowPos, sal_Int32 _nColPos) const override;
+
+ virtual sal_Int32 GetSelectedRowCount() const override;
+ virtual sal_Int32 GetSelectedRowIndex( sal_Int32 const i_selectionIndex ) const override;
+ virtual bool IsRowSelected( sal_Int32 const i_rowIndex ) const override;
+ virtual void SelectRow( sal_Int32 const i_rowIndex, bool const i_select ) override;
+ virtual void SelectAllRows( bool const i_select ) override;
+
+
+ private:
+ DECL_LINK( ImplSelectHdl, LinkParamNone*, void );
+
+ private:
+ TableControl( const TableControl& ) = delete;
+ TableControl& operator=( const TableControl& ) = delete;
+ };
+
+
+} // namespace svt::table
+
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tablecontrolinterface.hxx b/svtools/inc/table/tablecontrolinterface.hxx
new file mode 100644
index 000000000..6a5927284
--- /dev/null
+++ b/svtools/inc/table/tablecontrolinterface.hxx
@@ -0,0 +1,237 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <sal/types.h>
+#include <vcl/seleng.hxx>
+#include <vcl/window.hxx>
+
+#include <table/tabletypes.hxx>
+#include <table/tablemodel.hxx>
+
+namespace svt::table
+{
+ //= TableControlAction
+ enum TableControlAction
+ {
+ /// moves the cursor in the table control one row up, if possible, by keeping the current column
+ cursorUp,
+ /// moves the cursor in the table control one row down, if possible, by keeping the current column
+ cursorDown,
+ /// moves the cursor in the table control one column to the left, if possible, by keeping the current row
+ cursorLeft,
+ /// moves the cursor in the table control one column to the right, if possible, by keeping the current row
+ cursorRight,
+ /// moves the cursor to the beginning of the current line
+ cursorToLineStart,
+ /// moves the cursor to the end of the current line
+ cursorToLineEnd,
+ /// moves the cursor to the first row, keeping the current column
+ cursorToFirstLine,
+ /// moves the cursor to the last row, keeping the current column
+ cursorToLastLine,
+ /// moves the cursor one page up, keeping the current column
+ cursorPageUp,
+ /// moves the cursor one page down, keeping the current column
+ cursorPageDown,
+ /// moves the cursor to the top-most, left-most cell
+ cursorTopLeft,
+ /// moves the cursor to the bottom-most, right-most cell
+ cursorBottomRight,
+ /// selects the row, where the actual cursor is
+ cursorSelectRow,
+ /// selects the rows, above the actual cursor is
+ cursorSelectRowUp,
+ /// selects the row, beneath the actual cursor is
+ cursorSelectRowDown,
+ /// selects the row, from the actual cursor till top
+ cursorSelectRowAreaTop,
+ /// selects the row, from the actual cursor till bottom
+ cursorSelectRowAreaBottom,
+
+ /// invalid and final enumeration value, not to be actually used
+ invalidTableControlAction
+ };
+
+
+ //= TableCellArea
+
+ enum TableCellArea
+ {
+ CellContent,
+ ColumnDivider
+ };
+
+
+ //= TableCell
+
+ struct TableCell
+ {
+ ColPos nColumn;
+ RowPos nRow;
+ TableCellArea eArea;
+
+ TableCell( ColPos const i_column, RowPos const i_row )
+ :nColumn( i_column )
+ ,nRow( i_row )
+ ,eArea( CellContent )
+ {
+ }
+ };
+
+
+ //= ColumnMetrics
+
+ struct ColumnMetrics
+ {
+ /** the start of the column, in pixels. Might be negative, in case the column is scrolled out of the visible
+ area. Note: see below.
+ */
+ tools::Long nStartPixel;
+
+ /** the end of the column, in pixels, plus 1. Effectively, this is the accumulated width of all columns
+ up to the current one.
+
+ Huh? Earlier you said that the nStartPixel of columns
+ scrolled out (to the left) of the visible area is
+ negative. Also, where is the promise that there is no gap
+ between columns? The above claim would be true only if the
+ first column always started at zero, and there is never a
+ gap. So these doc comments are inconsistent. How
+ surprising.
+ */
+ tools::Long nEndPixel;
+
+ ColumnMetrics()
+ :nStartPixel(0)
+ ,nEndPixel(0)
+ {
+ }
+
+ ColumnMetrics( tools::Long const i_start, tools::Long const i_end )
+ :nStartPixel( i_start )
+ ,nEndPixel( i_end )
+ {
+ }
+ };
+
+
+ //= TableArea
+
+ enum class TableArea
+ {
+ ColumnHeaders,
+ RowHeaders,
+ All
+ };
+
+
+ //= ITableControl
+
+ /** defines a callback interface to be implemented by a concrete table control
+ */
+ class SAL_NO_VTABLE ITableControl
+ {
+ public:
+ /** hides the cell cursor
+
+ The method cares for successive calls, that is, for every call to
+ ->hideCursor(), you need one call to ->showCursor. Only if the number
+ of both calls matches, the cursor is really shown.
+
+ @see showCursor
+ */
+ virtual void hideCursor() = 0;
+
+ /** shows the cell cursor
+
+ @see hideCursor
+ */
+ virtual void showCursor() = 0;
+
+ /** dispatches an action to the table control
+
+ @return
+ <TRUE/> if the action could be dispatched successfully, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the action, or impossibility
+ to execute the action at all (for instance moving up one row when already positioned
+ on the very first row).
+
+ @see TableControlAction
+ */
+ virtual bool dispatchAction( TableControlAction _eAction ) = 0;
+
+ /** returns selection engine*/
+ virtual SelectionEngine* getSelEngine() = 0;
+
+ /** returns the table model
+
+ The returned model is guaranteed to not be <NULL/>.
+ */
+ virtual PTableModel getModel() const = 0;
+
+ /// returns the index of the currently active column
+ virtual ColPos getCurrentColumn() const = 0;
+
+ /// returns the index of the currently active row
+ virtual RowPos getCurrentRow() const = 0;
+
+ /// activates the given cell
+ virtual void activateCell( ColPos const i_col, RowPos const i_row ) = 0;
+
+ /// retrieves the size of the table window, in pixels
+ virtual ::Size getTableSizePixel() const = 0;
+
+ /// sets a new mouse pointer for the table window
+ virtual void setPointer( PointerStyle i_pointer ) = 0;
+
+ /// captures the mouse to the table window
+ virtual void captureMouse() = 0;
+
+ /// releases the mouse, after it had previously been captured
+ virtual void releaseMouse() = 0;
+
+ /// invalidates the table window
+ virtual void invalidate( TableArea const i_what ) = 0;
+
+ /// calculates a width, given in pixels, into an AppFont-based width
+ virtual tools::Long pixelWidthToAppFont( tools::Long const i_pixels ) const = 0;
+
+ /// shows a tracking rectangle
+ virtual void showTracking( tools::Rectangle const & i_location, ShowTrackFlags const i_flags ) = 0;
+
+ /// hides a previously shown tracking rectangle
+ virtual void hideTracking() = 0;
+
+ /// does a hit test for the given pixel coordinates
+ virtual TableCell hitTest( const Point& rPoint ) const = 0;
+
+ /// retrieves the metrics for a given column
+ virtual ColumnMetrics getColumnMetrics( ColPos const i_column ) const = 0;
+
+ /// determines whether a given row is selected
+ virtual bool isRowSelected( RowPos _nRow ) const = 0;
+
+ virtual ~ITableControl() {};
+ };
+
+} // namespace svt::table
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tableinputhandler.hxx b/svtools/inc/table/tableinputhandler.hxx
new file mode 100644
index 000000000..9d11df38d
--- /dev/null
+++ b/svtools/inc/table/tableinputhandler.hxx
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <memory>
+
+class MouseEvent;
+class KeyEvent;
+
+
+namespace svt::table
+{
+
+
+ class ITableControl;
+
+
+ //= ITableInputHandler
+
+ /** interface for components handling input in a ->TableControl
+ */
+ class ITableInputHandler
+ {
+ public:
+ // all those methods have the same semantics as the equal-named methods of ->Window,
+ // with the additional option to return a boolean value indicating whether
+ // the event should be further processed by the ->Window implementations (<FALSE/>),
+ // or whether it has been sufficiently handled by the ->ITableInputHandler instance
+ // (<FALSE/>).
+
+ virtual bool MouseMove ( ITableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool MouseButtonDown ( ITableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool MouseButtonUp ( ITableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool KeyInput ( ITableControl& _rControl, const KeyEvent& rKEvt ) = 0;
+ virtual bool GetFocus ( ITableControl& _rControl ) = 0;
+ virtual bool LoseFocus ( ITableControl& _rControl ) = 0;
+
+ virtual ~ITableInputHandler() { }
+ };
+ typedef std::shared_ptr< ITableInputHandler > PTableInputHandler;
+
+
+} // namespace svt::table
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tablemodel.hxx b/svtools/inc/table/tablemodel.hxx
new file mode 100644
index 000000000..b3bcc36e9
--- /dev/null
+++ b/svtools/inc/table/tablemodel.hxx
@@ -0,0 +1,454 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <svtools/svtdllapi.h>
+#include <table/tabletypes.hxx>
+#include <table/tablerenderer.hxx>
+#include <table/tableinputhandler.hxx>
+
+#include <com/sun/star/style/VerticalAlignment.hpp>
+#include <com/sun/star/style/HorizontalAlignment.hpp>
+
+#include <sal/types.h>
+
+#include <optional>
+#include <memory>
+#include <vector>
+#include <o3tl/typed_flags_set.hxx>
+
+namespace svt::table { class ITableDataSort; }
+
+class Color;
+
+enum class ColumnAttributeGroup
+{
+ NONE = 0x00,
+ /// denotes column attributes related to the width of the column
+ WIDTH = 0x01,
+ /// denotes column attributes related to the appearance of the column, i.e. those relevant for rendering
+ APPEARANCE = 0x02,
+ /// denotes the entirety of column attributes
+ ALL = 0x03,
+};
+namespace o3tl
+{
+ template<> struct typed_flags<ColumnAttributeGroup> : is_typed_flags<ColumnAttributeGroup, 0x03> {};
+}
+
+
+namespace svt::table
+{
+ //= ScrollbarVisibility
+ enum ScrollbarVisibility
+ {
+ /** enumeration value denoting that a scrollbar should never be visible, even
+ if needed normally
+ */
+ ScrollbarShowNever,
+ /** enumeration value denoting that a scrollbar should be visible when needed only
+ */
+ ScrollbarShowSmart,
+ /** enumeration value denoting that a scrollbar should always be visible, even
+ if not needed normally
+ */
+ ScrollbarShowAlways
+ };
+
+
+ //= ITableModelListener
+
+ /** declares an interface to be implemented by components interested in
+ changes in an ->ITableModel
+ */
+ class SAL_NO_VTABLE ITableModelListener : public std::enable_shared_from_this< ITableModelListener >
+ {
+ public:
+ /** notifies the listener that one or more rows have been inserted into
+ the table
+
+ @param first
+ the index of the first newly inserted row
+ @param last
+ the index of the last newly inserted row. Must not be smaller
+ than ->first
+ */
+ virtual void rowsInserted( RowPos first, RowPos last ) = 0;
+
+ /** notifies the listener that one or more rows have been removed from
+ the table
+
+ @param first
+ the old index of the first removed row. If this is <code>-1</code>, then all
+ rows have been removed from the model.
+ @param last
+ the old index of the last removed row. Must not be smaller
+ than ->first
+ */
+ virtual void rowsRemoved( RowPos first, RowPos last ) = 0;
+
+ /** notifies the listener that one or more columns have been inserted into
+ the table
+ */
+ virtual void columnInserted() = 0;
+
+ /** notifies the listener that one or more columns have been removed from
+ the table
+ */
+ virtual void columnRemoved() = 0;
+
+ /** notifies the listener that all columns have been removed from the model
+ */
+ virtual void allColumnsRemoved() = 0;
+
+ /** notifies the listener that a rectangular cell range in the table
+ has been updated
+
+ Listeners are required to discard any possibly cached information
+ they have about the cells in question, in particular any possibly
+ cached cell values.
+ */
+ virtual void cellsUpdated( RowPos const i_firstRow, RowPos const i_lastRow ) = 0;
+
+ /** notifies the listener that attributes of a given column changed
+
+ @param i_column
+ the position of the column whose attributes changed
+ @param i_attributeGroup
+ a combination of one or more <code>COL_ATTRS_*</code> flags, denoting the attribute group(s)
+ in which changes occurred.
+ */
+ virtual void columnChanged( ColPos const i_column, ColumnAttributeGroup const i_attributeGroup ) = 0;
+
+ /** notifies the listener that the metrics of the table changed.
+
+ Metrics here include the column header height, the row header width, the row height, and the presence
+ of both the row and column header.
+ */
+ virtual void tableMetricsChanged() = 0;
+
+ /// deletes the listener instance
+ virtual ~ITableModelListener(){};
+ };
+ typedef std::shared_ptr< ITableModelListener > PTableModelListener;
+
+
+ //= IColumnModel
+
+ /** interface to be implemented by table column models
+ */
+ class SAL_NO_VTABLE IColumnModel
+ {
+ public:
+ /** returns the name of the column
+
+ Column names should be human-readable, but not necessarily unique
+ within a given table.
+
+ @see setName
+ */
+ virtual OUString getName() const = 0;
+
+ /** retrieves the help text to be displayed for the column.
+ */
+ virtual OUString getHelpText() const = 0;
+
+ /** determines whether the column can be interactively resized
+
+ @see getMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual bool isResizable() const = 0;
+
+ /** denotes the relative flexibility of the column
+
+ This flexibility is taken into account when a table control auto-resizes its columns, because the available
+ space changed. In this case, the columns grow or shrink according to their flexibility.
+
+ A value of 0 means the column is not auto-resized at all.
+ */
+ virtual sal_Int32 getFlexibility() const = 0;
+
+ /** returns the width of the column, in app-font units
+
+ The returned value must be a positive ->TableMetrics value.
+
+ @see setWidth
+ @see getMinWidth
+ @see getMaxWidth
+ */
+ virtual TableMetrics getWidth() const = 0;
+
+ /** sets a new width for the column
+
+ @param _nWidth
+ the new width, app-font units
+
+ @see getWidth
+ */
+ virtual void setWidth( TableMetrics _nWidth ) = 0;
+
+ /** returns the minimum width of the column, in app-font units, or 0 if the column
+ does not have a minimal width
+
+ @see setMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual TableMetrics getMinWidth() const = 0;
+
+ /** returns the maximum width of the column, in app-font units, or 0 if the column
+ does not have a minimal width
+
+ @see setMaxWidth
+ @see getMinWidth
+ @see getWidth
+ */
+ virtual TableMetrics getMaxWidth() const = 0;
+
+ /** retrieves the horizontal alignment to be used for content in this cell
+ */
+ virtual css::style::HorizontalAlignment getHorizontalAlign() = 0;
+
+ /// deletes the column model instance
+ virtual ~IColumnModel() { }
+ };
+ typedef std::shared_ptr< IColumnModel > PColumnModel;
+
+
+ //= ITableModel
+
+ /** declares the interface to implement by an abstract table model
+ */
+ class SAL_NO_VTABLE SVT_DLLPUBLIC ITableModel
+ {
+ public:
+ /** returns the number of columns in the table
+ */
+ virtual TableSize getColumnCount() const = 0;
+
+ /** returns the number of rows in the table
+ */
+ virtual TableSize getRowCount() const = 0;
+
+ /** determines whether the table has column headers
+
+ If this method returns <TRUE/>, the renderer returned by
+ ->getRenderer must be able to render column headers.
+
+ @see IColumnRenderer
+ */
+ virtual bool hasColumnHeaders() const = 0;
+
+ /** determines whether the table has row headers
+
+ If this method returns <TRUE/>, the renderer returned by
+ ->getRenderer must be able to render row headers.
+
+ @see IColumnRenderer
+ */
+ virtual bool hasRowHeaders() const = 0;
+
+ /** returns a model for a certain column
+
+ @param column
+ the index of the column in question. Must be greater than or
+ equal 0, and smaller than the return value of ->getColumnCount()
+
+ @return
+ the model of the column in question. Must not be <NULL/>
+ */
+ virtual PColumnModel getColumnModel( ColPos column ) = 0;
+
+ /** returns a renderer which is able to paint the table represented
+ by this table model
+
+ @return the renderer to use. Must not be <NULL/>
+ */
+ virtual PTableRenderer getRenderer() const = 0;
+
+ /** returns the component handling input in a view associated with the model
+ */
+ virtual PTableInputHandler getInputHandler() const = 0;
+
+ /** determines the height of rows in the table.
+
+ @return
+ the logical height of rows in the table, in app-font units. The height must be
+ greater 0.
+ */
+ virtual TableMetrics getRowHeight() const = 0;
+
+ /** determines the height of the column header row
+
+ This method is not to be called if ->hasColumnHeaders()
+ returned <FALSE/>.
+
+ @return
+ the logical height of the column header row, in app-font units.
+ Must be greater than 0.
+ */
+ virtual TableMetrics getColumnHeaderHeight() const = 0;
+
+ /** determines the width of the row header column
+
+ This method is not to be called if ->hasRowHeaders()
+ returned <FALSE/>.
+
+ @return
+ the logical width of the row header column, in app-font units.
+ Must be greater than 0.
+ */
+ virtual TableMetrics getRowHeaderWidth() const = 0;
+
+ /** returns the visibility mode of the vertical scrollbar
+ */
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility() const = 0;
+
+ /** returns the visibility mode of the horizontal scrollbar
+ */
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility() const = 0;
+
+ /** adds a listener to be notified of changes in the table model
+ */
+ virtual void addTableModelListener( const PTableModelListener& i_listener ) = 0;
+
+ /** remove a listener to be notified of changes in the table model
+ */
+ virtual void removeTableModelListener( const PTableModelListener& i_listener ) = 0;
+
+ /** retrieves the content of the given cell
+ */
+ virtual void getCellContent( ColPos const i_col, RowPos const i_row, css::uno::Any& o_cellContent ) = 0;
+
+ /** returns an object which should be displayed as tooltip for the given cell
+
+ At the moment, only string-convertible values are supported here. In the future, one might imagine displaying
+ scaled-down versions of a graphic in a cell, and a larger version of that very graphic as tooltip.
+
+ If no tooltip object is provided, then the cell content is used, and displayed as tooltip for the cell
+ if and only if it doesn't fit into the cell's space itself.
+
+ @param i_col
+ The column index of the cell in question. COL_ROW_HEADERS is a valid argument here.
+ @param i_row
+ The row index of the cell in question.
+ @param o_cellToolTip
+ takes the tooltip object upon return.
+ */
+ virtual void getCellToolTip( ColPos const i_col, RowPos const i_row, css::uno::Any & o_cellToolTip ) = 0;
+
+ /** retrieves title of a given row
+ */
+ virtual css::uno::Any getRowHeading( RowPos const i_rowPos ) const = 0;
+
+ /** returns the color to be used for rendering the grid lines.
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getLineColor() const = 0;
+
+ /** returns the color to be used for rendering the header background.
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getHeaderBackgroundColor() const = 0;
+
+ /** returns the color to be used for rendering the header text.
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getHeaderTextColor() const = 0;
+
+ /** returns the color to be used for the background of selected cells, when the control has the focus
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getActiveSelectionBackColor() const = 0;
+
+ /** returns the color to be used for the background of selected cells, when the control does not have the focus
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getInactiveSelectionBackColor() const = 0;
+
+ /** returns the color to be used for the text of selected cells, when the control has the focus
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getActiveSelectionTextColor() const = 0;
+
+ /** returns the color to be used for the text of selected cells, when the control does not have the focus
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getInactiveSelectionTextColor() const = 0;
+
+ /** returns the color to be used for rendering cell texts.
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getTextColor() const = 0;
+
+ /** returns the color to be used for text lines (underline, strikethrough) when rendering cell text.
+
+ If this value is not set, a default color from the style settings will be used.
+ */
+ virtual ::std::optional< ::Color > getTextLineColor() const = 0;
+
+ /** returns the colors to be used for the row backgrounds.
+
+ If this value is not set, every second row will have a background color derived from the style settings's
+ selection color, the other rows will not have a special background at all.
+
+ If this value is an empty sequence, the rows will not have a special background at all, instead the
+ normal background of the complete control will be used.
+
+ If value is a non-empty sequence, then rows will have the background colors as specified in the sequence,
+ in alternating order.
+ */
+ virtual ::std::optional< ::std::vector< ::Color > >
+ getRowBackgroundColors() const = 0;
+
+ /** determines the vertical alignment of content within a cell
+ */
+ virtual css::style::VerticalAlignment getVerticalAlign() const = 0;
+
+ /** returns an adapter to the sorting functionality of the model
+
+ It is legitimate to return <NULL/> here, in this case, the table model does not support sorting.
+ */
+ virtual ITableDataSort* getSortAdapter() = 0;
+
+ /** returns enabled state.
+ */
+ virtual bool isEnabled() const = 0;
+
+ /// destroys the table model instance
+ virtual ~ITableModel() { }
+ };
+ typedef std::shared_ptr< ITableModel > PTableModel;
+
+
+} // namespace svt::table
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tablerenderer.hxx b/svtools/inc/table/tablerenderer.hxx
new file mode 100644
index 000000000..c43bac818
--- /dev/null
+++ b/svtools/inc/table/tablerenderer.hxx
@@ -0,0 +1,249 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <table/tabletypes.hxx>
+
+#include <rtl/ustring.hxx>
+
+#include <memory>
+
+namespace com :: sun :: star :: uno { class Any; }
+namespace tools { class Rectangle; }
+namespace vcl { class Window; }
+
+class OutputDevice;
+class StyleSettings;
+namespace vcl {
+ typedef OutputDevice RenderContext;
+};
+
+
+namespace svt::table
+{
+
+
+ //= ITableRenderer
+
+ /** interface to implement by components rendering a ->TableControl
+ */
+ class SAL_NO_VTABLE ITableRenderer
+ {
+ public:
+
+ /** paints a (part of) header area
+
+ There are two header areas in a table control:
+ <ul><li>The row containing all column headers, i.e. <em>above</em> all rows containing the data</li>
+ <li>The column containing all row headers. i.e. <em>left of</em> all columns containing the data</li>
+ </ul>
+
+ A header area is more than the union of the single column/row headers.
+
+ First, there might be less columns than fit into the view - in this case, right
+ beside the right-most column, there's still room which belongs to the column header
+ area, but is not occupied by any particular column header.<br/>
+ An equivalent statement holds for the row header area, if there are fewer rows than
+ fit into the view.
+
+ Second, if the table control has both a row header and a column header,
+ the intersection between those both belongs to both the column header area and the
+ row header area, but not to any particular column or row header.
+
+ There are two flags specifying whether the to-be-painted area is part of the column
+ and/or row header area.
+ <ul><li>If both are <TRUE/>, the intersection of both areas is to be painted.</li>
+ <li>If ->_bIsColHeaderArea is <TRUE/> and ->_bIsRowHeaderArea is <FALSE/>,
+ then ->_rArea denotes the column header area <em>excluding</em> the
+ intersection between row and column header area.</li>
+ <li>Equivalently for ->_bIsColHeaderArea being <FALSE/> and ->_bIsRowHeaderArea
+ being <TRUE/></li>
+ </ul>
+ Note that it's not possible for both ->_bIsColHeaderArea and ->_bIsRowHeaderArea
+ to be <FALSE/> at the same time.
+
+ @param _rDevice
+ the device to paint onto
+ @param _rArea
+ the area to paint into
+ @param _bIsColHeaderArea
+ <TRUE/> if and only if ->_rArea is part of the column header area.
+ @param _bIsRowHeaderArea
+ <TRUE/> if and only if ->_rArea is part of the row header area.
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintHeaderArea(
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** paints the header for a given column
+
+ @param _nCol
+ the index of the column to paint
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the column header should be painted
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintColumnHeader( ColPos _nCol,
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** prepares a row for painting
+
+ Painting a table means painting rows as necessary, in an increasing
+ order. The assumption is that retrieving data for two different rows
+ is (potentially) more expensive than retrieving data for two different
+ columns. Thus, the renderer will get the chance to "seek" to a certain
+ row, and then has to render all cells in this row, before another
+ row is going to be painted.
+
+ @param _nRow
+ the row which is going to be painted. The renderer should
+ at least remember this row, since subsequent calls to
+ ->PaintRowHeader(), ->PaintCell(), and ->FinishRow() will
+ not pass this parameter again.
+
+ However, the renderer is also allowed to render any
+ cell-independent content of this row.
+
+ @param i_hasControlFocus
+ <TRUE/> if and only if the table control currently has the focus
+ @param _bSelected
+ <TRUE/> if and only if the row to be prepared is
+ selected currently.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rRowArea
+ the are into which the row should be painted. This excludes
+ the row header area, if applicable.
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PrepareRow( RowPos _nRow, bool i_hasControlFocus, bool _bSelected,
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rRowArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** paints the header of a row
+
+ The row to be painted is denoted by the most recent call to
+ ->PrepareRow.
+
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the row header should be painted
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintRowHeader(
+ vcl::RenderContext& _rDevice, tools::Rectangle const & _rArea,
+ StyleSettings const & _rStyle ) = 0;
+
+ /** paints a certain cell
+
+ The row to be painted is denoted by the most recent call to
+ ->PrepareRow.
+
+ @param _bSelected
+ <TRUE/> if and only if the cell to be painted is
+ selected currently. This is the case if either
+ the row or the column of the cell is currently selected.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convenience
+ only.
+ @param i_hasControlFocus
+ <TRUE/> if and only if the table control currently has the focus
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convenience
+ only.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the cell should be painted
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintCell( ColPos const i_col,
+ bool i_hasControlFocus, bool _bSelected,
+ vcl::RenderContext& _rDevice, const tools::Rectangle& _rArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** draws a cell cursor in the given rectangle
+
+ The cell cursor is used to indicate the active/current cell
+ of a table control.
+ */
+ virtual void ShowCellCursor( vcl::Window& _rView, const tools::Rectangle& _rCursorRect) = 0;
+
+ /** hides the cell cursor previously drawn into the given rectangle
+
+ The cell cursor is used to indicate the active/current cell
+ of a table control.
+ */
+ virtual void HideCellCursor( vcl::Window& _rView ) = 0;
+
+ /** checks whether a given cell content fits into a given target area on a given device.
+
+ @param i_targetDevice
+ denotes the target device for the assumed rendering operation
+
+ @param i_targetArea
+ denotes the area within the target device for the assumed rendering operation.
+
+ @return
+ <TRUE/> if and only if the given cell content could be rendered into the given device and the
+ given area.
+ */
+ virtual bool FitsIntoCell(
+ css::uno::Any const & i_cellContent,
+ OutputDevice& i_targetDevice, tools::Rectangle const & i_targetArea
+ ) const = 0;
+
+ /** attempts to format the content of the given cell as string
+
+ @param i_cellValue
+ the value for which an attempt for a string conversion should be made
+ @param o_cellString
+ the cell content, formatted as string
+ @return
+ <TRUE/> if and only if the content could be formatted as string
+ */
+ virtual bool GetFormattedCellString(
+ css::uno::Any const & i_cellValue,
+ OUString & o_cellString
+ ) const = 0;
+
+ /// deletes the renderer instance
+ virtual ~ITableRenderer() { }
+ };
+ typedef std::shared_ptr< ITableRenderer > PTableRenderer;
+
+
+} // namespace svt::table
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tablesort.hxx b/svtools/inc/table/tablesort.hxx
new file mode 100644
index 000000000..699086352
--- /dev/null
+++ b/svtools/inc/table/tablesort.hxx
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <table/tabletypes.hxx>
+
+
+namespace svt::table
+{
+
+
+ //= ColumnSortDirection
+
+ enum ColumnSortDirection
+ {
+ ColumnSortAscending,
+ ColumnSortDescending
+ };
+
+
+ //= ColumnSort
+
+ struct ColumnSort
+ {
+ ColPos nColumnPos;
+ ColumnSortDirection eSortDirection;
+
+ ColumnSort()
+ :nColumnPos( COL_INVALID )
+ ,eSortDirection( ColumnSortAscending )
+ {
+ }
+
+ };
+
+
+ //= ITableDataSort
+
+ /** provides sorting functionality for the data underlying an ITableModel
+ */
+ class SAL_NO_VTABLE ITableDataSort
+ {
+ public:
+ /** sorts the rows in the model by the given column's data, in the given direction.
+ */
+ virtual void sortByColumn( ColPos const i_column, ColumnSortDirection const i_sortDirection ) = 0;
+
+ /** retrieves the current sort order of the data
+
+ If the <code>nColumnIndex</code> member of the returned structure is <code>COL_INVALID</code>, then
+ the data is currently not sorted.
+ */
+ virtual ColumnSort getCurrentSortOrder() const = 0;
+
+ protected:
+ ~ITableDataSort() {}
+ };
+
+
+} // namespace svt::table
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/table/tabletypes.hxx b/svtools/inc/table/tabletypes.hxx
new file mode 100644
index 000000000..8fdb18a83
--- /dev/null
+++ b/svtools/inc/table/tabletypes.hxx
@@ -0,0 +1,52 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <sal/types.h>
+
+
+namespace svt::table
+{
+
+ /// a value denoting the size of a table
+ typedef sal_Int32 TableSize;
+
+ /// a value denoting a column position within a table
+ typedef sal_Int32 ColPos;
+ /// a value denoting a row position within a table
+ typedef sal_Int32 RowPos;
+
+ typedef sal_Int32 TableMetrics;
+
+/// denotes the column containing the row headers
+#define COL_ROW_HEADERS (::svt::table::ColPos(-1))
+/// denotes the row containing the column headers
+#define ROW_COL_HEADERS (::svt::table::RowPos(-1))
+
+/// denotes an invalid column index
+#define COL_INVALID (::svt::table::ColPos(-2))
+/// denotes an invalid row index
+#define ROW_INVALID (::svt::table::RowPos(-2))
+
+
+} // namespace svt::table
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/inc/uiobject.hxx b/svtools/inc/uiobject.hxx
new file mode 100644
index 000000000..b20155517
--- /dev/null
+++ b/svtools/inc/uiobject.hxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ */
+
+#ifndef INCLUDED_SVTOOLS_INC_UIOBJECT_HXX
+#define INCLUDED_SVTOOLS_INC_UIOBJECT_HXX
+
+#include <memory>
+#include <vcl/uitest/uiobject.hxx>
+#include <svtools/valueset.hxx>
+
+class ValueSet;
+
+class ValueSetUIObject final : public DrawingAreaUIObject
+{
+ ValueSet* mpSet;
+
+public:
+ ValueSetUIObject(const VclPtr<vcl::Window>& xSetWin);
+
+ virtual void execute(const OUString& rAction, const StringMap& rParameters) override;
+
+ static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+ virtual StringMap get_state() override;
+
+private:
+ OUString get_name() const override;
+};
+
+#endif // INCLUDED_SVX_INC_UIOBJECT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */