[Libreoffice-commits] .: Branch 'feature/calc-xml-source' - sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Oct 10 21:20:30 PDT 2012


 sc/source/ui/inc/xmlsourcedlg.hxx       |    8 +++
 sc/source/ui/src/xmlsourcedlg.src       |    7 +--
 sc/source/ui/xmlsource/xmlsourcedlg.cxx |   71 +++++++++++++++++++++++++++++---
 3 files changed, 76 insertions(+), 10 deletions(-)

New commits:
commit a94b5f1d038beb809c9201f49b32bd3465a79b6d
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Thu Oct 11 00:20:46 2012 -0400

    Get the reference edit box to work properly.
    
    Change-Id: Ifd01fe05312c0ece867100019a9f84162e5778c4

diff --git a/sc/source/ui/inc/xmlsourcedlg.hxx b/sc/source/ui/inc/xmlsourcedlg.hxx
index ee8225c..c145f8b 100644
--- a/sc/source/ui/inc/xmlsourcedlg.hxx
+++ b/sc/source/ui/inc/xmlsourcedlg.hxx
@@ -54,7 +54,8 @@ class ScXMLSourceDlg : public ScAnyRefDlg
 
     ScDocument* mpDoc;
 
-    bool mbRefMode;
+    formula::RefEdit* mpActiveEdit;
+    bool mbDlgLostFocus;
 
 public:
     ScXMLSourceDlg(
@@ -63,6 +64,7 @@ public:
 
     virtual sal_Bool IsRefInputMode() const;
     virtual void SetReference(const ScRange& rRange, ScDocument* pDoc);
+    virtual void Deactivate();
     virtual void SetActive();
     virtual sal_Bool Close();
 
@@ -70,7 +72,11 @@ private:
 
     void SelectSourceFile();
     void LoadSourceFileStructure(const OUString& rPath);
+    void HandleGetFocus(Control* pCtrl);
+    void HandleLoseFocus(Control* pCtrl);
 
+    DECL_LINK(GetFocusHdl, Control*);
+    DECL_LINK(LoseFocusHdl, Control*);
     DECL_LINK(BtnPressedHdl, Button*);
 };
 
