1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_BASCTL_SOURCE_INC_BASTYPES_HXX
#define INCLUDED_BASCTL_SOURCE_INC_BASTYPES_HXX
#include "scriptdocument.hxx"
#include "sbxitem.hxx"
#include <svtools/tabbar.hxx>
#include <basic/sbdef.hxx>
#include <vcl/dockwin.hxx>
#include <vcl/weld.hxx>
#include <unordered_map>
class SbModule;
class SfxItemSet;
class SfxRequest;
class SvxSearchItem;
class Printer;
enum class SearchOptionFlags;
class SfxUndoManager;
namespace weld
{
class Widget;
}
namespace basctl
{
class Layout;
class ModulWindow;
class DialogWindow;
#define LINE_SEP_CR 0x0D
#define LINE_SEP 0x0A
// Implementation: baside2b.cxx
sal_Int32 searchEOL( const OUString& rStr, sal_Int32 fromIndex );
// Meaning of bToBeKilled:
// While being in a reschedule-loop, I may not destroy the window.
// It must first break from the reschedule-loop to self-destroy then.
// Does unfortunately not work that way: Destroying Window with living Child!
struct BasicStatus
{
bool bIsRunning : 1;
bool bError : 1;
bool bIsInReschedule : 1;
BasicDebugFlags nBasicFlags;
BasicStatus():
bIsRunning(false),
bError(false),
bIsInReschedule(false),
nBasicFlags(BasicDebugFlags::NONE) { }
};
// basctl::DockingWindow -- special docking window for the Basic IDE
// Not to be confused with ::DockingWindow from vcl.
class DockingWindow : public ::DockingWindow
{
public:
DockingWindow(vcl::Window* pParent, const OUString& rUIXMLDescription, const OString& rID);
DockingWindow(Layout* pParent);
virtual ~DockingWindow() override;
virtual void dispose() override;
void ResizeIfDocking (Point const&, Size const&);
void ResizeIfDocking (Size const&);
Size GetDockingSize () const { return aDockingRect.GetSize(); }
void SetLayoutWindow (Layout*);
public:
void Show (bool = true);
void Hide ();
protected:
virtual bool Docking( const Point& rPos, tools::Rectangle& rRect ) override;
virtual void EndDocking( const tools::Rectangle& rRect, bool bFloatMode ) override;
virtual void ToggleFloatingMode() override;
virtual bool PrepareToggleFloatingMode() override;
virtual void StartDocking() override;
protected:
std::unique_ptr<weld::Builder> m_xBuilder;
VclPtr<vcl::Window> m_xVclContentArea;
std::unique_ptr<weld::Container> m_xContainer;
private:
// the position and the size of the floating window
tools::Rectangle aFloatingRect;
// the position and the size of the docking window
tools::Rectangle aDockingRect;
// the parent layout window (only when docking)
VclPtr<Layout> pLayout;
// > 0: shown, <= 0: hidden, ++ by Show() and -- by Hide()
int nShowCount;
static WinBits const StyleBits;
private:
void DockThis ();
};
// basctl::TabBar
// Not to be confused with ::TabBar from svtools.
class TabBar : public ::TabBar
{
protected:
virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
virtual void Command( const CommandEvent& rCEvt ) override;
virtual TabBarAllowRenamingReturnCode AllowRenaming() override;
virtual void EndRenaming() override;
public:
TabBar (vcl::Window* pParent);
void Sort();
};
enum BasicWindowStatus
{
BASWIN_RUNNINGBASIC = 0x01,
BASWIN_TOBEKILLED = 0x02,
BASWIN_SUSPENDED = 0x04,
BASWIN_INRESCHEDULE = 0x08
};
class EntryDescriptor;
// BaseWindow -- the base of both ModulWindow and DialogWindow.
class BaseWindow : public vcl::Window
{
private:
VclPtr<ScrollBar> pShellHScrollBar;
VclPtr<ScrollBar> pShellVScrollBar;
DECL_LINK( ScrollHdl, ScrollBar*, void );
int nStatus;
ScriptDocument m_aDocument;
OUString m_aLibName;
OUString m_aName;
friend class ModulWindow;
friend class DialogWindow;
protected:
virtual void DoScroll( ScrollBar* pCurScrollBar );
public:
BaseWindow( vcl::Window* pParent, const ScriptDocument& rDocument, const OUString& aLibName, const OUString& aName );
virtual ~BaseWindow() override;
virtual void dispose() override;
void Init();
virtual void DoInit();
virtual void Activating () = 0;
virtual void Deactivating () = 0;
void GrabScrollBars( ScrollBar* pHScroll, ScrollBar* pVScroll );
ScrollBar* GetHScrollBar() const { return pShellHScrollBar; }
ScrollBar* GetVScrollBar() const { return pShellVScrollBar; }
virtual void ExecuteCommand (SfxRequest&);
virtual void ExecuteGlobal (SfxRequest&);
virtual void GetState (SfxItemSet&) = 0;
virtual bool EventNotify( NotifyEvent& rNEvt ) override;
virtual void StoreData();
virtual void UpdateData();
// return number of pages to be printed
virtual sal_Int32 countPages( Printer* pPrinter ) = 0;
// print page
virtual void printPage( sal_Int32 nPage, Printer* pPrinter ) = 0;
virtual OUString GetTitle();
OUString CreateQualifiedName();
virtual EntryDescriptor CreateEntryDescriptor() = 0;
virtual bool IsModified();
virtual bool AllowUndo();
virtual void SetReadOnly (bool bReadOnly);
virtual bool IsReadOnly();
int GetStatus() const { return nStatus; }
void SetStatus(int n) { nStatus = n; }
void AddStatus(int n) { nStatus |= n; }
void ClearStatus(int n) { nStatus &= ~n; }
virtual SfxUndoManager* GetUndoManager ();
virtual SearchOptionFlags GetSearchOptions();
virtual sal_uInt16 StartSearchAndReplace (SvxSearchItem const&, bool bFromStart = false);
virtual void BasicStarted();
virtual void BasicStopped();
bool IsSuspended() const { return nStatus & BASWIN_SUSPENDED; }
const ScriptDocument&
GetDocument() const { return m_aDocument; }
bool IsDocument( const ScriptDocument& rDocument ) const { return rDocument == m_aDocument; }
const OUString& GetLibName() const { return m_aLibName; }
const OUString& GetName() const { return m_aName; }
void SetName( const OUString& aName ) { m_aName = aName; }
virtual void OnNewDocument ();
virtual char const* GetHid () const = 0;
virtual ItemType GetType () const = 0;
void InsertLibInfo () const;
bool Is (ScriptDocument const&, OUString const&, OUString const&, ItemType, bool bFindSuspended);
virtual bool HasActiveEditor () const;
};
class LibInfo
{
public:
class Item;
public:
LibInfo ();
~LibInfo ();
public:
void InsertInfo (ScriptDocument const&, OUString const& rLibName, OUString const& rCurrentName, ItemType eCurrentType);
void RemoveInfoFor (ScriptDocument const&);
Item const* GetInfo (ScriptDocument const&, OUString const& rLibName);
private:
class Key
{
private:
ScriptDocument m_aDocument;
OUString m_aLibName;
public:
Key (ScriptDocument const&, OUString const& rLibName);
public:
bool operator == (Key const&) const;
struct Hash
{
size_t operator () (Key const&) const;
};
public:
const ScriptDocument& GetDocument() const { return m_aDocument; }
};
public:
class Item
{
private:
OUString m_aCurrentName;
ItemType m_eCurrentType;
public:
Item (OUString const& rCurrentName, ItemType eCurrentType);
const OUString& GetCurrentName() const { return m_aCurrentName; }
ItemType GetCurrentType() const { return m_eCurrentType; }
};
private:
typedef std::unordered_map<Key, Item, Key::Hash> Map;
Map m_aMap;
};
void CutLines( OUString& rStr, sal_Int32 nStartLine, sal_Int32 nLines );
OUString CreateMgrAndLibStr( const OUString& rMgrName, const OUString& rLibName );
sal_uInt32 CalcLineCount( SvStream& rStream );
bool QueryReplaceMacro( const OUString& rName, weld::Widget* pParent );
bool QueryDelMacro( const OUString& rName, weld::Widget* pParent );
bool QueryDelDialog( const OUString& rName, weld::Widget* pParent );
bool QueryDelModule( const OUString& rName, weld::Widget* pParent );
bool QueryDelLib( const OUString& rName, bool bRef, weld::Widget* pParent );
bool QueryPassword(weld::Widget* pDialogParent, const css::uno::Reference< css::script::XLibraryContainer >& xLibContainer, const OUString& rLibName, OUString& rPassword, bool bRepeat = false, bool bNewTitle = false);
class ModuleInfoHelper
{
ModuleInfoHelper (const ModuleInfoHelper&) = delete;
ModuleInfoHelper& operator = (const ModuleInfoHelper&) = delete;
public:
static void getObjectName( const css::uno::Reference< css::container::XNameContainer >& rLib, const OUString& rModName, OUString& rObjName );
static sal_Int32 getModuleType( const css::uno::Reference< css::container::XNameContainer >& rLib, const OUString& rModName );
};
} // namespace basctl
#endif // INCLUDED_BASCTL_SOURCE_INC_BASTYPES_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|