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