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 #include "svx/fontlb.hxx" 31 #include <vcl/svapp.hxx> 32 33 // ============================================================================ 34 35 DBG_NAME( SvLBoxFontString ); 36 37 SvLBoxFontString::SvLBoxFontString() : 38 SvLBoxString() 39 { 40 DBG_CTOR( SvLBoxFontString, 0 ); 41 } 42 43 SvLBoxFontString::SvLBoxFontString( 44 SvLBoxEntry* pEntry, sal_uInt16 nFlags, const XubString& rString, 45 const Font& rFont, const Color* pColor ) : 46 SvLBoxString( pEntry, nFlags, rString ), 47 maFont( rFont ), 48 mbUseColor( pColor != NULL ) 49 { 50 DBG_CTOR( SvLBoxFontString, 0 ); 51 SetText( pEntry, rString ); 52 if( pColor ) 53 maFont.SetColor( *pColor ); 54 } 55 56 SvLBoxFontString::~SvLBoxFontString() 57 { 58 DBG_DTOR( SvLBoxFontString, 0 ); 59 } 60 61 62 SvLBoxItem* SvLBoxFontString::Create() const 63 { 64 DBG_CHKTHIS( SvLBoxFontString, 0 ); 65 return new SvLBoxFontString; 66 } 67 68 void SvLBoxFontString::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 nFlags, SvLBoxEntry* pEntry ) 69 { 70 DBG_CHKTHIS( SvLBoxFontString, 0 ); 71 Font aOldFont( rDev.GetFont() ); 72 Font aNewFont( maFont ); 73 bool bSel = (nFlags & SVLISTENTRYFLAG_SELECTED) != 0; 74 // if( !mbUseColor ) // selection gets font color, if available 75 if( !mbUseColor || bSel ) // selection always gets highlight color 76 { 77 const StyleSettings& rSett = Application::GetSettings().GetStyleSettings(); 78 aNewFont.SetColor( bSel ? rSett.GetHighlightTextColor() : rSett.GetFieldTextColor() ); 79 } 80 81 rDev.SetFont( aNewFont ); 82 SvLBoxString::Paint( rPos, rDev, nFlags, pEntry ); 83 rDev.SetFont( aOldFont ); 84 } 85 86 void SvLBoxFontString::InitViewData( SvLBox* pView, SvLBoxEntry* pEntry, SvViewDataItem* pViewData ) 87 { 88 DBG_CHKTHIS( SvLBoxFontString, 0 ); 89 Font aOldFont( pView->GetFont() ); 90 pView->SetFont( maFont ); 91 SvLBoxString::InitViewData( pView, pEntry, pViewData); 92 pView->SetFont( aOldFont ); 93 } 94 95 96 // ============================================================================ 97 98 SvxFontListBox::SvxFontListBox( Window* pParent, const ResId& rResId ) : 99 SvTabListBox( pParent, rResId ), 100 maStdFont( GetFont() ), 101 mbUseFont( false ) 102 { 103 maStdFont.SetTransparent( sal_True ); 104 maEntryFont = maStdFont; 105 } 106 107 void SvxFontListBox::InsertFontEntry( const String& rString, const Font& rFont, const Color* pColor ) 108 { 109 mbUseFont = true; // InitEntry() will use maEntryFont 110 maEntryFont = rFont; // font to use in InitEntry() over InsertEntry() 111 mpEntryColor = pColor; // color to use in InitEntry() over InsertEntry() 112 InsertEntry( rString ); 113 mbUseFont = false; 114 } 115 116 void SvxFontListBox::SelectEntryPos( sal_uInt16 nPos, bool bSelect ) 117 { 118 SvLBoxEntry* pEntry = GetEntry( nPos ); 119 if( pEntry ) 120 { 121 Select( pEntry, bSelect ); 122 ShowEntry( pEntry ); 123 } 124 } 125 126 void SvxFontListBox::SetNoSelection() 127 { 128 SelectAll( sal_False, sal_True ); 129 } 130 131 sal_uLong SvxFontListBox::GetSelectEntryPos() const 132 { 133 SvLBoxEntry* pSvLBoxEntry = FirstSelected(); 134 return pSvLBoxEntry ? GetModel()->GetAbsPos( pSvLBoxEntry ) : LIST_APPEND; 135 } 136 137 XubString SvxFontListBox::GetSelectEntry() const 138 { 139 return GetEntryText( GetSelectEntryPos() ); 140 } 141 142 void SvxFontListBox::InitEntry( 143 SvLBoxEntry* pEntry, const XubString& rEntryText, 144 const Image& rCollImg, const Image& rExpImg, 145 SvLBoxButtonKind eButtonKind ) 146 { 147 if( mbUseFont ) 148 { 149 if( nTreeFlags & TREEFLAG_CHKBTN ) 150 pEntry->AddItem( new SvLBoxButton( pEntry, eButtonKind, 0, 151 pCheckButtonData ) ); 152 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, rCollImg, rExpImg, SVLISTENTRYFLAG_EXPANDED ) ); 153 pEntry->AddItem( new SvLBoxFontString( pEntry, 0, rEntryText, maEntryFont, mpEntryColor ) ); 154 } 155 else 156 SvTreeListBox::InitEntry( pEntry, rEntryText, rCollImg, rExpImg, 157 eButtonKind ); 158 } 159 160 #if ENABLE_LAYOUT 161 162 namespace layout 163 { 164 165 SvxFontListBox::~SvxFontListBox () 166 { 167 } 168 169 sal_uInt16 SvxFontListBox::InsertFontEntry (String const& entry, Font const&, Color const*) 170 { 171 return InsertEntry (entry); 172 } 173 174 SvxFontListBox::SvxFontListBox( Context* pParent, const char* pFile) 175 : ListBox( pParent, pFile ) 176 { 177 } 178 179 /*IMPL_IMPL (SvxFontListBox, ListBox); 180 IMPL_CONSTRUCTORS (SvxFontListBox, ListBox, "svxfontlistbox"); 181 IMPL_GET_IMPL (SvxFontListBox); 182 IMPL_GET_WINDOW (SvxFontListBox);*/ 183 184 }; 185 186 #endif 187 188 // ============================================================================ 189 190