basic/source/runtime/inputbox.cxx |  142 +++++++++++++-------------------------
 include/vcl/weld.hxx              |    1 
 svtools/UIConfig_svt.mk           |    1 
 svtools/uiconfig/ui/inputbox.ui   |  108 ++++++++++++++++++++++++++++
 vcl/source/app/salvtables.cxx     |    5 +
 vcl/unx/gtk3/gtk3gtkinst.cxx      |    5 +
 6 files changed, 171 insertions(+), 91 deletions(-)

New commits:
commit 6672151fbb6865415b4036525c13c182590369c9
Author: Caolán McNamara <caol...@redhat.com>
Date:   Wed Apr 11 21:41:35 2018 +0100

    weld SvRTLInputBox
    
    This (forgotten) dialog is the statbasic "InputBox" dialog
    
    Change-Id: Ifb65fb382be7bd6b5a2ba904e0cb64ddce2485a8
    Reviewed-on: https://gerrit.libreoffice.org/52749
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/basic/source/runtime/inputbox.cxx 
b/basic/source/runtime/inputbox.cxx
index c7f52dc47334..ae7302f14c21 100644
--- a/basic/source/runtime/inputbox.cxx
+++ b/basic/source/runtime/inputbox.cxx
@@ -18,130 +18,90 @@
  */
 
 #include <tools/lineend.hxx>
-#include <vcl/button.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/edit.hxx>
-#include <vcl/dialog.hxx>
 #include <vcl/svapp.hxx>
+#include <vcl/weld.hxx>
 #include <runtime.hxx>
 #include <stdobj.hxx>
 #include <rtlproto.hxx>
 #include <memory>
 
