Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #ifndef INCLUDED_STARMATH_INC_DIALOG_HXX
20 : #define INCLUDED_STARMATH_INC_DIALOG_HXX
21 :
22 : #include <vcl/image.hxx>
23 : #include <vcl/dialog.hxx>
24 : #include <vcl/fixed.hxx>
25 : #include <vcl/button.hxx>
26 : #include <vcl/layout.hxx>
27 : #include <sfx2/tabdlg.hxx>
28 : #include <vcl/combobox.hxx>
29 : #include <svx/charmap.hxx>
30 : #include <sfx2/basedlgs.hxx>
31 : #include <vcl/field.hxx>
32 : #include <vcl/menubtn.hxx>
33 : #include <vcl/scrbar.hxx>
34 : #include <vcl/ctrl.hxx>
35 : #include <vcl/menu.hxx>
36 : #include <vcl/outdev.hxx>
37 : #include <svtools/ctrlbox.hxx>
38 : #include <svtools/ctrltool.hxx>
39 : #include "utility.hxx"
40 : #include "format.hxx"
41 : #include "symbol.hxx"
42 : #include <memory>
43 :
44 : class SubsetMap;
45 : #define CATEGORY_NONE 0xFFFF
46 :
47 : /**************************************************************************/
48 :
49 : void SetFontStyle(const OUString &rStyleName, vcl::Font &rFont);
50 :
51 : /**************************************************************************/
52 :
53 : class SmPrintOptionsTabPage : public SfxTabPage
54 : {
55 : VclPtr<CheckBox> m_pTitle;
56 : VclPtr<CheckBox> m_pText;
57 : VclPtr<CheckBox> m_pFrame;
58 : VclPtr<RadioButton> m_pSizeNormal;
59 : VclPtr<RadioButton> m_pSizeScaled;
60 : VclPtr<RadioButton> m_pSizeZoomed;
61 : VclPtr<MetricField> m_pZoom;
62 : VclPtr<CheckBox> m_pNoRightSpaces;
63 : VclPtr<CheckBox> m_pSaveOnlyUsedSymbols;
64 :
65 : DECL_LINK(SizeButtonClickHdl, Button *);
66 :
67 : virtual bool FillItemSet(SfxItemSet* rSet) SAL_OVERRIDE;
68 : virtual void Reset(const SfxItemSet* rSet) SAL_OVERRIDE;
69 :
70 : public:
71 : static VclPtr<SfxTabPage> Create(vcl::Window *pWindow, const SfxItemSet &rSet);
72 :
73 : SmPrintOptionsTabPage(vcl::Window *pParent, const SfxItemSet &rOptions);
74 : virtual ~SmPrintOptionsTabPage();
75 : virtual void dispose() SAL_OVERRIDE;
76 : };
77 :
78 : /**************************************************************************/
79 :
80 0 : class SmShowFont : public vcl::Window
81 : {
82 : virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) SAL_OVERRIDE;
83 :
84 : vcl::Font maFont;
85 :
86 : public:
87 0 : SmShowFont(vcl::Window *pParent, WinBits nStyle)
88 0 : : Window(pParent, nStyle)
89 : {
90 0 : }
91 : virtual Size GetOptimalSize() const SAL_OVERRIDE;
92 : void SetFont(const vcl::Font& rFont);
93 : };
94 :
95 : class SmFontDialog : public ModalDialog
96 : {
97 : VclPtr<ComboBox> m_pFontBox;
98 : VclPtr<VclContainer> m_pAttrFrame;
99 : VclPtr<CheckBox> m_pBoldCheckBox;
100 : VclPtr<CheckBox> m_pItalicCheckBox;
101 : VclPtr<SmShowFont> m_pShowFont;
102 :
103 : vcl::Font maFont;
104 :
105 : DECL_LINK(FontSelectHdl, ComboBox *);
106 : DECL_LINK(FontModifyHdl, ComboBox *);
107 : DECL_LINK(AttrChangeHdl, CheckBox *);
108 :
109 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
110 :
111 : public:
112 : SmFontDialog(vcl::Window * pParent, OutputDevice *pFntListDevice, bool bHideCheckboxes);
113 : virtual ~SmFontDialog();
114 : virtual void dispose() SAL_OVERRIDE;
115 :
116 0 : const vcl::Font& GetFont() const
117 : {
118 0 : return maFont;
119 : }
120 : void SetFont(const vcl::Font &rFont);
121 : };
122 :
123 : /**************************************************************************/
124 :
125 : class SmFontSizeDialog : public ModalDialog
126 : {
127 : VclPtr<MetricField> m_pBaseSize;
128 : VclPtr<MetricField> m_pTextSize;
129 : VclPtr<MetricField> m_pIndexSize;
130 : VclPtr<MetricField> m_pFunctionSize;
131 : VclPtr<MetricField> m_pOperatorSize;
132 : VclPtr<MetricField> m_pBorderSize;
133 : VclPtr<PushButton> m_pDefaultButton;
134 :
135 : DECL_LINK(DefaultButtonClickHdl, Button *);
136 :
137 : public:
138 : SmFontSizeDialog(vcl::Window *pParent);
139 : virtual ~SmFontSizeDialog();
140 : virtual void dispose() SAL_OVERRIDE;
141 :
142 : void ReadFrom(const SmFormat &rFormat);
143 : void WriteTo (SmFormat &rFormat) const;
144 : };
145 :
146 : /**************************************************************************/
147 :
148 : class SmFontTypeDialog : public ModalDialog
149 : {
150 : VclPtr<SmFontPickListBox> m_pVariableFont;
151 : VclPtr<SmFontPickListBox> m_pFunctionFont;
152 : VclPtr<SmFontPickListBox> m_pNumberFont;
153 : VclPtr<SmFontPickListBox> m_pTextFont;
154 : VclPtr<SmFontPickListBox> m_pSerifFont;
155 : VclPtr<SmFontPickListBox> m_pSansFont;
156 : VclPtr<SmFontPickListBox> m_pFixedFont;
157 : VclPtr<MenuButton> m_pMenuButton;
158 : VclPtr<PushButton> m_pDefaultButton;
159 :
160 : VclPtr<OutputDevice> pFontListDev;
161 :
162 : DECL_LINK(MenuSelectHdl, Menu *);
163 : DECL_LINK(DefaultButtonClickHdl, Button *);
164 : DECL_LINK(HelpButtonClickHdl, Button *);
165 :
166 : public:
167 : SmFontTypeDialog(vcl::Window *pParent, OutputDevice *pFntListDevice);
168 : virtual ~SmFontTypeDialog();
169 : virtual void dispose() SAL_OVERRIDE;
170 :
171 : void ReadFrom(const SmFormat &rFormat);
172 : void WriteTo (SmFormat &rFormat) const;
173 : };
174 :
175 : /**************************************************************************/
176 :
177 : #define NOCATEGORIES 10
178 :
179 : class SmCategoryDesc
180 : {
181 : OUString Name;
182 : OUString *Strings[4];
183 : Image *Graphics[4]; /* regular bitmaps */
184 : sal_uInt16 Minimum[4];
185 : sal_uInt16 Maximum[4];
186 : sal_uInt16 Value[4];
187 :
188 : public:
189 : SmCategoryDesc(VclBuilderContainer& rBuilder, sal_uInt16 nCategoryIdx);
190 : ~SmCategoryDesc();
191 :
192 0 : const OUString& GetName() const { return Name; }
193 0 : const OUString* GetString(sal_uInt16 Index) const { return Strings[Index]; }
194 0 : sal_uInt16 GetMinimum(sal_uInt16 Index) { return Minimum[Index]; }
195 0 : sal_uInt16 GetMaximum(sal_uInt16 Index) { return Maximum[Index]; }
196 0 : sal_uInt16 GetValue(sal_uInt16 Index) const { return Value[Index]; }
197 0 : void SetValue(sal_uInt16 Index, sal_uInt16 nVal) { Value[Index] = nVal;}
198 :
199 0 : const Image * GetGraphic(sal_uInt16 Index) const
200 : {
201 0 : return Graphics[Index];
202 : }
203 : };
204 :
205 :
206 : class SmDistanceDialog : public ModalDialog
207 : {
208 : VclPtr<VclFrame> m_pFrame;
209 : VclPtr<FixedText> m_pFixedText1;
210 : VclPtr<MetricField> m_pMetricField1;
211 : VclPtr<FixedText> m_pFixedText2;
212 : VclPtr<MetricField> m_pMetricField2;
213 : VclPtr<FixedText> m_pFixedText3;
214 : VclPtr<MetricField> m_pMetricField3;
215 : VclPtr<CheckBox> m_pCheckBox1;
216 : VclPtr<FixedText> m_pFixedText4;
217 : VclPtr<MetricField> m_pMetricField4;
218 : VclPtr<MenuButton> m_pMenuButton;
219 : VclPtr<PushButton> m_pDefaultButton;
220 : VclPtr<FixedImage> m_pBitmap;
221 :
222 : SmCategoryDesc *Categories[NOCATEGORIES];
223 : sal_uInt16 nActiveCategory;
224 : bool bScaleAllBrackets;
225 :
226 : DECL_LINK(GetFocusHdl, Control *);
227 : DECL_LINK(MenuSelectHdl, Menu *);
228 : DECL_LINK(DefaultButtonClickHdl, Button *);
229 : DECL_LINK(CheckBoxClickHdl, CheckBox *);
230 :
231 : using Window::SetHelpId;
232 : static void SetHelpId(MetricField &rField, const OString& sHelpId);
233 : void SetCategory(sal_uInt16 Category);
234 :
235 : public:
236 : SmDistanceDialog(vcl::Window *pParent);
237 : virtual ~SmDistanceDialog();
238 : virtual void dispose() SAL_OVERRIDE;
239 :
240 : void ReadFrom(const SmFormat &rFormat);
241 : void WriteTo (SmFormat &rFormat) /*const*/;
242 :
243 : // Window
244 : virtual void DataChanged( const DataChangedEvent &rEvt ) SAL_OVERRIDE;
245 : };
246 :
247 :
248 : /**************************************************************************/
249 :
250 :
251 : class SmAlignDialog : public ModalDialog
252 : {
253 : VclPtr<RadioButton> m_pLeft;
254 : VclPtr<RadioButton> m_pCenter;
255 : VclPtr<RadioButton> m_pRight;
256 : VclPtr<PushButton> m_pDefaultButton;
257 :
258 : DECL_LINK(DefaultButtonClickHdl, Button *);
259 :
260 : public:
261 : SmAlignDialog(vcl::Window *pParent);
262 : virtual ~SmAlignDialog();
263 : virtual void dispose() SAL_OVERRIDE;
264 :
265 : void ReadFrom(const SmFormat &rFormat);
266 : void WriteTo (SmFormat &rFormat) const;
267 : };
268 :
269 : /**************************************************************************/
270 :
271 : class SmShowSymbolSetWindow : public Control
272 : {
273 : VclPtr<ScrollBar> m_pVScrollBar;
274 : SymbolPtrVec_t aSymbolSet;
275 : Link<> aSelectHdlLink;
276 : Link<> aDblClickHdlLink;
277 : long nLen;
278 : long nRows, nColumns;
279 : long nXOffset, nYOffset;
280 : sal_uInt16 nSelectSymbol;
281 :
282 : void SetScrollBarRange();
283 : Point OffsetPoint(const Point &rPoint) const;
284 :
285 : virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) SAL_OVERRIDE;
286 : virtual void MouseButtonDown(const MouseEvent& rMEvt) SAL_OVERRIDE;
287 : virtual void KeyInput(const KeyEvent& rKEvt) SAL_OVERRIDE;
288 : virtual void Resize() SAL_OVERRIDE;
289 : virtual Size GetOptimalSize() const SAL_OVERRIDE;
290 :
291 : DECL_LINK( ScrollHdl, ScrollBar* );
292 : public:
293 : SmShowSymbolSetWindow(vcl::Window *pParent, WinBits nStyle);
294 : virtual ~SmShowSymbolSetWindow();
295 : virtual void dispose() SAL_OVERRIDE;
296 : void setScrollbar(ScrollBar *pVScrollBar);
297 : void calccols();
298 : void SelectSymbol(sal_uInt16 nSymbol);
299 0 : sal_uInt16 GetSelectSymbol() const { return nSelectSymbol; }
300 : void SetSymbolSet(const SymbolPtrVec_t& rSymbolSet);
301 0 : void SetSelectHdl(const Link<>& rLink) { aSelectHdlLink = rLink; }
302 0 : void SetDblClickHdl(const Link<>& rLink) { aDblClickHdlLink = rLink; }
303 : };
304 :
305 : class SmShowSymbolSet : public VclHBox
306 : {
307 : VclPtr<SmShowSymbolSetWindow> aSymbolWindow;
308 : VclPtr<ScrollBar> aVScrollBar;
309 :
310 : public:
311 : SmShowSymbolSet(vcl::Window *pParent);
312 : virtual ~SmShowSymbolSet();
313 : virtual void dispose() SAL_OVERRIDE;
314 :
315 0 : void SetSymbolSet(const SymbolPtrVec_t& rSymbolSet) { aSymbolWindow->SetSymbolSet(rSymbolSet); }
316 :
317 0 : void SelectSymbol(sal_uInt16 nSymbol) { aSymbolWindow->SelectSymbol(nSymbol); }
318 0 : sal_uInt16 GetSelectSymbol() const { return aSymbolWindow->GetSelectSymbol(); }
319 :
320 0 : void SetSelectHdl(const Link<>& rLink) { aSymbolWindow->SetSelectHdl(rLink); }
321 0 : void SetDblClickHdl(const Link<>& rLink) { aSymbolWindow->SetDblClickHdl(rLink); }
322 : };
323 :
324 :
325 :
326 0 : class SmShowSymbol : public Control
327 : {
328 : Link<> aDblClickHdlLink;
329 :
330 : virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) SAL_OVERRIDE;
331 : virtual void MouseButtonDown(const MouseEvent& rMEvt) SAL_OVERRIDE;
332 : virtual void Resize() SAL_OVERRIDE;
333 :
334 : void setFontSize(vcl::Font &rFont) const;
335 :
336 : public:
337 0 : SmShowSymbol(vcl::Window *pParent, WinBits nStyle)
338 0 : : Control(pParent, nStyle)
339 : {
340 0 : }
341 :
342 : void SetSymbol(const SmSym *pSymbol);
343 0 : void SetDblClickHdl(const Link<> &rLink) { aDblClickHdlLink = rLink; }
344 : };
345 :
346 :
347 :
348 : class SmSymDefineDialog;
349 :
350 : class SmSymbolDialog : public ModalDialog
351 : {
352 : VclPtr<ListBox> m_pSymbolSets;
353 : VclPtr<SmShowSymbolSet> m_pSymbolSetDisplay;
354 : VclPtr<FixedText> m_pSymbolName;
355 : VclPtr<SmShowSymbol> m_pSymbolDisplay;
356 : VclPtr<PushButton> m_pGetBtn;
357 : VclPtr<PushButton> m_pEditBtn;
358 :
359 : SmViewShell &rViewSh;
360 : SmSymbolManager &rSymbolMgr;
361 :
362 : OUString aSymbolSetName;
363 : SymbolPtrVec_t aSymbolSet;
364 :
365 : VclPtr<OutputDevice> pFontListDev;
366 :
367 : DECL_LINK(SymbolSetChangeHdl, void*);
368 : DECL_LINK(SymbolChangeHdl, void*);
369 : DECL_LINK(SymbolDblClickHdl, void*);
370 : DECL_LINK(EditClickHdl, void*);
371 : DECL_LINK(GetClickHdl, void*);
372 :
373 : void FillSymbolSets(bool bDeleteText = true);
374 : void SetSymbolSetManager(SmSymbolManager &rMgr);
375 : const SmSym *GetSymbol() const;
376 :
377 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
378 :
379 : public:
380 : SmSymbolDialog(vcl::Window * pParent, OutputDevice *pFntListDevice,
381 : SmSymbolManager &rSymbolMgr, SmViewShell &rViewShell);
382 : virtual ~SmSymbolDialog();
383 : virtual void dispose() SAL_OVERRIDE;
384 :
385 : bool SelectSymbolSet(const OUString &rSymbolSetName);
386 : void SelectSymbol(sal_uInt16 nSymbolPos);
387 0 : sal_uInt16 GetSelectedSymbol() const { return m_pSymbolSetDisplay->GetSelectSymbol(); }
388 : };
389 :
390 :
391 :
392 0 : class SmShowChar : public Control
393 : {
394 : virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) SAL_OVERRIDE;
395 : virtual void Resize() SAL_OVERRIDE;
396 :
397 : public:
398 0 : SmShowChar(vcl::Window *pParent, WinBits nStyle)
399 0 : : Control(pParent, nStyle)
400 : {
401 0 : }
402 :
403 : void SetSymbol( const SmSym *pSym );
404 : void SetSymbol( sal_UCS4 cChar, const vcl::Font &rFont );
405 : };
406 :
407 :
408 :
409 : class SmSymDefineDialog : public ModalDialog
410 : {
411 : VclPtr<ComboBox> pOldSymbols;
412 : VclPtr<ComboBox> pOldSymbolSets;
413 : VclPtr<SvxShowCharSet> pCharsetDisplay;
414 : VclPtr<ComboBox> pSymbols;
415 : VclPtr<ComboBox> pSymbolSets;
416 : VclPtr<ListBox> pFonts;
417 : VclPtr<ListBox> pFontsSubsetLB;
418 : VclPtr<FontStyleBox> pStyles;
419 : VclPtr<FixedText> pOldSymbolName;
420 : VclPtr<SmShowChar> pOldSymbolDisplay;
421 : VclPtr<FixedText> pOldSymbolSetName;
422 : VclPtr<FixedText> pSymbolName;
423 : VclPtr<SmShowChar> pSymbolDisplay;
424 : VclPtr<FixedText> pSymbolSetName;
425 : VclPtr<PushButton> pAddBtn;
426 : VclPtr<PushButton> pChangeBtn;
427 : VclPtr<PushButton> pDeleteBtn;
428 :
429 : SmSymbolManager aSymbolMgrCopy,
430 : &rSymbolMgr;
431 : std::unique_ptr<SmSym> pOrigSymbol;
432 :
433 : std::unique_ptr<SubsetMap> pSubsetMap;
434 : FontList *pFontList;
435 :
436 : DECL_LINK(OldSymbolChangeHdl, ComboBox *);
437 : DECL_LINK(OldSymbolSetChangeHdl, ComboBox *);
438 : DECL_LINK(ModifyHdl, ComboBox *);
439 : DECL_LINK(FontChangeHdl, ListBox *);
440 : DECL_LINK(SubsetChangeHdl, ListBox*);
441 : DECL_LINK(StyleChangeHdl, ComboBox *);
442 : DECL_LINK(CharHighlightHdl, void *);
443 : DECL_LINK(AddClickHdl, Button *);
444 : DECL_LINK(ChangeClickHdl, Button *);
445 : DECL_LINK(DeleteClickHdl, Button *);
446 :
447 : void FillSymbols(ComboBox &rComboBox, bool bDeleteText = true);
448 : void FillSymbolSets(ComboBox &rComboBox, bool bDeleteText = true);
449 : void FillFonts(bool bDeleteText = true);
450 : void FillStyles(bool bDeleteText = true);
451 :
452 : void SetSymbolSetManager(const SmSymbolManager &rMgr);
453 : void SetFont(const OUString &rFontName, const OUString &rStyleName);
454 : void SetOrigSymbol(const SmSym *pSymbol, const OUString &rSymbolSetName);
455 : void UpdateButtons();
456 :
457 : bool SelectSymbolSet(ComboBox &rComboBox, const OUString &rSymbolSetName,
458 : bool bDeleteText);
459 : bool SelectSymbol(ComboBox &rComboBox, const OUString &rSymbolName,
460 : bool bDeleteText);
461 : bool SelectFont(const OUString &rFontName, bool bApplyFont);
462 : bool SelectStyle(const OUString &rStyleName, bool bApplyFont);
463 :
464 : SmSym * GetSymbol(const ComboBox &rComboBox);
465 : const SmSym * GetSymbol(const ComboBox &rComboBox) const
466 : {
467 : return const_cast<SmSymDefineDialog *>(this)->GetSymbol(rComboBox);
468 : }
469 :
470 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
471 :
472 : public:
473 : SmSymDefineDialog(vcl::Window *pParent, OutputDevice *pFntListDevice, SmSymbolManager &rMgr);
474 : virtual ~SmSymDefineDialog();
475 : virtual void dispose() SAL_OVERRIDE;
476 :
477 : using OutputDevice::SetFont;
478 :
479 : // Dialog
480 : virtual short Execute() SAL_OVERRIDE;
481 :
482 0 : bool SelectOldSymbolSet(const OUString &rSymbolSetName)
483 : {
484 0 : return SelectSymbolSet(*pOldSymbolSets, rSymbolSetName, false);
485 : }
486 :
487 0 : bool SelectOldSymbol(const OUString &rSymbolName)
488 : {
489 0 : return SelectSymbol(*pOldSymbols, rSymbolName, false);
490 : }
491 :
492 0 : bool SelectSymbolSet(const OUString &rSymbolSetName)
493 : {
494 0 : return SelectSymbolSet(*pSymbolSets, rSymbolSetName, false);
495 : }
496 :
497 0 : bool SelectSymbol(const OUString &rSymbolName)
498 : {
499 0 : return SelectSymbol(*pSymbols, rSymbolName, false);
500 : }
501 :
502 0 : bool SelectFont(const OUString &rFontName) { return SelectFont(rFontName, true); }
503 0 : bool SelectStyle(const OUString &rStyleName) { return SelectStyle(rStyleName, true); };
504 : void SelectChar(sal_Unicode cChar);
505 : };
506 :
507 :
508 :
509 : #endif
510 :
511 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|