[Libreoffice-commits] .: Branch 'feature/calc-xml-source' - sc/inc sc/Library_scfilt.mk sc/Library_sc.mk sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Oct 12 18:31:54 PDT 2012


 sc/Library_sc.mk                            |    1 
 sc/Library_scfilt.mk                        |    1 
 sc/inc/orcusxml.hxx                         |   11 ++-
 sc/source/core/tool/orcusxml.cxx            |   22 ++++++
 sc/source/filter/orcus/orcusfiltersimpl.cxx |    2 
 sc/source/filter/orcus/orcusxml.cxx         |   15 ----
 sc/source/ui/inc/xmlsourcedlg.hrc           |    4 -
 sc/source/ui/inc/xmlsourcedlg.hxx           |   15 ++--
 sc/source/ui/src/xmlsourcedlg.src           |   24 +-----
 sc/source/ui/xmlsource/xmlsourcedlg.cxx     |  100 +++++++++++++++++++++++-----
 10 files changed, 131 insertions(+), 64 deletions(-)

New commits:
commit 1100902333b55264855f3423bfc1f463e19c8f18
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Oct 12 21:32:09 2012 -0400

    More progress on the dialog.
    
    Change-Id: Ib07d6d5de7cd0d72356bbb7859342f5038f05f95

diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index 2953b4a..89f231a 100644
--- a/sc/Library_sc.mk
+++ b/sc/Library_sc.mk
@@ -206,6 +206,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
 	sc/source/core/tool/navicfg \
 	sc/source/core/tool/odffmap \
 	sc/source/core/tool/optutil \
+	sc/source/core/tool/orcusxml \
 	sc/source/core/tool/parclass \
 	sc/source/core/tool/printopt \
 	sc/source/core/tool/prnsave \
