summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu5
-rw-r--r--starmath/Library_sm.mk1
-rw-r--r--starmath/inc/ElementsDockingWindow.hxx142
-rw-r--r--starmath/inc/starmath.hrc48
-rw-r--r--starmath/sdi/smath.sdi52
-rw-r--r--starmath/sdi/smslots.sdi11
-rw-r--r--starmath/source/ElementsDockingWindow.cxx530
-rw-r--r--starmath/source/commands.src42
-rw-r--r--starmath/source/document.cxx4
-rw-r--r--starmath/source/smdll.cxx3
-rw-r--r--starmath/source/smres.src57
-rw-r--r--starmath/source/view.cxx78
-rw-r--r--starmath/uiconfig/smath/menubar/menubar.xml1
13 files changed, 935 insertions, 39 deletions
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu
index 0c6e2abd89df..fc99e062071d 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/MathCommands.xcu
@@ -156,6 +156,11 @@
<value xml:lang="en-US">Elements</value>
</prop>
</node>
+ <node oor:name=".uno:ElementsDockingWindow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Elements Dock</value>
+ </prop>
+ </node>
<node oor:name=".uno:FormelCursor" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Formula Cursor</value>
diff --git a/starmath/Library_sm.mk b/starmath/Library_sm.mk
index 342190b70ffb..a56e4391b3e6 100644
--- a/starmath/Library_sm.mk
+++ b/starmath/Library_sm.mk
@@ -53,6 +53,7 @@ $(eval $(call gb_Library_use_libraries,sm,\
))
$(eval $(call gb_Library_add_exception_objects,sm,\
+ starmath/source/ElementsDockingWindow \
starmath/source/accessibility \
starmath/source/action \
starmath/source/caret \
diff --git a/starmath/inc/ElementsDockingWindow.hxx b/starmath/inc/ElementsDockingWindow.hxx
new file mode 100644
index 000000000000..48fc51bf8052
--- /dev/null
+++ b/starmath/inc/ElementsDockingWindow.hxx
@@ -0,0 +1,142 @@
+/* -*- 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 .
+ */
+#ifndef _ELEMENTSDOCKINGWINDOW_HXX_
+#define _ELEMENTSDOCKINGWINDOW_HXX_
+
+#include <sfx2/ctrlitem.hxx>
+#include <sfx2/dockwin.hxx>
+#include <vcl/toolbox.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/group.hxx>
+#include <vcl/graph.hxx>
+
+#include <svx/dlgctrl.hxx>
+#include <document.hxx>
+
+class SmElement
+{
+ SmNode* mpNode;
+ OUString maText;
+public:
+ SmElement(SmNode* pNode, OUString aText);
+ virtual ~SmElement();
+ SmNode* getNode();
+
+ OUString getText() { return maText; }
+
+ virtual bool isSeparator()
+ {
+ return false;
+ }
+
+ Point mBoxLocation;
+ Size mBoxSize;
+};
+
+class SmElementSeparator : public SmElement
+{
+public:
+ SmElementSeparator();
+
+ virtual bool isSeparator()
+ {
+ return true;
+ }
+};
+
+class SmElementsControl : public Control
+{
+
+ static const sal_uInt16 aUnaryBinaryOperatorsList[];
+ static const sal_uInt16 aRelationsList[];
+ static const sal_uInt16 aSetOperations[];
+ static const sal_uInt16 aFunctions[];
+ static const sal_uInt16 aOperators[];
+ static const sal_uInt16 aAttributes[];
+ static const sal_uInt16 aBrackets[];
+ static const sal_uInt16 aFormats[];
+ static const sal_uInt16 aOthers[];
+
+ Link aSelectHdlLink;
+
+ virtual void Paint(const Rectangle&);
+ virtual void MouseButtonDown(const MouseEvent& rMEvt);
+ virtual void MouseMove( const MouseEvent& rMEvt );
+
+ SmDocShell* mpDocShell;
+ SmFormat maFormat;
+ sal_uInt16 maCurrentSetId;
+ SmElement* mpCurrentElement;
+
+ std::vector<SmElement*> maElementList;
+ Size maMaxElementDimensions;
+
+ void addElement(OUString aElementVisual, OUString aElementSource);
+
+ void addElements(const sal_uInt16 aElementsArray[], sal_uInt16 size);
+
+ void addSeparator();
+
+ void build();
+
+public:
+ SmElementsControl(Window *pParent, const ResId& rResId);
+
+ void setElementSetId(sal_uInt16 aSetId);
+
+ void SetSelectHdl(const Link& rLink) { aSelectHdlLink = rLink; }
+};
+
+class SmElementsDockingWindow : public SfxDockingWindow
+{
+ static const sal_uInt16 aCategories[];
+
+ SmElementsControl maElementsControl;
+ ListBox maElementListBox;
+
+ virtual void Resize();
+ SmViewShell* GetView();
+
+ DECL_LINK(SelectClickHdl, SmElement*);
+ DECL_LINK(ElementSelectedHandle, ListBox*);
+
+public:
+
+ SmElementsDockingWindow( SfxBindings* pBindings,
+ SfxChildWindow* pChildWindow,
+ Window* pParent );
+ ~SmElementsDockingWindow();
+};
+
+class SmElementsDockingWindowWrapper : public SfxChildWindow
+{
+ SFX_DECL_CHILDWINDOW_WITHID(SmElementsDockingWindowWrapper);
+
+protected:
+ SmElementsDockingWindowWrapper( Window* pParentWindow,
+ sal_uInt16 nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo );
+ virtual ~SmElementsDockingWindowWrapper();
+};
+
+
+#endif // _SYMBOLDOCKINGWINDOW_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/starmath/inc/starmath.hrc b/starmath/inc/starmath.hrc
index ed1eb26ce920..a9bfbfa83119 100644
--- a/starmath/inc/starmath.hrc
+++ b/starmath/inc/starmath.hrc
@@ -56,6 +56,7 @@
#define SID_INSERTSYMBOL (SID_SMA_START + 104)
/** Command for inserting a math construction specified in commands.src */
#define SID_INSERTCOMMAND (SID_SMA_START + 105)
+#define SID_INSERTCOMMANDTEXT (SID_SMA_START + 106)
#define SID_LOADSYMBOLS (SID_SMA_START + 107)
#define SID_SAVESYMBOLS (SID_SMA_START + 108)
@@ -77,6 +78,7 @@
#define SID_TOOLBOXWINDOW (SID_SMA_START + 123)
#define SID_NO_RIGHT_SPACES (SID_SMA_START + 124)
#define SID_SAVE_ONLY_USED_SYMBOLS (SID_SMA_START + 125)
+#define SID_ELEMENTSDOCKINGWINDOW (SID_SMA_START + 126)
#define RID_FONTDIALOG (RID_APP_START + 2)
@@ -110,6 +112,7 @@
#define RID_SYMBOLFILESSTR (RID_APP_START + 809)
#define RID_ALLFILESSTR (RID_APP_START + 810)
#define RID_STATUSBAR (RID_APP_START + 816)
+#define RID_ELEMENTSDOCKINGWINDOW (RID_APP_START + 817)
#define STR_MATH_DOCUMENT_FULLTYPE_CURRENT (RID_APP_START + 821)
#define STR_STATSTR_READING (RID_APP_START + 823)
@@ -281,6 +284,39 @@
#define RID_LIMINFX (RID_APP_START + 1616)
#define RID_LIMSUPX (RID_APP_START + 1617)
+#define RID_LIM_FROMX (RID_APP_START + 1621)
+#define RID_SUM_FROMX (RID_APP_START + 1622)
+#define RID_PROD_FROMX (RID_APP_START + 1623)
+#define RID_COPROD_FROMX (RID_APP_START + 1624)
+#define RID_INT_FROMX (RID_APP_START + 1625)
+#define RID_IINT_FROMX (RID_APP_START + 1626)
+#define RID_IIINT_FROMX (RID_APP_START + 1627)
+#define RID_LINT_FROMX (RID_APP_START + 1629)
+#define RID_LLINT_FROMX (RID_APP_START + 1630)
+#define RID_LLLINT_FROMX (RID_APP_START + 1631)
+
+#define RID_LIM_TOX (RID_APP_START + 1641)
+#define RID_SUM_TOX (RID_APP_START + 1642)
+#define RID_PROD_TOX (RID_APP_START + 1643)
+#define RID_COPROD_TOX (RID_APP_START + 1644)
+#define RID_INT_TOX (RID_APP_START + 1645)
+#define RID_IINT_TOX (RID_APP_START + 1646)
+#define RID_IIINT_TOX (RID_APP_START + 1647)
+#define RID_LINT_TOX (RID_APP_START + 1649)
+#define RID_LLINT_TOX (RID_APP_START + 1650)
+#define RID_LLLINT_TOX (RID_APP_START + 1651)
+
+#define RID_LIM_FROMTOX (RID_APP_START + 1661)
+#define RID_SUM_FROMTOX (RID_APP_START + 1662)
+#define RID_PROD_FROMTOX (RID_APP_START + 1663)
+#define RID_COPROD_FROMTOX (RID_APP_START + 1664)
+#define RID_INT_FROMTOX (RID_APP_START + 1665)
+#define RID_IINT_FROMTOX (RID_APP_START + 1666)
+#define RID_IIINT_FROMTOX (RID_APP_START + 1667)
+#define RID_LINT_FROMTOX (RID_APP_START + 1669)
+#define RID_LLINT_FROMTOX (RID_APP_START + 1670)
+#define RID_LLLINT_FROMTOX (RID_APP_START + 1671)
+
#define RID_ACUTEX (RID_APP_START + 1701)
#define RID_GRAVEX (RID_APP_START + 1702)
#define RID_CHECKX (RID_APP_START + 1703)
@@ -396,6 +432,16 @@
#define RID_SPANISH_50_NAMES (RID_APP_START + 3113)
#define RID_SPANISH_60_NAMES (RID_APP_START + 3114)
+#define RID_CATERGORY_UNARY_BINARY_OPERATORS (RID_APP_START + 4001)
+#define RID_CATERGORY_RELATIONS (RID_APP_START + 4002)
+#define RID_CATERGORY_SET_OPERATIONS (RID_APP_START + 4003)
+#define RID_CATERGORY_FUNCTIONS (RID_APP_START + 4004)
+#define RID_CATERGORY_OPERATORS (RID_APP_START + 4005)
+#define RID_CATERGORY_ATTRIBUTES (RID_APP_START + 4006)
+#define RID_CATERGORY_BRACKETS (RID_APP_START + 4007)
+#define RID_CATERGORY_FORMATS (RID_APP_START + 4008)
+#define RID_CATERGORY_OTHERS (RID_APP_START + 4009)
+#define RID_CATERGORY_EXAMPLES (RID_APP_START + 4010)
#define BMP_ARROW_RIGHT 1
@@ -406,6 +452,8 @@
#define MN_SUB_SPELLING 34
#define MN_SUB_TEMPLATES 35
+#define FT_1 1
+
// 342 == SCH_IF_SMAVIEWSHELL, because SFX_INTERFACE_LIB is no
// Define but latterly an Enum
#define HID_SMA_VIEWSHELL_DOCUMENT (342)
diff --git a/starmath/sdi/smath.sdi b/starmath/sdi/smath.sdi
index 95366b08f2d0..6df2a617d227 100644
--- a/starmath/sdi/smath.sdi
+++ b/starmath/sdi/smath.sdi
@@ -165,6 +165,31 @@ SfxVoidItem CommandWindow SID_CMDBOXWINDOW
]
//--------------------------------------------------------------------------
+SfxVoidItem ElementsDockingWindow SID_ELEMENTSDOCKINGWINDOW
+()
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = FALSE,
+ ReadOnlyDoc = FALSE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ /* config: */
+ AccelConfig = FALSE,
+ MenuConfig = FALSE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = FALSE,
+ GroupId = GID_VIEW;
+]
+
+//--------------------------------------------------------------------------
SfxVoidItem Preferences SID_PREFERENCES
()
[
@@ -368,6 +393,30 @@ SfxVoidItem InsertCommand SID_INSERTCOMMAND
GroupId = GID_INSERT;
]
+SfxVoidItem InsertCommandText SID_INSERTCOMMANDTEXT
+()
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Asynchron;
+
+ /* config: */
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = TRUE,
+ GroupId = GID_INSERT;
+]
+
//--------------------------------------------------------------------------
SfxVoidItem InsertConfigName SID_INSERTSYMBOL
()
@@ -777,7 +826,7 @@ SfxStringItem TextStatus SID_TEXTSTATUS
]
//--------------------------------------------------------------------------
-SfxVoidItem ToolBowWindow SID_TOOLBOXWINDOW
+SfxVoidItem ToolBoxWindow SID_TOOLBOXWINDOW
()
[
/* flags: */
@@ -952,4 +1001,3 @@ SfxVoidItem ZoomOut SID_ZOOMOUT
ToolBoxConfig = TRUE,
GroupId = GID_VIEW;
]
-
diff --git a/starmath/sdi/smslots.sdi b/starmath/sdi/smslots.sdi
index 5291ca1c40e0..710442350f41 100644
--- a/starmath/sdi/smslots.sdi
+++ b/starmath/sdi/smslots.sdi
@@ -260,6 +260,11 @@ interface FormulaView
ExecMethod = Execute ;
StateMethod = GetState ;
]
+ SID_INSERTCOMMANDTEXT
+ [
+ ExecMethod = Execute ;
+ StateMethod = GetState ;
+ ]
//idlpp kein Menueeintrag , also keine Texte
SID_INSERTSYMBOL //idlpp ole : no , status : no
[
@@ -296,6 +301,11 @@ interface FormulaView
ExecMethod = NoExec ;
StateMethod = NoState ;
]
+ SID_ELEMENTSDOCKINGWINDOW
+ [
+ ExecMethod = Execute ;
+ StateMethod = GetState ;
+ ]
//idlpp kein Menueeintrag , also keine Texte
SID_TOOLBOXWINDOW //idlpp ole : no , status : no
[
@@ -320,4 +330,3 @@ shell SmViewShell
}
}
-
diff --git a/starmath/source/ElementsDockingWindow.cxx b/starmath/source/ElementsDockingWindow.cxx
new file mode 100644
index 000000000000..81a6467afe6e
--- /dev/null
+++ b/starmath/source/ElementsDockingWindow.cxx
@@ -0,0 +1,530 @@
+/* -*- 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 .
+ */
+
+#include <ElementsDockingWindow.hxx>
+#include <starmath.hrc>
+#include <smmod.hxx>
+#include <config.hxx>
+
+#include <node.hxx>
+#include <view.hxx>
+#include <visitors.hxx>
+
+#include <svl/stritem.hxx>
+#include <sfx2/dispatch.hxx>
+
+SV_DECL_REF(SmDocShell)
+SV_IMPL_REF(SmDocShell)
+
+SmElement::SmElement(SmNode* pNode, OUString aText) :
+ mpNode(pNode),
+ maText(aText)
+{}
+
+SmElement::~SmElement()
+{}
+
+SmElementSeparator::SmElementSeparator() :
+ SmElement(NULL, OUString())
+{}
+
+SmNode* SmElement::getNode()
+{
+ return mpNode;
+}
+
+//////////////////////////////////
+
+const sal_uInt16 SmElementsControl::aUnaryBinaryOperatorsList[] =
+{
+ RID_PLUSX, RID_MINUSX, RID_PLUSMINUSX, RID_MINUSPLUSX,
+ 0xFFFF,
+ RID_XPLUSY, RID_XMINUSY, RID_XCDOTY, RID_XTIMESY,
+ RID_XSYMTIMESY, RID_XOVERY, RID_XDIVY, RID_XSYMDIVIDEY,
+ RID_XCIRCY, RID_XWIDESLASHY, RID_XWIDEBSLASHY,
+ 0xFFFF,
+ RID_NEGX, RID_XANDY, RID_XORY,
+};
+
+const sal_uInt16 SmElementsControl::aRelationsList[] =
+{
+ RID_XEQY, RID_XNEQY, RID_XLTY, RID_XLEY,
+ RID_XLESLANTY, RID_XGTY, RID_XGEY, RID_XGESLANTY,
+ 0xFFFF,
+ RID_XAPPROXY, RID_XSIMY, RID_XSIMEQY, RID_XEQUIVY,
+ RID_XPROPY, RID_XPARALLELY, RID_XORTHOY, RID_XDIVIDESY,
+ RID_XNDIVIDESY, RID_XTOWARDY,
+ 0xFFFF,
+ RID_DLARROW, RID_DLRARROW, RID_DRARROW,
+ 0xFFFF,
+ RID_XPRECEDESY, RID_XSUCCEEDSY, RID_XPRECEDESEQUALY, RID_XSUCCEEDSEQUALY,
+ RID_XPRECEDESEQUIVY, RID_XSUCCEEDSEQUIVY, RID_XNOTPRECEDESY, RID_XNOTSUCCEEDSY
+};
+
+const sal_uInt16 SmElementsControl::aSetOperations[] =
+{
+ RID_XINY, RID_XNOTINY, RID_XOWNSY,
+ 0xFFFF,
+ RID_XINTERSECTIONY, RID_XUNIONY, RID_XSETMINUSY, RID_XSLASHY,
+ RID_XSUBSETY, RID_XSUBSETEQY, RID_XSUPSETEQY, RID_XNSUBSETY,
+ RID_XNSUBSETEQY, RID_XNSUPSETY, RID_XNSUPSETEQY,
+ 0xFFFF,
+ RID_EMPTYSET, RID_ALEPH, RID_SETN, RID_SETZ,
+ RID_SETQ, RID_SETR, RID_SETC
+};
+
+const sal_uInt16 SmElementsControl::aFunctions[] =
+{
+ RID_ABSX, RID_FACTX, RID_SQRTX, RID_NROOTXY,
+ RID_RSUPX, RID_EX, RID_LNX, RID_EXPX,
+ RID_LOGX,
+ 0xFFFF,
+ RID_SINX, RID_COSX, RID_TANX, RID_COTX,
+ RID_SINHX, RID_COSHX, RID_TANHX, RID_COTHX,
+ 0xFFFF,
+ RID_ARCSINX, RID_ARCCOSX, RID_ARCTANX, RID_ARCCOTX,
+ RID_ARSINHX, RID_ARCOSHX, RID_ARTANHX, RID_ARCOTHX
+};
+
+const sal_uInt16 SmElementsControl::aOperators[] =
+{
+ RID_LIMX, RID_SUMX, RID_PRODX, RID_COPRODX,
+ RID_INTX, RID_IINTX, RID_IIINTX, RID_LINTX,
+ RID_LLINTX, RID_LLLINTX,
+ 0xFFFF,
+ RID_LIM_FROMX, RID_SUM_FROMX, RID_PROD_FROMX, RID_COPROD_FROMX,
+ RID_INT_FROMX, RID_IINT_FROMX, RID_IIINT_FROMX, RID_LINT_FROMX,
+ RID_LLINT_FROMX, RID_LLLINT_FROMX,
+ 0xFFFF,
+ RID_LIM_TOX, RID_SUM_TOX, RID_PROD_TOX, RID_COPROD_TOX,
+ RID_INT_TOX, RID_IINT_TOX, RID_IIINT_TOX, RID_LINT_TOX,
+ RID_LLINT_TOX, RID_LLLINT_TOX,
+ 0xFFFF,
+ RID_LIM_FROMTOX, RID_SUM_FROMTOX, RID_PROD_FROMTOX, RID_COPROD_FROMTOX,
+ RID_INT_FROMTOX, RID_IINT_FROMTOX, RID_IIINT_FROMTOX, RID_LINT_FROMTOX,
+ RID_LLINT_FROMTOX, RID_LLLINT_FROMTOX,
+
+};
+
+const sal_uInt16 SmElementsControl::aAttributes[] =
+{
+ RID_ACUTEX, RID_GRAVEX, RID_BREVEX, RID_CIRCLEX,
+ RID_DOTX, RID_DDOTX, RID_DDDOTX, RID_BARX,
+ RID_VECX, RID_TILDEX, RID_HATX,
+ 0xFFFF,
+ RID_WIDEVECX, RID_WIDETILDEX, RID_WIDEHATX, RID_OVERLINEX,
+ RID_UNDERLINEX, RID_OVERSTRIKEX,
+ 0xFFFF,
+ RID_PHANTOMX, RID_BOLDX, RID_ITALX, RID_SIZEXY, RID_FONTXY
+};
+
+const sal_uInt16 SmElementsControl::aBrackets[] =
+{
+ RID_LRGROUPX,
+ 0xFFFF,
+ RID_LRPARENTX, RID_LRBRACKETX, RID_LRDBRACKETX, RID_LRBRACEX,
+ RID_LRANGLEX, RID_LMRANGLEXY, RID_LRCEILX, RID_LRFLOORX,
+ RID_LRLINEX, RID_LRDLINEX,
+ 0xFFFF,
+ RID_SLRPARENTX, RID_SLRBRACKETX, RID_SLRDBRACKETX, RID_SLRANGLEX,
+ RID_SLMRANGLEXY, RID_SLRCEILX, RID_SLRFLOORX, RID_SLRLINEX,
+ RID_SLRDLINEX,
+ 0XFFFF,
+ RID_XOVERBRACEY, RID_XUNDERBRACEY
+};
+
+const sal_uInt16 SmElementsControl::aFormats[] =
+{
+ RID_RSUPX, RID_RSUBX, RID_LSUPX, RID_LSUBX,
+ RID_CSUPX, RID_CSUBX,
+ 0xFFFF,
+ RID_NEWLINE, RID_SBLANK, RID_BLANK, RID_NOSPACE,
+ RID_BINOMXY, RID_STACK, RID_MATRIX,
+};
+
+const sal_uInt16 SmElementsControl::aOthers[] =
+{
+ RID_INFINITY, RID_PARTIAL, RID_NABLA, RID_EXISTS,
+ RID_NOTEXISTS, RID_FORALL, RID_HBAR, RID_LAMBDABAR,
+ RID_RE, RID_IM, RID_WP,
+ 0xFFFF,
+ RID_LEFTARROW, RID_RIGHTARROW, RID_UPARROW, RID_DOWNARROW,
+ 0xFFFF,
+ RID_DOTSLOW, RID_DOTSAXIS, RID_DOTSVERT, RID_DOTSUP,
+ RID_DOTSDOWN
+};
+
+SmElementsControl::SmElementsControl(Window *pParent, const ResId& rResId) :
+ Control(pParent, rResId),
+ mpDocShell(new SmDocShell(SFXOBJECTSHELL_STD_NORMAL)),
+ mpCurrentElement(NULL)
+{
+ maFormat.SetBaseSize(PixelToLogic(Size(0, 24)));
+}
+
+void SmElementsControl::Paint(const Rectangle&)
+{
+ Push();
+
+ SetMapMode( MapMode(MAP_100TH_MM) );
+ SetDrawMode( DRAWMODE_DEFAULT );
+ SetLayoutMode( TEXT_LAYOUT_BIDI_LTR );
+ SetDigitLanguage( LANGUAGE_ENGLISH );
+
+ sal_uInt32 boxX = maMaxElementDimensions.Width() + 10;
+ sal_uInt32 boxY = maMaxElementDimensions.Height() + 10;
+
+ sal_uInt32 x = 0;
+ sal_uInt32 y = 0;
+
+ sal_uInt32 perLine = GetOutputSizePixel().Width() / boxX;
+
+ if(perLine <= 0) {
+ perLine = 1;
+ }
+
+ boxX = GetOutputSizePixel().Width() / perLine;
+
+ for (sal_uInt16 i = 0; i < maElementList.size() ; i++)
+ {
+ SmElement* element = maElementList[i];
+ if (element->isSeparator())
+ {
+ x = 0;
+ y += boxY;
+ Rectangle aSelectionRectangle(
+ x+5, y+5-1,
+ GetOutputSizePixel().Width() - 5, y+5+1);
+
+ DrawRect(PixelToLogic(aSelectionRectangle));
+ y += 10;
+ }
+ else
+ {
+ Size aSizePixel = LogicToPixel(Size(element->getNode()->GetWidth(), element->getNode()->GetHeight()));
+ if ( x + boxX > GetOutputSizePixel().Width())
+ {
+ x = 0;
+ y += boxY;
+ }
+
+ if (mpCurrentElement == element)
+ {
+ Push();
+ SetFillColor( Color(230,230,230) );
+ SetLineColor( Color(230,230,230) );
+
+ DrawRect(PixelToLogic(Rectangle(x+2, y+2, x+boxX-2, y+boxY-2)));
+ Pop();
+ }
+
+ Point location(x + ((boxX-aSizePixel.Width())/2), y + ((boxY-aSizePixel.Height())/2));
+ SmDrawingVisitor(*this, PixelToLogic(location), element->getNode());
+
+ element->mBoxLocation = Point(x,y);
+ element->mBoxSize = Size(boxX, boxY);
+
+ x += boxX;
+ }
+
+ }
+ Pop();
+}
+
+void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent )
+{
+ mpCurrentElement = NULL;
+ if (Rectangle(Point(0, 0), GetOutputSizePixel()).IsInside(rMouseEvent.GetPosPixel()))
+ {
+ for (sal_uInt16 i = 0; i < maElementList.size() ; i++)
+ {
+ SmElement* element = maElementList[i];
+ Rectangle rect(element->mBoxLocation, element->mBoxSize);
+ if (rect.IsInside(rMouseEvent.GetPosPixel()))
+ {
+ if (mpCurrentElement != element)
+ {
+ mpCurrentElement = element;
+ Invalidate();
+ }
+ }
+ }
+ }
+ else
+ {
+ Control::MouseMove (rMouseEvent);
+ }
+}
+
+void SmElementsControl::MouseButtonDown(const MouseEvent& rMouseEvent)
+{
+ GrabFocus();
+
+ if (rMouseEvent.IsLeft() && Rectangle(Point(0, 0), GetOutputSizePixel()).IsInside(rMouseEvent.GetPosPixel()))
+ {
+ for (sal_uInt16 i = 0; i < maElementList.size() ; i++)
+ {
+ SmElement* element = maElementList[i];
+ Rectangle rect(element->mBoxLocation, element->mBoxSize);
+ if (rect.IsInside(rMouseEvent.GetPosPixel()))
+ {
+ aSelectHdlLink.Call(element);
+ return;
+ }
+ }
+ }
+ else
+ {
+ Control::MouseButtonDown (rMouseEvent);
+ }
+}
+
+void SmElementsControl::addSeparator()
+{
+ SmElement* pElement = new SmElementSeparator();
+ maElementList.push_back(pElement);
+}
+
+void SmElementsControl::addElement(OUString aElementVisual, OUString aElementSource)
+{
+ SmNode* pNode = SmParser().ParseExpression(aElementVisual);
+ pNode->Prepare(maFormat, *mpDocShell);
+ pNode->SetSize(Fraction(10,8));
+ pNode->Arrange(*this, maFormat);
+
+ Size aSizePixel = LogicToPixel(Size(pNode->GetWidth(), pNode->GetHeight()), MAP_100TH_MM);
+ if (aSizePixel.Width() > maMaxElementDimensions.Width()) {
+ maMaxElementDimensions.Width() = aSizePixel.Width();
+ }
+
+ if (aSizePixel.Height() > maMaxElementDimensions.Height()) {
+ maMaxElementDimensions.Height() = aSizePixel.Height();
+ }
+
+ SmElement* pElement = new SmElement(pNode, aElementSource);
+ maElementList.push_back(pElement);
+}
+
+void SmElementsControl::setElementSetId(sal_uInt16 aSetId)
+{
+ maCurrentSetId = aSetId;
+ maMaxElementDimensions = Size();
+ build();
+}
+
+void SmElementsControl::addElements(const sal_uInt16 aElementsArray[], sal_uInt16 size)
+{
+ for (sal_uInt16 i = 0; i < size ; i++)
+ {
+ sal_uInt16 aElementId = aElementsArray[i];
+ if (aElementId == 0xFFFF) {
+ addSeparator();
+ } else {
+ if (aElementId == RID_NEWLINE)
+ addElement(OStringToOUString( "\xe2\x86\xb5", RTL_TEXTENCODING_UTF8 ), SmResId(aElementId));
+ else if (aElementId == RID_SBLANK)
+ addElement(OUString("\"`\""), SmResId(aElementId));
+ else if (aElementId == RID_BLANK)
+ addElement(OUString("\"~\""), SmResId(aElementId));
+ else if (aElementId == RID_PHANTOMX)
+ addElement(OUString("\"hide\""), SmResId(aElementId));
+ else if (aElementId == RID_BOLDX)
+ addElement(OUString("bold B"), SmResId(aElementId));
+ else if (aElementId == RID_ITALX)
+ addElement(OUString("ital I"), SmResId(aElementId));
+ else if (aElementId == RID_SIZEXY)
+ addElement(OUString("\"size\""), SmResId(aElementId));
+ else if (aElementId == RID_FONTXY)
+ addElement(OUString("\"font\""), SmResId(aElementId));
+ else
+ addElement(SmResId(aElementId), SmResId(aElementId));
+ }
+ }
+}
+
+void SmElementsControl::build()
+{
+ maElementList.clear();
+
+ switch(maCurrentSetId)
+ {
+ case RID_CATERGORY_UNARY_BINARY_OPERATORS:
+ addElements(aUnaryBinaryOperatorsList, sizeof(aUnaryBinaryOperatorsList) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_RELATIONS:
+ addElements(aRelationsList, sizeof(aRelationsList) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_SET_OPERATIONS:
+ addElements(aSetOperations, sizeof(aSetOperations) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_FUNCTIONS:
+ addElements(aFunctions, sizeof(aFunctions) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_OPERATORS:
+ addElements(aOperators, sizeof(aOperators) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_ATTRIBUTES:
+ addElements(aAttributes, sizeof(aAttributes) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_BRACKETS:
+ addElements(aBrackets, sizeof(aBrackets) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_FORMATS:
+ addElements(aFormats, sizeof(aFormats) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_OTHERS:
+ addElements(aOthers, sizeof(aOthers) / sizeof(sal_uInt16));
+ break;
+ case RID_CATERGORY_EXAMPLES:
+ {
+ OUString aFunctionList[] = {
+ "C=%pi cdot d = 2 cdot %pi cdot r",
+ "E=mc^2",
+ "a^2 + b^2 = c^2",
+ "f ( x ) = sum from { { i = 0 } } to { infinity } { {f^{(i)}(0)} over {i!} x^i}",
+ "f ( x ) = {1} over {%sigma sqrt{2%pi} }e^-{{(x-%mu)^2} over {2%sigma^2}}"
+ };
+ for (sal_uInt16 i = 0; i < 5 ; i++)
+ {
+ addElement(aFunctionList[i], aFunctionList[i]);
+ }
+ }
+ break;
+ }
+ Invalidate();
+}
+
+//*******************
+
+const sal_uInt16 SmElementsDockingWindow::aCategories[] = {
+ RID_CATERGORY_UNARY_BINARY_OPERATORS,
+ RID_CATERGORY_RELATIONS,
+ RID_CATERGORY_SET_OPERATIONS,
+ RID_CATERGORY_FUNCTIONS,
+ RID_CATERGORY_OPERATORS,
+ RID_CATERGORY_ATTRIBUTES,
+ RID_CATERGORY_BRACKETS,
+ RID_CATERGORY_FORMATS,
+ RID_CATERGORY_OTHERS,
+ RID_CATERGORY_EXAMPLES
+};
+
+SmElementsDockingWindow::SmElementsDockingWindow(SfxBindings* pInputBindings, SfxChildWindow* pChildWindow, Window* pParent) :
+ SfxDockingWindow(pInputBindings, pChildWindow, pParent, SmResId(RID_ELEMENTSDOCKINGWINDOW)),
+ maElementsControl (this, SmResId(1)),
+ maElementListBox (this, SmResId(1))
+{
+ maElementsControl.SetBorderStyle( WINDOW_BORDER_MONO );
+
+ maElementListBox.SetDropDownLineCount( 10 );
+
+ for (sal_uInt16 i = 0; i < sizeof(aCategories) / sizeof(sal_uInt16) ; i++)
+ {
+ maElementListBox.InsertEntry(OUString(SmResId(aCategories[i])));
+ }
+
+ maElementListBox.SetSelectHdl(LINK(this, SmElementsDockingWindow, ElementSelectedHandle));
+
+ Wallpaper aWallpaper( Color( COL_WHITE ) );
+
+ maElementsControl.SetBackground( aWallpaper );
+ maElementsControl.SetTextColor( Color( COL_BLACK ) );
+ maElementsControl.SetSelectHdl(LINK(this, SmElementsDockingWindow, SelectClickHdl));
+
+ maElementListBox.SelectEntry(OUString(SmResId(RID_CATERGORY_UNARY_BINARY_OPERATORS)));
+ maElementsControl.setElementSetId(RID_CATERGORY_UNARY_BINARY_OPERATORS);
+}
+
+SmElementsDockingWindow::~SmElementsDockingWindow ()
+{
+}
+
+IMPL_LINK( SmElementsDockingWindow, SelectClickHdl, SmElement*, pElement)
+{
+ SmViewShell* pViewSh = GetView();
+
+ if (pViewSh)
+ {
+ pViewSh->GetViewFrame()->GetDispatcher()->Execute(
+ SID_INSERTCOMMANDTEXT, SFX_CALLMODE_STANDARD,
+ new SfxStringItem(SID_INSERTCOMMANDTEXT, pElement->getText()), 0L);
+ }
+ return 0;
+}
+
+IMPL_LINK( SmElementsDockingWindow, ElementSelectedHandle, ListBox*, pList)
+{
+ for (sal_uInt16 i = 0; i < sizeof(aCategories) / sizeof(sal_uInt16) ; i++)
+ {
+ sal_uInt16 aCurrentCategory = aCategories[i];
+ OUString aCurrentCategoryString = OUString(SmResId(aCurrentCategory));
+ if (aCurrentCategoryString == pList->GetSelectEntry())
+ {
+ maElementsControl.setElementSetId(aCurrentCategory);
+ return 0;
+ }
+ }
+ return 0;
+}
+
+SmViewShell* SmElementsDockingWindow::GetView()
+{
+ SfxViewShell *pView = GetBindings().GetDispatcher()->GetFrame()->GetViewShell();
+ return PTR_CAST(SmViewShell, pView);
+}
+
+void SmElementsDockingWindow::Resize()
+{
+ sal_uInt32 aWidth = GetOutputSizePixel().Width();
+ sal_uInt32 aHeight = GetOutputSizePixel().Height();
+
+ sal_uInt32 aElementsSetsHeight = 23;
+ sal_uInt32 aPadding = 5;
+
+ Rectangle aRect1 = Rectangle(aPadding, aPadding, aWidth - aPadding, aElementsSetsHeight + aPadding);
+
+ maElementListBox.SetPosSizePixel(aRect1.TopLeft(), aRect1.GetSize());
+
+ Rectangle aRect = Rectangle(aPadding, aElementsSetsHeight + aPadding + aPadding, aWidth - aPadding, aHeight - aPadding);
+
+ maElementsControl.SetPosSizePixel(aRect.TopLeft(), aRect.GetSize());
+
+ SfxDockingWindow::Resize();
+ Invalidate();
+}
+
+SFX_IMPL_DOCKINGWINDOW_WITHID(SmElementsDockingWindowWrapper, SID_ELEMENTSDOCKINGWINDOW);
+
+SmElementsDockingWindowWrapper::SmElementsDockingWindowWrapper(
+ Window *pParentWindow, sal_uInt16 nId,
+ SfxBindings *pBindings, SfxChildWinInfo *pInfo) :
+ SfxChildWindow(pParentWindow, nId)
+{
+ pWindow = new SmElementsDockingWindow(pBindings, this, pParentWindow);
+ SmElementsDockingWindow* pDialog = (SmElementsDockingWindow*) pWindow;
+ eChildAlignment = SFX_ALIGN_NOALIGNMENT;
+ pDialog->Initialize( pInfo );
+}
+
+SmElementsDockingWindowWrapper::~SmElementsDockingWindowWrapper()
+{
+}
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/starmath/source/commands.src b/starmath/source/commands.src
index 92413c770f0a..e6a002ff7d1f 100644
--- a/starmath/source/commands.src
+++ b/starmath/source/commands.src
@@ -105,20 +105,50 @@ String RID_ARCOSHX { Text = "arcosh(<?>) " ; };
String RID_ARTANHX { Text = "artanh(<?>) " ; };
String RID_ARCOTHX { Text = "arcoth(<?>) " ; };
String RID_SUMX { Text = "sum <?> " ; };
+String RID_SUM_FROMX { Text = "sum from{<?>} <?> " ; };
+String RID_SUM_TOX { Text = "sum to{<?>} <?> " ; };
+String RID_SUM_FROMTOX { Text = "sum from{<?>} to{<?>} <?> " ; };
String RID_PRODX { Text = "prod <?> " ; };
+String RID_PROD_FROMX { Text = "prod from{<?>} <?> " ; };
+String RID_PROD_TOX { Text = "prod to{<?>} <?> " ; };
+String RID_PROD_FROMTOX { Text = "prod from{<?>} to{<?>} <?> " ; };
String RID_COPRODX { Text = "coprod <?> " ; };
+String RID_COPROD_FROMX { Text = "coprod from{<?>} <?> " ; };
+String RID_COPROD_TOX { Text = "coprod to{<?>} <?> " ; };
+String RID_COPROD_FROMTOX { Text = "coprod from{<?>} to{<?>} <?> " ; };
String RID_LIMX { Text = "lim <?> " ; };
+String RID_LIM_FROMX { Text = "lim from{<?>} <?> " ; };
+String RID_LIM_TOX { Text = "lim to{<?>} <?> " ; };
+String RID_LIM_FROMTOX { Text = "lim from{<?>} to{<?>} <?> " ; };
String RID_LIMINFX { Text = "liminf <?> " ; };
String RID_LIMSUPX { Text = "limsup <?> " ; };
String RID_EXISTS { Text = "exists " ; };
String RID_NOTEXISTS { Text = "notexists " ; };
String RID_FORALL { Text = "forall " ; };
String RID_INTX { Text = "int <?> " ; };
+String RID_INT_FROMX { Text = "int from{<?>} <?> " ; };
+String RID_INT_TOX { Text = "int to{<?>} <?> " ; };
+String RID_INT_FROMTOX { Text = "int from{<?>} to{<?>} <?> " ; };
String RID_IINTX { Text = "iint <?> " ; };
+String RID_IINT_FROMX { Text = "iint from{<?>} <?> " ; };
+String RID_IINT_TOX { Text = "iint to{<?>} <?> " ; };
+String RID_IINT_FROMTOX { Text = "iint from{<?>} to{<?>} <?> " ; };
String RID_IIINTX { Text = "iiint <?> " ; };
+String RID_IIINT_FROMX { Text = "iiint from{<?>} <?> " ; };
+String RID_IIINT_TOX { Text = "iiint to{<?>} <?> " ; };
+String RID_IIINT_FROMTOX { Text = "iiint from{<?>} to{<?>} <?> " ; };
String RID_LINTX { Text = "lint <?> " ; };
+String RID_LINT_FROMX { Text = "lint from{<?>} <?> " ; };
+String RID_LINT_TOX { Text = "lint to{<?>} <?> " ; };
+String RID_LINT_FROMTOX { Text = "lint from{<?>} to{<?>} <?> " ; };
String RID_LLINTX { Text = "llint <?> " ; };
+String RID_LLINT_FROMX { Text = "llint from{<?>} <?> " ; };
+String RID_LLINT_TOX { Text = "llint to{<?>} <?> " ; };
+String RID_LLINT_FROMTOX { Text = "llint from{<?>} to{<?>} <?> " ; };
String RID_LLLINTX { Text = "lllint <?> " ; };
+String RID_LLLINT_FROMX { Text = "lllint from{<?>} <?> " ; };
+String RID_LLLINT_TOX { Text = "lllint to{<?>} <?> " ; };
+String RID_LLLINT_FROMTOX { Text = "lllint from{<?>} to{<?>} <?> " ; };
String RID_FROMX { Text = "from{<?>} <?> " ; };
String RID_TOX { Text = "to{<?>} <?> " ; };
String RID_FROMXTOY { Text = "from{<?>} to{<?>} <?> " ; };
@@ -226,6 +256,18 @@ String RID_XSUCCEEDSEQUALY { Text = "<?> succcurlyeq <?> " ; };
String RID_XSUCCEEDSEQUIVY { Text = "<?> succsim <?> " ; };
String RID_XNOTPRECEDESY { Text = "<?> nprec <?> " ; };
String RID_XNOTSUCCEEDSY { Text = "<?> nsucc <?> " ; };
+
+String RID_CATERGORY_UNARY_BINARY_OPERATORS { Text = "Unary/Binary Operators" ; };
+String RID_CATERGORY_RELATIONS { Text = "Relations" ; };
+String RID_CATERGORY_SET_OPERATIONS { Text = "Set Operations" ; };
+String RID_CATERGORY_FUNCTIONS { Text = "Functions" ; };
+String RID_CATERGORY_OPERATORS { Text = "Operators" ; };
+String RID_CATERGORY_ATTRIBUTES { Text = "Attributes" ; };
+String RID_CATERGORY_BRACKETS { Text = "Brackets" ; };
+String RID_CATERGORY_FORMATS { Text = "Formats" ; };
+String RID_CATERGORY_OTHERS { Text = "Others" ; };
+String RID_CATERGORY_EXAMPLES { Text = "Examples" ; };
+
//////////////////////////////////////////
diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx
index ff6b0c748b20..91d4088e8f57 100644
--- a/starmath/source/document.cxx
+++ b/starmath/source/document.cxx
@@ -481,8 +481,6 @@ void SmDocShell::DrawFormula(OutputDevice &rDev, Point &rPosition, bool bDrawSel
rDev.SetDrawMode( nOldDrawMode );
}
-
-
Size SmDocShell::GetSize()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetSize" );
@@ -645,7 +643,7 @@ void SmDocShell::SetPrinter( SfxPrinter *pNew )
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetPrinter" );
delete pPrinter;
- pPrinter = pNew; //Eigentumsuebergang!
+ pPrinter = pNew; //Transfer ownership
pPrinter->SetMapMode( MapMode(MAP_100TH_MM) );
SetFormulaArranged(false);
Repaint();
diff --git a/starmath/source/smdll.cxx b/starmath/source/smdll.cxx
index 8395c09d63e9..e25dca417e30 100644
--- a/starmath/source/smdll.cxx
+++ b/starmath/source/smdll.cxx
@@ -33,6 +33,8 @@
#include <toolbox.hxx>
#include <view.hxx>
+#include <ElementsDockingWindow.hxx>
+
#include <starmath.hrc>
#include <svx/xmlsecctrl.hxx>
@@ -72,6 +74,7 @@ namespace
SmToolBoxWrapper::RegisterChildWindow(true);
SmCmdBoxWrapper::RegisterChildWindow(true);
+ SmElementsDockingWindowWrapper::RegisterChildWindow(true);
::sfx2::TaskPaneWrapper::RegisterChildWindow(false, pModule);
}
diff --git a/starmath/source/smres.src b/starmath/source/smres.src
index 0e5ebf5f076a..dc4ee7b624f8 100644
--- a/starmath/source/smres.src
+++ b/starmath/source/smres.src
@@ -77,8 +77,8 @@ ModalDialog RID_FONTDIALOG
Pos = MAP_APPFONT ( 126 , 42 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:HelpButton:RID_FONTDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:HelpButton:RID_FONTDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
OKButton 1
{
@@ -271,8 +271,8 @@ ModalDialog RID_FONTSIZEDIALOG
Pos = MAP_APPFONT ( 114 , 46 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:PushButton:RID_FONTSIZEDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:PushButton:RID_FONTSIZEDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
PushButton 1
{
@@ -443,8 +443,8 @@ ModalDialog RID_FONTTYPEDIALOG
Pos = MAP_APPFONT ( 225 , 66 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:HelpButton:RID_FONTYPEDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:HelpButton:RID_FONTYPEDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
PushButton 2
{
@@ -572,8 +572,8 @@ ModalDialog RID_DISTANCEDIALOG
Pos = MAP_APPFONT ( 184 , 87 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:HelpButton:RID_DISTANCEDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:HelpButton:RID_DISTANCEDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
PushButton 1
{
@@ -925,8 +925,8 @@ ModalDialog RID_ALIGNDIALOG
Pos = MAP_APPFONT ( 83 , 46 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:HelpButton:RID_ALIGNDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:HelpButton:RID_ALIGNDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
PushButton 1
{
@@ -1121,8 +1121,8 @@ ModalDialog RID_SYMBOLDIALOG
Pos = MAP_APPFONT ( 177 , 60 ) ;
Size = MAP_APPFONT ( 56 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:HelpButton:RID_SYMBOLDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:HelpButton:RID_SYMBOLDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
};
@@ -1339,8 +1339,8 @@ ModalDialog RID_SYMDEFINEDIALOG
Pos = MAP_APPFONT ( 310 , 42 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
TabStop = TRUE ;
- HelpID = "starmath:HelpButton:RID_SYMDEFINEDIALOG:1";
- Text [ en-US ] = "~Help" ;
+ HelpID = "starmath:HelpButton:RID_SYMDEFINEDIALOG:1";
+ Text [ en-US ] = "~Help" ;
};
OKButton 1
{
@@ -1569,6 +1569,35 @@ DockingWindow RID_CMDBOXWINDOW\
CMDBOXWINDOW_TEXT
};
+DockingWindow RID_ELEMENTSDOCKINGWINDOW
+{
+ OutputSize = TRUE ;
+ Hide = FALSE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT ( 300 , 300 ) ;
+ Sizeable = TRUE ;
+ Moveable = TRUE ;
+ Closeable = TRUE ;
+ Zoomable = TRUE ;
+ Dockable = TRUE ;
+
+ Control 1
+ {
+ Border = FALSE ;
+ };
+
+ ListBox 1
+ {
+ Border = TRUE ;
+ TabStop = TRUE ;
+ Sort = FALSE ;
+ DropDown = TRUE ;
+ VScroll = TRUE ;
+ };
+
+ Text [ en-US ] = "Symbols" ;
+};
+
String STR_CMDBOXWINDOW
{
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 4c755734bb80..d144dde573e9 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -70,12 +70,13 @@
#include "mathmlimport.hxx"
#include "cursor.hxx"
#include "accessibility.hxx"
+#include "ElementsDockingWindow.hxx"
#define MINZOOM 25
#define MAXZOOM 800
// space around the edit window, in pixels
-#define CMD_BOX_PADDING 4
+#define CMD_BOX_PADDING 10
#define SmViewShell
#include "smslots.hxx"
@@ -382,27 +383,30 @@ void SmGraphicWindow::Paint(const Rectangle&)
rDoc.DrawFormula(*this, aPoint, true); //! modifies aPoint to be the topleft
//! corner of the formula
SetFormulaDrawPos(aPoint);
- if(IsInlineEditEnabled()) {
+ if(IsInlineEditEnabled())
+ {
//Draw cursor if any...
if(pViewShell->GetDoc()->HasCursor() && IsLineVisible())
pViewShell->GetDoc()->GetCursor().Draw(*this, aPoint, IsCursorVisible());
- } else {
- SetIsCursorVisible(false); // (old) cursor must be drawn again
-
- const SmEditWindow *pEdit = pViewShell->GetEditWindow();
- if (pEdit)
- { // get new position for formula-cursor (for possible altered formula)
- sal_Int32 nRow;
- sal_uInt16 nCol;
- SmGetLeftSelectionPart(pEdit->GetSelection(), nRow, nCol);
- nRow++;
- nCol++;
- const SmNode *pFound = SetCursorPos(static_cast<sal_uInt16>(nRow), nCol);
-
- SmModule *pp = SM_MOD();
- if (pFound && pp->GetConfig()->IsShowFormulaCursor())
- ShowCursor(true);
}
+ else
+ {
+ SetIsCursorVisible(false); // (old) cursor must be drawn again
+
+ const SmEditWindow *pEdit = pViewShell->GetEditWindow();
+ if (pEdit)
+ { // get new position for formula-cursor (for possible altered formula)
+ sal_Int32 nRow;
+ sal_uInt16 nCol;
+ SmGetLeftSelectionPart(pEdit->GetSelection(), nRow, nCol);
+ nRow++;
+ nCol++;
+ const SmNode *pFound = SetCursorPos(static_cast<sal_uInt16>(nRow), nCol);
+
+ SmModule *pp = SM_MOD();
+ if (pFound && pp->GetConfig()->IsShowFormulaCursor())
+ ShowCursor(true);
+ }
}
}
@@ -927,6 +931,7 @@ SFX_IMPL_INTERFACE(SmViewShell, SfxViewShell, SmResId(0))
SFX_CHILDWINDOW_REGISTRATION(SID_TASKPANE);
SFX_CHILDWINDOW_REGISTRATION(SmToolBoxWrapper::GetChildWindowId());
SFX_CHILDWINDOW_REGISTRATION(SmCmdBoxWrapper::GetChildWindowId());
+ SFX_CHILDWINDOW_REGISTRATION(SmElementsDockingWindowWrapper::GetChildWindowId());
}
@@ -1705,6 +1710,23 @@ void SmViewShell::Execute(SfxRequest& rReq)
break;
}
+ case SID_INSERTCOMMANDTEXT:
+ {
+ const SfxStringItem& rItem = (const SfxStringItem&)rReq.GetArgs()->Get(SID_INSERTCOMMANDTEXT);
+
+ if (pWin && (bInsertIntoEditWindow || !IsInlineEditEnabled()))
+ {
+ pWin->InsertText(rItem.GetValue());
+ }
+ if (IsInlineEditEnabled() && (GetDoc() && !bInsertIntoEditWindow))
+ {
+ GetDoc()->GetCursor().InsertCommandText(rItem.GetValue());
+ GetGraphicWindow().GrabFocus();
+ }
+ break;
+
+ }
+
case SID_INSERTSYMBOL:
{
const SfxStringItem& rItem =
@@ -1837,6 +1859,15 @@ void SmViewShell::Execute(SfxRequest& rReq)
}
break;
+ case SID_ELEMENTSDOCKINGWINDOW:
+ {
+ GetViewFrame()->ToggleChildWindow( SmElementsDockingWindowWrapper::GetChildWindowId() );
+ GetViewFrame()->GetBindings().Invalidate( SID_ELEMENTSDOCKINGWINDOW );
+
+ rReq.Ignore ();
+ }
+ break;
+
case SID_SYMBOLS_CATALOGUE:
{
@@ -1927,7 +1958,16 @@ void SmViewShell::GetState(SfxItemSet &rSet)
rSet.Put(SfxBoolItem(nWh, pp->GetConfig()->IsShowFormulaCursor()));
}
break;
-
+ case SID_ELEMENTSDOCKINGWINDOW:
+ {
+ bool bState = false;
+ SfxChildWindow *pChildWnd = GetViewFrame()->
+ GetChildWindow( SmElementsDockingWindowWrapper::GetChildWindowId() );
+ if (pChildWnd && pChildWnd->GetWindow()->IsVisible())
+ bState = true;
+ rSet.Put(SfxBoolItem(SID_ELEMENTSDOCKINGWINDOW, bState));
+ }
+ break;
case SID_TOOLBOX:
{
bool bState = false;
diff --git a/starmath/uiconfig/smath/menubar/menubar.xml b/starmath/uiconfig/smath/menubar/menubar.xml
index 8a4d7c989737..9fb97394164b 100644
--- a/starmath/uiconfig/smath/menubar/menubar.xml
+++ b/starmath/uiconfig/smath/menubar/menubar.xml
@@ -81,6 +81,7 @@
<menu:menuitem menu:id=".uno:StatusBarVisible"/>
<menu:menuitem menu:id=".uno:ShowImeStatusWindow"/>
<menu:menuitem menu:id=".uno:ToolBox"/>
+ <menu:menuitem menu:id=".uno:ElementsDockingWindow"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:TaskPane"/>
<menu:menuseparator/>