update dev300-m58
[ooovba.git] / svx / source / cui / cuifmsearch.hxx
blob23b1ceeccf270d9264159543d9c4e34f9f34a155
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: cuifmsearch.hxx,v $
10 * $Revision: 1.9 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _CUI_FMSEARCH_HXX
32 #define _CUI_FMSEARCH_HXX
34 #include <com/sun/star/sdbc/XResultSet.hpp>
36 #include <svx/fmsearch.hxx> //CHINA001
38 #define _SVSTDARR_STRINGSDTOR
39 #include <svtools/svstdarr.hxx>
41 #ifndef _DIALOG_HXX //autogen
42 #include <vcl/dialog.hxx>
43 #endif
45 #ifndef _BUTTON_HXX //autogen
46 #include <vcl/button.hxx>
47 #endif
49 #ifndef _FIXED_HXX //autogen
50 #include <vcl/fixed.hxx>
51 #endif
53 #ifndef _EDIT_HXX //autogen
54 #include <vcl/edit.hxx>
55 #endif
56 #include <vcl/combobox.hxx>
57 #include <vcl/lstbox.hxx>
58 #include <tools/link.hxx>
59 #include <comphelper/uno3.hxx>
60 #include <comphelper/stl_types.hxx>
61 #include <tools/string.hxx>
63 namespace svxform {
64 class FmSearchConfigItem;
67 // ===================================================================================================
68 // = class FmSearchDialog - Dialog fuer Suchen in Formularen/Tabellen
69 // ===================================================================================================
71 struct FmSearchProgress;
73 class FmSearchEngine;
75 class FmSearchDialog : public ModalDialog
77 friend class FmSearchEngine;
79 // meine ganzen Controls
80 FixedLine m_flSearchFor;
81 RadioButton m_rbSearchForText;
82 RadioButton m_rbSearchForNull;
83 RadioButton m_rbSearchForNotNull;
84 ComboBox m_cmbSearchText;
85 FixedLine m_flWhere;
86 FixedText m_ftForm;
87 ListBox m_lbForm;
88 RadioButton m_rbAllFields;
89 RadioButton m_rbSingleField;
90 ListBox m_lbField;
91 FixedLine m_flOptions;
92 FixedText m_ftPosition;
93 ListBox m_lbPosition;
94 CheckBox m_cbUseFormat;
95 CheckBox m_cbCase;
96 CheckBox m_cbBackwards;
97 CheckBox m_cbStartOver;
98 CheckBox m_cbWildCard;
99 CheckBox m_cbRegular;
100 CheckBox m_cbApprox;
101 PushButton m_pbApproxSettings;
102 CheckBox m_aHalfFullFormsCJK;
103 CheckBox m_aSoundsLikeCJK;
104 PushButton m_aSoundsLikeCJKSettings;
105 FixedLine m_flState;
106 FixedText m_ftRecordLabel;
107 FixedText m_ftRecord;
108 FixedText m_ftHint;
109 PushButton m_pbSearchAgain;
110 CancelButton m_pbClose;
111 HelpButton m_pbHelp;
112 String m_sSearch;
113 String m_sCancel;
115 Window* m_pPreSearchFocus;
117 Link m_lnkFoundHandler; // Handler fuer "gefunden"
118 Link m_lnkCanceledNotFoundHdl; // Handler fuer Positionierung des Cursors
120 Link m_lnkContextSupplier; // fuer Suche in verschiedenen Kontexten
122 // ein Array, in dem ich mir fuer jeden Kontext das aktuell selektierte Feld merke
123 ::std::vector<String> m_arrContextFields;
125 // fuer die eigentliche Arbeit ...
126 FmSearchEngine* m_pSearchEngine;
128 Timer m_aDelayedPaint;
129 // siehe EnableSearchUI
131 ::svxform::FmSearchConfigItem* m_pConfig;
132 public:
133 /** hiermit kann in verschiedenen Saetzen von Feldern gesucht werden. Es gibt eine Reihe von Kontexten, deren Namen in
134 strContexts stehen (getrennt durch ';'), der Benutzer kann einen davon auswaehlen.
135 Wenn der Benutzer einen Kontext auswaehlt, wird lnkContextSupplier aufgerufen, er bekommt einen Zeiger auf eine
136 FmSearchContext-Struktur, die gefuellt werden muss.
137 Fuer die Suche gilt dann :
138 a) bei formatierter Suche wird der Iterator selber verwendet (wie beim ersten Constructor auch)
139 b) bei formatierter Suche wird NICHT der FormatKey an den Fields des Iterators verwendet, sondern die entsprechende
140 TextComponent wird gefragt (deshalb auch die Verwendung des originalen Iterator, durch dessen Move werden hoffentlich
141 die hinter den TextComponent-Interfaces stehenden Controls geupdatet)
142 c) bei nicht formatierter Suche wird ein Clone des Iterators verwendet (da ich hier die TextComponent-Interfaces nicht
143 fragen muss)
144 (natuerlich zwingend erforderlich : der String Nummer i in strUsedFields eines Kontexts muss mit dem Interface Nummer i
145 in arrFields des Kontexts korrespondieren)
147 FmSearchDialog(Window* pParent, const String& strInitialText, const ::std::vector< String >& _rContexts, sal_Int16 nInitialContext,
148 const Link& lnkContextSupplier);
150 virtual ~FmSearchDialog();
152 /** der Found-Handler bekommt im "gefunden"-Fall einen Zeiger auf eine FmFoundRecordInformation-Struktur
153 (dieser ist nur im Handler gueltig, wenn man sich also die Daten merken muss, nicht den Zeiger, sondern die
154 Struktur kopieren)
155 Dieser Handler MUSS gesetzt werden.
156 Ausserdem sollte beachtet werden, dass waehrend des Handlers der Suchdialog immer noch modal ist
158 void SetFoundHandler(const Link& lnk) { m_lnkFoundHandler = lnk; }
160 Wenn die Suche abgebrochen oder erfolglos beendet wurde, wird im Suchdialog immer der aktuelle Datensatz angezeigt
161 Damit das mit der eventuellen Anzeige des Aufrufers synchron geht, existiert dieser Handler (der nicht undbedingt gesetzt
162 werden muss).
163 Der dem Handler uebergebene Zeiger zeigt auf eine FmFoundRecordInformation-Struktur, bei der aPosition und eventuell
164 (bei Suche mit Kontexten) nContext gueltig sind.
166 void SetCanceledNotFoundHdl(const Link& lnk) { m_lnkCanceledNotFoundHdl = lnk; }
168 inline void SetActiveField(const String& strField);
170 protected:
171 virtual sal_Bool Close();
173 void Init(const String& strVisibleFields, const String& strInitialText);
174 // nur von den Constructoren aus zu verwenden
176 void OnFound(const ::com::sun::star::uno::Any& aCursorPos, sal_Int16 nFieldPos);
178 void EnableSearchUI(sal_Bool bEnable);
179 // beim Suchen in einem eigenen Thread moechte ich natuerlich die UI zum Starten/Parameter-Setzen der Suche disablen
180 // Bei bEnable == sal_False wird fuer alle betroffenen Controls das Painten kurz aus- und mittels m_aDelayedPaint nach
181 // einer kurzen Weile wieder angeschaltet. Wenn inzwischen eine Anforderung mit bEnable==sal_True kommt, wird der Timer gestoppt
182 // und das Painten gleich wieder angeschaltet. Als Konsequenz dieses umstaendlichen Vorgehens ist kein Flackern zu sehen,
183 // wenn man schnell hintereinander aus- und wieder einschaltet.
185 void EnableSearchForDependees(sal_Bool bEnable);
187 void EnableControlPaint(sal_Bool bEnable);
188 // enabled (disabled) fuer alle wichtigen Controls ihr Paint
190 void InitContext(sal_Int16 nContext);
192 void LoadParams();
193 void SaveParams() const;
195 private:
196 // Handler fuer die Controls
197 DECL_LINK( OnClickedFieldRadios, Button* );
198 DECL_LINK( OnClickedSearchAgain, Button* );
199 DECL_LINK( OnClickedSpecialSettings, Button* );
201 DECL_LINK( OnSearchTextModified, ComboBox* );
203 DECL_LINK( OnPositionSelected, ListBox* );
204 DECL_LINK( OnFieldSelected, ListBox* );
206 DECL_LINK( OnCheckBoxToggled, CheckBox* );
208 DECL_LINK( OnContextSelection, ListBox* );
210 // Such-Fortschritt
211 DECL_LINK( OnSearchProgress, FmSearchProgress* );
213 DECL_LINK( OnDelayedPaint, void* );
214 // siehe EnableSearchUI
216 void implMoveControls(Control** _ppControls, sal_Int32 _nControls, sal_Int32 _nUp, Control* _pToResize);
218 void initCommon( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& _rxCursor );
221 inline void FmSearchDialog::SetActiveField(const String& strField)
223 sal_uInt16 nInitialField = m_lbField.GetEntryPos(strField);
224 if (nInitialField == COMBOBOX_ENTRY_NOTFOUND)
225 nInitialField = 0;
226 m_lbField.SelectEntryPos(nInitialField);
227 LINK(this, FmSearchDialog, OnFieldSelected).Call(&m_lbField);
230 #endif // _CUI_FMSEARCH_HXX