xref: /trunk/main/svx/source/mnuctrls/fntctl.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_svx.hxx"
30 
31 #include <string> // HACK: prevent conflict between STLPORT and Workshop headern
32 #include <svtools/stdmenu.hxx>
33 #include <sfx2/app.hxx>
34 #include <sfx2/objsh.hxx>
35 #include <sfx2/dispatch.hxx>
36 
37 #include <svx/fntctl.hxx>       //
38 #include <svx/svxids.hrc>
39 #include "editeng/flstitem.hxx"
40 #include "editeng/fontitem.hxx"
41 
42 // STATIC DATA -----------------------------------------------------------
43 
44 SFX_IMPL_MENU_CONTROL(SvxFontMenuControl, SvxFontItem);
45 
46 //--------------------------------------------------------------------
47 
48 /*  [Beschreibung]
49 
50     Ctor; setzt den Select-Handler am Men"u und tr"agt das Men"u
51     in seinen Parent ein.
52 */
53 
54 SvxFontMenuControl::SvxFontMenuControl
55 (
56     sal_uInt16          _nId,
57     Menu&           rMenu,
58     SfxBindings&    rBindings
59 ) :
60     pMenu   ( new FontNameMenu ),
61     rParent ( rMenu )
62 {
63     rMenu.SetPopupMenu( _nId, pMenu );
64     pMenu->SetSelectHdl( LINK( this, SvxFontMenuControl, MenuSelect ) );
65     StartListening( rBindings );
66     FillMenu();
67 }
68 
69 //--------------------------------------------------------------------
70 
71 /*  [Beschreibung]
72 
73     F"ullt das Men"u mit den aktuellen Fonts aus der Fontlist
74     der DocumentShell.
75 */
76 
77 void SvxFontMenuControl::FillMenu()
78 {
79     SfxObjectShell *pDoc = SfxObjectShell::Current();
80 
81     if ( pDoc )
82     {
83         const SvxFontListItem* pFonts =
84             (const SvxFontListItem*)pDoc->GetItem( SID_ATTR_CHAR_FONTLIST );
85         const FontList* pList = pFonts ? pFonts->GetFontList(): 0;
86         DBG_ASSERT( pList, "Kein Fonts gefunden" );
87         pMenu->Fill( pList );
88     }
89 }
90 
91 //--------------------------------------------------------------------
92 
93 /*  [Beschreibung]
94 
95     Statusbenachrichtigung;
96     f"ullt ggf. das Men"u mit den aktuellen Fonts aus der Fontlist
97     der DocumentShell.
98     Ist die Funktionalit"at disabled, wird der entsprechende
99     Men"ueintrag im Parentmen"u disabled, andernfalls wird er enabled.
100     Der aktuelle Font wird mit einer Checkmark versehen.
101 */
102 
103 void SvxFontMenuControl::StateChanged(
104 
105     sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
106 
107 {
108     rParent.EnableItem( GetId(), SFX_ITEM_DISABLED != eState );
109 
110     if ( SFX_ITEM_AVAILABLE == eState )
111     {
112         if ( !pMenu->GetItemCount() )
113             FillMenu();
114         const SvxFontItem* pFontItem = PTR_CAST( SvxFontItem, pState );
115         String aFont;
116 
117         if ( pFontItem )
118             aFont = pFontItem->GetFamilyName();
119         pMenu->SetCurName( aFont );
120     }
121 }
122 
123 //--------------------------------------------------------------------
124 
125 /*  [Beschreibung]
126 
127     Statusbenachrichtigung "uber Bindings;  bei DOCCHANGED
128     wird das Men"u mit den aktuellen Fonts aus der Fontlist
129     der DocumentShell gef"ullt.
130 */
131 
132 void SvxFontMenuControl::Notify( SfxBroadcaster&, const SfxHint& rHint )
133 {
134     if ( rHint.Type() != TYPE(SfxSimpleHint) &&
135          ( (SfxSimpleHint&)rHint ).GetId() == SFX_HINT_DOCCHANGED )
136         FillMenu();
137 }
138 
139 //--------------------------------------------------------------------
140 
141 /*  [Beschreibung]
142 
143     Select-Handler des Men"us; der Name des selektierten Fonts
144     wird in einem SvxFontItem verschickt. Das F"ullen mit den
145     weiteren Fontinformationen mu\s durch die Applikation geschehen.
146 */
147 
148 IMPL_LINK_INLINE_START( SvxFontMenuControl, MenuSelect, FontNameMenu *, pMen )
149 {
150     SvxFontItem aItem( GetId() );
151     aItem.SetFamilyName(pMen->GetCurName());
152     GetBindings().GetDispatcher()->Execute( GetId(), SFX_CALLMODE_RECORD, &aItem, 0L );
153     return 0;
154 }
155 IMPL_LINK_INLINE_END( SvxFontMenuControl, MenuSelect, FontNameMenu *, pMen )
156 
157 //--------------------------------------------------------------------
158 
159 /*  [Beschreibung]
160 
161     Dtor; gibt das Men"u frei.
162 */
163 
164 SvxFontMenuControl::~SvxFontMenuControl()
165 {
166     delete pMenu;
167 }
168 
169 //--------------------------------------------------------------------
170 
171 /*  [Beschreibung]
172 
173     Gibt das Men"u zur"uck
174 */
175 
176 PopupMenu* SvxFontMenuControl::GetPopup() const
177 {
178     return pMenu;
179 }
180 
181 
182 
183