xref: /trunk/main/cui/source/dialogs/postdlg.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_cui.hxx"
30 
31 // include ---------------------------------------------------------------
32 #include <tools/shl.hxx>
33 #include <tools/date.hxx>
34 #include <tools/time.hxx>
35 #include <vcl/svapp.hxx>
36 #include <vcl/msgbox.hxx>
37 #include <svl/itempool.hxx>
38 #include <svl/itemset.hxx>
39 #include <unotools/useroptions.hxx>
40 #include <unotools/localedatawrapper.hxx>
41 #include <comphelper/processfactory.hxx>
42 #include <svx/svxids.hrc>   // SID_ATTR_...
43 #include <svx/dialogs.hrc>  // RID_SVXDLG_POSTIT
44 
45 #define _SVX_POSTDLG_CXX
46 
47 #include <cuires.hrc>
48 #include "postdlg.hrc"
49 #include <svx/postattr.hxx>
50 #include "postdlg.hxx"
51 #include <dialmgr.hxx>
52 
53 #include "helpid.hrc"
54 
55 // static ----------------------------------------------------------------
56 
57 static sal_uInt16 pRanges[] =
58 {
59     SID_ATTR_POSTIT_AUTHOR,
60     SID_ATTR_POSTIT_TEXT,
61     0
62 };
63 
64 // class SvxPostItDialog -------------------------------------------------
65 
66 SvxPostItDialog::SvxPostItDialog( Window* pParent,
67                                   const SfxItemSet& rCoreSet,
68                                   sal_Bool bPrevNext,
69                                   sal_Bool bRedline ) :
70 
71     SfxModalDialog( pParent, CUI_RES( RID_SVXDLG_POSTIT ) ),
72 
73     aPostItFL       ( this, CUI_RES( FL_POSTIT ) ),
74     aLastEditLabelFT( this, CUI_RES( FT_LASTEDITLABEL ) ),
75     aLastEditFT     ( this, CUI_RES( FT_LASTEDIT ) ),
76     aEditFT         ( this, CUI_RES( FT_EDIT ) ),
77     aEditED         ( this, CUI_RES( ED_EDIT ) ),
78     aAuthorFT       ( this, CUI_RES( FT_AUTHOR) ),
79     aAuthorBtn      ( this, CUI_RES( BTN_AUTHOR ) ),
80     aOKBtn          ( this, CUI_RES( BTN_POST_OK ) ),
81     aCancelBtn      ( this, CUI_RES( BTN_POST_CANCEL ) ),
82     aHelpBtn        ( this, CUI_RES( BTN_POST_HELP ) ),
83     aPrevBtn        ( this, CUI_RES( BTN_PREV ) ),
84     aNextBtn        ( this, CUI_RES( BTN_NEXT ) ),
85 
86     rSet        ( rCoreSet ),
87     pOutSet     ( 0 )
88 
89 {
90     if (bRedline)   // HelpIDs fuer Redlining
91     {
92         SetHelpId(HID_REDLINING_DLG);
93         aEditED.SetHelpId(HID_REDLINING_EDIT);
94         aPrevBtn.SetHelpId(HID_REDLINING_PREV);
95         aNextBtn.SetHelpId(HID_REDLINING_NEXT);
96     }
97 
98     aPrevBtn.SetClickHdl( LINK( this, SvxPostItDialog, PrevHdl ) );
99     aNextBtn.SetClickHdl( LINK( this, SvxPostItDialog, NextHdl ) );
100     aAuthorBtn.SetClickHdl( LINK( this, SvxPostItDialog, Stamp ) );
101     aOKBtn.SetClickHdl( LINK( this, SvxPostItDialog, OKHdl ) );
102 
103     Font aFont( aEditED.GetFont() );
104     aFont.SetWeight( WEIGHT_LIGHT );
105     aEditED.SetFont( aFont );
106 
107     sal_Bool bNew = sal_True;
108     sal_uInt16 nWhich            = 0;
109 
110     if ( !bPrevNext )
111     {
112         aPrevBtn.Hide();
113         aNextBtn.Hide();
114     }
115 
116     nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR );
117     String aAuthorStr, aDateStr, aTextStr;
118 
119     if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
120     {
121         bNew = sal_False;
122         const SvxPostItAuthorItem& rAuthor =
123             (const SvxPostItAuthorItem&)rSet.Get( nWhich );
124         aAuthorStr = rAuthor.GetValue();
125     }
126     else
127         aAuthorStr = SvtUserOptions().GetID();
128 
129     nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE );
130 
131     if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
132     {
133         const SvxPostItDateItem& rDate =
134             (const SvxPostItDateItem&)rSet.Get( nWhich );
135         aDateStr = rDate.GetValue();
136     }
137     else
138     {
139         LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
140         aDateStr = aLocaleWrapper.getDate( Date() );
141     }
142 
143     nWhich = rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT );
144 
145     if ( rSet.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE )
146     {
147         const SvxPostItTextItem& rText =
148             (const SvxPostItTextItem&)rSet.Get( nWhich );
149         aTextStr = rText.GetValue();
150     }
151 
152     ShowLastAuthor(aAuthorStr, aDateStr);
153     aEditED.SetText( aTextStr.ConvertLineEnd() );
154 
155     if ( !bNew )
156         SetText( CUI_RESSTR( STR_NOTIZ_EDIT ) );
157     else
158         // neu anlegen
159         SetText( CUI_RESSTR( STR_NOTIZ_INSERT ) );
160 
161     FreeResource();
162 
163     aEditED.SetAccessibleRelationLabeledBy(&aEditFT);
164     aEditED.SetAccessibleRelationMemberOf(&aPostItFL);
165     aAuthorBtn.SetAccessibleRelationMemberOf(&aPostItFL);
166 }
167 
168 // -----------------------------------------------------------------------
169 
170 SvxPostItDialog::~SvxPostItDialog()
171 {
172     delete pOutSet;
173     pOutSet = 0;
174 }
175 
176 // -----------------------------------------------------------------------
177 
178 void SvxPostItDialog::ShowLastAuthor(const String& rAuthor, const String& rDate)
179 {
180     String sTxt( rAuthor );
181     sTxt.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
182     sTxt += rDate;
183     aLastEditFT.SetText( sTxt );
184 }
185 
186 // -----------------------------------------------------------------------
187 
188 sal_uInt16* SvxPostItDialog::GetRanges()
189 {
190     return pRanges;
191 }
192 
193 // -----------------------------------------------------------------------
194 
195 void SvxPostItDialog::EnableTravel(sal_Bool bNext, sal_Bool bPrev)
196 {
197     aPrevBtn.Enable(bPrev);
198     aNextBtn.Enable(bNext);
199 }
200 
201 // -----------------------------------------------------------------------
202 
203 IMPL_LINK_INLINE_START( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
204 {
205     aPrevHdlLink.Call( this );
206     return 0;
207 }
208 IMPL_LINK_INLINE_END( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
209 
210 // -----------------------------------------------------------------------
211 
212 IMPL_LINK_INLINE_START( SvxPostItDialog, NextHdl, Button *, EMPTYARG )
213 {
214     aNextHdlLink.Call( this );
215     return 0;
216 }
217 IMPL_LINK_INLINE_END( SvxPostItDialog, NextHdl, Button *, EMPTYARG )
218 
219 // -----------------------------------------------------------------------
220 
221 IMPL_LINK( SvxPostItDialog, Stamp, Button *, EMPTYARG )
222 {
223     Date aDate;
224     Time aTime;
225     String aTmp( SvtUserOptions().GetID() );
226     LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
227     String aStr( aEditED.GetText() );
228     aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "\n---- " ) );
229 
230     if ( aTmp.Len() > 0 )
231     {
232         aStr += aTmp;
233         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
234     }
235     aStr += aLocaleWrapper.getDate(aDate);
236     aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ", " ) );
237     aStr += aLocaleWrapper.getTime(aTime, sal_False, sal_False);
238     aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " ----\n" ) );
239 
240 
241     aEditED.SetText( aStr.ConvertLineEnd() );
242     xub_StrLen nLen = aStr.Len();
243     aEditED.GrabFocus();
244     aEditED.SetSelection( Selection( nLen, nLen ) );
245     return 0;
246 }
247 
248 // -----------------------------------------------------------------------
249 
250 IMPL_LINK( SvxPostItDialog, OKHdl, Button *, EMPTYARG )
251 {
252     LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
253     pOutSet = new SfxItemSet( rSet );
254     pOutSet->Put( SvxPostItAuthorItem( SvtUserOptions().GetID(),
255                                        rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_AUTHOR ) ) );
256     pOutSet->Put( SvxPostItDateItem( aLocaleWrapper.getDate( Date() ),
257                                      rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_DATE ) ) );
258     pOutSet->Put( SvxPostItTextItem( aEditED.GetText(),
259                                      rSet.GetPool()->GetWhich( SID_ATTR_POSTIT_TEXT ) ) );
260     EndDialog( RET_OK );
261     return 0;
262 }
263 
264