-class SvRTLInputBox : public ModalDialog
+class SvRTLInputBox : public weld::GenericDialogController
 {
-    VclPtr<Edit> aEdit;
-    VclPtr<OKButton> aOk;
-    VclPtr<CancelButton> aCancel;
-    VclPtr<FixedText> aPromptText;
-    OUString aText;
-
-    void PositionDialog( long nXTwips, long nYTwips, const Size& rDlgSize );
-    void InitButtons( const Size& rDlgSize );
-    void PositionEdit( const Size& rDlgSize );
-    void PositionPrompt( const OUString& rPrompt, const Size& rDlgSize );
-    DECL_LINK( OkHdl, Button *, void );
-    DECL_LINK( CancelHdl, Button *, void );
+    std::unique_ptr<weld::Entry> m_xEdit;
+    std::unique_ptr<weld::Button> m_xOk;
+    std::unique_ptr<weld::Button> m_xCancel;
+    std::unique_ptr<weld::Label> m_xPromptText;
+    OUString m_aText;
+
+    void PositionDialog( long nXTwips, long nYTwips );
+    void InitButtons();
+    void SetPrompt(const OUString& rPrompt);
+    DECL_LINK( OkHdl, weld::Button&, void );
+    DECL_LINK( CancelHdl, weld::Button&, void );
 
 public:
-    SvRTLInputBox( vcl::Window* pParent, const OUString& rPrompt, const 
OUString& rTitle,
+    SvRTLInputBox(weld::Window* pParent, const OUString& rPrompt, const 
OUString& rTitle,
         const OUString& rDefault, long nXTwips, long nYTwips );
-    virtual ~SvRTLInputBox() override { disposeOnce(); }
-    virtual void dispose() override;
-    OUString GetText() const override { return aText; }
+    OUString GetText() const { return m_aText; }
 };
 
-SvRTLInputBox::SvRTLInputBox( vcl::Window* pParent, const OUString& rPrompt,
+SvRTLInputBox::SvRTLInputBox(weld::Window* pParent, const OUString& rPrompt,
         const OUString& rTitle, const OUString& rDefault,
-        long nXTwips, long nYTwips ) :
-    ModalDialog( pParent,WB_3DLOOK | WB_MOVEABLE | WB_CLOSEABLE ),
-    aEdit( VclPtr<Edit>::Create(this,  WB_LEFT | WB_BORDER) ),
-    aOk( VclPtr<OKButton>::Create(this) ), aCancel( 
VclPtr<CancelButton>::Create(this) ), aPromptText( 
VclPtr<FixedText>::Create(this, WB_WORDBREAK) )
+        long nXTwips, long nYTwips)
+    : GenericDialogController(pParent, "svt/ui/inputbox.ui", "InputBox")
+    , m_xEdit(m_xBuilder->weld_entry("entry"))
+    , m_xOk(m_xBuilder->weld_button("ok"))
+    , m_xCancel(m_xBuilder->weld_button("cancel"))
+    , m_xPromptText(m_xBuilder->weld_label("prompt"))
 {
-    SetMapMode( MapMode( MapUnit::MapAppFont ) );
-    Size aDlgSizeApp( 280, 80 );
-    PositionDialog( nXTwips, nYTwips, aDlgSizeApp );
-    InitButtons( aDlgSizeApp );
-    PositionEdit( aDlgSizeApp );
-    PositionPrompt( rPrompt, aDlgSizeApp );
-    aOk->Show();
-    aCancel->Show();
-    aEdit->Show();
-    aPromptText->Show();
-    SetText( rTitle );
-    vcl::Font aFont( GetFont());
-    Color aColor( GetBackground().GetColor() );
-    aFont.SetFillColor( aColor );
-    aEdit->SetFont( aFont );
-    aEdit->SetText( rDefault );
-    aEdit->SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
+    PositionDialog( nXTwips, nYTwips );
+    InitButtons();
+    SetPrompt(rPrompt);
+    m_xDialog->set_title(rTitle);
+    m_xEdit->set_text(rDefault);
+    m_xEdit->select_region(0, -1);
 }
 
-void SvRTLInputBox::dispose()
+void SvRTLInputBox::InitButtons()
 {
-    aEdit.disposeAndClear();
-    aOk.disposeAndClear();
-    aCancel.disposeAndClear();
-    aPromptText.disposeAndClear();
-    ModalDialog::dispose();
+    m_xOk->connect_clicked(LINK(this,SvRTLInputBox, OkHdl));
+    m_xCancel->connect_clicked(LINK(this,SvRTLInputBox,CancelHdl));
 }
 
-void SvRTLInputBox::InitButtons( const Size& rDlgSize )
+void SvRTLInputBox::PositionDialog(long nXTwips, long nYTwips)
 {
-    aOk->SetSizePixel( LogicToPixel( Size( 45, 15) ));
-    aCancel->SetSizePixel( LogicToPixel( Size( 45, 15) ));
-    Point aPos( rDlgSize.Width()-45-10, 5 );
-    aOk->SetPosPixel( LogicToPixel( aPos ));
-    aPos.AdjustY(16 );
-    aCancel->SetPosPixel( LogicToPixel( aPos ));
-    aOk->SetClickHdl(LINK(this,SvRTLInputBox, OkHdl));
-    aCancel->SetClickHdl(LINK(this,SvRTLInputBox,CancelHdl));
-}
-
-void SvRTLInputBox::PositionDialog(long nXTwips, long nYTwips, const Size& 
rDlgSize)
-{
-    SetSizePixel( LogicToPixel(rDlgSize) );
     if( nXTwips != -1 && nYTwips != -1 )
     {
         Point aDlgPosApp( nXTwips, nYTwips );
-        SetPosPixel(LogicToPixel(aDlgPosApp, MapMode(MapUnit::MapTwip)));
+        OutputDevice* pDefaultDevice = Application::GetDefaultDevice();
+        pDefaultDevice->Push(PushFlags::MAPMODE);
+        pDefaultDevice->SetMapMode(MapMode( MapUnit::MapAppFont));
+        aDlgPosApp = pDefaultDevice->LogicToPixel(aDlgPosApp, 
MapMode(MapUnit::MapTwip));
+        pDefaultDevice->Pop();
+        m_xDialog->window_move(aDlgPosApp.X(), aDlgPosApp.Y());
     }
 }
 
-void SvRTLInputBox::PositionEdit( const Size& rDlgSize )
-{
-    aEdit->SetPosPixel( LogicToPixel( Point( 5,rDlgSize.Height()-35)));
-    aEdit->SetSizePixel( LogicToPixel( Size(rDlgSize.Width()-15,12)));
-}
-
-
-void SvRTLInputBox::PositionPrompt(const OUString& rPrompt,const Size& 
rDlgSize)
+void SvRTLInputBox::SetPrompt(const OUString& rPrompt)
 {
-    if ( rPrompt.isEmpty() )
+    if (rPrompt.isEmpty())
         return;
     OUString aText_(convertLineEnd(rPrompt, LINEEND_CR));
-    aPromptText->SetPosPixel( LogicToPixel(Point(5,5)));
-    aPromptText->SetText( aText_ );
-    Size aSize( rDlgSize );
-    aSize.AdjustWidth( -70 );
-    aSize.AdjustHeight( -50 );
-    aPromptText->SetSizePixel( LogicToPixel(aSize));
+    m_xPromptText->set_label( aText_ );
 }
 
-
-IMPL_LINK_NOARG( SvRTLInputBox, OkHdl, Button *, void )
+IMPL_LINK_NOARG( SvRTLInputBox, OkHdl, weld::Button&, void )
 {
-    aText = aEdit->GetText();
-    EndDialog( 1 );
+    m_aText = m_xEdit->get_text();
+    m_xDialog->response(RET_OK);
 }
 
-IMPL_LINK_NOARG( SvRTLInputBox, CancelHdl, Button *, void )
+IMPL_LINK_NOARG( SvRTLInputBox, CancelHdl, weld::Button&, void )
 {
-    aText.clear();
-    EndDialog();
+    m_aText.clear();
+    m_xDialog->response(RET_CANCEL);
 }
 
-
 // Syntax: String InputBox( Prompt, [Title], [Default] [, nXpos, nYpos ] )
 
 void SbRtl_InputBox(StarBASIC *, SbxArray & rPar, bool)
@@ -169,10 +129,10 @@ void SbRtl_InputBox(StarBASIC *, SbxArray & rPar, bool)
             nX = rPar.Get(4)->GetLong();
             nY = rPar.Get(5)->GetLong();
         }
