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/builderfactory.hxx>
23 : #include <vcl/msgbox.hxx>
24 : #include <vcl/settings.hxx>
25 :
26 : #include <swwait.hxx>
27 : #include <viewopt.hxx>
28 :
29 : #include "wrtsh.hxx"
30 : #include "cmdid.h"
31 : #include "helpid.h"
32 : #include "envfmt.hxx"
33 : #include "envlop.hxx"
34 : #include "envprt.hxx"
35 : #include "fmtcol.hxx"
36 : #include "poolfmt.hxx"
37 : #include "view.hxx"
38 :
39 : #include <comphelper/processfactory.hxx>
40 : #include <comphelper/string.hxx>
41 :
42 : #include <unomid.h>
43 :
44 : using namespace ::com::sun::star::lang;
45 : using namespace ::com::sun::star::container;
46 : using namespace ::com::sun::star::uno;
47 : using namespace ::com::sun::star;
48 :
49 0 : SwEnvPreview::SwEnvPreview(vcl::Window* pParent, WinBits nStyle)
50 0 : : Window(pParent, nStyle)
51 : {
52 0 : SetMapMode(MapMode(MAP_PIXEL));
53 0 : }
54 :
55 0 : Size SwEnvPreview::GetOptimalSize() const
56 : {
57 0 : return LogicToPixel(Size(84 , 63), MAP_APPFONT);
58 : }
59 :
60 0 : VCL_BUILDER_FACTORY_ARGS(SwEnvPreview, 0)
61 :
62 0 : void SwEnvPreview::DataChanged( const DataChangedEvent& rDCEvt )
63 : {
64 0 : Window::DataChanged( rDCEvt );
65 0 : if (DataChangedEventType::SETTINGS == rDCEvt.GetType())
66 0 : Invalidate();
67 0 : }
68 :
69 0 : void SwEnvPreview::Paint(vcl::RenderContext& rRenderContext, const Rectangle &)
70 : {
71 0 : const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings();
72 0 : SetBackground(rRenderContext.GetSettings().GetStyleSettings().GetDialogColor());
73 :
74 0 : const SwEnvItem& rItem = static_cast<SwEnvDlg*>(GetParentDialog())->aEnvItem;
75 :
76 0 : const long nPageW = std::max(rItem.lWidth, rItem.lHeight);
77 0 : const long nPageH = std::min(rItem.lWidth, rItem.lHeight);
78 :
79 0 : const double f = 0.8 * std::min(
80 0 : double(rRenderContext.GetOutputSizePixel().Width()) / double(nPageW),
81 0 : double(rRenderContext.GetOutputSizePixel().Height()) / double(nPageH));
82 :
83 0 : Color aBack = rSettings.GetWindowColor();
84 0 : Color aFront = SwViewOption::GetFontColor();
85 0 : Color aMedium = Color((aBack.GetRed() + aFront.GetRed()) / 2,
86 0 : (aBack.GetGreen() + aFront.GetGreen()) / 2,
87 0 : (aBack.GetBlue() + aFront.GetBlue()) / 2);
88 :
89 0 : rRenderContext.SetLineColor(aFront);
90 :
91 : // Envelope
92 0 : const long nW = static_cast<long>(f * nPageW);
93 0 : const long nH = static_cast<long>(f * nPageH);
94 0 : const long nX = (rRenderContext.GetOutputSizePixel().Width () - nW) / 2;
95 0 : const long nY = (rRenderContext.GetOutputSizePixel().Height() - nH) / 2;
96 0 : rRenderContext.SetFillColor(aBack);
97 0 : rRenderContext.DrawRect(Rectangle(Point(nX, nY), Size(nW, nH)));
98 :
99 : // Sender
100 0 : if (rItem.bSend)
101 : {
102 0 : const long nSendX = nX + static_cast<long>(f * rItem.lSendFromLeft);
103 0 : const long nSendY = nY + static_cast<long>(f * rItem.lSendFromTop );
104 0 : const long nSendW = static_cast<long>(f * (rItem.lAddrFromLeft - rItem.lSendFromLeft));
105 0 : const long nSendH = static_cast<long>(f * (rItem.lAddrFromTop - rItem.lSendFromTop - 566));
106 0 : rRenderContext.SetFillColor(aMedium);
107 :
108 0 : rRenderContext.DrawRect(Rectangle(Point(nSendX, nSendY), Size(nSendW, nSendH)));
109 : }
110 :
111 : // Addressee
112 0 : const long nAddrX = nX + static_cast<long>(f * rItem.lAddrFromLeft);
113 0 : const long nAddrY = nY + static_cast<long>(f * rItem.lAddrFromTop );
114 0 : const long nAddrW = static_cast<long>(f * (nPageW - rItem.lAddrFromLeft - 566));
115 0 : const long nAddrH = static_cast<long>(f * (nPageH - rItem.lAddrFromTop - 566));
116 0 : rRenderContext.SetFillColor(aMedium);
117 0 : rRenderContext.DrawRect(Rectangle(Point(nAddrX, nAddrY), Size(nAddrW, nAddrH)));
118 :
119 : // Stamp
120 0 : const long nStmpW = static_cast<long>(f * 1417 /* 2,5 cm */);
121 0 : const long nStmpH = static_cast<long>(f * 1701 /* 3,0 cm */);
122 0 : const long nStmpX = nX + nW - static_cast<long>(f * 566) - nStmpW;
123 0 : const long nStmpY = nY + static_cast<long>(f * 566);
124 :
125 0 : rRenderContext.SetFillColor(aBack);
126 0 : rRenderContext.DrawRect(Rectangle(Point(nStmpX, nStmpY), Size(nStmpW, nStmpH)));
127 0 : }
128 :
129 0 : SwEnvDlg::SwEnvDlg(vcl::Window* pParent, const SfxItemSet& rSet,
130 : SwWrtShell* pWrtSh, Printer* pPrt, bool bInsert)
131 : : SfxTabDialog(pParent, "EnvDialog",
132 : "modules/swriter/ui/envdialog.ui", &rSet)
133 0 : , aEnvItem(static_cast<const SwEnvItem&>( rSet.Get(FN_ENVELOP)))
134 : , pSh(pWrtSh)
135 : , pPrinter(pPrt)
136 : , pAddresseeSet(0)
137 : , pSenderSet(0)
138 0 : , m_nEnvPrintId(0)
139 : {
140 0 : if (!bInsert)
141 : {
142 0 : GetUserButton()->SetText(get<PushButton>("modify")->GetText());
143 : }
144 :
145 0 : AddTabPage("envelope", SwEnvPage ::Create, 0);
146 0 : AddTabPage("format", SwEnvFormatPage::Create, 0);
147 0 : m_nEnvPrintId = AddTabPage("printer", SwEnvPrtPage::Create, 0);
148 0 : }
149 :
150 0 : SwEnvDlg::~SwEnvDlg()
151 : {
152 0 : disposeOnce();
153 0 : }
154 :
155 0 : void SwEnvDlg::dispose()
156 : {
157 0 : delete pAddresseeSet;
158 0 : delete pSenderSet;
159 0 : SfxTabDialog::dispose();
160 0 : }
161 :
162 0 : void SwEnvDlg::PageCreated(sal_uInt16 nId, SfxTabPage &rPage)
163 : {
164 0 : if (nId == m_nEnvPrintId)
165 : {
166 0 : static_cast<SwEnvPrtPage*>(&rPage)->SetPrt(pPrinter);
167 : }
168 0 : }
169 :
170 0 : short SwEnvDlg::Ok()
171 : {
172 0 : short nRet = SfxTabDialog::Ok();
173 :
174 0 : if (nRet == RET_OK || nRet == RET_USER)
175 : {
176 0 : if (pAddresseeSet)
177 : {
178 0 : SwTextFormatColl* pColl = pSh->GetTextCollFromPool(RES_POOLCOLL_JAKETADRESS);
179 0 : pColl->SetFormatAttr(*pAddresseeSet);
180 : }
181 0 : if (pSenderSet)
182 : {
183 0 : SwTextFormatColl* pColl = pSh->GetTextCollFromPool(RES_POOLCOLL_SENDADRESS);
184 0 : pColl->SetFormatAttr(*pSenderSet);
185 : }
186 : }
187 :
188 0 : return nRet;
189 : }
190 :
191 0 : SwEnvPage::SwEnvPage(vcl::Window* pParent, const SfxItemSet& rSet)
192 : : SfxTabPage(pParent, "EnvAddressPage",
193 0 : "modules/swriter/ui/envaddresspage.ui", &rSet)
194 : {
195 0 : get(m_pAddrEdit, "addredit");
196 0 : get(m_pDatabaseLB, "database");
197 0 : get(m_pTableLB, "table");
198 0 : get(m_pDBFieldLB, "field");
199 0 : get(m_pInsertBT, "insert");
200 0 : get(m_pSenderBox, "sender");
201 0 : get(m_pSenderEdit, "senderedit");
202 0 : get(m_pPreview, "preview");
203 :
204 0 : long nTextBoxHeight(m_pAddrEdit->GetTextHeight() * 10);
205 0 : long nTextBoxWidth(m_pAddrEdit->approximate_char_width() * 25);
206 :
207 0 : m_pAddrEdit->set_height_request(nTextBoxHeight);
208 0 : m_pAddrEdit->set_width_request(nTextBoxWidth);
209 0 : m_pSenderEdit->set_height_request(nTextBoxHeight);
210 0 : m_pSenderEdit->set_width_request(nTextBoxWidth);
211 :
212 0 : long nListBoxWidth = approximate_char_width() * 30;
213 0 : m_pTableLB->set_width_request(nListBoxWidth);
214 0 : m_pDatabaseLB->set_width_request(nListBoxWidth);
215 0 : m_pDBFieldLB->set_width_request(nListBoxWidth);
216 :
217 0 : SetExchangeSupport();
218 0 : pSh = GetParentSwEnvDlg()->pSh;
219 :
220 : // Install handlers
221 0 : m_pDatabaseLB->SetSelectHdl(LINK(this, SwEnvPage, DatabaseHdl ));
222 0 : m_pTableLB->SetSelectHdl(LINK(this, SwEnvPage, DatabaseHdl ));
223 0 : m_pInsertBT->SetClickHdl (LINK(this, SwEnvPage, FieldHdl ));
224 0 : m_pSenderBox->SetClickHdl (LINK(this, SwEnvPage, SenderHdl ));
225 0 : m_pPreview->SetBorderStyle( WindowBorderStyle::MONO );
226 :
227 0 : SwDBData aData = pSh->GetDBData();
228 0 : sActDBName = aData.sDataSource + OUString(DB_DELIM) + aData.sCommand;
229 0 : InitDatabaseBox();
230 0 : }
231 :
232 0 : SwEnvPage::~SwEnvPage()
233 : {
234 0 : disposeOnce();
235 0 : }
236 :
237 0 : void SwEnvPage::dispose()
238 : {
239 0 : m_pAddrEdit.clear();
240 0 : m_pDatabaseLB.clear();
241 0 : m_pTableLB.clear();
242 0 : m_pDBFieldLB.clear();
243 0 : m_pInsertBT.clear();
244 0 : m_pSenderBox.clear();
245 0 : m_pSenderEdit.clear();
246 0 : m_pPreview.clear();
247 0 : SfxTabPage::dispose();
248 0 : }
249 :
250 0 : IMPL_LINK( SwEnvPage, DatabaseHdl, ListBox *, pListBox )
251 : {
252 0 : SwWait aWait( *pSh->GetView().GetDocShell(), true );
253 :
254 0 : if (pListBox == m_pDatabaseLB)
255 : {
256 0 : sActDBName = pListBox->GetSelectEntry();
257 0 : pSh->GetDBManager()->GetTableNames(m_pTableLB, sActDBName);
258 0 : sActDBName += OUString(DB_DELIM);
259 : }
260 : else
261 : {
262 0 : sActDBName = comphelper::string::setToken(sActDBName, 1, DB_DELIM, m_pTableLB->GetSelectEntry());
263 : }
264 : pSh->GetDBManager()->GetColumnNames(m_pDBFieldLB, m_pDatabaseLB->GetSelectEntry(),
265 0 : m_pTableLB->GetSelectEntry());
266 0 : return 0;
267 : }
268 :
269 0 : IMPL_LINK_NOARG(SwEnvPage, FieldHdl)
270 : {
271 0 : OUString aStr("<" + m_pDatabaseLB->GetSelectEntry() + "." +
272 0 : m_pTableLB->GetSelectEntry() + "." +
273 0 : OUString(m_pTableLB->GetSelectEntryData() == 0 ? '0' : '1') + "." +
274 0 : m_pDBFieldLB->GetSelectEntry() + ">");
275 0 : m_pAddrEdit->ReplaceSelected(aStr);
276 0 : Selection aSel = m_pAddrEdit->GetSelection();
277 0 : m_pAddrEdit->GrabFocus();
278 0 : m_pAddrEdit->SetSelection(aSel);
279 0 : return 0;
280 : }
281 :
282 0 : IMPL_LINK_NOARG(SwEnvPage, SenderHdl)
283 : {
284 0 : const bool bEnable = m_pSenderBox->IsChecked();
285 0 : GetParentSwEnvDlg()->aEnvItem.bSend = bEnable;
286 0 : m_pSenderEdit->Enable(bEnable);
287 0 : if ( bEnable )
288 : {
289 0 : m_pSenderEdit->GrabFocus();
290 0 : if(m_pSenderEdit->GetText().isEmpty())
291 0 : m_pSenderEdit->SetText(MakeSender());
292 : }
293 0 : m_pPreview->Invalidate();
294 0 : return 0;
295 : }
296 :
297 0 : void SwEnvPage::InitDatabaseBox()
298 : {
299 0 : if (pSh->GetDBManager())
300 : {
301 0 : m_pDatabaseLB->Clear();
302 0 : Sequence<OUString> aDataNames = SwDBManager::GetExistingDatabaseNames();
303 0 : const OUString* pDataNames = aDataNames.getConstArray();
304 :
305 0 : for (sal_Int32 i = 0; i < aDataNames.getLength(); i++)
306 0 : m_pDatabaseLB->InsertEntry(pDataNames[i]);
307 :
308 0 : OUString sDBName = sActDBName.getToken( 0, DB_DELIM );
309 0 : OUString sTableName = sActDBName.getToken( 1, DB_DELIM );
310 0 : m_pDatabaseLB->SelectEntry(sDBName);
311 0 : if (pSh->GetDBManager()->GetTableNames(m_pTableLB, sDBName))
312 : {
313 0 : m_pTableLB->SelectEntry(sTableName);
314 0 : pSh->GetDBManager()->GetColumnNames(m_pDBFieldLB, sDBName, sTableName);
315 : }
316 : else
317 0 : m_pDBFieldLB->Clear();
318 :
319 : }
320 0 : }
321 :
322 0 : VclPtr<SfxTabPage> SwEnvPage::Create(vcl::Window* pParent, const SfxItemSet* rSet)
323 : {
324 0 : return VclPtr<SwEnvPage>::Create(pParent, *rSet);
325 : }
326 :
327 0 : void SwEnvPage::ActivatePage(const SfxItemSet& rSet)
328 : {
329 0 : SfxItemSet aSet(rSet);
330 0 : aSet.Put(GetParentSwEnvDlg()->aEnvItem);
331 0 : Reset(&aSet);
332 0 : }
333 :
334 0 : SfxTabPage::sfxpg SwEnvPage::DeactivatePage(SfxItemSet* _pSet)
335 : {
336 0 : FillItem(GetParentSwEnvDlg()->aEnvItem);
337 0 : if( _pSet )
338 0 : FillItemSet(_pSet);
339 0 : return SfxTabPage::LEAVE_PAGE;
340 : }
341 :
342 0 : void SwEnvPage::FillItem(SwEnvItem& rItem)
343 : {
344 0 : rItem.aAddrText = m_pAddrEdit->GetText();
345 0 : rItem.bSend = m_pSenderBox->IsChecked();
346 0 : rItem.aSendText = m_pSenderEdit->GetText();
347 0 : }
348 :
349 0 : bool SwEnvPage::FillItemSet(SfxItemSet* rSet)
350 : {
351 0 : FillItem(GetParentSwEnvDlg()->aEnvItem);
352 0 : rSet->Put(GetParentSwEnvDlg()->aEnvItem);
353 0 : return true;
354 : }
355 :
356 0 : void SwEnvPage::Reset(const SfxItemSet* rSet)
357 : {
358 0 : SwEnvItem aItem = static_cast<const SwEnvItem&>( rSet->Get(FN_ENVELOP));
359 0 : m_pAddrEdit->SetText(convertLineEnd(aItem.aAddrText, GetSystemLineEnd()));
360 0 : m_pSenderEdit->SetText(convertLineEnd(aItem.aSendText, GetSystemLineEnd()));
361 0 : m_pSenderBox->Check (aItem.bSend);
362 0 : m_pSenderBox->GetClickHdl().Call(m_pSenderBox);
363 0 : }
364 :
365 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|