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 : IMPL_LINK_NOARG(DataStreamDlg, BrowseHdl)
56 : {
57 0 : sfx2::FileDialogHelper aFileDialog(0, 0);
58 0 : if ( aFileDialog.Execute() != ERRCODE_NONE )
59 0 : return 0;
60 :
61 0 : m_pCbUrl->SetText( aFileDialog.GetPath() );
62 0 : UpdateEnable();
63 0 : return 0;
64 : }
65 :
66 0 : IMPL_LINK_NOARG(DataStreamDlg, UpdateHdl)
67 : {
68 0 : UpdateEnable();
69 0 : return 0;
70 : }
71 :
72 0 : void DataStreamDlg::UpdateEnable()
73 : {
74 0 : bool bOk = !m_pCbUrl->GetURL().isEmpty();
75 0 : if (m_pRBAddressValue->IsChecked())
76 : {
77 0 : m_pVclFrameLimit->Disable();
78 0 : m_pVclFrameMove->Disable();
79 0 : m_pEdRange->Disable();
80 : }
81 : else
82 : {
83 0 : m_pVclFrameLimit->Enable();
84 0 : m_pVclFrameMove->Enable();
85 0 : m_pEdRange->Enable();
86 0 : if (bOk)
87 : {
88 : // Check the given range to make sure it's valid.
89 0 : ScRange aTest = GetStartRange();
90 0 : if (!aTest.IsValid())
91 0 : bOk = false;
92 : }
93 : }
94 0 : m_pBtnOk->Enable(bOk);
95 0 : setOptimalLayoutSize();
96 0 : }
97 :
98 0 : ScRange DataStreamDlg::GetStartRange()
99 : {
100 0 : OUString aStr = m_pEdRange->GetText();
101 0 : ScDocument& rDoc = mpDocShell->GetDocument();
102 0 : ScRange aRange;
103 0 : sal_uInt16 nRes = aRange.Parse(aStr, &rDoc, rDoc.GetAddressConvention());
104 0 : if ((nRes & SCA_VALID) != SCA_VALID || !aRange.IsValid())
105 : {
106 : // Invalid range.
107 0 : aRange.SetInvalid();
108 0 : return aRange;
109 : }
110 :
111 : // Make sure it's only one row tall.
112 0 : if (aRange.aStart.Row() != aRange.aEnd.Row())
113 0 : aRange.SetInvalid();
114 :
115 0 : return aRange;
116 : }
117 :
118 0 : void DataStreamDlg::Init( const DataStream& rStrm )
119 : {
120 0 : m_pCbUrl->SetText(rStrm.GetURL());
121 0 : ScDocument& rDoc = mpDocShell->GetDocument();
122 :
123 0 : ScRange aRange = rStrm.GetRange();
124 0 : ScRange aTopRange = aRange;
125 0 : aTopRange.aEnd.SetRow(aTopRange.aStart.Row());
126 0 : OUString aStr = aTopRange.Format(SCR_ABS_3D, &rDoc, rDoc.GetAddressConvention());
127 0 : m_pEdRange->SetText(aStr);
128 0 : SCROW nRows = aRange.aEnd.Row() - aRange.aStart.Row() + 1;
129 :
130 0 : if (aRange.aEnd.Row() == MAXROW)
131 0 : m_pRBUnlimited->Check();
132 : else
133 : {
134 0 : m_pRBMaxLimit->Check();
135 0 : m_pEdLimit->SetText(OUString::number(nRows));
136 : }
137 :
138 0 : DataStream::MoveType eMove = rStrm.GetMove();
139 0 : switch (eMove)
140 : {
141 : case DataStream::MOVE_DOWN:
142 0 : m_pRBDataDown->Check();
143 0 : break;
144 : case DataStream::RANGE_DOWN:
145 0 : m_pRBRangeDown->Check();
146 0 : break;
147 : case DataStream::MOVE_UP:
148 : case DataStream::NO_MOVE:
149 : default:
150 : ;
151 : }
152 :
153 0 : m_pCBRefreshOnEmpty->Check(rStrm.IsRefreshOnEmptyLine());
154 :
155 0 : UpdateEnable();
156 0 : }
157 :
158 0 : void DataStreamDlg::StartStream()
159 : {
160 0 : ScRange aStartRange = GetStartRange();
161 0 : if (!aStartRange.IsValid())
162 : // Don't start the stream without a valid range.
163 0 : return;
164 :
165 0 : sal_Int32 nLimit = 0;
166 0 : if (m_pRBMaxLimit->IsChecked())
167 0 : nLimit = m_pEdLimit->GetText().toInt32();
168 0 : OUString rURL = m_pCbUrl->GetText();
169 0 : sal_uInt32 nSettings = 0;
170 0 : if (m_pRBScriptData->IsChecked())
171 0 : nSettings |= DataStream::SCRIPT_STREAM;
172 0 : if (m_pRBValuesInLine->IsChecked())
173 0 : nSettings |= DataStream::VALUES_IN_LINE;
174 :
175 : DataStream::MoveType eMove =
176 0 : m_pRBRangeDown->IsChecked() ? DataStream::RANGE_DOWN : DataStream::MOVE_DOWN;
177 :
178 0 : DataStream* pStream = DataStream::Set(mpDocShell, rURL, aStartRange, nLimit, eMove, nSettings);
179 0 : pStream->SetRefreshOnEmptyLine(m_pCBRefreshOnEmpty->IsChecked());
180 0 : DataStream::MakeToolbarVisible();
181 0 : pStream->StartImport();
182 : }
183 :
184 228 : }
185 :
186 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|