From d791366863cf9659a01b171ce0e727bfe2f28cdf Mon Sep 17 00:00:00 2001
From: Jens-Heiner Rechtien
Date: Mon, 18 Sep 2000 16:07:07 +0000
Subject: initial import
---
starmath/inc/utility.hxx | 471 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 471 insertions(+)
create mode 100644 starmath/inc/utility.hxx
(limited to 'starmath/inc/utility.hxx')
diff --git a/starmath/inc/utility.hxx b/starmath/inc/utility.hxx
new file mode 100644
index 000000000000..bde78f80d4f1
--- /dev/null
+++ b/starmath/inc/utility.hxx
@@ -0,0 +1,471 @@
+/*************************************************************************
+ *
+ * $RCSfile: utility.hxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 16:57:25 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef UTILITY_HXX
+#define UTILITY_HXX
+
+#ifndef _SFXVARARR_HXX //autogen
+#include
+#endif
+#ifndef _FONT_HXX //autogen
+#include
+#endif
+#ifndef _SV_FIXED_HXX //autogen
+#include
+#endif
+#ifndef _SV_COMBOBOX_HXX //autogen
+#include
+#endif
+#ifndef _SV_LSTBOX_HXX //autogen
+#include
+#endif
+#ifndef _STREAM_HXX //autogen
+#include
+#endif
+#ifndef _FRACT_HXX //autogen
+#include
+#endif
+
+
+class SmRect;
+class String;
+
+#define C2S(cChar) String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(cChar))
+
+const ByteString ExportString(const String& rString);
+
+
+inline long SmPtsTo100th_mm(long nNumPts)
+ // returns the length (in 100th of mm) that corresponds to the length
+ // 'nNumPts' (in units points).
+ // 72.27 [pt] = 1 [inch] = 2,54 [cm] = 2540 [100th of mm].
+ // result is being rounded to the nearest integer.
+{
+ DBG_ASSERT(nNumPts >= 0, "Sm : Ooops...");
+ // broken into multiple and fraction of 'nNumPts' to reduce chance
+ // of overflow
+ // (7227 / 2) is added in order to round to the nearest integer
+ return 35 * nNumPts + (nNumPts * 1055L + (7227 / 2)) / 7227L;
+}
+
+
+inline long SmPtsTo100th_mm(const Fraction &rNumPts)
+ // as above but with argument 'rNumPts' as 'Fraction'
+{
+ Fraction aTmp (254000L, 7227L);
+ return aTmp *= rNumPts;
+}
+
+
+inline Fraction Sm100th_mmToPts(long nNum100th_mm)
+ // returns the length (in points) that corresponds to the length
+ // 'nNum100th_mm' (in 100th of mm).
+{
+ DBG_ASSERT(nNum100th_mm >= 0, "Sm : Ooops...");
+ Fraction aTmp (7227L, 254000L);
+ return aTmp *= Fraction(nNum100th_mm);
+}
+
+
+inline long SmRoundFraction(const Fraction &rFrac)
+{
+ DBG_ASSERT(rFrac > Fraction(), "Sm : Ooops...");
+ return (rFrac.GetNumerator() + rFrac.GetDenominator() / 2) / rFrac.GetDenominator();
+}
+
+
+class SmViewShell;
+SmViewShell * SmGetActiveView();
+
+
+////////////////////////////////////////////////////////////
+
+class SmFace;
+
+SvStream& operator << (SvStream& rStream, const SmFace& rFont);
+SvStream& operator >> (SvStream& rStream, SmFace& rFont);
+
+void ReadSM20Font(SvStream& rStream, Font& rFont);
+
+
+////////////////////////////////////////////////////////////
+//
+// SmRectCache
+//
+
+class SmRectCache
+{
+ VirtualDevice *pVirDev;
+
+ SmRectCache(const SmRectCache &);
+ SmRectCache & operator = (const SmRectCache &);
+
+public:
+ struct Key
+ { XubString aText,
+ aFontName;
+ Size aFontSize;
+ FontWeight eFontWeight;
+ FontItalic eFontItalic;
+
+ Key(const XubString &rText, const Font &rFont);
+
+ BOOL operator < (const Key &rKey) const;
+ BOOL operator == (const Key &rKey) const;
+ };
+
+ SmRectCache();
+ ~SmRectCache();
+
+ const SmRect * Search(const Key &rKey) const;
+ const SmRect * Add(const Key &rKey, const SmRect &rRect);
+
+ VirtualDevice * GetVirDev();
+
+ void Reset();
+};
+
+
+////////////////////////////////////////////////////////////
+//
+// SmFace
+//
+
+
+class SmFace : public Font
+{
+ long nBorderWidth;
+
+public:
+ SmFace() :
+ Font(), nBorderWidth(-1) {}
+ SmFace(const Font& rFont) :
+ Font(rFont), nBorderWidth(-1) { SetSize(GetSize()); }
+ SmFace(const String& rName, const Size& rSize) :
+ Font(rName, rSize), nBorderWidth(-1) { SetSize(GetSize()); }
+ SmFace( FontFamily eFamily, const Size& rSize) :
+ Font(eFamily, rSize), nBorderWidth(-1) { SetSize(GetSize()); }
+
+ SmFace(const SmFace &rFace) :
+ Font(rFace), nBorderWidth(-1) { SetSize(GetSize()); }
+
+ // overloaded version in order to supply a min value
+ // for font size (height). (Also used in ctor's to do so.)
+ void SetSize(const Size& rSize);
+
+ void SetBorderWidth(long nWidth) { nBorderWidth = nWidth; }
+ long GetBorderWidth() const;
+ long GetDefaultBorderWidth() const { return GetSize().Height() / 20 ; }
+ void FreezeBorderWidth() { nBorderWidth = GetDefaultBorderWidth(); }
+
+ SmFace & operator = (const SmFace &rFace);
+};
+
+SmFace & operator *= (SmFace &rFace, const Fraction &rFrac);
+
+
+#ifdef NEVER
+////////////////////////////////////////////////////////////
+//
+// SmInfoText
+//
+
+class SmInfoText : public FixedText
+{
+protected:
+ USHORT nMaxLen;
+ String aText;
+
+public:
+ SmInfoText(Window* pParent, WinBits nWinStyle = 0, USHORT nMax = 128);
+ SmInfoText(Window* pParent, const ResId& rResId, USHORT nMax = 128);
+
+ void SetText(const String& rStr);
+
+ XubString GetText() const { return (aText); }
+};
+#endif
+
+
+////////////////////////////////////////////////////////////
+//
+// SmPickList
+//
+
+class SmPickList : public SfxPtrArr
+{
+protected:
+ USHORT nSize;
+
+ virtual void *CreateItem(const String& rString) = 0;
+ virtual void *CreateItem(const void *pItem) = 0;
+ virtual void DestroyItem(void *pItem) = 0;
+
+ virtual BOOL CompareItem(const void *pFirstItem, const void *pSecondItem) const = 0;
+
+ virtual String GetStringItem(void *pItem) = 0;
+
+ virtual void LoadItem(SvStream& rStream, void *pItem) = 0;
+ virtual void SaveItem(SvStream& rStream, const void *pItem) const = 0;
+
+ void *GetPtr(USHORT nPos) const { return SfxPtrArr::GetObject(nPos); }
+ void *&GetPtr(USHORT nPos) { return SfxPtrArr::GetObject(nPos); }
+ void InsertPtr(USHORT nPos, void *pItem) { SfxPtrArr::Insert(nPos, pItem); }
+ void RemovePtr(USHORT nPos, USHORT nCount = 1) { SfxPtrArr::Remove(nPos, nCount); }
+
+public:
+ SmPickList(USHORT nInitSize = 0, USHORT nMaxSize = 5);
+ ~SmPickList();
+
+ SmPickList& operator = (const SmPickList& rList);
+
+ void *Get(USHORT nPos = 0) const { return GetPtr(nPos); }
+ void Insert(const void* pItem);
+ void Update(const void* pItem, const void *pNewItem);
+ void Remove(const void* pItem);
+
+ void *operator [] (USHORT nPos) const { return GetPtr(nPos); }
+
+ void SetSize(USHORT nNewSize);
+ USHORT GetSize() const { return nSize; }
+ USHORT Count() const { return SfxPtrArr::Count(); }
+
+ BOOL Contains(const void *pItem) const;
+ void Clear();
+
+ friend SvStream& operator << (SvStream& rStream, const SmPickList& rPickList);
+ friend SvStream& operator >> (SvStream& rStream, SmPickList& rPickList);
+};
+
+
+////////////////////////////////////////////////////////////
+//
+// SmStringPickList
+//
+#ifdef NEVER
+class SmStringPickList : public SmPickList
+{
+protected:
+ virtual void *CreateItem(const String& rString);
+ virtual void *CreateItem(const void *pItem);
+ virtual void DestroyItem(void *pItem);
+
+ virtual BOOL CompareItem(const void *pFirstItem, const void *pSecondItem) const;
+
+ virtual String GetStringItem(void *pItem);
+
+ virtual void LoadItem(SvStream& rStream, void *pItem);
+ virtual void SaveItem(SvStream& rStream, const void *pItem) const;
+
+public:
+ SmStringPickList()
+ : SmPickList(0, 5) {}
+ SmStringPickList(USHORT nInitSize, USHORT nMaxSize)
+ : SmPickList(nInitSize, nMaxSize) {}
+ SmStringPickList(const SmPickList& rOrig )
+ : SmPickList(rOrig) {}
+ ~SmStringPickList() { Clear(); }
+
+ virtual void Insert(const String &rString);
+ virtual void Update(const String &rString, const String &rNewString);
+ virtual void Remove(const String &rString);
+
+ inline BOOL Contains(const String &rString) const;
+ inline String Get(USHORT nPos = 0) const;
+
+ inline SmStringPickList& operator = (const SmStringPickList& rList);
+ inline String operator [] (USHORT nPos) const;
+};
+
+inline SmStringPickList& SmStringPickList::operator = (const SmStringPickList& rList)
+{
+ *(SmPickList *)this = *(SmPickList *)&rList; return *this;
+}
+
+inline String SmStringPickList::operator [] (USHORT nPos) const
+{
+ return *((String *)SmPickList::operator[](nPos));
+}
+
+inline String SmStringPickList::Get(USHORT nPos) const
+{
+ return nPos < Count() ? *((String *)SmPickList::Get(nPos)) : String();
+}
+
+inline BOOL SmStringPickList::Contains(const String &rString) const
+{
+ return SmPickList::Contains((void *)&rString);
+}
+#endif
+
+////////////////////////////////////////////////////////////
+//
+// SmFontPickList
+//
+
+class SmFontDialog;
+
+class SmFontPickList : public SmPickList
+{
+protected:
+ virtual void *CreateItem(const String& rString);
+ virtual void *CreateItem(const void *pItem);
+ virtual void DestroyItem(void *pItem);
+
+ virtual BOOL CompareItem(const void *pFirstItem, const void *pSecondItem) const;
+
+ virtual String GetStringItem(void *pItem);
+
+ virtual void LoadItem(SvStream& rStream, void *pItem);
+ virtual void SaveItem(SvStream& rStream, const void *pItem) const;
+
+public:
+ SmFontPickList()
+ : SmPickList(0, 5) {}
+ SmFontPickList(USHORT nInitSize, USHORT nMaxSize)
+ : SmPickList(nInitSize, nMaxSize) {}
+ SmFontPickList(const SmPickList& rOrig )
+ : SmPickList(rOrig) {}
+ ~SmFontPickList() { Clear(); }
+
+ virtual void Insert(const Font &rFont);
+ virtual void Update(const Font &rFont, const Font &rNewFont);
+ virtual void Remove(const Font &rFont);
+
+ inline BOOL Contains(const Font &rFont) const;
+ inline Font Get(USHORT nPos = 0) const;
+
+ inline SmFontPickList& operator = (const SmFontPickList& rList);
+ inline Font operator [] (USHORT nPos) const;
+
+ void ReadFrom(const SmFontDialog& rDialog);
+ void WriteTo(SmFontDialog& rDialog) const;
+};
+
+inline SmFontPickList& SmFontPickList::operator = (const SmFontPickList& rList)
+{
+ *(SmPickList *)this = *(SmPickList *)&rList; return *this;
+}
+
+inline Font SmFontPickList::operator [] (USHORT nPos) const
+{
+ return *((Font *)SmPickList::operator[](nPos));
+}
+
+inline Font SmFontPickList::Get(USHORT nPos) const
+{
+ return nPos < Count() ? *((Font *)SmPickList::Get(nPos)) : Font();
+}
+
+inline BOOL SmFontPickList::Contains(const Font &rFont) const
+{
+ return SmPickList::Contains((void *)&rFont);
+}
+
+
+////////////////////////////////////////////////////////////
+//
+// SmStringPickComboBox
+//
+#ifdef NEVER
+class SmStringPickComboBox : public SmStringPickList, public ComboBox
+{
+protected:
+ virtual void LoseFocus();
+
+ DECL_LINK(SelectHdl, ComboBox *);
+
+public:
+ SmStringPickComboBox(Window* pParent, WinBits nWinStyle = 0, USHORT nMax = 4);
+ SmStringPickComboBox(Window* pParent, const ResId& rResId, USHORT nMax = 4);
+
+ SmStringPickComboBox& operator = (const SmStringPickList& rList);
+
+ void SetText(const String& rStr);
+
+ virtual void Insert(const String &rString);
+ virtual void Update(const String &rString, const String &rNewString);
+ virtual void Remove(const String &rString);
+};
+#endif
+
+////////////////////////////////////////////////////////////
+//
+// SmFontPickListBox
+//
+
+class SmFontPickListBox : public SmFontPickList, public ListBox
+{
+protected:
+ DECL_LINK(SelectHdl, ListBox *);
+
+public:
+ SmFontPickListBox(Window* pParent, WinBits nWinStyle = 0, USHORT nMax = 4);
+ SmFontPickListBox(Window* pParent, const ResId& rResId, USHORT nMax = 4);
+
+ SmFontPickListBox& operator = (const SmFontPickList& rList);
+
+ virtual void Insert(const Font &rFont);
+ virtual void Update(const Font &rFont, const Font &rNewFont);
+ virtual void Remove(const Font &rFont);
+};
+
+#endif
+
--
cgit