diff --git a/sc/Library_scfilt.mk b/sc/Library_scfilt.mk
index 8809028..7a5256e 100644
--- a/sc/Library_scfilt.mk
+++ b/sc/Library_scfilt.mk
@@ -219,7 +219,6 @@ $(eval $(call gb_Library_add_exception_objects,scfilt,\
         sc/source/filter/oox/worksheethelper \
         sc/source/filter/oox/worksheetsettings \
         sc/source/filter/orcus/orcusfiltersimpl \
-        sc/source/filter/orcus/orcusxml \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/sc/inc/orcusxml.hxx b/sc/inc/orcusxml.hxx
index cdc4679..d615ab6 100644
--- a/sc/inc/orcusxml.hxx
+++ b/sc/inc/orcusxml.hxx
@@ -10,10 +10,13 @@
 #ifndef __SC_ORCUSXML_HXX__
 #define __SC_ORCUSXML_HXX__
 
+#include "scdllapi.h"
 #include "vcl/image.hxx"
 
 #include <boost/ptr_container/ptr_vector.hpp>
 
+class SvLBoxEntry;
+
 /**
  * Parameter used during call to ScOrcusFilters::loadXMLStructure().
  */
@@ -22,14 +25,14 @@ struct ScOrcusXMLTreeParam
     enum EntryType { ElementDefault, ElementRepeat, Attribute };
 
     /** Custom data stored with each tree item. */
-    struct TreeEntryUserData
+    struct EntryData
     {
         EntryType meType;
 
-        TreeEntryUserData(EntryType eType);
+        SC_DLLPUBLIC EntryData(EntryType eType);
     };
 
-    typedef boost::ptr_vector<TreeEntryUserData> UserDataStoreType;
+    typedef boost::ptr_vector<EntryData> UserDataStoreType;
 
     Image maImgElementDefault;
     Image maImgElementRepeat;
@@ -40,6 +43,8 @@ struct ScOrcusXMLTreeParam
      * the life cycle of user datas.
      */
     UserDataStoreType maUserDataStore;
+
+    static SC_DLLPUBLIC EntryData* getUserData(SvLBoxEntry& rEntry);
 };
 
 #endif
diff --git a/sc/source/core/tool/orcusxml.cxx b/sc/source/core/tool/orcusxml.cxx
new file mode 100644
index 0000000..4e9ef80
--- /dev/null
+++ b/sc/source/core/tool/orcusxml.cxx
@@ -0,0 +1,22 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "orcusxml.hxx"
+
+#include "svtools/treelistbox.hxx"
+
+ScOrcusXMLTreeParam::EntryData::EntryData(EntryType eType) :
+    meType(eType) {}
+
+ScOrcusXMLTreeParam::EntryData* ScOrcusXMLTreeParam::getUserData(SvLBoxEntry& rEntry)
+{
+    return static_cast<ScOrcusXMLTreeParam::EntryData*>(rEntry.GetUserData());
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx
index c5b8711..b4a1408 100644
--- a/sc/source/filter/orcus/orcusfiltersimpl.cxx
+++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx
@@ -179,7 +179,7 @@ namespace {
 void setUserDataToEntry(
     SvLBoxEntry& rEntry, ScOrcusXMLTreeParam::UserDataStoreType& rStore, ScOrcusXMLTreeParam::EntryType eType)
 {
-    rStore.push_back(new ScOrcusXMLTreeParam::TreeEntryUserData(eType));
+    rStore.push_back(new ScOrcusXMLTreeParam::EntryData(eType));
     rEntry.SetUserData(&rStore.back());
 }
 
diff --git a/sc/source/filter/orcus/orcusxml.cxx b/sc/source/filter/orcus/orcusxml.cxx
deleted file mode 100644
index 68746be..0000000
--- a/sc/source/filter/orcus/orcusxml.cxx
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "orcusxml.hxx"
-
-ScOrcusXMLTreeParam::TreeEntryUserData::TreeEntryUserData(EntryType eType) :
-    meType(eType) {}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/xmlsourcedlg.hrc b/sc/source/ui/inc/xmlsourcedlg.hrc
index 03cb645..a5df403 100644
--- a/sc/source/ui/inc/xmlsourcedlg.hrc
+++ b/sc/source/ui/inc/xmlsourcedlg.hrc
@@ -17,7 +17,6 @@
 #define FT_SOURCE_FILE 12
 
 #define FL_MAP_XML_TO_DOCUMENT 20
-#define FT_TREE_ITEM_NAME 21
 #define FT_MAPPED_CELL_TITLE 22
 #define ED_MAPPED_CELL 23
 #define BTN_MAPPED_CELL 24
@@ -28,7 +27,4 @@
 #define IMG_ELEMENT_ATTRIBUTE 52
 #define IMG_FILE_OPEN 53
 
-#define STR_CELL_LINK 70
-#define STR_RANGE_LINK 71
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sc/source/ui/inc/xmlsourcedlg.hxx b/sc/source/ui/inc/xmlsourcedlg.hxx
index f946fb2..c6a5008 100644
--- a/sc/source/ui/inc/xmlsourcedlg.hxx
+++ b/sc/source/ui/inc/xmlsourcedlg.hxx
@@ -37,10 +37,9 @@ class ScXMLSourceDlg : public ScAnyRefDlg
 
     FixedLine maFtMapXmlDoc;
 
-    FixedText maFtTreeItemName;
     FixedText maFtMappedCellTitle;
-    formula::RefEdit   maEdit;
-    formula::RefButton maBtnRb;
+    formula::RefEdit   maRefEdit;
+    formula::RefButton maRefBtn;
 
     ScXMLSourceTree maLbTree;
 
@@ -48,9 +47,6 @@ class ScXMLSourceDlg : public ScAnyRefDlg
 
     Image maImgFileOpen;
 
-    rtl::OUString maStrCellLink;
-    rtl::OUString maStrRangeLink;
-
     rtl::OUString maSrcPath;
 
     ScOrcusXMLTreeParam maXMLParam;
@@ -78,6 +74,13 @@ private:
     void HandleGetFocus(Control* pCtrl);
     void HandleLoseFocus(Control* pCtrl);
     void TreeItemSelected();
+    void DefaultElementSelected(SvLBoxEntry& rEntry);
+    void RepeatElementSelected(SvLBoxEntry& rEntry);
+    void AttributeSelected(SvLBoxEntry& rEntry);
+
+    void SetNonLinkable();
+    void SetSingleLinkable();
+    void SetRangeLinkable();
 
     DECL_LINK(GetFocusHdl, Control*);
     DECL_LINK(LoseFocusHdl, Control*);
diff --git a/sc/source/ui/src/xmlsourcedlg.src b/sc/source/ui/src/xmlsourcedlg.src
index 342d47a..9d76d97 100644
--- a/sc/source/ui/src/xmlsourcedlg.src
+++ b/sc/source/ui/src/xmlsourcedlg.src
@@ -48,29 +48,25 @@ ModelessDialog RID_SCDLG_XML_SOURCE
         Text [ en-US ] = "Map to document";
     };
 
-    FixedText FT_TREE_ITEM_NAME
-    {
-        Pos = MAP_APPFONT( 12, 52 );
-        Size = MAP_APPFONT ( 100 , 8 ) ;
-    };
-
     FixedText FT_MAPPED_CELL_TITLE
     {
-        Pos = MAP_APPFONT( 12, 67 );
+        Pos = MAP_APPFONT( 12, 55 );
         Size = MAP_APPFONT ( 100 , 8 ) ;
+
+        Text [ en-US ] = "Linked cell";
     };
 
     Edit ED_MAPPED_CELL
     {
         Border = TRUE ;
-        Pos = MAP_APPFONT ( 12 , 81 ) ;
+        Pos = MAP_APPFONT ( 12 , 67 ) ;
         Size = MAP_APPFONT ( 69 , 12 ) ;
         TabStop = TRUE ;
     };
 
     ImageButton BTN_MAPPED_CELL
     {
-        Pos = MAP_APPFONT ( 83 , 80 ) ;
+        Pos = MAP_APPFONT ( 83 , 66 ) ;
         Size = MAP_APPFONT ( 13 , 15 ) ;
         TabStop = FALSE ;
         QuickHelpText [ en-US ] = "Shrink" ;
@@ -113,15 +109,5 @@ ModelessDialog RID_SCDLG_XML_SOURCE
         Pos = MAP_APPFONT ( 194 , 181 ) ;
         Size = MAP_APPFONT ( 50 , 14 ) ;
     };
-
-    String STR_CELL_LINK
-    {
-        Text [ en-US ] = "Link to cell";
-    };
-
-    String STR_RANGE_LINK
-    {
-        Text [ en-US ] = "Link to range";
-    };
 };
 
diff --git a/sc/source/ui/xmlsource/xmlsourcedlg.cxx b/sc/source/ui/xmlsource/xmlsourcedlg.cxx
index 6071f82..c4fb781 100644
--- a/sc/source/ui/xmlsource/xmlsourcedlg.cxx
+++ b/sc/source/ui/xmlsource/xmlsourcedlg.cxx
@@ -36,17 +36,14 @@ ScXMLSourceDlg::ScXMLSourceDlg(
     maBtnSelectSource(this, ScResId(BTN_SELECT_SOURCE_FILE)),
     maFtSourceFile(this, ScResId(FT_SOURCE_FILE)),
     maFtMapXmlDoc(this, ScResId(FL_MAP_XML_TO_DOCUMENT)),
-    maFtTreeItemName(this, ScResId(FT_TREE_ITEM_NAME)),
     maFtMappedCellTitle(this, ScResId(FT_MAPPED_CELL_TITLE)),
-    maEdit(this, this, ScResId(ED_MAPPED_CELL)),
-    maBtnRb(this, ScResId(BTN_MAPPED_CELL), &maEdit, this),
+    maRefEdit(this, this, ScResId(ED_MAPPED_CELL)),
+    maRefBtn(this, ScResId(BTN_MAPPED_CELL), &maRefEdit, this),
     maLbTree(this, ScResId(LB_SOURCE_TREE)),
     maBtnCancel(this, ScResId(BTN_CANCEL)),
     maImgFileOpen(ScResId(IMG_FILE_OPEN)),
-    maStrCellLink(ScResId(STR_CELL_LINK).toString()),
-    maStrRangeLink(ScResId(STR_RANGE_LINK).toString()),
     mpDoc(pDoc),
-    mpActiveEdit(&maEdit),
+    mpActiveEdit(&maRefEdit),
     mbDlgLostFocus(false)
 {
     maXMLParam.maImgElementDefault = Image(ScResId(IMG_ELEMENT_DEFAULT));
@@ -59,15 +56,16 @@ ScXMLSourceDlg::ScXMLSourceDlg(
     maBtnSelectSource.SetClickHdl(LINK(this, ScXMLSourceDlg, BtnPressedHdl));
 
     Link aLink = LINK(this, ScXMLSourceDlg, GetFocusHdl);
-    maEdit.SetGetFocusHdl(aLink);
-    maBtnRb.SetGetFocusHdl(aLink);
+    maRefEdit.SetGetFocusHdl(aLink);
+    maRefBtn.SetGetFocusHdl(aLink);
     aLink = LINK(this, ScXMLSourceDlg, LoseFocusHdl);
-    maEdit.SetLoseFocusHdl(aLink);
-    maBtnRb.SetLoseFocusHdl(aLink);
+    maRefEdit.SetLoseFocusHdl(aLink);
+    maRefBtn.SetLoseFocusHdl(aLink);
 
     aLink = LINK(this, ScXMLSourceDlg, TreeItemSelectHdl);
     maLbTree.SetSelectHdl(aLink);
-    maFtMappedCellTitle.SetText(maStrCellLink);
+
+    SetNonLinkable();
 }
 
 ScXMLSourceDlg::~ScXMLSourceDlg()
@@ -172,8 +170,8 @@ void ScXMLSourceDlg::LoadSourceFileStructure(const OUString& rPath)
 void ScXMLSourceDlg::HandleGetFocus(Control* pCtrl)
 {
     mpActiveEdit = NULL;
-    if (pCtrl == &maEdit || pCtrl == &maBtnRb)
-        mpActiveEdit = &maEdit;
+    if (pCtrl == &maRefEdit || pCtrl == &maRefBtn)
+        mpActiveEdit = &maRefEdit;
 
     if (mpActiveEdit)
         mpActiveEdit->SetSelection(Selection(0, SELECTION_MAX));
@@ -186,8 +184,80 @@ void ScXMLSourceDlg::HandleLoseFocus(Control* /*pCtrl*/)
 void ScXMLSourceDlg::TreeItemSelected()
 {
     SvLBoxEntry* pEntry = maLbTree.GetCurEntry();
-    OUString aName = maLbTree.GetEntryText(pEntry);
-    maFtTreeItemName.SetText(aName);
+    if (!pEntry)
+        return;
+
+    ScOrcusXMLTreeParam::EntryData* pUserData = ScOrcusXMLTreeParam::getUserData(*pEntry);
+
+    if (!pUserData)
+        return;
+
+    switch (pUserData->meType)
+    {
+        case ScOrcusXMLTreeParam::Attribute:
+            AttributeSelected(*pEntry);
+        break;
+        case ScOrcusXMLTreeParam::ElementDefault:
+            DefaultElementSelected(*pEntry);
+        break;
+        case ScOrcusXMLTreeParam::ElementRepeat:
+            RepeatElementSelected(*pEntry);
+        break;
+        default:
+            ;
+    }
+}
+
+void ScXMLSourceDlg::DefaultElementSelected(SvLBoxEntry& rEntry)
+{
+    if (maLbTree.GetChildCount(&rEntry) > 0)
+    {
+        // Only an element with no child elements (leaf element) can be linked.
+        SetNonLinkable();
+        return;
+    }
+
+    // TODO: Check all its parents and make sure non of them are range-linked
+    // nor repeat elements.
+    SetSingleLinkable();
+}
+
+void ScXMLSourceDlg::RepeatElementSelected(SvLBoxEntry& rEntry)
+{
+    // TODO: Check all its child elements / attributes and make sure non of
+    // them are linked or repeat elements.  In the future we will support
+    // range linking of repeat element who has another repeat elements. But
+    // first I need to support that in orcus.
+
+    SetNonLinkable();
+}
+
+void ScXMLSourceDlg::AttributeSelected(SvLBoxEntry& rEntry)
+{
+    // TODO: Check all its parent elements and make sure non of them are
+    // range-linked nor repeat elements.
+    SetSingleLinkable();
+}
+
+void ScXMLSourceDlg::SetNonLinkable()
+{
+    maFtMappedCellTitle.Disable();
+    maRefEdit.Disable();
+    maRefBtn.Disable();
+}
+
+void ScXMLSourceDlg::SetSingleLinkable()
+{
+    maFtMappedCellTitle.Enable();
+    maRefEdit.Enable();
+    maRefBtn.Enable();
+}
+
+void ScXMLSourceDlg::SetRangeLinkable()
+{
+    maFtMappedCellTitle.Enable();
+    maRefEdit.Enable();
+    maRefBtn.Enable();
 }
 
 IMPL_LINK(ScXMLSourceDlg, GetFocusHdl, Control*, pCtrl)


More information about the Libreoffice-commits mailing list