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