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,\ ...@@ -111,6 +111,8 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
sc/uiconfig/scalc/ui/dataform \ sc/uiconfig/scalc/ui/dataform \
sc/uiconfig/scalc/ui/datastreams \ sc/uiconfig/scalc/ui/datastreams \
sc/uiconfig/scalc/ui/dataprovider \ sc/uiconfig/scalc/ui/dataprovider \
sc/uiconfig/scalc/ui/dataproviderdlg \
sc/uiconfig/scalc/ui/dataproviderentry \
sc/uiconfig/scalc/ui/definedatabaserangedialog \ sc/uiconfig/scalc/ui/definedatabaserangedialog \
sc/uiconfig/scalc/ui/definename \ sc/uiconfig/scalc/ui/definename \
sc/uiconfig/scalc/ui/deletecells \ sc/uiconfig/scalc/ui/deletecells \
...@@ -211,6 +213,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\ ...@@ -211,6 +213,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
sc/uiconfig/scalc/ui/sortkey \ sc/uiconfig/scalc/ui/sortkey \
sc/uiconfig/scalc/ui/sortoptionspage \ sc/uiconfig/scalc/ui/sortoptionspage \
sc/uiconfig/scalc/ui/sortwarning \ sc/uiconfig/scalc/ui/sortwarning \
sc/uiconfig/scalc/ui/splitcolumnentry \
sc/uiconfig/scalc/ui/subtotaldialog \ sc/uiconfig/scalc/ui/subtotaldialog \
sc/uiconfig/scalc/ui/subtotaloptionspage \ sc/uiconfig/scalc/ui/subtotaloptionspage \
sc/uiconfig/scalc/ui/subtotalgrppage \ sc/uiconfig/scalc/ui/subtotalgrppage \
......
...@@ -16,51 +16,54 @@ ...@@ -16,51 +16,54 @@
#include <vcl/dialog.hxx> #include <vcl/dialog.hxx>
#include <vcl/layout.hxx> #include <vcl/layout.hxx>
#include <vcl/lstbox.hxx> #include <vcl/lstbox.hxx>
#include <vcl/listctrl.hxx>
#include <vcl/button.hxx>
#include "address.hxx" #include "datatableview.hxx"
#include "datamapper.hxx"
#include "dataprovider.hxx"
class ScDocShell; #include <memory>
class SvtURLBox;
class ScRange;
class ComboBox;
namespace sc { class ScDocument;
class ScDataProviderBaseControl;
class ScDBData;
class DataProviderDlg : public ModalDialog class ScDataProviderDlg : public ModalDialog
{ {
ScDocShell *mpDocShell; private:
VclPtr<SvtURLBox> m_pCbUrl; std::shared_ptr<ScDocument> mpDoc;
VclPtr<PushButton> m_pBtnBrowse; VclPtr<ScDataTableView> mpTable;
VclPtr<OKButton> m_pBtnOk; VclPtr<ListControl> mpList;
VclPtr<ListBox> m_pCBData; VclPtr<MenuBar> mpBar;
VclPtr<ListBox> m_pCBProvider; VclPtr<ScDataProviderBaseControl> mpDataProviderCtrl;
VclPtr<Edit> m_pEdID;
DECL_LINK(UpdateClickHdl, Button*, void); ScDBData* pDBData;
DECL_LINK(UpdateComboBoxHdl, ComboBox&, void);
DECL_LINK(BrowseHdl, Button*, void);
DECL_LINK(EditHdl, Edit&, void);
DECL_LINK(SelectHdl, ListBox&, void);
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: 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; 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: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -35,9 +35,10 @@ class ScDataTableColView : public ScHeaderControl ...@@ -35,9 +35,10 @@ class ScDataTableColView : public ScHeaderControl
public: public:
ScDataTableColView(vcl::Window* pParent, ScDocument* pDoc, SelectionEngine* pSelectionEngine); ScDataTableColView(vcl::Window* pParent, SelectionEngine* pSelectionEngine);
void SetPos(SCCOLROW nRow); void SetPos(SCCOLROW nRow);
void Init(ScDocument* pDoc);
virtual SCCOLROW GetPos() const override; virtual SCCOLROW GetPos() const override;
virtual sal_uInt16 GetEntrySize(SCCOLROW nPos) const override; virtual sal_uInt16 GetEntrySize(SCCOLROW nPos) const override;
...@@ -54,9 +55,10 @@ class ScDataTableRowView : public ScHeaderControl ...@@ -54,9 +55,10 @@ class ScDataTableRowView : public ScHeaderControl
public: public:
ScDataTableRowView(vcl::Window* pParent, ScDocument* pDoc, SelectionEngine* pSelectionEngine); ScDataTableRowView(vcl::Window* pParent, SelectionEngine* pSelectionEngine);
void SetPos(SCCOLROW nRow); void SetPos(SCCOLROW nRow);
void Init(ScDocument* pDoc);
virtual SCCOLROW GetPos() const override; virtual SCCOLROW GetPos() const override;
virtual sal_uInt16 GetEntrySize(SCCOLROW nPos) const override; virtual sal_uInt16 GetEntrySize(SCCOLROW nPos) const override;
...@@ -91,8 +93,14 @@ class SC_DLLPUBLIC ScDataTableView : public Control ...@@ -91,8 +93,14 @@ class SC_DLLPUBLIC ScDataTableView : public Control
DECL_LINK( ScrollHdl, ScrollBar*, void ); DECL_LINK( ScrollHdl, ScrollBar*, void );
protected:
virtual Size GetOptimalSize() const override;
public: public:
ScDataTableView(vcl::Window* pParent, std::shared_ptr<ScDocument> pDoc); ScDataTableView(vcl::Window* pParent);
void Init(std::shared_ptr<ScDocument> pDoc);
~ScDataTableView() override; ~ScDataTableView() override;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
class ScTabView; class ScTabView;
class ScHeaderControl : public vcl::Window class SC_DLLPUBLIC ScHeaderControl : public vcl::Window
{ {
private: private:
SelectionEngine* pSelEngine; SelectionEngine* pSelEngine;
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include "fillinfo.hxx" #include "fillinfo.hxx"
#include "table.hxx" #include "table.hxx"
#include <vcl/builderfactory.hxx>
constexpr double nPPTX = 0.06666; constexpr double nPPTX = 0.06666;
constexpr double nPPTY = 0.06666; constexpr double nPPTY = 0.06666;
...@@ -32,13 +34,18 @@ constexpr sal_uInt16 nRowHeaderWidth = 100; ...@@ -32,13 +34,18 @@ constexpr sal_uInt16 nRowHeaderWidth = 100;
constexpr sal_uInt16 nColHeaderHeight = 20; constexpr sal_uInt16 nColHeaderHeight = 20;
constexpr sal_uInt16 nScrollBarSize = 10; 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), ScHeaderControl(pParent, pSelectionEngine, 1024, false, nullptr),
mpDoc(pDoc), mpDoc(nullptr),
mnCol(0) mnCol(0)
{ {
} }
void ScDataTableColView::Init(ScDocument* pDoc)
{
mpDoc = pDoc;
}
void ScDataTableColView::SetPos(SCCOLROW nCol) void ScDataTableColView::SetPos(SCCOLROW nCol)
{ {
mnCol = nCol; mnCol = nCol;
...@@ -78,13 +85,18 @@ void ScDataTableColView::HideEntries(SCCOLROW nPos, SCCOLROW nEndPos) ...@@ -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), ScHeaderControl(pParent, pSelectionEngine, 1024, true, nullptr),
mpDoc(pDoc), mpDoc(nullptr),
mnRow(0) mnRow(0)
{ {
} }
void ScDataTableRowView::Init(ScDocument* pDoc)
{
mpDoc = pDoc;
}
void ScDataTableRowView::SetPos(SCCOLROW nRow) void ScDataTableRowView::SetPos(SCCOLROW nRow)
{ {
mnRow = nRow; mnRow = nRow;
...@@ -123,12 +135,11 @@ void ScDataTableRowView::HideEntries(SCCOLROW nPos, SCCOLROW nEndPos) ...@@ -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), Control(pParent),
mpDoc(pDoc),
mpSelectionEngine(new SelectionEngine(this)), mpSelectionEngine(new SelectionEngine(this)),
mpColView(VclPtr<ScDataTableColView>::Create(this, mpDoc.get(), mpSelectionEngine.get())), mpColView(VclPtr<ScDataTableColView>::Create(this, mpSelectionEngine.get())),
mpRowView(VclPtr<ScDataTableRowView>::Create(this, mpDoc.get(), mpSelectionEngine.get())), mpRowView(VclPtr<ScDataTableRowView>::Create(this, mpSelectionEngine.get())),
mpVScroll(VclPtr<ScrollBar>::Create(this, WinBits(WB_VSCROLL | WB_DRAG))), mpVScroll(VclPtr<ScrollBar>::Create(this, WinBits(WB_VSCROLL | WB_DRAG))),
mpHScroll(VclPtr<ScrollBar>::Create(this, WinBits(WB_HSCROLL | WB_DRAG))), mpHScroll(VclPtr<ScrollBar>::Create(this, WinBits(WB_HSCROLL | WB_DRAG))),
mnFirstVisibleRow(0), mnFirstVisibleRow(0),
...@@ -151,6 +162,15 @@ ScDataTableView::ScDataTableView(vcl::Window* pParent, std::shared_ptr<ScDocumen ...@@ -151,6 +162,15 @@ ScDataTableView::ScDataTableView(vcl::Window* pParent, std::shared_ptr<ScDocumen
mpHScroll->Show(); 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() ScDataTableView::~ScDataTableView()
{ {
disposeOnce(); disposeOnce();
...@@ -261,6 +281,11 @@ void ScDataTableView::Paint(vcl::RenderContext& rRenderContext, const tools::Rec ...@@ -261,6 +281,11 @@ void ScDataTableView::Paint(vcl::RenderContext& rRenderContext, const tools::Rec
Control::Paint(rRenderContext, rRectangle); Control::Paint(rRenderContext, rRectangle);
} }
Size ScDataTableView::GetOptimalSize() const
{
return Size(600, 200);
}
IMPL_LINK(ScDataTableView, ScrollHdl, ScrollBar*, pScrollBar, void) IMPL_LINK(ScDataTableView, ScrollHdl, ScrollBar*, pScrollBar, void)
{ {
if (pScrollBar == mpVScroll.get()) if (pScrollBar == mpVScroll.get())
......
...@@ -783,10 +783,12 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) ...@@ -783,10 +783,12 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
break; break;
case SID_DATA_PROVIDER: 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) if (aDialog->Execute() == RET_OK)
{ {
aDialog->StartImport(); // handle the import here
} }
} }
break; 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