xref: /AOO41X/main/sc/source/ui/inc/inputwin.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_INPUTWIN_HXX
25 #define SC_INPUTWIN_HXX
26 
27 #include <vector>
28 #include <vcl/toolbox.hxx>
29 #include <sfx2/childwin.hxx>
30 #include <svl/lstner.hxx>
31 #include <vcl/combobox.hxx>
32 #include <vcl/window.hxx>
33 #include <svtools/transfer.hxx>
34 
35 class ScEditEngineDefaulter;
36 class EditView;
37 struct ESelection;
38 class ScInputHandler;
39 class ScAccessibleEditLineTextData;
40 struct EENotify;
41 class ScRangeList;
42 
43 //========================================================================
44 
45 class ScTextWnd : public Window, public DragSourceHelper        // edit window
46 {
47 public:
48                     ScTextWnd( Window* pParent );
49     virtual         ~ScTextWnd();
50 
51     void            SetTextString( const String& rString );
52     const String&   GetTextString() const;
53 
54     sal_Bool            IsInputActive();
55     EditView*       GetEditView();
56 
57                         // fuer FunktionsAutopiloten
58     void            MakeDialogEditView();
59 
60     void            StartEditEngine();
61     void            StopEditEngine( sal_Bool bAll );
62 
63     virtual void    DataChanged( const DataChangedEvent& rDCEvt );
64 
65     void            SetFormulaMode( sal_Bool bSet );
66 
67     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
68 
69     void            InsertAccessibleTextData( ScAccessibleEditLineTextData& rTextData );
70     void            RemoveAccessibleTextData( ScAccessibleEditLineTextData& rTextData );
71 
72     DECL_LINK( NotifyHdl, EENotify* );
73 
74 protected:
75     virtual void    Paint( const Rectangle& rRec );
76     virtual void    Resize();
77 
78     virtual void    MouseMove( const MouseEvent& rMEvt );
79     virtual void    MouseButtonDown( const MouseEvent& rMEvt );
80     virtual void    MouseButtonUp( const MouseEvent& rMEvt );
81     virtual void    Command( const CommandEvent& rCEvt );
82     virtual void    KeyInput(const KeyEvent& rKEvt);
83     virtual void    GetFocus();
84     virtual void    LoseFocus();
85 
86     virtual void    StartDrag( sal_Int8 nAction, const Point& rPosPixel );
87 
88     virtual String  GetText() const;
89 
90 private:
91     void            ImplInitSettings();
92     void            UpdateAutoCorrFlag();
93 
94 private:
95     typedef ::std::vector< ScAccessibleEditLineTextData* > AccTextDataVector;
96 
97     String      aString;
98     Font        aTextFont;
99     ScEditEngineDefaulter*  pEditEngine;            // erst bei Bedarf angelegt
100     EditView*   pEditView;
101     AccTextDataVector maAccTextDatas;   // #i105267# text datas may be cloned, remember all copies
102     sal_Bool        bIsRTL;
103     sal_Bool        bIsInsertMode;
104     sal_Bool        bFormulaMode;
105 
106     // #102710#; this flag should be true if a key input or a command is handled
107     // it prevents the call of InputChanged in the ModifyHandler of the EditEngine
108     sal_Bool        bInputMode;
109 };
110 
111 //========================================================================
112 
113 class ScPosWnd : public ComboBox, public SfxListener        // Positionsanzeige
114 {
115 private:
116     String          aPosStr;
117     Accelerator*    pAccel;
118     sal_uLong           nTipVisible;
119     sal_Bool            bFormulaMode;
120     sal_Bool            bTopHadFocus;
121 
122 public:
123                     ScPosWnd( Window* pParent );
124     virtual         ~ScPosWnd();
125 
126     void            SetPos( const String& rPosStr );        // angezeigter Text
127     void            SetFormulaMode( sal_Bool bSet );
128 
129 protected:
130     virtual void    Select();
131     virtual void    Modify();
132 
133     virtual long    Notify( NotifyEvent& rNEvt );
134 
135     virtual void    Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
136 
137 private:
138     void            FillRangeNames();
139     void            FillFunctions();
140     void            DoEnter();
141     void            HideTip();
142 
143     void            ReleaseFocus_Impl();
144 };
145 
146 //========================================================================
147 
148 class ScInputWindow : public ToolBox                        // Parent-Toolbox
149 {
150 public:
151                     ScInputWindow( Window* pParent, SfxBindings* pBind );
152     virtual         ~ScInputWindow();
153 
154     virtual void    Resize();
155     virtual void    Select();
156 
157     void            SetFuncString( const String& rString, sal_Bool bDoEdit = sal_True );
158     void            SetPosString( const String& rStr );
159     void            SetTextString( const String& rString );
160 
161     void            SetOkCancelMode();
162     void            SetSumAssignMode();
163     void            EnableButtons( sal_Bool bEnable = sal_True );
164 
165     void            SetFormulaMode( sal_Bool bSet );
166 
167     sal_Bool            IsInputActive();
168     EditView*       GetEditView();
169 //UNUSED2008-05  EditView*      ActivateEdit( const String&     rText,
170 //UNUSED2008-05                                const ESelection& rSel );
171 
172     void            TextGrabFocus();
173     void            TextInvalidate();
174     void            SwitchToTextWin();
175 
176     void            PosGrabFocus();
177 
178     // Fuer FunktionsAutopiloten
179     void            MakeDialogEditView();
180 
181     void            StopEditEngine( sal_Bool bAll );
182 
183     void            SetInputHandler( ScInputHandler* pNew );
184 
GetInputHandler()185     ScInputHandler* GetInputHandler(){ return pInputHdl;}
186 
187     void            StateChanged( StateChangedType nType );
188     virtual void    DataChanged( const DataChangedEvent& rDCEvt );
189 
190 
191 protected:
192     virtual void    SetText( const String& rString );
193     virtual String  GetText() const;
194 
195     sal_Bool        UseSubTotal( ScRangeList* pRangeList ) const;
196 
197 private:
198     ScPosWnd        aWndPos;
199     ScTextWnd       aTextWindow;
200     ScInputHandler* pInputHdl;
201     SfxBindings*    pBindings;
202     String          aTextOk;
203     String          aTextCancel;
204     String          aTextSum;
205     String          aTextEqual;
206     sal_Bool            bIsOkCancelMode;
207 };
208 
209 //==================================================================
210 
211 class ScInputWindowWrapper : public SfxChildWindow
212 {
213 public:
214             ScInputWindowWrapper( Window*           pParent,
215                                   sal_uInt16            nId,
216                                   SfxBindings*      pBindings,
217                                   SfxChildWinInfo*  pInfo );
218 
219     SFX_DECL_CHILDWINDOW(ScInputWindowWrapper);
220 };
221 
222 
223 #endif
224 
225