-        VclPtrInstance<SvRTLInputBox> pDlg(Application::GetDefDialogParent(),
-                                           rPrompt,aTitle,aDefault,nX,nY);
-        pDlg->Execute();
-        rPar.Get(0)->PutString( pDlg->GetText() );
+        vcl::Window* pParent = Application::GetDefDialogParent();
+        SvRTLInputBox aDlg(pParent ? pParent->GetFrameWeld() : 
nullptr,rPrompt,aTitle,aDefault,nX,nY);
+        aDlg.run();
+        rPar.Get(0)->PutString(aDlg.GetText());
     }
 }
 
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index d6d5300acd12..160512969950 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -142,6 +142,7 @@ public:
     virtual void set_title(const OUString& rTitle) = 0;
     virtual OUString get_title() const = 0;
     virtual void set_busy_cursor(bool bBusy) = 0;
+    virtual void window_move(int x, int y) = 0;
 
     virtual css::uno::Reference<css::awt::XWindow> GetXWindow() = 0;
 
diff --git a/svtools/UIConfig_svt.mk b/svtools/UIConfig_svt.mk
index 1d20f6fe203c..bceaebe0f0db 100644
--- a/svtools/UIConfig_svt.mk
+++ b/svtools/UIConfig_svt.mk
@@ -13,6 +13,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svt,\
        svtools/uiconfig/ui/addresstemplatedialog \
        svtools/uiconfig/ui/fileviewmenu \
        svtools/uiconfig/ui/graphicexport \
+       svtools/uiconfig/ui/inputbox \
        svtools/uiconfig/ui/javadisableddialog \
        svtools/uiconfig/ui/placeedit \
        svtools/uiconfig/ui/printersetupdialog \
diff --git a/svtools/uiconfig/ui/inputbox.ui b/svtools/uiconfig/ui/inputbox.ui
new file mode 100644
index 000000000000..760e1e78fe9d
--- /dev/null
+++ b/svtools/uiconfig/ui/inputbox.ui
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.4 -->
+<interface domain="svt">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkDialog" id="InputBox">
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="modal">True</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">12</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="ok">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="cancel">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="row_spacing">6</property>
+            <property name="column_spacing">12</property>
+            <child>
+              <object class="GtkLabel" id="prompt">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
+                <property name="mnemonic_widget">entry</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="activates_default">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-5">ok</action-widget>
+      <action-widget response="-6">cancel</action-widget>
+    </action-widgets>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 9e7b13e8bb37..56da3de4c49b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -523,6 +523,11 @@ public:
         m_xWindow->setOptimalLayoutSize();
     }
 
+    virtual void window_move(int x, int y) override
+    {
+        m_xWindow->SetPosPixel(Point(x, y));
+    }
+
     virtual ~SalInstanceWindow() override
     {
         clear_child_help(m_xWindow);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index f13f408492eb..ca434d294bff 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1694,6 +1694,11 @@ public:
         gtk_window_resize(m_pWindow, 1, 1);
     }
 
+    virtual void window_move(int x, int y) override
+    {
+        gtk_window_move(m_pWindow, x, y);
+    }
+
     virtual ~GtkInstanceWindow() override
     {
         if (m_xWindow.is())
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to