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 :
10 : #include <datastreamdlg.hxx>
11 :
12 : #include <sfx2/filedlghelper.hxx>
13 : #include <svtools/inettbc.hxx>
14 : #include <vcl/layout.hxx>
15 : #include <address.hxx>
16 : #include <docsh.hxx>
17 :
18 : namespace sc {
19 :
20 0 : DataStreamDlg::DataStreamDlg(ScDocShell *pDocShell, vcl::Window* pParent)
21 : : ModalDialog(pParent, "DataStreamDialog", "modules/scalc/ui/datastreams.ui")
22 0 : , mpDocShell(pDocShell)
23 : {
24 0 : get(m_pCbUrl, "url");
25 0 : get(m_pBtnBrowse, "browse");
26 0 : get(m_pRBDirectData, "directdata");
27 0 : get(m_pRBScriptData, "scriptdata");
28 0 : get(m_pRBValuesInLine, "valuesinline");
29 0 : get(m_pRBAddressValue, "addressvalue");
30 0 : get(m_pCBRefreshOnEmpty, "refresh_ui");
31 0 : get(m_pRBDataDown, "datadown");
32 0 : get(m_pRBRangeDown, "rangedown");
33 0 : get(m_pRBNoMove, "nomove");
34 0 : get(m_pRBMaxLimit, "maxlimit");
35 0 : get(m_pRBUnlimited, "unlimited");
36 0 : get(m_pEdRange, "range");
37 0 : get(m_pEdLimit, "limit");
38 0 : get(m_pBtnOk, "ok");
39 0 : get(m_pVclFrameLimit, "framelimit");
40 0 : get(m_pVclFrameMove, "framemove");
41 :
42 0 : m_pCbUrl->SetSelectHdl( LINK( this, DataStreamDlg, UpdateHdl ) );
43 0 : m_pRBAddressValue->SetClickHdl( LINK( this, DataStreamDlg, UpdateHdl ) );
44 0 : m_pRBAddressValue->Enable(false);
45 0 : m_pRBScriptData->Enable(false);
46 0 : m_pRBDirectData->Hide();
47 0 : m_pRBScriptData->Hide();
48 0 : m_pRBNoMove->Hide();
49 0 : m_pRBValuesInLine->SetClickHdl( LINK( this, DataStreamDlg, UpdateHdl ) );
50 0 : m_pEdRange->SetModifyHdl( LINK( this, DataStreamDlg, UpdateHdl ) );
51 0 : m_pBtnBrowse->SetClickHdl( LINK( this, DataStreamDlg, BrowseHdl ) );
52 0 : UpdateEnable();
53 0 : }
54 :
55 0 : DataStreamDlg::~DataStreamDlg()
56 : {
57 0 : disposeOnce();
58 0 : }
59 :
60 0 : void DataStreamDlg::dispose()
61 : {
62 0 : m_pCbUrl.clear();
63 0 : m_pBtnBrowse.clear();
64 0 : m_pRBDirectData.clear();
65 0 : m_pRBScriptData.clear();
66 0 : m_pRBValuesInLine.clear();
67 0 : m_pRBAddressValue.clear();
68 0 : m_pCBRefreshOnEmpty.clear();
69 0 : m_pRBDataDown.clear();
70 0 : m_pRBRangeDown.clear();
71 0 : m_pRBNoMove.clear();
72 0 : m_pRBMaxLimit.clear();
73 0 : m_pRBUnlimited.clear();
74 0 : m_pEdRange.clear();
75 0 : m_pEdLimit.clear();
76 0 : m_pBtnOk.clear();
77 0 : m_pVclFrameLimit.clear();
78 0 : m_pVclFrameMove.clear();
79 0 : ModalDialog::dispose();
80 0 : }
81 :
82 0 : IMPL_LINK_NOARG(DataStreamDlg, BrowseHdl)
83 : {
84 0 : sfx2::FileDialogHelper aFileDialog(0, 0);
85 0 : if ( aFileDialog.Execute() != ERRCODE_NONE )
86 0 : return 0;
87 :
88 0 : m_pCbUrl->SetText( aFileDialog.GetPath() );
89 0 : UpdateEnable();
90 0 : return 0;
91 : }
92 :
93 0 : IMPL_LINK_NOARG(DataStreamDlg, UpdateHdl)
94 : {
95 0 : UpdateEnable();
96 0 : return 0;
97 : }
98 :
99 0 : void DataStreamDlg::UpdateEnable()
100 : {
101 0 : bool bOk = !m_pCbUrl->GetURL().isEmpty();
102 0 : if (m_pRBAddressValue->IsChecked())
103 : {
104 0 : m_pVclFrameLimit->Disable();
105 0 : m_pVclFrameMove->Disable();
106 0 : m_pEdRange->Disable();
107 : }
108 : else
109 : {
110 0 : m_pVclFrameLimit->Enable();
111 0 : m_pVclFrameMove->Enable();
112 0 : m_pEdRange->Enable();
113 0 : if (bOk)
114 : {
115 : // Check the given range to make sure it's valid.
116 0 : ScRange aTest = GetStartRange();
117 0 : if (!aTest.IsValid())
118 0 : bOk = false;
119 : }
120 : }
121 0 : m_pBtnOk->Enable(bOk);
122 0 : setOptimalLayoutSize();
123 0 : }
124 :
125 0 : ScRange DataStreamDlg::GetStartRange()
126 : {
127 0 : OUString aStr = m_pEdRange->GetText();
128 0 : ScDocument& rDoc = mpDocShell->GetDocument();
129 0 : ScRange aRange;
130 0 : sal_uInt16 nRes = aRange.Parse(aStr, &rDoc, rDoc.GetAddressConvention());
131 0 : if ((nRes & SCA_VALID) != SCA_VALID || !aRange.IsValid())
132 : {
133 : // Invalid range.
134 0 : aRange.SetInvalid();
135 0 : return aRange;
136 : }
137 :
138 : // Make sure it's only one row tall.
139 0 : if (aRange.aStart.Row() != aRange.aEnd.Row())
140 0 : aRange.SetInvalid();
141 :
142 0 : return aRange;
143 : }
144 :
145 0 : void DataStreamDlg::Init( const DataStream& rStrm )
146 : {
147 0 : m_pCbUrl->SetText(rStrm.GetURL());
148 0 : ScDocument& rDoc = mpDocShell->GetDocument();
149 :
150 0 : ScRange aRange = rStrm.GetRange();
151 0 : ScRange aTopRange = aRange;
152 0 : aTopRange.aEnd.SetRow(aTopRange.aStart.Row());
153 0 : OUString aStr = aTopRange.Format(SCR_ABS_3D, &rDoc, rDoc.GetAddressConvention());
154 0 : m_pEdRange->SetText(aStr);
155 0 : SCROW nRows = aRange.aEnd.Row() - aRange.aStart.Row() + 1;
156 :
157 0 : if (aRange.aEnd.Row() == MAXROW)
158 0 : m_pRBUnlimited->Check();
159 : else
160 : {
161 0 : m_pRBMaxLimit->Check();
162 0 : m_pEdLimit->SetText(OUString::number(nRows));
163 : }
164 :
165 0 : DataStream::MoveType eMove = rStrm.GetMove();
166 0 : switch (eMove)
167 : {
168 : case DataStream::MOVE_DOWN:
169 0 : m_pRBDataDown->Check();
170 0 : break;
171 : case DataStream::RANGE_DOWN:
172 0 : m_pRBRangeDown->Check();
173 0 : break;
174 : case DataStream::MOVE_UP:
175 : case DataStream::NO_MOVE:
176 : default:
177 : ;
178 : }
179 :
180 0 : m_pCBRefreshOnEmpty->Check(rStrm.IsRefreshOnEmptyLine());
181 :
182 0 : UpdateEnable();
183 0 : }
184 :
185 0 : void DataStreamDlg::StartStream()
186 : {
187 0 : ScRange aStartRange = GetStartRange();
188 0 : if (!aStartRange.IsValid())
189 : // Don't start the stream without a valid range.
190 0 : return;
191 :
192 0 : sal_Int32 nLimit = 0;
193 0 : if (m_pRBMaxLimit->IsChecked())
194 0 : nLimit = m_pEdLimit->GetText().toInt32();
195 0 : OUString rURL = m_pCbUrl->GetText();
196 0 : sal_uInt32 nSettings = 0;
197 0 : if (m_pRBScriptData->IsChecked())
198 0 : nSettings |= DataStream::SCRIPT_STREAM;
199 0 : if (m_pRBValuesInLine->IsChecked())
200 0 : nSettings |= DataStream::VALUES_IN_LINE;
201 :
202 : DataStream::MoveType eMove =
203 0 : m_pRBRangeDown->IsChecked() ? DataStream::RANGE_DOWN : DataStream::MOVE_DOWN;
204 :
205 0 : DataStream* pStream = DataStream::Set(mpDocShell, rURL, aStartRange, nLimit, eMove, nSettings);
206 0 : pStream->SetRefreshOnEmptyLine(m_pCBRefreshOnEmpty->IsChecked());
207 0 : DataStream::MakeToolbarVisible();
208 0 : pStream->StartImport();
209 : }
210 :
211 156 : }
212 :
213 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|