xref: /trunk/main/cui/source/dialogs/postdlg.cxx (revision ebe83c8c)
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 
SvxPostItDialog(Window * pParent,const SfxItemSet & rCoreSet,sal_Bool bPrevNext,sal_Bool bRedline)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 
~SvxPostItDialog()164 SvxPostItDialog::~SvxPostItDialog()
165 {
166 	delete pOutSet;
167 	pOutSet = 0;
168 }
169 
170 // -----------------------------------------------------------------------
171 
ShowLastAuthor(const String & rAuthor,const String & rDate)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 
GetRanges()182 sal_uInt16* SvxPostItDialog::GetRanges()
183 {
184 	return pRanges;
185 }
186 
187 // -----------------------------------------------------------------------
188 
EnableTravel(sal_Bool bNext,sal_Bool bPrev)189 void SvxPostItDialog::EnableTravel(sal_Bool bNext, sal_Bool bPrev)
190 {
191 	aPrevBtn.Enable(bPrev);
192 	aNextBtn.Enable(bNext);
193 }
194 
195 // -----------------------------------------------------------------------
196 
IMPL_LINK_INLINE_START(SvxPostItDialog,PrevHdl,Button *,EMPTYARG)197 IMPL_LINK_INLINE_START( SvxPostItDialog, PrevHdl, Button *, EMPTYARG )
198 {
199 	aPrevHdlLink.Call( this );
200 	return 0;
201 }
IMPL_LINK_INLINE_END(SvxPostItDialog,PrevHdl,Button *,EMPTYARG)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 }
IMPL_LINK_INLINE_END(SvxPostItDialog,NextHdl,Button *,EMPTYARG)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 
IMPL_LINK(SvxPostItDialog,OKHdl,Button *,EMPTYARG)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