diff --git a/sc/source/ui/src/xmlsourcedlg.src b/sc/source/ui/src/xmlsourcedlg.src
index d4ef5ce..4119601 100644
--- a/sc/source/ui/src/xmlsourcedlg.src
+++ b/sc/source/ui/src/xmlsourcedlg.src
@@ -50,7 +50,7 @@ ModelessDialog RID_SCDLG_XML_SOURCE
 
     FixedText FT_MAPPED_CELL_TITLE
     {
-        Pos = MAP_APPFONT( 12, 50 );
+        Pos = MAP_APPFONT( 12, 52 );
         Size = MAP_APPFONT ( 100 , 8 ) ;
 
         Text [ en-US ] = "";
@@ -59,15 +59,14 @@ ModelessDialog RID_SCDLG_XML_SOURCE
     Edit ED_MAPPED_CELL
     {
         Border = TRUE ;
-        Pos = MAP_APPFONT ( 12 , 63 ) ;
+        Pos = MAP_APPFONT ( 12 , 66 ) ;
         Size = MAP_APPFONT ( 69 , 12 ) ;
         TabStop = TRUE ;
     };
 
-
     ImageButton BTN_MAPPED_CELL
     {
-        Pos = MAP_APPFONT ( 83 , 62 ) ;
+        Pos = MAP_APPFONT ( 83 , 65 ) ;
         Size = MAP_APPFONT ( 13 , 15 ) ;
         TabStop = FALSE ;
         QuickHelpText [ en-US ] = "Shrink" ;
diff --git a/sc/source/ui/xmlsource/xmlsourcedlg.cxx b/sc/source/ui/xmlsource/xmlsourcedlg.cxx
index 37e6c72..3a07997 100644
--- a/sc/source/ui/xmlsource/xmlsourcedlg.cxx
+++ b/sc/source/ui/xmlsource/xmlsourcedlg.cxx
@@ -34,8 +34,8 @@ ScXMLSourceDlg::ScXMLSourceDlg(
     maFtSourceFile(this, ScResId(FT_SOURCE_FILE)),
     maFtMapXmlDoc(this, ScResId(FL_MAP_XML_TO_DOCUMENT)),
     maFtMappedCellTitle(this, ScResId(FT_MAPPED_CELL_TITLE)),
-    maEdit(this, ScResId(ED_MAPPED_CELL)),
-    maBtnRb(this, ScResId(BTN_MAPPED_CELL)),
+    maEdit(this, this, ScResId(ED_MAPPED_CELL)),
+    maBtnRb(this, ScResId(BTN_MAPPED_CELL), &maEdit, this),
     maLbTree(this, ScResId(LB_SOURCE_TREE)),
     maBtnCancel(this, ScResId(BTN_CANCEL)),
     maImgFileOpen(ScResId(IMG_FILE_OPEN)),
@@ -45,13 +45,21 @@ ScXMLSourceDlg::ScXMLSourceDlg(
     maStrCellLink(ScResId(STR_CELL_LINK).toString()),
     maStrRangeLink(ScResId(STR_RANGE_LINK).toString()),
     mpDoc(pDoc),
-    mbRefMode(false)
+    mpActiveEdit(&maEdit),
+    mbDlgLostFocus(false)
 {
     maBtnSelectSource.SetModeImage(maImgFileOpen);
     FreeResource();
 
     maBtnSelectSource.SetClickHdl(LINK(this, ScXMLSourceDlg, BtnPressedHdl));
 
+    Link aLink = LINK(this, ScXMLSourceDlg, GetFocusHdl);
+    maEdit.SetGetFocusHdl(aLink);
+    maBtnRb.SetGetFocusHdl(aLink);
+    aLink = LINK(this, ScXMLSourceDlg, LoseFocusHdl);
+    maEdit.SetLoseFocusHdl(aLink);
+    maBtnRb.SetLoseFocusHdl(aLink);
+
     maFtMappedCellTitle.SetText(maStrCellLink);
 }
 
@@ -61,16 +69,43 @@ ScXMLSourceDlg::~ScXMLSourceDlg()
 
 sal_Bool ScXMLSourceDlg::IsRefInputMode() const
 {
-    return mbRefMode;
+    return mpActiveEdit != NULL;
 }
 
 void ScXMLSourceDlg::SetReference(const ScRange& rRange, ScDocument* pDoc)
 {
+    if (!mpActiveEdit)
+        return;
+
+    if (rRange.aStart != rRange.aEnd)
+        RefInputStart(mpActiveEdit);
+
+    OUString aStr;
+    rRange.aStart.Format(aStr, SCA_ABS_3D, pDoc, pDoc->GetAddressConvention());
+    mpActiveEdit->SetRefString(aStr);
+}
+
+void ScXMLSourceDlg::Deactivate()
+{
+    mbDlgLostFocus = true;
 }
 
 void ScXMLSourceDlg::SetActive()
 {
-    GrabFocus();
+    if (mbDlgLostFocus)
+    {
+        mbDlgLostFocus = false;
+        if (mpActiveEdit)
+        {
+            mpActiveEdit->GrabFocus();
+        }
+    }
+    else
+    {
+        GrabFocus();
+    }
+
+    RefInputDone();
 }
 
 sal_Bool ScXMLSourceDlg::Close()
@@ -114,6 +149,32 @@ void ScXMLSourceDlg::LoadSourceFileStructure(const OUString& rPath)
         maLbTree, rPath, maImgElemDefault, maImgElemRepeat, maImgElemAttribute);
 }
 
+void ScXMLSourceDlg::HandleGetFocus(Control* pCtrl)
+{
+    mpActiveEdit = NULL;
+    if (pCtrl == &maEdit || pCtrl == &maBtnRb)
+        mpActiveEdit = &maEdit;
+
+    if (mpActiveEdit)
+        mpActiveEdit->SetSelection(Selection(0, SELECTION_MAX));
+}
+
+void ScXMLSourceDlg::HandleLoseFocus(Control* /*pCtrl*/)
+{
+}
+
+IMPL_LINK(ScXMLSourceDlg, GetFocusHdl, Control*, pCtrl)
+{
+    HandleGetFocus(pCtrl);
+    return 0;
+}
+
+IMPL_LINK(ScXMLSourceDlg, LoseFocusHdl, Control*, pCtrl)
+{
+    HandleLoseFocus(pCtrl);
+    return 0;
+}
+
 IMPL_LINK(ScXMLSourceDlg, BtnPressedHdl, Button*, pBtn)
 {
     if (pBtn == &maBtnSelectSource)


More information about the Libreoffice-commits mailing list