| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_svtools.hxx" |
| |
| #define _SV_FIELCTRL_CXX |
| #include <tools/urlobj.hxx> |
| #include <svtools/svtdata.hxx> |
| #include <svtools/filectrl.hxx> |
| #include <filectrl.hrc> |
| |
| // ======================================================================= |
| |
| FileControl::FileControl( Window* pParent, WinBits nStyle, FileControlMode nFlags ) : |
| Window( pParent, nStyle|WB_DIALOGCONTROL ), |
| maEdit( this, (nStyle&(~WB_BORDER))|WB_NOTABSTOP ), |
| maButton( this, (nStyle&(~WB_BORDER))|WB_NOLIGHTBORDER|WB_NOPOINTERFOCUS|WB_NOTABSTOP ), |
| maButtonText( SvtResId( STR_FILECTRL_BUTTONTEXT ) ), |
| mnFlags( nFlags ), |
| mnInternalFlags( FILECTRL_ORIGINALBUTTONTEXT ) |
| { |
| maButton.SetClickHdl( LINK( this, FileControl, ButtonHdl ) ); |
| mbOpenDlg = sal_True; |
| |
| maButton.Show(); |
| maEdit.Show(); |
| |
| SetCompoundControl( sal_True ); |
| |
| SetStyle( ImplInitStyle( GetStyle() ) ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| WinBits FileControl::ImplInitStyle( WinBits nStyle ) |
| { |
| if ( !( nStyle & WB_NOTABSTOP ) ) |
| { |
| maEdit.SetStyle( (maEdit.GetStyle()|WB_TABSTOP)&(~WB_NOTABSTOP) ); |
| maButton.SetStyle( (maButton.GetStyle()|WB_TABSTOP)&(~WB_NOTABSTOP) ); |
| } |
| else |
| { |
| maEdit.SetStyle( (maEdit.GetStyle()|WB_NOTABSTOP)&(~WB_TABSTOP) ); |
| maButton.SetStyle( (maButton.GetStyle()|WB_NOTABSTOP)&(~WB_TABSTOP) ); |
| } |
| |
| const WinBits nAlignmentStyle = ( WB_TOP | WB_VCENTER | WB_BOTTOM ); |
| maEdit.SetStyle( ( maEdit.GetStyle() & ~nAlignmentStyle ) | ( nStyle & nAlignmentStyle ) ); |
| |
| if ( !(nStyle & WB_NOGROUP) ) |
| nStyle |= WB_GROUP; |
| |
| if ( !(nStyle & WB_NOBORDER ) ) |
| nStyle |= WB_BORDER; |
| |
| nStyle &= ~WB_TABSTOP; |
| |
| return nStyle; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| FileControl::~FileControl() |
| { |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::SetText( const XubString& rStr ) |
| { |
| maEdit.SetText( rStr ); |
| if ( mnFlags & FILECTRL_RESIZEBUTTONBYPATHLEN ) |
| Resize(); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| XubString FileControl::GetText() const |
| { |
| return maEdit.GetText(); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::StateChanged( StateChangedType nType ) |
| { |
| if ( nType == STATE_CHANGE_ENABLE ) |
| { |
| maEdit.Enable( IsEnabled() ); |
| maButton.Enable( IsEnabled() ); |
| } |
| else if ( nType == STATE_CHANGE_ZOOM ) |
| { |
| GetEdit().SetZoom( GetZoom() ); |
| GetButton().SetZoom( GetZoom() ); |
| } |
| else if ( nType == STATE_CHANGE_STYLE ) |
| { |
| SetStyle( ImplInitStyle( GetStyle() ) ); |
| } |
| else if ( nType == STATE_CHANGE_CONTROLFONT ) |
| { |
| GetEdit().SetControlFont( GetControlFont() ); |
| // Fuer den Button nur die Hoehe uebernehmen, weil in |
| // HTML immer Courier eingestellt wird. |
| Font aFont = GetButton().GetControlFont(); |
| aFont.SetSize( GetControlFont().GetSize() ); |
| GetButton().SetControlFont( aFont ); |
| } |
| else if ( nType == STATE_CHANGE_CONTROLFOREGROUND ) |
| { |
| GetEdit().SetControlForeground( GetControlForeground() ); |
| GetButton().SetControlForeground( GetControlForeground() ); |
| } |
| else if ( nType == STATE_CHANGE_CONTROLBACKGROUND ) |
| { |
| GetEdit().SetControlBackground( GetControlBackground() ); |
| GetButton().SetControlBackground( GetControlBackground() ); |
| } |
| Window::StateChanged( nType ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::Resize() |
| { |
| static long ButtonBorder = 10; |
| |
| if( mnInternalFlags & FILECTRL_INRESIZE ) |
| return; |
| mnInternalFlags |= FILECTRL_INRESIZE;//InResize = sal_True |
| |
| Size aOutSz = GetOutputSizePixel(); |
| long nButtonTextWidth = maButton.GetTextWidth( maButtonText ); |
| if ( ((mnInternalFlags & FILECTRL_ORIGINALBUTTONTEXT) == 0) || |
| ( nButtonTextWidth < aOutSz.Width()/3 && |
| ( mnFlags & FILECTRL_RESIZEBUTTONBYPATHLEN |
| ? ( maEdit.GetTextWidth( maEdit.GetText() ) |
| <= aOutSz.Width() - nButtonTextWidth - ButtonBorder ) |
| : sal_True ) ) |
| ) |
| { |
| maButton.SetText( maButtonText ); |
| } |
| else |
| { |
| XubString aSmallText( RTL_CONSTASCII_USTRINGPARAM( "..." ) ); |
| maButton.SetText( aSmallText ); |
| nButtonTextWidth = maButton.GetTextWidth( aSmallText ); |
| } |
| |
| long nButtonWidth = nButtonTextWidth+ButtonBorder; |
| maEdit.SetPosSizePixel( 0, 0, aOutSz.Width()-nButtonWidth, aOutSz.Height() ); |
| maButton.SetPosSizePixel( aOutSz.Width()-nButtonWidth, 0, nButtonWidth, aOutSz.Height() ); |
| |
| mnInternalFlags &= ~FILECTRL_INRESIZE; //InResize = sal_False |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| IMPL_LINK( FileControl, ButtonHdl, PushButton*, EMPTYARG ) |
| { |
| ImplBrowseFile( ); |
| |
| return 0; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::GetFocus() |
| { |
| maEdit.GrabFocus(); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) |
| { |
| WinBits nOldEditStyle = GetEdit().GetStyle(); |
| if ( GetStyle() & WB_BORDER ) |
| GetEdit().SetStyle( nOldEditStyle|WB_BORDER ); |
| GetEdit().Draw( pDev, rPos, rSize, nFlags ); |
| if ( GetStyle() & WB_BORDER ) |
| GetEdit().SetStyle( nOldEditStyle ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::SetButtonText( const XubString& rStr ) |
| { |
| mnInternalFlags &= ~FILECTRL_ORIGINALBUTTONTEXT; |
| maButtonText = rStr; |
| Resize(); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void FileControl::ResetButtonText() |
| { |
| mnInternalFlags |= FILECTRL_ORIGINALBUTTONTEXT; |
| maButtonText = XubString( SvtResId( STR_FILECTRL_BUTTONTEXT ) ); |
| Resize(); |
| } |
| |
| |