blob: a642a3009f19f194fa5125d223cf813bf191134a [file] [log] [blame]
/**************************************************************
*
* 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_cui.hxx"
// include ---------------------------------------------------------------
#include <tools/shl.hxx>
#include <tools/date.hxx>
#include <tools/time.hxx>
#include <vcl/svapp.hxx>
#include <vcl/msgbox.hxx>
#include <svl/itempool.hxx>
#include <svl/itemset.hxx>
#include <unotools/useroptions.hxx>
#include <unotools/localedatawrapper.hxx>
#include <comphelper/processfactory.hxx>
#include <svx/svxids.hrc> // SID_ATTR_...
#include <svx/dialogs.hrc> // RID_SVXDLG_POSTIT
#define _SVX_POSTDLG_CXX
#include <cuires.hrc>
#include "postdlg.hrc"
#include <svx/postattr.hxx>
#include "postdlg.hxx"
#include <dialmgr.hxx>
#include "helpid.hrc"
// static ----------------------------------------------------------------
static sal_uInt16 pRanges[] =
{
SID_ATTR_POSTIT_AUTHOR,
SID_ATTR_POSTIT_TEXT,
0
};
// class SvxPostItDialog -------------------------------------------------
SvxPostItDialog::SvxPostItDialog( Window* pParent,
const SfxItemSet& rCoreSet,
sal_Bool bPrevNext,
sal_Bool bRedline ) :
SfxModalDialog( pParent, CUI_RES( RID_SVXDLG_POSTIT ) ),
aPostItFL ( this, CUI_RES( FL_POSTIT ) ),
aLastEditLabelFT( this, CUI_RES( FT_LASTEDITLABEL ) ),
aLastEditFT ( this, CUI_RES( FT_LASTEDIT ) ),
aEditFT ( this, CUI_RES( FT_EDIT ) ),
aEditED ( this, CUI_RES( ED_EDIT ) ),
aAuthorFT ( this, CUI_RES( FT_AUTHOR) ),
aAuthorBtn ( this, CUI_RES( BTN_AUTHOR ) ),
aOKBtn ( this, CUI_RES( BTN_POST_OK ) ),
aCancelBtn ( this, CUI_RES( BTN_POST_CANCEL ) ),
aHelpBtn ( this, CUI_RES( BTN_POST_HELP ) ),
aPrevBtn ( this, CUI_RES( BTN_PREV ) ),
aNextBtn ( this, CUI_RES( BTN_NEXT ) ),
rSet ( rCoreSet ),
pOutSet ( 0 )
{
if (bRedline) // HelpIDs fuer Redlining
{
SetHelpId(HID_REDLINING_DLG);
aEditED.SetHelpId(HID_REDLINING_EDIT);
aPrevBtn.SetHelpId(HID_REDLINING_PREV);
aNextBtn.SetHelpId(HID_REDLINING_NEXT);
}
aPrevBtn.SetClickHdl( LINK( this, SvxPostItDialog, PrevHdl ) );
aNextBtn.SetClickHdl( LINK( this, SvxPostItDialog, NextHdl ) );
aAuthorBtn.SetClickHdl( LINK( this, SvxPostItDialog, Stamp ) );
aOKBtn.SetClickHdl( LINK( this, SvxPostItDialog, OKHdl ) );
Font aFont( aEditED.GetFont() );
aFont.SetWeight( WEIGHT_LIGHT );
aEditED.SetFont( aFont );
sal_Bool bNew = sal_True;
sal_uInt16 nWhich = 0;
if ( !bPrevNext )
{
aPrevBtn.Hide();
aNextBtn.Hide();
}
nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR );
String aAuthorStr, aDateStr, aTextStr;
if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
{
bNew = sal_False;
const SvxPostItAuthorItem& rAuthor =
(const SvxPostItAuthorItem&)rSet.Get( nWhich );
aAuthorStr = rAuthor.GetValue();
}
else
aAuthorStr = SvtUserOptions().GetID();
nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE );
if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
{
const SvxPostItDateItem& rDate =
(const SvxPostItDateItem&)rSet.Get( nWhich );
aDateStr = rDate.GetValue();
}
else
{
LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
aDateStr = aLocaleWrapper.getDate( Date() );
}
nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT );
if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
{
const SvxPostItTextItem& rText =
(const SvxPostItTextItem&)rSet.Get( nWhich );
aTextStr = rText.GetValue();
}
ShowLastAuthor(aAuthorStr, aDateStr);
aEditED.SetText( aTextStr.ConvertLineEnd() );
if ( !bNew )
SetText( CUI_RESSTR( STR_NOTIZ_EDIT ) );
else
// neu anlegen
SetText( CUI_RESSTR( STR_NOTIZ_INSERT ) );
FreeResource();
aEditED.SetAccessibleRelationLabeledBy(&aEditFT);
aEditED.SetAccessibleRelationMemberOf(&aPostItFL);
aAuthorBtn.SetAccessibleRelationMemberOf(&aPostItFL);
}
// -----------------------------------------------------------------------
SvxPostItDialog::~SvxPostItDialog()
{
delete pOutSet;
pOutSet = 0;
}
// -----------------------------------------------------------------------
void SvxPostItDialog::ShowLastAuthor(const String& rAuthor, const String& rDate)
{
String sTxt( rAuthor );
sTxt.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
sTxt += rDate;
aLastEditFT.SetText( sTxt );
}
// -----------------------------------------------------------------------
sal_uInt16* SvxPostItDialog::GetRanges()
{
return pRanges;
}
// -----------------------------------------------------------------------
void SvxPostItDialog::EnableTravel(sal_Bool bNext, sal_Bool bPrev)
{
aPrevBtn.Enable(bPrev);
aNextBtn.Enable(bNext);
}
// -----------------------------------------------------------------------
IMPL_LINK_INLINE_START( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
{
aPrevHdlLink.Call( this );
return 0;
}
IMPL_LINK_INLINE_END( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
// -----------------------------------------------------------------------
IMPL_LINK_INLINE_START( SvxPostItDialog, NextHdl, Button *, EMPTYARG )
{
aNextHdlLink.Call( this );
return 0;
}
IMPL_LINK_INLINE_END( SvxPostItDialog, NextHdl, Button *, EMPTYARG )
// -----------------------------------------------------------------------
IMPL_LINK( SvxPostItDialog, Stamp, Button *, EMPTYARG )
{
Date aDate;
Time aTime;
String aTmp( SvtUserOptions().GetID() );
LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
String aStr( aEditED.GetText() );
aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\n---- " ) );
if ( aTmp.Len() > 0 )
{
aStr += aTmp;
aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
}
aStr += aLocaleWrapper.getDate(aDate);
aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
aStr += aLocaleWrapper.getTime(aTime, sal_False, sal_False);
aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " ----\n" ) );
aEditED.SetText( aStr.ConvertLineEnd() );
xub_StrLen nLen = aStr.Len();
aEditED.GrabFocus();
aEditED.SetSelection( Selection( nLen, nLen ) );
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxPostItDialog, OKHdl, Button *, EMPTYARG )
{
LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
pOutSet = new SfxItemSet( rSet );
pOutSet->Put( SvxPostItAuthorItem( SvtUserOptions().GetID(),
rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR ) ) );
pOutSet->Put( SvxPostItDateItem( aLocaleWrapper.getDate( Date() ),
rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE ) ) );
pOutSet->Put( SvxPostItTextItem( aEditED.GetText(),
rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT ) ) );
EndDialog( RET_OK );
return 0;
}