xref: /AOO41X/main/cui/source/dialogs/postdlg.cxx (revision 5bc7d7738788babf27c608c0218c59d4761d218f)
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 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 // include ---------------------------------------------------------------
28 #include <tools/shl.hxx>
29 #include <tools/date.hxx>
30 #include <tools/time.hxx>
31 #include <vcl/svapp.hxx>
32 #include <vcl/msgbox.hxx>
33 #include <svl/itempool.hxx>
34 #include <svl/itemset.hxx>
35 #include <unotools/useroptions.hxx>
36 #include <unotools/localedatawrapper.hxx>
37 #include <comphelper/processfactory.hxx>
38 #include <svx/svxids.hrc> // SID_ATTR_...
39 #include <svx/dialogs.hrc> // RID_SVXDLG_POSTIT
40 
41 #define _SVX_POSTDLG_CXX
42 
43 #include <cuires.hrc>
44 #include "postdlg.hrc"
45 #include <svx/postattr.hxx>
46 #include "postdlg.hxx"
47 #include <dialmgr.hxx>
48 
49 #include "helpid.hrc"
50 
51 // static ----------------------------------------------------------------
52 
53 static sal_uInt16 pRanges[] =
54 {
55     SID_ATTR_POSTIT_AUTHOR,
56     SID_ATTR_POSTIT_TEXT,
57     0
58 };
59 
60 // class SvxPostItDialog -------------------------------------------------
61 
SvxPostItDialog(Window * pParent,const SfxItemSet & rCoreSet,sal_Bool bPrevNext,sal_Bool bRedline)62 SvxPostItDialog::SvxPostItDialog( Window* pParent,
63                                   const SfxItemSet& rCoreSet,
64                                   sal_Bool bPrevNext,
65                                   sal_Bool bRedline ) :
66 
67     SfxModalDialog( pParent, CUI_RES( RID_SVXDLG_POSTIT ) ),
68 
69     aPostItFL       ( this, CUI_RES( FL_POSTIT ) ),
70     aLastEditLabelFT( this, CUI_RES( FT_LASTEDITLABEL ) ),
71     aLastEditFT     ( this, CUI_RES( FT_LASTEDIT ) ),
72     aEditFT         ( this, CUI_RES( FT_EDIT ) ),
73     aEditED         ( this, CUI_RES( ED_EDIT ) ),
74     aAuthorFT       ( this, CUI_RES( FT_AUTHOR) ),
75     aAuthorBtn      ( this, CUI_RES( BTN_AUTHOR ) ),
76     aOKBtn          ( this, CUI_RES( BTN_POST_OK ) ),
77     aCancelBtn      ( this, CUI_RES( BTN_POST_CANCEL ) ),
78     aHelpBtn        ( this, CUI_RES( BTN_POST_HELP ) ),
79     aPrevBtn        ( this, CUI_RES( BTN_PREV ) ),
80     aNextBtn        ( this, CUI_RES( BTN_NEXT ) ),
81 
82     rSet        ( rCoreSet ),
83     pOutSet     ( 0 )
84 
85 {
86     if (bRedline)   // HelpIDs for Redlining
87     {
88         SetHelpId(HID_REDLINING_DLG);
89         aEditED.SetHelpId(HID_REDLINING_EDIT);
90         aPrevBtn.SetHelpId(HID_REDLINING_PREV);
91         aNextBtn.SetHelpId(HID_REDLINING_NEXT);
92     }
93 
94     aPrevBtn.SetClickHdl( LINK( this, SvxPostItDialog, PrevHdl ) );
95     aNextBtn.SetClickHdl( LINK( this, SvxPostItDialog, NextHdl ) );
96     aAuthorBtn.SetClickHdl( LINK( this, SvxPostItDialog, Stamp ) );
97     aOKBtn.SetClickHdl( LINK( this, SvxPostItDialog, OKHdl ) );
98 
99     Font aFont( aEditED.GetFont() );
100     aFont.SetWeight( WEIGHT_LIGHT );
101     aEditED.SetFont( aFont );
102 
103     sal_Bool bNew = sal_True;
104     sal_uInt16 nWhich            = 0;
105 
106     if ( !bPrevNext )
107     {
108         aPrevBtn.Disable();
109         aNextBtn.Disable();
110     }
111 
112     nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR );
113     String aAuthorStr, aDateStr, aTextStr;
114 
115     if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
116     {
117         bNew = sal_False;
118         const SvxPostItAuthorItem& rAuthor =
119             (const SvxPostItAuthorItem&)rSet.Get( nWhich );
120         aAuthorStr = rAuthor.GetValue();
121     }
122     else
123         aAuthorStr = SvtUserOptions().GetID();
124 
125     nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE );
126 
127     if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
128     {
129         const SvxPostItDateItem& rDate =
130             (const SvxPostItDateItem&)rSet.Get( nWhich );
131         aDateStr = rDate.GetValue();
132     }
133     else
134     {
135         LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
136         aDateStr = aLocaleWrapper.getDate( Date() );
137     }
138 
139     nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT );
140 
141     if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
142     {
143         const SvxPostItTextItem& rText =
144             (const SvxPostItTextItem&)rSet.Get( nWhich );
145         aTextStr = rText.GetValue();
146     }
147 
148     ShowLastAuthor(aAuthorStr, aDateStr);
149     aEditED.SetText( aTextStr.ConvertLineEnd() );
150 
151     if ( !bNew )
152         SetText( CUI_RESSTR( STR_NOTIZ_EDIT ) );
153     else
154         // neu anlegen
155         SetText( CUI_RESSTR( STR_NOTIZ_INSERT ) );
156 
157     FreeResource();
158 
159     aEditED.SetAccessibleRelationLabeledBy(&aEditFT);
160     aEditED.SetAccessibleRelationMemberOf(&aPostItFL);
161     aAuthorBtn.SetAccessibleRelationMemberOf(&aPostItFL);
162 }
163 
164 // -----------------------------------------------------------------------
165 
~SvxPostItDialog()166 SvxPostItDialog::~SvxPostItDialog()
167 {
168     delete pOutSet;
169     pOutSet = 0;
170 }
171 
172 // -----------------------------------------------------------------------
173 
ShowLastAuthor(const String & rAuthor,const String & rDate)174 void SvxPostItDialog::ShowLastAuthor(const String& rAuthor, const String& rDate)
175 {
176     String sTxt( rAuthor );
177     sTxt.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
178     sTxt += rDate;
179     aLastEditFT.SetText( sTxt );
180 }
181 
182 // -----------------------------------------------------------------------
183 
GetRanges()184 sal_uInt16* SvxPostItDialog::GetRanges()
185 {
186     return pRanges;
187 }
188 
189 // -----------------------------------------------------------------------
190 
EnableTravel(sal_Bool bNext,sal_Bool bPrev)191 void SvxPostItDialog::EnableTravel(sal_Bool bNext, sal_Bool bPrev)
192 {
193     aPrevBtn.Enable(bPrev);
194     aNextBtn.Enable(bNext);
195 }
196 
197 // -----------------------------------------------------------------------
198 
IMPL_LINK_INLINE_START(SvxPostItDialog,PrevHdl,Button *,EMPTYARG)199 IMPL_LINK_INLINE_START( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
200 {
201     aPrevHdlLink.Call( this );
202     return 0;
203 }
IMPL_LINK_INLINE_END(SvxPostItDialog,PrevHdl,Button *,EMPTYARG)204 IMPL_LINK_INLINE_END( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
205 
206 // -----------------------------------------------------------------------
207 
208 IMPL_LINK_INLINE_START( SvxPostItDialog, NextHdl, Button *, EMPTYARG )
209 {
210     aNextHdlLink.Call( this );
211     return 0;
212 }
IMPL_LINK_INLINE_END(SvxPostItDialog,NextHdl,Button *,EMPTYARG)213 IMPL_LINK_INLINE_END( SvxPostItDialog, NextHdl, Button *, EMPTYARG )
214 
215 // -----------------------------------------------------------------------
216 
217 IMPL_LINK( SvxPostItDialog, Stamp, Button *, EMPTYARG )
218 {
219     Date aDate;
220     Time aTime;
221     String aTmp( SvtUserOptions().GetID() );
222     LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
223     String aStr( aEditED.GetText() );
224     aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\n---- " ) );
225 
226     if ( aTmp.Len() > 0 )
227     {
228         aStr += aTmp;
229         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
230     }
231     aStr += aLocaleWrapper.getDate(aDate);
232     aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
233     aStr += aLocaleWrapper.getTime(aTime, sal_False, sal_False);
234     aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " ----\n" ) );
235 
236 
237     aEditED.SetText( aStr.ConvertLineEnd() );
238     xub_StrLen nLen = aStr.Len();
239     aEditED.GrabFocus();
240     aEditED.SetSelection( Selection( nLen, nLen ) );
241     return 0;
242 }
243 
244 // -----------------------------------------------------------------------
245 
IMPL_LINK(SvxPostItDialog,OKHdl,Button *,EMPTYARG)246 IMPL_LINK( SvxPostItDialog, OKHdl, Button *, EMPTYARG )
247 {
248     LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
249     pOutSet = new SfxItemSet( rSet );
250     pOutSet->Put( SvxPostItAuthorItem( SvtUserOptions().GetID(),
251                                        rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR ) ) );
252     pOutSet->Put( SvxPostItDateItem( aLocaleWrapper.getDate( Date() ),
253                                      rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE ) ) );
254     pOutSet->Put( SvxPostItTextItem( aEditED.GetText(),
255                                      rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT ) ) );
256     EndDialog( RET_OK );
257     return 0;
258 }
259