1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_cui.hxx" 24 25 // include --------------------------------------------------------------- 26 #include <tools/shl.hxx> 27 #include <tools/date.hxx> 28 #include <tools/time.hxx> 29 #include <vcl/svapp.hxx> 30 #include <vcl/msgbox.hxx> 31 #include <svl/itempool.hxx> 32 #include <svl/itemset.hxx> 33 #include <unotools/useroptions.hxx> 34 #include <unotools/localedatawrapper.hxx> 35 #include <comphelper/processfactory.hxx> 36 #include <svx/svxids.hrc> // SID_ATTR_... 37 #include <svx/dialogs.hrc> // RID_SVXDLG_POSTIT 38 39 #define _SVX_POSTDLG_CXX 40 41 #include <cuires.hrc> 42 #include "postdlg.hrc" 43 #include <svx/postattr.hxx> 44 #include "postdlg.hxx" 45 #include <dialmgr.hxx> 46 47 #include "helpid.hrc" 48 49 // static ---------------------------------------------------------------- 50 51 static sal_uInt16 pRanges[] = 52 { 53 SID_ATTR_POSTIT_AUTHOR, 54 SID_ATTR_POSTIT_TEXT, 55 0 56 }; 57 58 // class SvxPostItDialog ------------------------------------------------- 59 60 SvxPostItDialog::SvxPostItDialog( Window* pParent, 61 const SfxItemSet& rCoreSet, 62 sal_Bool bPrevNext, 63 sal_Bool bRedline ) : 64 65 SfxModalDialog( pParent, CUI_RES( RID_SVXDLG_POSTIT ) ), 66 67 aPostItFL ( this, CUI_RES( FL_POSTIT ) ), 68 aLastEditLabelFT( this, CUI_RES( FT_LASTEDITLABEL ) ), 69 aLastEditFT ( this, CUI_RES( FT_LASTEDIT ) ), 70 aEditFT ( this, CUI_RES( FT_EDIT ) ), 71 aEditED ( this, CUI_RES( ED_EDIT ) ), 72 aAuthorFT ( this, CUI_RES( FT_AUTHOR) ), 73 aAuthorBtn ( this, CUI_RES( BTN_AUTHOR ) ), 74 aOKBtn ( this, CUI_RES( BTN_POST_OK ) ), 75 aCancelBtn ( this, CUI_RES( BTN_POST_CANCEL ) ), 76 aHelpBtn ( this, CUI_RES( BTN_POST_HELP ) ), 77 aPrevBtn ( this, CUI_RES( BTN_PREV ) ), 78 aNextBtn ( this, CUI_RES( BTN_NEXT ) ), 79 80 rSet ( rCoreSet ), 81 pOutSet ( 0 ) 82 83 { 84 if (bRedline) // HelpIDs for Redlining 85 { 86 SetHelpId(HID_REDLINING_DLG); 87 aEditED.SetHelpId(HID_REDLINING_EDIT); 88 aPrevBtn.SetHelpId(HID_REDLINING_PREV); 89 aNextBtn.SetHelpId(HID_REDLINING_NEXT); 90 } 91 92 aPrevBtn.SetClickHdl( LINK( this, SvxPostItDialog, PrevHdl ) ); 93 aNextBtn.SetClickHdl( LINK( this, SvxPostItDialog, NextHdl ) ); 94 aAuthorBtn.SetClickHdl( LINK( this, SvxPostItDialog, Stamp ) ); 95 aOKBtn.SetClickHdl( LINK( this, SvxPostItDialog, OKHdl ) ); 96 97 Font aFont( aEditED.GetFont() ); 98 aFont.SetWeight( WEIGHT_LIGHT ); 99 aEditED.SetFont( aFont ); 100 101 sal_Bool bNew = sal_True; 102 sal_uInt16 nWhich = 0; 103 104 if ( !bPrevNext ) 105 { 106 aPrevBtn.Disable(); 107 aNextBtn.Disable(); 108 } 109 110 nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR ); 111 String aAuthorStr, aDateStr, aTextStr; 112 113 if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE ) 114 { 115 bNew = sal_False; 116 const SvxPostItAuthorItem& rAuthor = 117 (const SvxPostItAuthorItem&)rSet.Get( nWhich ); 118 aAuthorStr = rAuthor.GetValue(); 119 } 120 else 121 aAuthorStr = SvtUserOptions().GetID(); 122 123 nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE ); 124 125 if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE ) 126 { 127 const SvxPostItDateItem& rDate = 128 (const SvxPostItDateItem&)rSet.Get( nWhich ); 129 aDateStr = rDate.GetValue(); 130 } 131 else 132 { 133 LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); 134 aDateStr = aLocaleWrapper.getDate( Date() ); 135 } 136 137 nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT ); 138 139 if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE ) 140 { 141 const SvxPostItTextItem& rText = 142 (const SvxPostItTextItem&)rSet.Get( nWhich ); 143 aTextStr = rText.GetValue(); 144 } 145 146 ShowLastAuthor(aAuthorStr, aDateStr); 147 aEditED.SetText( aTextStr.ConvertLineEnd() ); 148 149 if ( !bNew ) 150 SetText( CUI_RESSTR( STR_NOTIZ_EDIT ) ); 151 else 152 // neu anlegen 153 SetText( CUI_RESSTR( STR_NOTIZ_INSERT ) ); 154 155 FreeResource(); 156 157 aEditED.SetAccessibleRelationLabeledBy(&aEditFT); 158 aEditED.SetAccessibleRelationMemberOf(&aPostItFL); 159 aAuthorBtn.SetAccessibleRelationMemberOf(&aPostItFL); 160 } 161 162 // ----------------------------------------------------------------------- 163 164 SvxPostItDialog::~SvxPostItDialog() 165 { 166 delete pOutSet; 167 pOutSet = 0; 168 } 169 170 // ----------------------------------------------------------------------- 171 172 void SvxPostItDialog::ShowLastAuthor(const String& rAuthor, const String& rDate) 173 { 174 String sTxt( rAuthor ); 175 sTxt.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) ); 176 sTxt += rDate; 177 aLastEditFT.SetText( sTxt ); 178 } 179 180 // ----------------------------------------------------------------------- 181 182 sal_uInt16* SvxPostItDialog::GetRanges() 183 { 184 return pRanges; 185 } 186 187 // ----------------------------------------------------------------------- 188 189 void SvxPostItDialog::EnableTravel(sal_Bool bNext, sal_Bool bPrev) 190 { 191 aPrevBtn.Enable(bPrev); 192 aNextBtn.Enable(bNext); 193 } 194 195 // ----------------------------------------------------------------------- 196 197 IMPL_LINK_INLINE_START( SvxPostItDialog, PrevHdl, Button *, EMPTYARG ) 198 { 199 aPrevHdlLink.Call( this ); 200 return 0; 201 } 202 IMPL_LINK_INLINE_END( SvxPostItDialog, PrevHdl, Button *, EMPTYARG ) 203 204 // ----------------------------------------------------------------------- 205 206 IMPL_LINK_INLINE_START( SvxPostItDialog, NextHdl, Button *, EMPTYARG ) 207 { 208 aNextHdlLink.Call( this ); 209 return 0; 210 } 211 IMPL_LINK_INLINE_END( SvxPostItDialog, NextHdl, Button *, EMPTYARG ) 212 213 // ----------------------------------------------------------------------- 214 215 IMPL_LINK( SvxPostItDialog, Stamp, Button *, EMPTYARG ) 216 { 217 Date aDate; 218 Time aTime; 219 String aTmp( SvtUserOptions().GetID() ); 220 LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); 221 String aStr( aEditED.GetText() ); 222 aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\n---- " ) ); 223 224 if ( aTmp.Len() > 0 ) 225 { 226 aStr += aTmp; 227 aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) ); 228 } 229 aStr += aLocaleWrapper.getDate(aDate); 230 aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) ); 231 aStr += aLocaleWrapper.getTime(aTime, sal_False, sal_False); 232 aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " ----\n" ) ); 233 234 235 aEditED.SetText( aStr.ConvertLineEnd() ); 236 xub_StrLen nLen = aStr.Len(); 237 aEditED.GrabFocus(); 238 aEditED.SetSelection( Selection( nLen, nLen ) ); 239 return 0; 240 } 241 242 // ----------------------------------------------------------------------- 243 244 IMPL_LINK( SvxPostItDialog, OKHdl, Button *, EMPTYARG ) 245 { 246 LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); 247 pOutSet = new SfxItemSet( rSet ); 248 pOutSet->Put( SvxPostItAuthorItem( SvtUserOptions().GetID(), 249 rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR ) ) ); 250 pOutSet->Put( SvxPostItDateItem( aLocaleWrapper.getDate( Date() ), 251 rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE ) ) ); 252 pOutSet->Put( SvxPostItTextItem( aEditED.GetText(), 253 rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT ) ) ); 254 EndDialog( RET_OK ); 255 return 0; 256 } 257 258 /* vim: set noet sw=4 ts=4: */ 259