Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "dbmgr.hxx"
21 : #include <sfx2/app.hxx>
22 : #include <vcl/msgbox.hxx>
23 : #include <swwait.hxx>
24 : #include <viewopt.hxx>
25 :
26 : #include "wrtsh.hxx"
27 : #include "cmdid.h"
28 : #include "helpid.h"
29 : #include "envfmt.hxx"
30 : #include "envlop.hxx"
31 : #include "envprt.hxx"
32 : #include "fmtcol.hxx"
33 : #include "poolfmt.hxx"
34 : #include "view.hxx"
35 :
36 : #include "envlop.hrc"
37 : #include <comphelper/processfactory.hxx>
38 :
39 : #include <unomid.h>
40 :
41 : using namespace ::com::sun::star::lang;
42 : using namespace ::com::sun::star::container;
43 : using namespace ::com::sun::star::uno;
44 : using namespace ::com::sun::star;
45 : using namespace ::rtl;
46 :
47 :
48 : //impl in envimg.cxx
49 : extern SW_DLLPUBLIC String MakeSender();
50 :
51 0 : SwEnvPreview::SwEnvPreview(SfxTabPage* pParent, const ResId& rResID) :
52 :
53 0 : Window(pParent, rResID)
54 :
55 : {
56 0 : SetMapMode(MapMode(MAP_PIXEL));
57 0 : }
58 :
59 0 : SwEnvPreview::~SwEnvPreview()
60 : {
61 0 : }
62 :
63 0 : void SwEnvPreview::DataChanged( const DataChangedEvent& rDCEvt )
64 : {
65 0 : Window::DataChanged( rDCEvt );
66 0 : if ( DATACHANGED_SETTINGS == rDCEvt.GetType() )
67 0 : SetBackground( GetSettings().GetStyleSettings().GetDialogColor() );
68 0 : }
69 :
70 0 : void SwEnvPreview::Paint(const Rectangle &)
71 : {
72 0 : const StyleSettings& rSettings = GetSettings().GetStyleSettings();
73 :
74 : const SwEnvItem& rItem =
75 0 : ((SwEnvDlg*) GetParentDialog())->aEnvItem;
76 :
77 0 : sal_uInt16 nPageW = (sal_uInt16) Max(rItem.lWidth, rItem.lHeight),
78 0 : nPageH = (sal_uInt16) Min(rItem.lWidth, rItem.lHeight);
79 :
80 0 : float fx = (float)GetOutputSizePixel().Width () / (float)nPageW,
81 0 : fy = (float)GetOutputSizePixel().Height() / (float)nPageH,
82 0 : f = 0.8f * ( fx < fy ? fx : fy );
83 :
84 0 : Color aBack = rSettings.GetWindowColor( );
85 0 : Color aFront = SwViewOption::GetFontColor();
86 0 : Color aMedium = Color( ( aBack.GetRed() + aFront.GetRed() ) / 2,
87 0 : ( aBack.GetGreen() + aFront.GetGreen() ) / 2,
88 0 : ( aBack.GetBlue() + aFront.GetBlue() ) / 2
89 0 : );
90 :
91 0 : SetLineColor( aFront );
92 :
93 : // Envelope
94 0 : long nW = (sal_uInt16) (f * nPageW),
95 0 : nH = (sal_uInt16) (f * nPageH),
96 0 : nX = (GetOutputSizePixel().Width () - nW) / 2,
97 0 : nY = (GetOutputSizePixel().Height() - nH) / 2;
98 0 : SetFillColor( aBack );
99 0 : DrawRect(Rectangle(Point(nX, nY), Size(nW, nH)));
100 :
101 : // Sender
102 0 : if (rItem.bSend)
103 : {
104 0 : long nSendX = nX + (sal_uInt16) (f * rItem.lSendFromLeft),
105 0 : nSendY = nY + (sal_uInt16) (f * rItem.lSendFromTop ),
106 0 : nSendW = (sal_uInt16) (f * (rItem.lAddrFromLeft - rItem.lSendFromLeft)),
107 0 : nSendH = (sal_uInt16) (f * (rItem.lAddrFromTop - rItem.lSendFromTop - 566));
108 0 : SetFillColor( aMedium );
109 :
110 0 : DrawRect(Rectangle(Point(nSendX, nSendY), Size(nSendW, nSendH)));
111 : }
112 :
113 : // Addressee
114 0 : long nAddrX = nX + (sal_uInt16) (f * rItem.lAddrFromLeft),
115 0 : nAddrY = nY + (sal_uInt16) (f * rItem.lAddrFromTop ),
116 0 : nAddrW = (sal_uInt16) (f * (nPageW - rItem.lAddrFromLeft - 566)),
117 0 : nAddrH = (sal_uInt16) (f * (nPageH - rItem.lAddrFromTop - 566));
118 0 : SetFillColor( aMedium );
119 0 : DrawRect(Rectangle(Point(nAddrX, nAddrY), Size(nAddrW, nAddrH)));
120 :
121 : // Stamp
122 0 : long nStmpW = (sal_uInt16) (f * 1417 /* 2,5 cm */),
123 0 : nStmpH = (sal_uInt16) (f * 1701 /* 3,0 cm */),
124 0 : nStmpX = nX + nW - (sal_uInt16) (f * 566) - nStmpW,
125 0 : nStmpY = nY + (sal_uInt16) (f * 566);
126 :
127 0 : SetFillColor( aBack );
128 0 : DrawRect(Rectangle(Point(nStmpX, nStmpY), Size(nStmpW, nStmpH)));
129 0 : }
130 :
131 0 : SwEnvDlg::SwEnvDlg(Window* pParent, const SfxItemSet& rSet,
132 : SwWrtShell* pWrtSh, Printer* pPrt, sal_Bool bInsert) :
133 :
134 : SfxTabDialog(pParent, SW_RES(DLG_ENV), &rSet, sal_False, &aEmptyStr),
135 : sInsert(SW_RES(ST_INSERT)),
136 : sChange(SW_RES(ST_CHANGE)),
137 0 : aEnvItem((const SwEnvItem&) rSet.Get(FN_ENVELOP)),
138 : pSh(pWrtSh),
139 : pPrinter(pPrt),
140 : pAddresseeSet(0),
141 0 : pSenderSet(0)
142 : {
143 0 : FreeResource();
144 :
145 0 : GetOKButton().SetText(String(SW_RES(STR_BTN_NEWDOC)));
146 0 : GetOKButton().SetHelpId(HID_ENVELOP_PRINT);
147 0 : GetOKButton().SetHelpText(aEmptyStr); // in order for generated help text to get used
148 0 : if (GetUserButton())
149 : {
150 0 : GetUserButton()->SetText(bInsert ? sInsert : sChange);
151 0 : GetUserButton()->SetHelpId(HID_ENVELOP_INSERT);
152 : }
153 :
154 0 : AddTabPage(TP_ENV_ENV, SwEnvPage ::Create, 0);
155 0 : AddTabPage(TP_ENV_FMT, SwEnvFmtPage::Create, 0);
156 0 : AddTabPage(TP_ENV_PRT, SwEnvPrtPage::Create, 0);
157 0 : }
158 :
159 0 : SwEnvDlg::~SwEnvDlg()
160 : {
161 0 : delete pAddresseeSet;
162 0 : delete pSenderSet;
163 0 : }
164 :
165 0 : void SwEnvDlg::PageCreated(sal_uInt16 nId, SfxTabPage &rPage)
166 : {
167 0 : if (nId == TP_ENV_PRT)
168 : {
169 0 : ((SwEnvPrtPage*)&rPage)->SetPrt(pPrinter);
170 : }
171 0 : }
172 :
173 0 : short SwEnvDlg::Ok()
174 : {
175 0 : short nRet = SfxTabDialog::Ok();
176 :
177 0 : if (nRet == RET_OK || nRet == RET_USER)
178 : {
179 0 : if (pAddresseeSet)
180 : {
181 0 : SwTxtFmtColl* pColl = pSh->GetTxtCollFromPool(RES_POOLCOLL_JAKETADRESS);
182 0 : pColl->SetFmtAttr(*pAddresseeSet);
183 : }
184 0 : if (pSenderSet)
185 : {
186 0 : SwTxtFmtColl* pColl = pSh->GetTxtCollFromPool(RES_POOLCOLL_SENDADRESS);
187 0 : pColl->SetFmtAttr(*pSenderSet);
188 : }
189 : }
190 :
191 0 : return nRet;
192 : }
193 :
194 0 : SwEnvPage::SwEnvPage(Window* pParent, const SfxItemSet& rSet) :
195 :
196 : SfxTabPage(pParent, SW_RES(TP_ENV_ENV), rSet),
197 :
198 : aAddrText (this, SW_RES(TXT_ADDR )),
199 : aAddrEdit (this, SW_RES(EDT_ADDR )),
200 : aDatabaseFT (this, SW_RES(FT_DATABASE)),
201 : aDatabaseLB (this, SW_RES(LB_DATABASE)),
202 : aTableFT (this, SW_RES(FT_TABLE )),
203 : aTableLB (this, SW_RES(LB_TABLE )),
204 : aInsertBT (this, SW_RES(BTN_INSERT )),
205 : aDBFieldFT (this, SW_RES(FT_DBFIELD )),
206 : aDBFieldLB (this, SW_RES(LB_DBFIELD )),
207 : aSenderBox (this, SW_RES(BOX_SEND )),
208 : aSenderEdit (this, SW_RES(EDT_SEND )),
209 0 : aPreview (this, SW_RES(WIN_PREVIEW))
210 :
211 : {
212 0 : FreeResource();
213 0 : SetExchangeSupport();
214 0 : pSh = GetParentSwEnvDlg()->pSh;
215 :
216 : // Install handlers
217 0 : aDatabaseLB .SetSelectHdl(LINK(this, SwEnvPage, DatabaseHdl ));
218 0 : aTableLB .SetSelectHdl(LINK(this, SwEnvPage, DatabaseHdl ));
219 0 : aInsertBT .SetClickHdl (LINK(this, SwEnvPage, FieldHdl ));
220 0 : aSenderBox .SetClickHdl (LINK(this, SwEnvPage, SenderHdl ));
221 0 : aPreview.SetBorderStyle( WINDOW_BORDER_MONO );
222 :
223 0 : SwDBData aData = pSh->GetDBData();
224 0 : sActDBName = aData.sDataSource;
225 0 : sActDBName += DB_DELIM;
226 0 : sActDBName += (String)aData.sCommand;
227 0 : InitDatabaseBox();
228 0 : }
229 :
230 0 : SwEnvPage::~SwEnvPage()
231 : {
232 0 : }
233 :
234 0 : IMPL_LINK( SwEnvPage, DatabaseHdl, ListBox *, pListBox )
235 : {
236 0 : SwWait aWait( *pSh->GetView().GetDocShell(), sal_True );
237 :
238 0 : if (pListBox == &aDatabaseLB)
239 : {
240 0 : sActDBName = pListBox->GetSelectEntry();
241 0 : pSh->GetNewDBMgr()->GetTableNames(&aTableLB, sActDBName);
242 0 : sActDBName += DB_DELIM;
243 : }
244 : else
245 0 : sActDBName.SetToken(1, DB_DELIM, aTableLB.GetSelectEntry());
246 : pSh->GetNewDBMgr()->GetColumnNames(&aDBFieldLB, aDatabaseLB.GetSelectEntry(),
247 0 : aTableLB.GetSelectEntry());
248 0 : return 0;
249 : }
250 :
251 0 : IMPL_LINK_NOARG(SwEnvPage, FieldHdl)
252 : {
253 0 : rtl::OUStringBuffer aStr;
254 0 : aStr.append('<');
255 0 : aStr.append(aDatabaseLB.GetSelectEntry());
256 0 : aStr.append('.');
257 0 : aStr.append(aTableLB.GetSelectEntry());
258 0 : aStr.append('.');
259 0 : aStr.append(aTableLB.GetEntryData(aTableLB.GetSelectEntryPos()) == 0 ? '0' : '1');
260 0 : aStr.append('.');
261 0 : aStr.append(aDBFieldLB.GetSelectEntry());
262 0 : aStr.append('>');
263 0 : aAddrEdit.ReplaceSelected(aStr.makeStringAndClear());
264 0 : Selection aSel = aAddrEdit.GetSelection();
265 0 : aAddrEdit.GrabFocus();
266 0 : aAddrEdit.SetSelection(aSel);
267 0 : return 0;
268 : }
269 :
270 0 : IMPL_LINK_NOARG(SwEnvPage, SenderHdl)
271 : {
272 0 : const sal_Bool bEnable = aSenderBox.IsChecked();
273 0 : GetParentSwEnvDlg()->aEnvItem.bSend = bEnable;
274 0 : aSenderEdit.Enable(bEnable);
275 0 : if ( bEnable )
276 : {
277 0 : aSenderEdit.GrabFocus();
278 0 : if(!aSenderEdit.GetText().Len())
279 0 : aSenderEdit.SetText(MakeSender());
280 : }
281 0 : aPreview.Invalidate();
282 0 : return 0;
283 : }
284 :
285 0 : void SwEnvPage::InitDatabaseBox()
286 : {
287 0 : if (pSh->GetNewDBMgr())
288 : {
289 0 : aDatabaseLB.Clear();
290 0 : Sequence<OUString> aDataNames = SwNewDBMgr::GetExistingDatabaseNames();
291 0 : const OUString* pDataNames = aDataNames.getConstArray();
292 :
293 0 : for (long i = 0; i < aDataNames.getLength(); i++)
294 0 : aDatabaseLB.InsertEntry(pDataNames[i]);
295 :
296 0 : String sDBName = sActDBName.GetToken( 0, DB_DELIM );
297 0 : String sTableName = sActDBName.GetToken( 1, DB_DELIM );
298 0 : aDatabaseLB.SelectEntry(sDBName);
299 0 : if (pSh->GetNewDBMgr()->GetTableNames(&aTableLB, sDBName))
300 : {
301 0 : aTableLB.SelectEntry(sTableName);
302 0 : pSh->GetNewDBMgr()->GetColumnNames(&aDBFieldLB, sDBName, sTableName);
303 : }
304 : else
305 0 : aDBFieldLB.Clear();
306 :
307 : }
308 0 : }
309 :
310 0 : SfxTabPage* SwEnvPage::Create(Window* pParent, const SfxItemSet& rSet)
311 : {
312 0 : return new SwEnvPage(pParent, rSet);
313 : }
314 :
315 0 : void SwEnvPage::ActivatePage(const SfxItemSet& rSet)
316 : {
317 0 : SfxItemSet aSet(rSet);
318 0 : aSet.Put(GetParentSwEnvDlg()->aEnvItem);
319 0 : Reset(aSet);
320 0 : }
321 :
322 0 : int SwEnvPage::DeactivatePage(SfxItemSet* _pSet)
323 : {
324 0 : FillItem(GetParentSwEnvDlg()->aEnvItem);
325 0 : if( _pSet )
326 0 : FillItemSet(*_pSet);
327 0 : return SfxTabPage::LEAVE_PAGE;
328 : }
329 :
330 0 : void SwEnvPage::FillItem(SwEnvItem& rItem)
331 : {
332 0 : rItem.aAddrText = aAddrEdit .GetText();
333 0 : rItem.bSend = aSenderBox .IsChecked();
334 0 : rItem.aSendText = aSenderEdit.GetText();
335 0 : }
336 :
337 0 : sal_Bool SwEnvPage::FillItemSet(SfxItemSet& rSet)
338 : {
339 0 : FillItem(GetParentSwEnvDlg()->aEnvItem);
340 0 : rSet.Put(GetParentSwEnvDlg()->aEnvItem);
341 0 : return sal_True;
342 : }
343 :
344 0 : void SwEnvPage::Reset(const SfxItemSet& rSet)
345 : {
346 0 : SwEnvItem aItem = (const SwEnvItem&) rSet.Get(FN_ENVELOP);
347 0 : aAddrEdit .SetText(convertLineEnd(aItem.aAddrText, GetSystemLineEnd()));
348 0 : aSenderEdit.SetText(convertLineEnd(aItem.aSendText, GetSystemLineEnd()));
349 0 : aSenderBox .Check (aItem.bSend);
350 0 : aSenderBox.GetClickHdl().Call(&aSenderBox);
351 0 : }
352 :
353 :
354 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|