| /************************************************************** |
| * |
| * 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_basic.hxx" |
| |
| #ifndef _SV_BUTTON_HXX //autogen |
| #include <vcl/button.hxx> |
| #endif |
| #include <vcl/fixed.hxx> |
| #include <vcl/edit.hxx> |
| #include <vcl/dialog.hxx> |
| #include <vcl/svapp.hxx> |
| #include "runtime.hxx" |
| #include "stdobj.hxx" |
| #include "rtlproto.hxx" |
| |
| class SvRTLInputBox : public ModalDialog |
| { |
| Edit aEdit; |
| OKButton aOk; |
| CancelButton aCancel; |
| FixedText aPromptText; |
| String aText; |
| |
| void PositionDialog( long nXTwips, long nYTwips, const Size& rDlgSize ); |
| void InitButtons( const Size& rDlgSize ); |
| void PositionEdit( const Size& rDlgSize ); |
| void PositionPrompt( const String& rPrompt, const Size& rDlgSize ); |
| DECL_LINK( OkHdl, Button * ); |
| DECL_LINK( CancelHdl, Button * ); |
| |
| public: |
| SvRTLInputBox( Window* pParent, const String& rPrompt, const String& rTitle, |
| const String& rDefault, long nXTwips = -1, long nYTwips = -1 ); |
| String GetText() const { return aText; } |
| }; |
| |
| SvRTLInputBox::SvRTLInputBox( Window* pParent, const String& rPrompt, |
| const String& rTitle, const String& rDefault, |
| long nXTwips, long nYTwips ) : |
| ModalDialog( pParent,WB_3DLOOK | WB_MOVEABLE | WB_CLOSEABLE ), |
| aEdit( this, WB_LEFT | WB_BORDER ), |
| aOk( this ), aCancel( this ), aPromptText( this, WB_WORDBREAK ) |
| { |
| SetMapMode( MapMode( MAP_APPFONT ) ); |
| Size aDlgSizeApp( 280, 80 ); |
| PositionDialog( nXTwips, nYTwips, aDlgSizeApp ); |
| InitButtons( aDlgSizeApp ); |
| PositionEdit( aDlgSizeApp ); |
| PositionPrompt( rPrompt, aDlgSizeApp ); |
| aOk.Show(); |
| aCancel.Show(); |
| aEdit.Show(); |
| aPromptText.Show(); |
| SetText( rTitle ); |
| Font aFont( GetFont()); |
| Color aColor( GetBackground().GetColor() ); |
| aFont.SetFillColor( aColor ); |
| aEdit.SetFont( aFont ); |
| aEdit.SetText( rDefault ); |
| aEdit.SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) ); |
| } |
| |
| void SvRTLInputBox::InitButtons( const Size& rDlgSize ) |
| { |
| aOk.SetSizePixel( LogicToPixel( Size( 45, 15) )); |
| aCancel.SetSizePixel( LogicToPixel( Size( 45, 15) )); |
| Point aPos( rDlgSize.Width()-45-10, 5 ); |
| aOk.SetPosPixel( LogicToPixel( Point(aPos) )); |
| aPos.Y() += 16; |
| aCancel.SetPosPixel( LogicToPixel( Point(aPos) )); |
| aOk.SetClickHdl(LINK(this,SvRTLInputBox, OkHdl)); |
| aCancel.SetClickHdl(LINK(this,SvRTLInputBox,CancelHdl)); |
| } |
| |
| void SvRTLInputBox::PositionDialog(long nXTwips, long nYTwips, const Size& rDlgSize) |
| { |
| SetSizePixel( LogicToPixel(rDlgSize) ); |
| if( nXTwips != -1 && nYTwips != -1 ) |
| { |
| Point aDlgPosApp( nXTwips, nYTwips ); |
| SetPosPixel( LogicToPixel( aDlgPosApp, MAP_TWIP ) ); |
| } |
| } |
| |
| void SvRTLInputBox::PositionEdit( const Size& rDlgSize ) |
| { |
| aEdit.SetPosPixel( LogicToPixel( Point( 5,rDlgSize.Height()-35))); |
| aEdit.SetSizePixel( LogicToPixel( Size(rDlgSize.Width()-15,12))); |
| } |
| |
| |
| void SvRTLInputBox::PositionPrompt(const String& rPrompt,const Size& rDlgSize) |
| { |
| if ( rPrompt.Len() == 0 ) |
| return; |
| String aText_( rPrompt ); |
| aText_.ConvertLineEnd( LINEEND_CR ); |
| aPromptText.SetPosPixel( LogicToPixel(Point(5,5))); |
| aPromptText.SetText( aText_ ); |
| Size aSize( rDlgSize ); |
| aSize.Width() -= 70; |
| aSize.Height() -= 50; |
| aPromptText.SetSizePixel( LogicToPixel(aSize)); |
| } |
| |
| |
| IMPL_LINK_INLINE_START( SvRTLInputBox, OkHdl, Button *, pButton ) |
| { |
| (void)pButton; |
| |
| aText = aEdit.GetText(); |
| EndDialog( 1 ); |
| return 0; |
| } |
| IMPL_LINK_INLINE_END( SvRTLInputBox, OkHdl, Button *, pButton ) |
| |
| IMPL_LINK_INLINE_START( SvRTLInputBox, CancelHdl, Button *, pButton ) |
| { |
| (void)pButton; |
| |
| aText.Erase(); |
| EndDialog( 0 ); |
| return 0; |
| } |
| IMPL_LINK_INLINE_END( SvRTLInputBox, CancelHdl, Button *, pButton ) |
| |
| |
| // ********************************************************************* |
| // ********************************************************************* |
| // ********************************************************************* |
| |
| // Syntax: String InputBox( Prompt, [Title], [Default] [, nXpos, nYpos ] ) |
| |
| RTLFUNC(InputBox) |
| { |
| (void)pBasic; |
| (void)bWrite; |
| |
| sal_uIntPtr nArgCount = rPar.Count(); |
| if ( nArgCount < 2 ) |
| StarBASIC::Error( SbERR_BAD_ARGUMENT ); |
| else |
| { |
| String aTitle; |
| String aDefault; |
| sal_Int32 nX = -1, nY = -1; // zentrieren |
| const String& rPrompt = rPar.Get(1)->GetString(); |
| if ( nArgCount > 2 && !rPar.Get(2)->IsErr() ) |
| aTitle = rPar.Get(2)->GetString(); |
| if ( nArgCount > 3 && !rPar.Get(3)->IsErr() ) |
| aDefault = rPar.Get(3)->GetString(); |
| if ( nArgCount > 4 ) |
| { |
| if ( nArgCount != 6 ) |
| { |
| StarBASIC::Error( SbERR_BAD_ARGUMENT ); |
| return; |
| } |
| nX = rPar.Get(4)->GetLong(); |
| nY = rPar.Get(5)->GetLong(); |
| } |
| SvRTLInputBox *pDlg=new SvRTLInputBox(GetpApp()->GetDefDialogParent(), |
| rPrompt,aTitle,aDefault,nX,nY); |
| pDlg->Execute(); |
| rPar.Get(0)->PutString( pDlg->GetText() ); |
| delete pDlg; |
| } |
| } |
| |
| |
| |