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