diff options
Diffstat (limited to 'cui/source/inc/cuifmsearch.hxx')
-rw-r--r-- | cui/source/inc/cuifmsearch.hxx | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/cui/source/inc/cuifmsearch.hxx b/cui/source/inc/cuifmsearch.hxx new file mode 100644 index 000000000000..2659054c2100 --- /dev/null +++ b/cui/source/inc/cuifmsearch.hxx @@ -0,0 +1,230 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: cuifmsearch.hxx,v $ + * $Revision: 1.9 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _CUI_FMSEARCH_HXX +#define _CUI_FMSEARCH_HXX + +#include <com/sun/star/sdbc/XResultSet.hpp> + +#include <svx/fmsearch.hxx> //CHINA001 + +#define _SVSTDARR_STRINGSDTOR +#include <svl/svstdarr.hxx> + +#ifndef _DIALOG_HXX //autogen +#include <vcl/dialog.hxx> +#endif + +#ifndef _BUTTON_HXX //autogen +#include <vcl/button.hxx> +#endif + +#ifndef _FIXED_HXX //autogen +#include <vcl/fixed.hxx> +#endif + +#ifndef _EDIT_HXX //autogen +#include <vcl/edit.hxx> +#endif +#include <vcl/combobox.hxx> +#include <vcl/lstbox.hxx> +#include <tools/link.hxx> +#include <comphelper/uno3.hxx> +#include <comphelper/stl_types.hxx> +#include <tools/string.hxx> + +namespace svxform { + class FmSearchConfigItem; +} + +// =================================================================================================== +// = class FmSearchDialog - Dialog fuer Suchen in Formularen/Tabellen +// =================================================================================================== + +struct FmSearchProgress; + +class FmSearchEngine; + +class FmSearchDialog : public ModalDialog +{ + friend class FmSearchEngine; + + // meine ganzen Controls + FixedLine m_flSearchFor; + RadioButton m_rbSearchForText; + RadioButton m_rbSearchForNull; + RadioButton m_rbSearchForNotNull; + ComboBox m_cmbSearchText; + FixedLine m_flWhere; + FixedText m_ftForm; + ListBox m_lbForm; + RadioButton m_rbAllFields; + RadioButton m_rbSingleField; + ListBox m_lbField; + FixedLine m_flOptions; + FixedText m_ftPosition; + ListBox m_lbPosition; + CheckBox m_cbUseFormat; + CheckBox m_cbCase; + CheckBox m_cbBackwards; + CheckBox m_cbStartOver; + CheckBox m_cbWildCard; + CheckBox m_cbRegular; + CheckBox m_cbApprox; + PushButton m_pbApproxSettings; + CheckBox m_aHalfFullFormsCJK; + CheckBox m_aSoundsLikeCJK; + PushButton m_aSoundsLikeCJKSettings; + FixedLine m_flState; + FixedText m_ftRecordLabel; + FixedText m_ftRecord; + FixedText m_ftHint; + PushButton m_pbSearchAgain; + CancelButton m_pbClose; + HelpButton m_pbHelp; + String m_sSearch; + String m_sCancel; + + Window* m_pPreSearchFocus; + + Link m_lnkFoundHandler; // Handler fuer "gefunden" + Link m_lnkCanceledNotFoundHdl; // Handler fuer Positionierung des Cursors + + Link m_lnkContextSupplier; // fuer Suche in verschiedenen Kontexten + + // ein Array, in dem ich mir fuer jeden Kontext das aktuell selektierte Feld merke + ::std::vector<String> m_arrContextFields; + + // fuer die eigentliche Arbeit ... + FmSearchEngine* m_pSearchEngine; + + Timer m_aDelayedPaint; + // siehe EnableSearchUI + + ::svxform::FmSearchConfigItem* m_pConfig; +public: + /** hiermit kann in verschiedenen Saetzen von Feldern gesucht werden. Es gibt eine Reihe von Kontexten, deren Namen in + strContexts stehen (getrennt durch ';'), der Benutzer kann einen davon auswaehlen. + Wenn der Benutzer einen Kontext auswaehlt, wird lnkContextSupplier aufgerufen, er bekommt einen Zeiger auf eine + FmSearchContext-Struktur, die gefuellt werden muss. + Fuer die Suche gilt dann : + a) bei formatierter Suche wird der Iterator selber verwendet (wie beim ersten Constructor auch) + b) bei formatierter Suche wird NICHT der FormatKey an den Fields des Iterators verwendet, sondern die entsprechende + TextComponent wird gefragt (deshalb auch die Verwendung des originalen Iterator, durch dessen Move werden hoffentlich + die hinter den TextComponent-Interfaces stehenden Controls geupdatet) + c) bei nicht formatierter Suche wird ein Clone des Iterators verwendet (da ich hier die TextComponent-Interfaces nicht + fragen muss) + (natuerlich zwingend erforderlich : der String Nummer i in strUsedFields eines Kontexts muss mit dem Interface Nummer i + in arrFields des Kontexts korrespondieren) + */ + FmSearchDialog(Window* pParent, const String& strInitialText, const ::std::vector< String >& _rContexts, sal_Int16 nInitialContext, + const Link& lnkContextSupplier); + + virtual ~FmSearchDialog(); + + /** der Found-Handler bekommt im "gefunden"-Fall einen Zeiger auf eine FmFoundRecordInformation-Struktur + (dieser ist nur im Handler gueltig, wenn man sich also die Daten merken muss, nicht den Zeiger, sondern die + Struktur kopieren) + Dieser Handler MUSS gesetzt werden. + Ausserdem sollte beachtet werden, dass waehrend des Handlers der Suchdialog immer noch modal ist + */ + void SetFoundHandler(const Link& lnk) { m_lnkFoundHandler = lnk; } + /** + Wenn die Suche abgebrochen oder erfolglos beendet wurde, wird im Suchdialog immer der aktuelle Datensatz angezeigt + Damit das mit der eventuellen Anzeige des Aufrufers synchron geht, existiert dieser Handler (der nicht undbedingt gesetzt + werden muss). + Der dem Handler uebergebene Zeiger zeigt auf eine FmFoundRecordInformation-Struktur, bei der aPosition und eventuell + (bei Suche mit Kontexten) nContext gueltig sind. + */ + void SetCanceledNotFoundHdl(const Link& lnk) { m_lnkCanceledNotFoundHdl = lnk; } + + inline void SetActiveField(const String& strField); + +protected: + virtual sal_Bool Close(); + + void Init(const String& strVisibleFields, const String& strInitialText); + // nur von den Constructoren aus zu verwenden + + void OnFound(const ::com::sun::star::uno::Any& aCursorPos, sal_Int16 nFieldPos); + + void EnableSearchUI(sal_Bool bEnable); + // beim Suchen in einem eigenen Thread moechte ich natuerlich die UI zum Starten/Parameter-Setzen der Suche disablen + // Bei bEnable == sal_False wird fuer alle betroffenen Controls das Painten kurz aus- und mittels m_aDelayedPaint nach + // einer kurzen Weile wieder angeschaltet. Wenn inzwischen eine Anforderung mit bEnable==sal_True kommt, wird der Timer gestoppt + // und das Painten gleich wieder angeschaltet. Als Konsequenz dieses umstaendlichen Vorgehens ist kein Flackern zu sehen, + // wenn man schnell hintereinander aus- und wieder einschaltet. + + void EnableSearchForDependees(sal_Bool bEnable); + + void EnableControlPaint(sal_Bool bEnable); + // enabled (disabled) fuer alle wichtigen Controls ihr Paint + + void InitContext(sal_Int16 nContext); + + void LoadParams(); + void SaveParams() const; + +private: + // Handler fuer die Controls + DECL_LINK( OnClickedFieldRadios, Button* ); + DECL_LINK( OnClickedSearchAgain, Button* ); + DECL_LINK( OnClickedSpecialSettings, Button* ); + + DECL_LINK( OnSearchTextModified, ComboBox* ); + + DECL_LINK( OnPositionSelected, ListBox* ); + DECL_LINK( OnFieldSelected, ListBox* ); + + DECL_LINK( OnCheckBoxToggled, CheckBox* ); + + DECL_LINK( OnContextSelection, ListBox* ); + + // Such-Fortschritt + DECL_LINK( OnSearchProgress, FmSearchProgress* ); + + DECL_LINK( OnDelayedPaint, void* ); + // siehe EnableSearchUI + + void implMoveControls(Control** _ppControls, sal_Int32 _nControls, sal_Int32 _nUp, Control* _pToResize); + + void initCommon( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& _rxCursor ); +}; + +inline void FmSearchDialog::SetActiveField(const String& strField) +{ + sal_uInt16 nInitialField = m_lbField.GetEntryPos(strField); + if (nInitialField == COMBOBOX_ENTRY_NOTFOUND) + nInitialField = 0; + m_lbField.SelectEntryPos(nInitialField); + LINK(this, FmSearchDialog, OnFieldSelected).Call(&m_lbField); +} + +#endif // _CUI_FMSEARCH_HXX |