Kaydet (Commit) 6250b856 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

implement new more user friendly data provider dlg

This is still a work in progress.

Change-Id: I1e68c86acc810eec068b1f184b2307c51d9b58df
Reviewed-on: https://gerrit.libreoffice.org/43259Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
üst 3b21902a
......@@ -111,6 +111,8 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
sc/uiconfig/scalc/ui/dataform \
sc/uiconfig/scalc/ui/datastreams \
sc/uiconfig/scalc/ui/dataprovider \
sc/uiconfig/scalc/ui/dataproviderdlg \
sc/uiconfig/scalc/ui/dataproviderentry \
sc/uiconfig/scalc/ui/definedatabaserangedialog \
sc/uiconfig/scalc/ui/definename \
sc/uiconfig/scalc/ui/deletecells \
......@@ -211,6 +213,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
sc/uiconfig/scalc/ui/sortkey \
sc/uiconfig/scalc/ui/sortoptionspage \
sc/uiconfig/scalc/ui/sortwarning \
sc/uiconfig/scalc/ui/splitcolumnentry \
sc/uiconfig/scalc/ui/subtotaldialog \
sc/uiconfig/scalc/ui/subtotaloptionspage \
sc/uiconfig/scalc/ui/subtotalgrppage \
......
......@@ -16,51 +16,54 @@
#include <vcl/dialog.hxx>
#include <vcl/layout.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/listctrl.hxx>
#include <vcl/button.hxx>
#include "address.hxx"
#include "datamapper.hxx"
#include "dataprovider.hxx"
#include "datatableview.hxx"
class ScDocShell;
class SvtURLBox;
class ScRange;
class ComboBox;
#include <memory>
namespace sc {
class ScDocument;
class ScDataProviderBaseControl;
class ScDBData;
class DataProviderDlg : public ModalDialog
class ScDataProviderDlg : public ModalDialog
{
ScDocShell *mpDocShell;
private:
VclPtr<SvtURLBox> m_pCbUrl;
VclPtr<PushButton> m_pBtnBrowse;
VclPtr<OKButton> m_pBtnOk;
VclPtr<ListBox> m_pCBData;
VclPtr<ListBox> m_pCBProvider;
VclPtr<Edit> m_pEdID;
std::shared_ptr<ScDocument> mpDoc;
VclPtr<ScDataTableView> mpTable;
VclPtr<ListControl> mpList;
VclPtr<MenuBar> mpBar;
VclPtr<ScDataProviderBaseControl> mpDataProviderCtrl;
DECL_LINK(UpdateClickHdl, Button*, void);
DECL_LINK(UpdateComboBoxHdl, ComboBox&, void);
DECL_LINK(BrowseHdl, Button*, void);
DECL_LINK(EditHdl, Edit&, void);
DECL_LINK(SelectHdl, ListBox&, void);
ScDBData* pDBData;
void UpdateEnable();
void InitMenu();
std::shared_ptr<ExternalDataSource> mpDataSource;
DECL_LINK( StartMenuHdl, Menu*, bool );
DECL_LINK( ColumnMenuHdl, Menu*, bool );
DECL_LINK( ImportHdl, Window*, void );
public:
DataProviderDlg(ScDocShell *pDocShell, vcl::Window* pParent);
virtual ~DataProviderDlg() override;
ScDataProviderDlg(vcl::Window* pWindow, std::shared_ptr<ScDocument> pDoc);
virtual ~ScDataProviderDlg() override;
virtual void dispose() override;
void Init();
virtual void MouseButtonUp( const MouseEvent& rMEvt ) override;
void StartImport();
};
void applyAndQuit();
void cancelAndQuit();
}
void deleteColumn();
void splitColumn();
void mergeColumns();
void import();
};
#endif // INCLUDED_SC_SOURCE_UI_INC_DATAPROVIDERDLG_HXX
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -35,9 +35,10 @@ class ScDataTableColView : public ScHeaderControl
public:
ScDataTableColView(vcl::Window* pParent, ScDocument* pDoc, SelectionEngine* pSelectionEngine);
ScDataTableColView(vcl::Window* pParent, SelectionEngine* pSelectionEngine);
void SetPos(SCCOLROW nRow);
void Init(ScDocument* pDoc);
virtual SCCOLROW GetPos() const override;
virtual sal_uInt16 GetEntrySize(SCCOLROW nPos) const override;
......@@ -54,9 +55,10 @@ class ScDataTableRowView : public ScHeaderControl
public:
ScDataTableRowView(vcl::Window* pParent, ScDocument* pDoc, SelectionEngine* pSelectionEngine);
ScDataTableRowView(vcl::Window* pParent, SelectionEngine* pSelectionEngine);
void SetPos(SCCOLROW nRow);
void Init(ScDocument* pDoc);
virtual SCCOLROW GetPos() const override;
virtual sal_uInt16 GetEntrySize(SCCOLROW nPos) const override;
......@@ -91,8 +93,14 @@ class SC_DLLPUBLIC ScDataTableView : public Control
DECL_LINK( ScrollHdl, ScrollBar*, void );
protected:
virtual Size GetOptimalSize() const override;
public:
ScDataTableView(vcl::Window* pParent, std::shared_ptr<ScDocument> pDoc);
ScDataTableView(vcl::Window* pParent);
void Init(std::shared_ptr<ScDocument> pDoc);
~ScDataTableView() override;
......
......@@ -31,7 +31,7 @@
class ScTabView;
class ScHeaderControl : public vcl::Window
class SC_DLLPUBLIC ScHeaderControl : public vcl::Window
{
private:
SelectionEngine* pSelEngine;
......
......@@ -25,6 +25,8 @@
#include "fillinfo.hxx"
#include "table.hxx"
#include <vcl/builderfactory.hxx>
constexpr double nPPTX = 0.06666;
constexpr double nPPTY = 0.06666;
......@@ -32,13 +34,18 @@ constexpr sal_uInt16 nRowHeaderWidth = 100;
constexpr sal_uInt16 nColHeaderHeight = 20;
constexpr sal_uInt16 nScrollBarSize = 10;
ScDataTableColView::ScDataTableColView(vcl::Window* pParent, ScDocument* pDoc, SelectionEngine* pSelectionEngine):
ScDataTableColView::ScDataTableColView(vcl::Window* pParent, SelectionEngine* pSelectionEngine):
ScHeaderControl(pParent, pSelectionEngine, 1024, false, nullptr),
mpDoc(pDoc),
mpDoc(nullptr),
mnCol(0)
{
}
void ScDataTableColView::Init(ScDocument* pDoc)
{
mpDoc = pDoc;
}
void ScDataTableColView::SetPos(SCCOLROW nCol)
{
mnCol = nCol;
......@@ -78,13 +85,18 @@ void ScDataTableColView::HideEntries(SCCOLROW nPos, SCCOLROW nEndPos)
}
ScDataTableRowView::ScDataTableRowView(vcl::Window* pParent, ScDocument* pDoc, SelectionEngine* pSelectionEngine):
ScDataTableRowView::ScDataTableRowView(vcl::Window* pParent, SelectionEngine* pSelectionEngine):
ScHeaderControl(pParent, pSelectionEngine, 1024, true, nullptr),
mpDoc(pDoc),
mpDoc(nullptr),
mnRow(0)
{
}
void ScDataTableRowView::Init(ScDocument* pDoc)
{
mpDoc = pDoc;
}
void ScDataTableRowView::SetPos(SCCOLROW nRow)
{
mnRow = nRow;
......@@ -123,12 +135,11 @@ void ScDataTableRowView::HideEntries(SCCOLROW nPos, SCCOLROW nEndPos)
}
}
ScDataTableView::ScDataTableView(vcl::Window* pParent, std::shared_ptr<ScDocument> pDoc):
ScDataTableView::ScDataTableView(vcl::Window* pParent):
Control(pParent),
mpDoc(pDoc),
mpSelectionEngine(new SelectionEngine(this)),
mpColView(VclPtr<ScDataTableColView>::Create(this, mpDoc.get(), mpSelectionEngine.get())),
mpRowView(VclPtr<ScDataTableRowView>::Create(this, mpDoc.get(), mpSelectionEngine.get())),
mpColView(VclPtr<ScDataTableColView>::Create(this, mpSelectionEngine.get())),
mpRowView(VclPtr<ScDataTableRowView>::Create(this, mpSelectionEngine.get())),
mpVScroll(VclPtr<ScrollBar>::Create(this, WinBits(WB_VSCROLL | WB_DRAG))),
mpHScroll(VclPtr<ScrollBar>::Create(this, WinBits(WB_HSCROLL | WB_DRAG))),
mnFirstVisibleRow(0),
......@@ -151,6 +162,15 @@ ScDataTableView::ScDataTableView(vcl::Window* pParent, std::shared_ptr<ScDocumen
mpHScroll->Show();
}
void ScDataTableView::Init(std::shared_ptr<ScDocument> pDoc)
{
mpDoc = pDoc;
mpColView->Init(mpDoc.get());
mpRowView->Init(mpDoc.get());
}
VCL_BUILDER_FACTORY(ScDataTableView)
ScDataTableView::~ScDataTableView()
{
disposeOnce();
......@@ -261,6 +281,11 @@ void ScDataTableView::Paint(vcl::RenderContext& rRenderContext, const tools::Rec
Control::Paint(rRenderContext, rRectangle);
}
Size ScDataTableView::GetOptimalSize() const
{
return Size(600, 200);
}
IMPL_LINK(ScDataTableView, ScrollHdl, ScrollBar*, pScrollBar, void)
{
if (pScrollBar == mpVScroll.get())
......
......@@ -783,10 +783,12 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
break;
case SID_DATA_PROVIDER:
{
ScopedVclPtrInstance< sc::DataProviderDlg > aDialog( GetViewData()->GetDocShell(), pTabViewShell->GetDialogParent() );
std::shared_ptr<ScDocument> pDoc = std::make_shared<ScDocument>();
pDoc->InsertTab(0, "test");
ScopedVclPtrInstance< ScDataProviderDlg > aDialog( pTabViewShell->GetDialogParent(), pDoc);
if (aDialog->Execute() == RET_OK)
{
aDialog->StartImport();
// handle the import here
}
}
break;
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface domain="sc">
<requires lib="gtk+" version="3.20"/>
<requires lib="LibreOffice" version="1.0"/>
<object class="GtkWindow" id="dataproviderdlg">
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="sclo-ScDataTableView" id="data_table">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<object class="GtkListBox" id="operation_ctrl">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface domain="sc">
<requires lib="gtk+" version="3.0"/>
<object class="GtkGrid" id="grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="border_width">6</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkComboBox" id="provider_lst">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ed_url">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ed_id">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="dataproviderentry|url">URL:</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="dataproviderentry|id">ID:</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="dataproviderentry|provider">Data Provider:</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</interface>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface domain="sc">
<requires lib="gtk+" version="3.20"/>
<object class="GtkGrid" id="grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="border_width">6</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="splitcolumnentry|name">Split Column Action</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid_details">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="splitcolumnentry|separator">Separator:</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="splitcolumnentry|max_num_columns">Maximum Number of Columns</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ed_separator">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="num_cols">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="input_purpose">digits</property>
<property name="climb_rate">1</property>
<property name="numeric">True</property>
<property name="value">-1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</interface>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment