[Libreoffice-commits] core.git: 2 commits - include/vcl vcl/inc vcl/source vcl/uiconfig vcl/UIConfig_vcl.mk

Caolán McNamara caolanm at redhat.com
Mon Dec 23 15:43:32 PST 2013


 include/vcl/prgsbar.hxx                |    3 
 vcl/UIConfig_vcl.mk                    |    3 
 vcl/inc/printdlg.hxx                   |   15 +---
 vcl/inc/svids.hrc                      |    4 -
 vcl/source/control/prgsbar.cxx         |    7 +-
 vcl/source/src/print.src               |   25 -------
 vcl/source/window/printdlg.cxx         |  108 +++++++--------------------------
 vcl/uiconfig/ui/printprogressdialog.ui |   87 ++++++++++++++++++++++++++
 8 files changed, 127 insertions(+), 125 deletions(-)

New commits:
commit 3e978fc21f2d924dab3d714956944a27e70d606f
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Dec 23 19:25:30 2013 +0000

    convert print progress dialog to .ui
    
    use an actual ProgressBar rather than direct drawing
    into the dialog window
    
    Change-Id: I13a17970055980e0e248f60058cd4d5ef91f1d7d

diff --git a/vcl/UIConfig_vcl.mk b/vcl/UIConfig_vcl.mk
index d3e901e..d37c985 100644
--- a/vcl/UIConfig_vcl.mk
+++ b/vcl/UIConfig_vcl.mk
@@ -10,9 +10,10 @@
 $(eval $(call gb_UIConfig_UIConfig,vcl))
 
 $(eval $(call gb_UIConfig_add_uifiles,vcl,\
-	vcl/uiconfig/ui/printdialog \
 	vcl/uiconfig/ui/errornocontentdialog \
 	vcl/uiconfig/ui/errornoprinterdialog \
+	vcl/uiconfig/ui/printdialog \
+	vcl/uiconfig/ui/printprogressdialog \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/inc/printdlg.hxx b/vcl/inc/printdlg.hxx
index 3b07b6b..e142f0a 100644
--- a/vcl/inc/printdlg.hxx
+++ b/vcl/inc/printdlg.hxx
@@ -30,6 +30,7 @@
 #include "vcl/button.hxx"
 #include "vcl/gdimtf.hxx"
 #include "vcl/lstbox.hxx"
+#include "vcl/prgsbar.hxx"
 #include "vcl/field.hxx"
 #include "vcl/tabctrl.hxx"
 #include "vcl/tabpage.hxx"
@@ -271,29 +272,23 @@ namespace vcl
     class PrintProgressDialog : public ModelessDialog
     {
         OUString            maStr;
-        FixedText           maText;
-        CancelButton        maButton;
+        FixedText*          mpText;
+        ProgressBar*        mpProgress;
+        CancelButton*       mpButton;
 
         bool                mbCanceled;
         sal_Int32           mnCur;
         sal_Int32           mnMax;
-        long                mnProgressHeight;
-        Rectangle           maProgressRect;
-        bool                mbNativeProgress;
 
         DECL_LINK( ClickHdl, Button* );
 
-        void implCalcProgressRect();
     public:
-        PrintProgressDialog( Window* i_pParent, int i_nMax );
-        ~PrintProgressDialog();
+        PrintProgressDialog(Window* i_pParent, int i_nMax);
 
         bool isCanceled() const { return mbCanceled; }
         void setProgress( int i_nCurrent, int i_nMax = -1 );
         void tick();
         void reset();
-
-        virtual void Paint( const Rectangle& );
     };
 }
 
diff --git a/vcl/inc/svids.hrc b/vcl/inc/svids.hrc
index eb16740..f3c3f4d 100644
--- a/vcl/inc/svids.hrc
+++ b/vcl/inc/svids.hrc
@@ -115,10 +115,6 @@
 #define SV_PRINT_OPT_TOFILE                 2
 #define SV_PRINT_OPT_SINGLEJOBS             3
 
-#define SV_DLG_PRINT_PROGRESS             2049
-#define SV_PRINT_PROGRESS_CANCEL            1
-#define SV_PRINT_PROGRESS_TEXT              2
-
 #define SV_PRINT_NATIVE_STRINGS           2050
 
 #define SV_HELPTEXT_CLOSE                   10000
diff --git a/vcl/source/src/print.src b/vcl/source/src/print.src
index 0d2f9c1..4bfa750 100644
--- a/vcl/source/src/print.src
+++ b/vcl/source/src/print.src
@@ -19,31 +19,6 @@
 
 #include "svids.hrc"
 
-ModelessDialog SV_DLG_PRINT_PROGRESS
-{
-    HelpID = "vcl:ModelessDialog:SV_DLG_PRINT_PROGRESS";
-    Text [en-US] = "Printing";
-    Closeable = FALSE;
-    Sizeable = FALSE;
-    Moveable = TRUE;
-    SVLook = TRUE;
-
-    Size = MAP_APPFONT( 120, 70 );
-
-    CancelButton SV_PRINT_PROGRESS_CANCEL
-    {
-        Pos = MAP_APPFONT( 35, 50 );
-        Size = MAP_APPFONT( 50, 15 );
-    };
-    FixedText SV_PRINT_PROGRESS_TEXT
-    {
-        Pos = MAP_APPFONT( 5,10 );
-        Size = MAP_APPFONT( 110, 10 );
-        Text [ en-US ] = "Page %p of %n";
-        Center = TRUE;
-    };
-};
-
 StringArray SV_PRINT_NATIVE_STRINGS
 {
     ItemList [en-US] =
diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx
index 21941ca..c44dee7 100644
--- a/vcl/source/window/printdlg.cxx
+++ b/vcl/source/window/printdlg.cxx
@@ -1842,63 +1842,46 @@ void PrintDialog::previewBackward()
 //
 // -----------------------------------------------------------------------------
 
-PrintProgressDialog::PrintProgressDialog( Window* i_pParent, int i_nMax ) :
-    ModelessDialog( i_pParent, VclResId( SV_DLG_PRINT_PROGRESS ) ),
-    maText( this, VclResId( SV_PRINT_PROGRESS_TEXT ) ),
-    maButton( this, VclResId( SV_PRINT_PROGRESS_CANCEL ) ),
-    mbCanceled( false ),
-    mnCur( 0 ),
-    mnMax( i_nMax ),
-    mnProgressHeight( 15 ),
-    mbNativeProgress( false )
-{
-    FreeResource();
+PrintProgressDialog::PrintProgressDialog(Window* i_pParent, int i_nMax)
+    : ModelessDialog(i_pParent, "PrintProgressDialog",
+        "vcl/ui/printprogressdialog.ui")
+    , mbCanceled(false)
+    , mnCur(0)
+    , mnMax(i_nMax)
+{
+    get(mpButton, "cancel");
+    get(mpProgress, "progressbar");
+    get(mpText, "label");
 
     if( mnMax < 1 )
         mnMax = 1;
 
-    maStr = maText.GetText();
+    maStr = mpText->GetText();
 
-    maButton.SetClickHdl( LINK( this, PrintProgressDialog, ClickHdl ) );
+    //just multiply largest value by 10 and take the width of that string as
+    //the max size we will want
+    OUString aNewText( searchAndReplace( maStr, "%p", 2, OUString::number( mnMax * 10 ) ) );
+    aNewText = searchAndReplace( aNewText, "%n", 2, OUString::number( mnMax * 10 ) );
+    mpText->SetText( aNewText );
+    mpText->set_width_request(mpText->get_preferred_size().Width());
 
-}
+    //Pick a useful max width
+    mpProgress->set_width_request(mpProgress->LogicToPixel(Size(100, 0), MapMode(MAP_APPFONT)).Width());
+
+    mpButton->SetClickHdl( LINK( this, PrintProgressDialog, ClickHdl ) );
 
-PrintProgressDialog::~PrintProgressDialog()
-{
 }
 
 IMPL_LINK( PrintProgressDialog, ClickHdl, Button*, pButton )
 {
-    if( pButton == &maButton )
+    if( pButton == mpButton )
         mbCanceled = true;
 
     return 0;
 }
 
-void PrintProgressDialog::implCalcProgressRect()
-{
-    if( IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL ) )
-    {
-        ImplControlValue aValue;
-        Rectangle aControlRegion( Point(), Size( 100, mnProgressHeight ) );
-        Rectangle aNativeControlRegion, aNativeContentRegion;
-        if( GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
-                                    CTRL_STATE_ENABLED, aValue, OUString(),
-                                    aNativeControlRegion, aNativeContentRegion ) )
-        {
-            mnProgressHeight = aNativeControlRegion.GetHeight();
-        }
-        mbNativeProgress = true;
-    }
-    maProgressRect = Rectangle( Point( 10, maText.GetPosPixel().Y() + maText.GetSizePixel().Height() + 8 ),
-                                Size( GetSizePixel().Width() - 20, mnProgressHeight ) );
-}
-
 void PrintProgressDialog::setProgress( int i_nCurrent, int i_nMax )
 {
-    if( maProgressRect.IsEmpty() )
-        implCalcProgressRect();
-
     mnCur = i_nCurrent;
     if( i_nMax != -1 )
         mnMax = i_nMax;
@@ -1906,12 +1889,11 @@ void PrintProgressDialog::setProgress( int i_nCurrent, int i_nMax )
     if( mnMax < 1 )
         mnMax = 1;
 
+    mpProgress->SetValue(mnCur*100/mnMax);
+
     OUString aNewText( searchAndReplace( maStr, "%p", 2, OUString::number( mnCur ) ) );
     aNewText = searchAndReplace( aNewText, "%n", 2, OUString::number( mnMax ) );
-    maText.SetText( aNewText );
-
-    // update progress
-    Invalidate( maProgressRect, INVALIDATE_UPDATE );
+    mpText->SetText( aNewText );
 }
 
 void PrintProgressDialog::tick()
@@ -1926,44 +1908,4 @@ void PrintProgressDialog::reset()
     setProgress( 0 );
 }
 
