summaryrefslogtreecommitdiff
path: root/sw/source/ui/cctrl/swlbox.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/cctrl/swlbox.cxx')
-rw-r--r--sw/source/ui/cctrl/swlbox.cxx622
1 files changed, 622 insertions, 0 deletions
diff --git a/sw/source/ui/cctrl/swlbox.cxx b/sw/source/ui/cctrl/swlbox.cxx
new file mode 100644
index 000000000000..3328dd6176fd
--- /dev/null
+++ b/sw/source/ui/cctrl/swlbox.cxx
@@ -0,0 +1,622 @@
+/*************************************************************************
+ *
+ * $RCSfile: swlbox.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:14:32 $
+ *
+ * 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): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifdef PRECOMPILED
+#include "ui_pch.hxx"
+#endif
+
+#pragma hdrstop
+
+#ifndef _DEBUG_HXX //autogen
+#include <tools/debug.hxx>
+#endif
+#ifndef _UNOTOOLS_CHARCLASS_HXX
+#include <unotools/charclass.hxx>
+#endif
+
+#ifndef _SWTYPES_HXX
+#include <swtypes.hxx>
+#endif
+#ifndef _SWLBOX_HXX
+#include <swlbox.hxx>
+#endif
+
+
+SV_IMPL_PTRARR(SwEntryLst, SwBoxEntry*)
+
+/*--------------------------------------------------------------------
+ Beschreibung: Ein ListboxElement
+ --------------------------------------------------------------------*/
+
+
+SwBoxEntry::SwBoxEntry() :
+ bModified(FALSE),
+ bNew(FALSE),
+ nId(LISTBOX_APPEND)
+{
+}
+
+
+SwBoxEntry::SwBoxEntry(const String& aNam, USHORT nIdx) :
+ bModified(FALSE),
+ bNew(FALSE),
+ aName(aNam),
+ nId(nIdx)
+{
+}
+
+
+SwBoxEntry::SwBoxEntry(const SwBoxEntry& rOld) :
+ aName(rOld.aName),
+ nId(rOld.nId),
+ bNew(rOld.bNew),
+ bModified(rOld.bModified)
+{
+
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+/*SwListBox::SwListBox(Window* pParent, const ResId& rId):
+ ListBox(pParent, rId)
+{
+ DBG_ASSERT( 0 == (ListBox::GetStyle() & WB_SORT), "NIE sortiert aus der Resource lesen!" );
+ // falls eine Liste ueber die Resource gelesen wurde, die interne
+ // entsprechend updaten
+ USHORT nCnt = ListBox::GetEntryCount();
+ for( USHORT n = 0; n < nCnt; ++n )
+ {
+ const SwBoxEntry* pTmp = new SwBoxEntry( ListBox::GetEntry( n ), n );
+ aEntryLst.Insert( pTmp, n );
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Basisklasse Dtor
+ --------------------------------------------------------------------*/
+
+
+/*SwListBox::~SwListBox()
+{
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Listen loeschen und Anzeige loeschen
+ --------------------------------------------------------------------*/
+
+
+/*void SwListBox::Clear()
+{
+ ListBox::Clear();
+ aEntryLst.DeleteAndDestroy( 0, aEntryLst.Count() );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Rund um die Entries
+ --------------------------------------------------------------------*/
+
+
+/*const SwBoxEntry& SwListBox::GetEntry(USHORT nPos) const
+{
+ if( nPos < aEntryLst.Count() )
+ return *aEntryLst[ nPos ];
+
+ return aDefault;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: aktullen Eintrag zurueckgeben
+ --------------------------------------------------------------------*/
+
+
+/*const SwBoxEntry& SwListBox::GetSelectEntry() const
+{
+ USHORT nPos = ListBox::GetSelectEntryPos();
+ if( nPos < aEntryLst.Count() )
+ return *aEntryLst[ nPos ];
+
+ return aDefault;
+}
+
+
+void SwListBox::RemoveEntry( USHORT nPos )
+{
+ if( nPos < aEntryLst.Count() )
+ {
+ aEntryLst.DeleteAndDestroy( nPos, 1 );
+ ListBox::RemoveEntry( nPos );
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Eintrag in die ListBox aufnehmen
+ --------------------------------------------------------------------*/
+
+
+/*void SwListBox::InsertEntry( const SwBoxEntry& rEntry, USHORT nPos )
+{
+ if( nPos >= aEntryLst.Count() )
+ nPos = aEntryLst.Count();
+
+ SwBoxEntry* pEntry = new SwBoxEntry( rEntry );
+ ListBox::InsertEntry( pEntry->aName, nPos );
+ aEntryLst.C40_INSERT( SwBoxEntry, pEntry, nPos );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Sortiert einfuegen
+ --------------------------------------------------------------------*/
+
+
+/*void SwListBox::InsertEntrySort( const SwBoxEntry& rEntry )
+{
+ USHORT nPos;
+ if( !SeekEntry( rEntry, &nPos ) )
+ {
+ SwBoxEntry* pEntry = new SwBoxEntry( rEntry );
+ ListBox::InsertEntry( pEntry->aName, nPos );
+ aEntryLst.C40_INSERT( SwBoxEntry, pEntry, nPos );
+ }
+}
+
+
+BOOL SwListBox::SeekEntry( const SwBoxEntry& rEntry, USHORT* pPos )
+{
+ register USHORT nO = aEntryLst.Count(), nM, nU = 0;
+ if( nO > 0 )
+ {
+ nO--;
+ while( nU <= nO )
+ {
+ nM = nU + ( nO - nU ) / 2;
+ StringCompare eCmp = aEntryLst[ nM ]->aName.ICompare( rEntry.aName );
+ if( COMPARE_EQUAL == eCmp )
+ {
+ if( pPos ) *pPos = nM;
+ return TRUE;
+ }
+ else if( COMPARE_GREATER == eCmp )
+ nU = nM + 1;
+ else if( nM == 0 )
+ break;
+ else
+ nO = nM - 1;
+ }
+ }
+ if( pPos ) *pPos = nU;
+ return FALSE;
+}
+
+/* */
+
+
+SwComboBox::SwComboBox(Window* pParent, const ResId& rId, USHORT nStyleBits ):
+ ComboBox(pParent, rId),
+ nStyle(nStyleBits)
+{
+ // Verwaltung fuer die Stringlist aus der Resource aufbauen
+ USHORT nSize = GetEntryCount();
+ for( USHORT i=0; i < nSize; ++i )
+ {
+ const SwBoxEntry* pTmp = new SwBoxEntry(ComboBox::GetEntry(i), i);
+ aEntryLst.Insert(pTmp, aEntryLst.Count() );
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Basisklasse Dtor
+ --------------------------------------------------------------------*/
+
+
+SwComboBox::~SwComboBox()
+{
+// das erledigen die Listen doch schon selbst im DTOR!
+// aEntryLst.DeleteAndDestroy(0, aEntryLst.Count());
+// aDelEntryLst.DeleteAndDestroy(0, aDelEntryLst.Count());
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: neue Eintraege verwalten
+ --------------------------------------------------------------------*/
+
+
+void SwComboBox::InsertNewEntry(const SwBoxEntry& rEntry)
+{
+ SwBoxEntry* pNew = new SwBoxEntry(rEntry);
+ pNew->bNew = TRUE;
+ InsertSorted(pNew);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Eintrag in die ComboBox aufnehmen
+ --------------------------------------------------------------------*/
+
+
+void SwComboBox::InsertEntry(const SwBoxEntry& rEntry)
+{
+ InsertSorted(new SwBoxEntry(rEntry));
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Eintrag aus der Liste loeschen
+ --------------------------------------------------------------------*/
+
+
+void SwComboBox::RemoveEntry(USHORT nPos)
+{
+ if(nPos >= aEntryLst.Count())
+ return;
+
+ // Altes Element austragen
+ SwBoxEntry* pEntry = aEntryLst[nPos];
+ aEntryLst.Remove(nPos, 1);
+ ComboBox::RemoveEntry(nPos);
+
+ // keine neuen Eintraege in die Liste mit aufnehmen
+ if(pEntry->bNew)
+ return;
+
+ // in DeleteListe eintragen
+ aDelEntryLst.C40_INSERT(SwBoxEntry, pEntry, aDelEntryLst.Count());
+}
+
+
+
+/*--------------------------------------------------------------------
+ Beschreibung: Position by Name
+ --------------------------------------------------------------------*/
+
+USHORT SwComboBox::GetEntryPos(const SwBoxEntry& rEntry) const
+{
+ return ComboBox::GetEntryPos(rEntry.aName);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Rund um die Entries
+ --------------------------------------------------------------------*/
+
+
+const SwBoxEntry& SwComboBox::GetEntry(USHORT nPos) const
+{
+ if(nPos < aEntryLst.Count())
+ return *aEntryLst[nPos];
+
+ return aDefault;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: geloeschte Eintraege
+ --------------------------------------------------------------------*/
+
+
+USHORT SwComboBox::GetRemovedCount() const
+{
+ return aDelEntryLst.Count();
+}
+
+
+const SwBoxEntry& SwComboBox::GetRemovedEntry(USHORT nPos) const
+{
+ if(nPos < aDelEntryLst.Count())
+ return *aDelEntryLst[nPos];
+
+ return aDefault;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Neue Entries begutachten
+ --------------------------------------------------------------------*/
+
+
+USHORT SwComboBox::GetNewCount() const
+{
+ USHORT nNew = 0;
+ USHORT nSize = aEntryLst.Count();
+ for(USHORT i=0; i < nSize; ++i)
+ if(aEntryLst[i]->bNew)
+ nNew++;
+
+ return nNew;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Alle neuen Eintraege ueberpruefen
+ --------------------------------------------------------------------*/
+
+
+const SwBoxEntry& SwComboBox::GetNewEntry(USHORT nPos) const
+{
+ USHORT nSize = aEntryLst.Count();
+ USHORT nNew = 0;
+
+ for(USHORT i=0; i < nSize; ++i)
+ if( aEntryLst[i]->bNew && nNew++ == nPos )
+ return *aEntryLst[i];
+
+ return aDefault;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Sortiert einfuegen
+ --------------------------------------------------------------------*/
+
+
+void SwComboBox::InsertSorted(SwBoxEntry* pEntry)
+{
+ ComboBox::InsertEntry(pEntry->aName);
+ USHORT nPos = ComboBox::GetEntryPos(pEntry->aName);
+ aEntryLst.C40_INSERT(SwBoxEntry, pEntry, nPos);
+}
+
+
+/*--------------------------------------------------------------------
+ Beschreibung: Je nach Option bestimmte Zeichen ausblenden
+ --------------------------------------------------------------------*/
+
+
+void SwComboBox::KeyInput( const KeyEvent& rKEvt )
+{
+ USHORT nChar = rKEvt.GetCharCode();
+
+ if(nStyle & CBS_FILENAME)
+ {
+#ifdef MAC
+ if(nChar == ':')
+ return;
+#elif defined UNX
+ if(nChar == '/' || nChar == ' ' )
+ return;
+#else
+ if(nChar == ':' || nChar == '\\' || nChar == '.' || nChar == ' ')
+ return;
+#endif
+ }
+ ComboBox::KeyInput(rKEvt);
+}
+
+
+
+/*--------------------------------------------------------------------
+ Beschreibung: Text nach Option konvertieren
+ --------------------------------------------------------------------*/
+
+
+String SwComboBox::GetText() const
+{
+ String aTxt( ComboBox::GetText() );
+
+ if(nStyle & CBS_LOWER)
+ GetAppCharClass().toLower( aTxt );
+ else if( nStyle & CBS_UPPER )
+ GetAppCharClass().toUpper( aTxt );
+
+ return aTxt;
+}
+
+
+/*------------------------------------------------------------------------
+
+ $Log: not supported by cvs2svn $
+ Revision 1.52 2000/09/18 16:05:13 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.51 2000/08/30 16:45:51 jp
+ use CharClass instead of international
+
+ Revision 1.50 2000/04/11 08:03:01 os
+ UNICODE
+
+ Revision 1.49 2000/02/11 14:43:21 hr
+ #70473# changes for unicode ( patched by automated patchtool )
+
+ Revision 1.48 1997/11/03 12:09:46 MA
+ precomp entfernt
+
+
+ Rev 1.47 03 Nov 1997 13:09:46 MA
+ precomp entfernt
+
+ Rev 1.46 08 Aug 1997 17:29:48 OM
+ Headerfile-Umstellung
+
+ Rev 1.45 06 Aug 1997 11:28:38 TRI
+ GetpApp statt pApp
+
+ Rev 1.44 23 Apr 1997 10:39:28 OS
+ ResId const
+
+ Rev 1.43 07 Nov 1996 11:47:52 JP
+ ASSERT korrigiert
+
+ Rev 1.42 05 Nov 1996 15:36:36 JP
+ SwListBox: Sortierung selbst uebernommen; ueberfluessiges entfernt/aufgeraeumt
+
+ Rev 1.41 28 Aug 1996 08:23:42 OS
+ includes
+
+ Rev 1.40 16 Aug 1996 13:24:00 TRI
+ C40_INSERT statt Insert
+
+ Rev 1.39 25 Jun 1996 17:46:54 HJS
+ include tlintl.hxx
+
+ Rev 1.38 16 Apr 1996 16:46:10 OM
+ SwEventListBox entfernt
+
+ Rev 1.37 24 Nov 1995 16:57:38 OM
+ PCH->PRECOMPILED
+
+ Rev 1.36 17 Nov 1995 13:21:36 MA
+ Segmentierung
+
+ Rev 1.35 27 Jul 1995 10:44:42 mk
+ an SCC4.0.1a angepasst (MDA)
+
+ Rev 1.34 20 Mar 1995 19:03:20 OS
+ unbenutzte Funktionen entfernt
+
+ Rev 1.33 15 Dec 1994 20:21:28 SWG
+ *ARR* Ersetzungen, svmem, __far_data etc.
+
+ Rev 1.32 25 Oct 1994 14:55:22 ER
+ add: PCH
+
+ Rev 1.31 10 May 1994 13:48:44 MS
+ boeser Fehler! bei sortierten SwlBoxen kam der Zugriff auf die EntryListe durcheinander
+
+ Rev 1.30 06 May 1994 13:17:28 MS
+ GetSelectEntryPos geandert
+
+ Rev 1.29 02 Mar 1994 17:22:56 MS
+ mit EntryPos
+
+ Rev 1.28 02 Mar 1994 15:46:52 VB
+ ListBox mit MouseButtonDown-Handler
+
+ Rev 1.27 26 Feb 1994 02:59:36 ER
+ virt. dtor mit export
+
+ Rev 1.26 23 Feb 1994 12:07:04 ER
+ SEXPORT
+
+ Rev 1.25 17 Feb 1994 08:35:06 MI
+ SEG_FUNCDEFS ausgefuellt
+
+ Rev 1.24 16 Feb 1994 19:56:36 MI
+ SEG_FUNCDEFS ausgefuellt
+
+ Rev 1.23 16 Feb 1994 15:41:54 MI
+ Pragmas zurechtgerueckt
+
+ Rev 1.22 28 Jan 1994 11:36:26 MI
+ TCOV() entfernt, SW_... nach SEG_... umbenannt
+
+ Rev 1.21 13 Jan 1994 08:33:26 MI
+ Segmentierung per #define ermoeglicht
+
+ Rev 1.20 10 Jan 1994 09:38:36 MS
+ UNX - Fehler behoben
+
+ Rev 1.19 09 Jan 1994 21:06:46 MI
+ Provisorische Segmentierung
+
+ Rev 1.18 06 Jan 1994 13:14:38 MS
+ Default-Options geaendert
+
+ Rev 1.17 08 Dec 1993 11:21:38 MS
+ SwBoxEntry() setz nId auf LISTBOX_ENTRY_NOTFOUND
+
+ Rev 1.16 06 Dec 1993 11:47:10 VB
+ Upper/Lower konvertieren ueber International
+
+ Rev 1.15 24 Sep 1993 18:50:02 VB
+ Segmentierung
+
+ Rev 1.14 24 Sep 1993 08:59:44 MS
+ Beschraenkung der Eingabe geaendert
+
+ Rev 1.13 23 Sep 1993 17:33:46 MS
+ ComboBox Namen im Edit begrenzen
+
+ Rev 1.12 27 Apr 1993 08:18:20 OK
+ NEU: #pragma hdrstop
+
+ Rev 1.11 16 Feb 1993 08:52:18 MS
+ fuer m800
+
+ Rev 1.10 10 Feb 1993 19:42:08 VB
+ Umstellung SV21
+
+ Rev 1.9 06 Jan 1993 09:15:30 OK
+ Anpassung an M70
+
+ Rev 1.8 02 Dec 1992 17:39:46 MS
+ neu SwMultiComboBox
+
+ Rev 1.7 27 Nov 1992 16:04:52 MS
+ RemoveEntry() korrigiert
+
+ Rev 1.6 27 Nov 1992 15:55:48 MS
+ mit InitComboBox
+
+ Rev 1.5 27 Nov 1992 15:42:52 MS
+ Init erweitert
+
+ Rev 1.4 27 Nov 1992 14:42:38 MS
+ mit const SwBoxEntr& Returns
+
+ Rev 1.3 27 Nov 1992 13:43:54 MS
+ GetCurEntry gerichtet
+
+ Rev 1.2 27 Nov 1992 11:40:52 MS
+ neu GetEntryPos
+
+ Rev 1.1 27 Nov 1992 11:30:08 MS
+ neu InitFromResource
+
+ Rev 1.0 27 Nov 1992 10:49:58 MS
+ Initial revision.
+
+ ------------------------------------------------------------------------*/
+