-void PrintProgressDialog::Paint( const Rectangle& )
-{
-    if( maProgressRect.IsEmpty() )
-        implCalcProgressRect();
-
-    Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
-    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-    Color aPrgsColor = rStyleSettings.GetHighlightColor();
-    if ( aPrgsColor == rStyleSettings.GetFaceColor() )
-        aPrgsColor = rStyleSettings.GetDarkShadowColor();
-    SetLineColor();
-    SetFillColor( aPrgsColor );
-
-    const long nOffset = 3;
-    const long nWidth = 3*mnProgressHeight/2;
-    const long nFullWidth = nWidth + nOffset;
-    const long nMaxCount = maProgressRect.GetWidth() / nFullWidth;
-    DrawProgress( this, maProgressRect.TopLeft(),
-                        nOffset,
-                        nWidth,
-                        mnProgressHeight,
-                        static_cast<sal_uInt16>(0),
-                        static_cast<sal_uInt16>(10000*mnCur/mnMax),
-                        static_cast<sal_uInt16>(10000/nMaxCount),
-                        maProgressRect
-                        );
-    Pop();
-
-    if( ! mbNativeProgress )
-    {
-        DecorationView aDecoView( this );
-        Rectangle aFrameRect( maProgressRect );
-        aFrameRect.Left() -= nOffset;
-        aFrameRect.Right() += nOffset;
-        aFrameRect.Top() -= nOffset;
-        aFrameRect.Bottom() += nOffset;
-        aDecoView.DrawFrame( aFrameRect );
-    }
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/uiconfig/ui/printprogressdialog.ui b/vcl/uiconfig/ui/printprogressdialog.ui
new file mode 100644
index 0000000..508441d
--- /dev/null
+++ b/vcl/uiconfig/ui/printprogressdialog.ui
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkDialog" id="PrintProgressDialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Printing</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="cancel">
+                <property name="label">gtk-cancel</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">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">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Page %p of %n</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkProgressBar" id="progressbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">cancel</action-widget>
+    </action-widgets>
+  </object>
+</interface>
commit 3b80c1ac1351ae7f2bf102e23928cd64133de7b3
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Dec 23 23:39:01 2013 +0000

    add a basic GetOptimalSize to progress bar
    
    Change-Id: I34b98d4c98b3f9af062473f254ffeadb05130471

diff --git a/include/vcl/prgsbar.hxx b/include/vcl/prgsbar.hxx
index cbe598c..03b1790 100644
--- a/include/vcl/prgsbar.hxx
+++ b/include/vcl/prgsbar.hxx
@@ -79,9 +79,10 @@ public:
     virtual void        Resize();
     virtual void        StateChanged( StateChangedType nStateChange );
     virtual void        DataChanged( const DataChangedEvent& rDCEvt );
+    virtual Size        GetOptimalSize() const;
 
     void                SetValue( sal_uInt16 nNewPercent );
-    sal_uInt16              GetValue() const { return mnPercent; }
+    sal_uInt16          GetValue() const { return mnPercent; }
 };
 
 #endif // INCLUDED_VCL_PRGSBAR_HXX
diff --git a/vcl/source/control/prgsbar.cxx b/vcl/source/control/prgsbar.cxx
index 000d821..4a46388 100644
--- a/vcl/source/control/prgsbar.cxx
+++ b/vcl/source/control/prgsbar.cxx
@@ -43,10 +43,15 @@ static WinBits clearProgressBarBorder( Window* pParent, WinBits nOrgStyle )
     return nOutStyle;
 }
 
+Size ProgressBar::GetOptimalSize() const
+{
+    return Size(150, 20);
+}
+
 ProgressBar::ProgressBar( Window* pParent, WinBits nWinStyle ) :
     Window( pParent, clearProgressBarBorder( pParent, nWinStyle ) )
 {
-    SetOutputSizePixel( Size( 150, 20 ) );
+    SetOutputSizePixel( GetOptimalSize() );
     ImplInit();
 }
 


More information about the Libreoffice-commits mailing list