summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-07-24 14:36:45 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-07-25 09:27:48 +0200
commitf696e535872e76f0854d475354fed11fbce4bb54 (patch)
tree5c07b203233f644c87d47b959f8214f0205684bf /extensions
parentcid#1448432 Division or modulo by zero (diff)
downloadcore-f696e535872e76f0854d475354fed11fbce4bb54.tar.gz
core-f696e535872e76f0854d475354fed11fbce4bb54.zip
weld GridWindow
Change-Id: I3281abffbc7f14cb3ebcc80b4f52b52ed5efa781 Reviewed-on: https://gerrit.libreoffice.org/76268 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'extensions')
-rw-r--r--extensions/inc/bitmaps.hlst1
-rw-r--r--extensions/source/scanner/grid.cxx107
-rw-r--r--extensions/source/scanner/grid.hxx26
-rw-r--r--extensions/source/scanner/sanedlg.cxx10
-rw-r--r--extensions/uiconfig/scanner/ui/griddialog.ui129
5 files changed, 142 insertions, 131 deletions
diff --git a/extensions/inc/bitmaps.hlst b/extensions/inc/bitmaps.hlst
index c8b48c245ab7..60a388e0c7b4 100644
--- a/extensions/inc/bitmaps.hlst
+++ b/extensions/inc/bitmaps.hlst
@@ -40,6 +40,7 @@
#define RID_EXTBMP_NAVIGATIONBAR "res/sx10607.png"
#define RID_UPDATE_AVAILABLE_16 "extensions/res/update/ui/onlineupdate_16.png"
#define RID_UPDATE_AVAILABLE_26 "extensions/res/update/ui/onlineupdate_26.png"
+#define RID_SCANNER_HANDLE "extensions/res/scanner/handle.png"
#define BMP_TABLE "res/sx03188.png"
#define BMP_QUERY "res/sx03202.png"
#define RID_EXTBMP_AUTOFILTER_SC "res/sc10716.png"
diff --git a/extensions/source/scanner/grid.cxx b/extensions/source/scanner/grid.cxx
index 08d7cf57e130..89ea65898d01 100644
--- a/extensions/source/scanner/grid.cxx
+++ b/extensions/source/scanner/grid.cxx
@@ -23,17 +23,21 @@
#include <math.h>
#include <boost/math/special_functions/expm1.hpp>
+#include <bitmaps.hlst>
#include <cmath>
#include "grid.hxx"
-#include <vcl/builderfactory.hxx>
+#include <vcl/bitmapex.hxx>
+#include <vcl/customweld.hxx>
#include <vcl/event.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
#include <algorithm>
#include <limits>
#include <memory>
-class GridWindow : public vcl::Window
+class GridWindow : public weld::CustomWidgetController
{
// helper class for handles
struct impHandle
@@ -58,7 +62,7 @@ class GridWindow : public vcl::Window
rRenderContext.DrawBitmapEx(maPos - aOffset, rBitmapEx);
}
- bool isHit(vcl::Window const & rWin, const Point& rPos)
+ bool isHit(OutputDevice const & rWin, const Point& rPos)
{
const Point aOffset(rWin.PixelToLogic(Point(mnOffX, mnOffY)));
const tools::Rectangle aTarget(maPos - aOffset, maPos + aOffset);
@@ -114,18 +118,17 @@ class GridWindow : public vcl::Window
void computeNew();
static double interpolate( double x, double const * pNodeX, double const * pNodeY, int nNodes );
- virtual void MouseMove( const MouseEvent& ) override;
- virtual void MouseButtonDown( const MouseEvent& ) override;
- virtual void MouseButtonUp( const MouseEvent& ) override;
+ virtual bool MouseMove( const MouseEvent& ) override;
+ virtual bool MouseButtonDown( const MouseEvent& ) override;
+ virtual bool MouseButtonUp( const MouseEvent& ) override;
void onResize();
virtual void Resize() override;
- virtual Size GetOptimalSize() const override;
+ virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
void drawLine(vcl::RenderContext& rRenderContext, double x1, double y1, double x2, double y2);
public:
- explicit GridWindow(vcl::Window* pParent);
+ GridWindow();
void Init(double* pXValues, double* pYValues, int nValues, bool bCutValues, const BitmapEx &rMarkerBitmap);
virtual ~GridWindow() override;
- virtual void dispose() override;
void setBoundings( double fMinX, double fMinY, double fMaxX, double fMaxY );
@@ -136,9 +139,8 @@ public:
virtual void Paint( vcl::RenderContext& /*rRenderContext*/, const tools::Rectangle& rRect ) override;
};
-GridWindow::GridWindow(vcl::Window* pParent)
- : Window(pParent, 0)
- , m_aGridArea(50, 15, 100, 100)
+GridWindow::GridWindow()
+ : m_aGridArea(50, 15, 100, 100)
, m_fMinX(0.0)
, m_fMinY(0.0)
, m_fMaxX(0.0)
@@ -156,7 +158,6 @@ GridWindow::GridWindow(vcl::Window* pParent)
, m_aHandles()
, m_nDragIndex(npos)
{
- SetMapMode(MapMode(MapUnit::MapPixel));
}
void GridWindow::Init(double* pXValues, double* pYValues, int nValues, bool bCutValues, const BitmapEx &rMarkerBitmap)
@@ -167,7 +168,6 @@ void GridWindow::Init(double* pXValues, double* pYValues, int nValues, bool bCut
m_nValues = nValues;
m_bCutValues = bCutValues;
- SetSizePixel(GetOptimalSize());
onResize();
if (m_pOrigYValues && m_nValues)
@@ -193,53 +193,39 @@ void GridWindow::Resize()
void GridWindow::onResize()
{
- Size aSize = GetSizePixel();
+ Size aSize = GetOutputSizePixel();
m_aGridArea.setWidth( aSize.Width() - 80 );
m_aGridArea.setHeight( aSize.Height() - 40 );
}
-Size GridWindow::GetOptimalSize() const
+void GridWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
{
- return LogicToPixel(Size(240, 200), MapMode(MapUnit::MapAppFont));
+ Size aSize(pDrawingArea->get_ref_device().LogicToPixel(Size(240, 200), MapMode(MapUnit::MapAppFont)));
+ pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
+ CustomWidgetController::SetDrawingArea(pDrawingArea);
+ SetOutputSizePixel(aSize);
}
-GridDialog::GridDialog(double* pXValues, double* pYValues, int nValues, vcl::Window* pParent )
- : ModalDialog(pParent, "GridDialog", "modules/scanner/ui/griddialog.ui")
+GridDialog::GridDialog(weld::Window* pParent, double* pXValues, double* pYValues, int nValues)
+ : GenericDialogController(pParent, "modules/scanner/ui/griddialog.ui", "GridDialog")
+ , m_xOKButton(m_xBuilder->weld_button("ok"))
+ , m_xResetTypeBox(m_xBuilder->weld_combo_box("resetTypeCombobox"))
+ , m_xResetButton(m_xBuilder->weld_button("resetButton"))
+ , m_xGridWindow(new GridWindow)
+ , m_xGridWindowWND(new weld::CustomWeld(*m_xBuilder, "gridwindow", *m_xGridWindow))
{
- get(m_pOKButton, "ok");
- get(m_pResetTypeBox, "resetTypeCombobox");
- get(m_pResetButton, "resetButton");
- get(m_pGridWindow, "gridwindow");
- m_pGridWindow->Init(pXValues, pYValues, nValues, true/*bCutValues*/, get<FixedImage>("handle")->GetImage().GetBitmapEx());
-
- m_pResetTypeBox->SelectEntryPos( 0 );
-
- m_pResetButton->SetClickHdl( LINK( this, GridDialog, ClickButtonHdl ) );
+ m_xGridWindow->Init(pXValues, pYValues, nValues, true/*bCutValues*/, BitmapEx(RID_SCANNER_HANDLE));
+ m_xResetTypeBox->set_active(0);
+ m_xResetButton->connect_clicked( LINK( this, GridDialog, ClickButtonHdl ) );
}
GridDialog::~GridDialog()
{
- disposeOnce();
-}
-
-void GridDialog::dispose()
-{
- m_pOKButton.clear();
- m_pResetTypeBox.clear();
- m_pResetButton.clear();
- m_pGridWindow.clear();
- ModalDialog::dispose();
}
GridWindow::~GridWindow()
{
- disposeOnce();
-}
-
-void GridWindow::dispose()
-{
m_pNewYValues.reset();
- vcl::Window::dispose();
}
double GridWindow::findMinX()
@@ -438,7 +424,7 @@ double GridWindow::interpolate(
void GridDialog::setBoundings(double fMinX, double fMinY, double fMaxX, double fMaxY)
{
- m_pGridWindow->setBoundings(fMinX, fMinY, fMaxX, fMaxY);
+ m_xGridWindow->setBoundings(fMinX, fMinY, fMaxX, fMaxY);
}
void GridWindow::setBoundings(double fMinX, double fMinY, double fMaxX, double fMaxY)
@@ -528,16 +514,16 @@ void GridWindow::drawHandles(vcl::RenderContext& rRenderContext)
}
}
-void GridWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect)
+void GridWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
{
- Window::Paint(rRenderContext, rRect);
+ rRenderContext.SetBackground(Wallpaper(Application::GetSettings().GetStyleSettings().GetDialogColor()));
drawGrid(rRenderContext);
drawOriginal(rRenderContext);
drawNew(rRenderContext);
drawHandles(rRenderContext);
}
-void GridWindow::MouseMove( const MouseEvent& rEvt )
+bool GridWindow::MouseMove( const MouseEvent& rEvt )
{
if( rEvt.GetButtons() == MOUSE_LEFT && m_nDragIndex != npos )
{
@@ -567,10 +553,10 @@ void GridWindow::MouseMove( const MouseEvent& rEvt )
}
}
- Window::MouseMove( rEvt );
+ return false;
}
-void GridWindow::MouseButtonUp( const MouseEvent& rEvt )
+bool GridWindow::MouseButtonUp( const MouseEvent& rEvt )
{
if( rEvt.GetButtons() == MOUSE_LEFT )
{
@@ -582,17 +568,17 @@ void GridWindow::MouseButtonUp( const MouseEvent& rEvt )
}
}
- Window::MouseButtonUp( rEvt );
+ return false;
}
-void GridWindow::MouseButtonDown( const MouseEvent& rEvt )
+bool GridWindow::MouseButtonDown( const MouseEvent& rEvt )
{
Point aPoint( rEvt.GetPosPixel() );
Handles::size_type nMarkerIndex = npos;
for(Handles::size_type a(0); nMarkerIndex == npos && a < m_aHandles.size(); a++)
{
- if(m_aHandles[a].isHit(*this, aPoint))
+ if(m_aHandles[a].isHit(GetDrawingArea()->get_ref_device(), aPoint))
{
nMarkerIndex = a;
}
@@ -631,7 +617,7 @@ void GridWindow::MouseButtonDown( const MouseEvent& rEvt )
Invalidate(m_aGridArea);
}
- Window::MouseButtonDown( rEvt );
+ return false;
}
void GridWindow::ChangeMode(ResetType nType)
@@ -702,20 +688,15 @@ void GridWindow::ChangeMode(ResetType nType)
Invalidate();
}
-IMPL_LINK( GridDialog, ClickButtonHdl, Button*, pButton, void )
+IMPL_LINK_NOARG(GridDialog, ClickButtonHdl, weld::Button&, void)
{
- if (pButton == m_pResetButton)
- {
- int nType = m_pResetTypeBox->GetSelectedEntryPos();
- m_pGridWindow->ChangeMode(static_cast<ResetType>(nType));
- }
+ int nType = m_xResetTypeBox->get_active();
+ m_xGridWindow->ChangeMode(static_cast<ResetType>(nType));
}
double* GridDialog::getNewYValues()
{
- return m_pGridWindow->getNewYValues();
+ return m_xGridWindow->getNewYValues();
}
-VCL_BUILDER_FACTORY(GridWindow)
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/extensions/source/scanner/grid.hxx b/extensions/source/scanner/grid.hxx
index 57e1106c7d16..51345cca5917 100644
--- a/extensions/source/scanner/grid.hxx
+++ b/extensions/source/scanner/grid.hxx
@@ -19,11 +19,8 @@
#ifndef INCLUDED_EXTENSIONS_SOURCE_SCANNER_GRID_HXX
#define INCLUDED_EXTENSIONS_SOURCE_SCANNER_GRID_HXX
-#include <vcl/window.hxx>
-#include <vcl/button.hxx>
-#include <vcl/lstbox.hxx>
-#include <vcl/dialog.hxx>
-#include <vcl/fixed.hxx>
+#include <vcl/customweld.hxx>
+#include <vcl/weld.hxx>
class GridWindow;
@@ -35,22 +32,19 @@ enum class ResetType
EXPONENTIAL = 3
};
-class GridDialog : public ModalDialog
+class GridDialog : public weld::GenericDialogController
{
- VclPtr<OKButton> m_pOKButton;
+ std::unique_ptr<weld::Button> m_xOKButton;
+ std::unique_ptr<weld::ComboBox> m_xResetTypeBox;
+ std::unique_ptr<weld::Button> m_xResetButton;
+ std::unique_ptr<GridWindow> m_xGridWindow;
+ std::unique_ptr<weld::CustomWeld> m_xGridWindowWND;
- VclPtr<ListBox> m_pResetTypeBox;
- VclPtr<PushButton> m_pResetButton;
-
- VclPtr<GridWindow> m_pGridWindow;
-
- DECL_LINK( ClickButtonHdl, Button*, void );
+ DECL_LINK( ClickButtonHdl, weld::Button&, void );
public:
- GridDialog(double* pXValues, double* pYValues, int nValues,
- vcl::Window* pParent);
+ GridDialog(weld::Window* pParent, double* pXValues, double* pYValues, int nValues);
virtual ~GridDialog() override;
- virtual void dispose() override;
void setBoundings(double fMinX, double fMinY, double fMaxX, double fMaxY);
double* getNewYValues();
};
diff --git a/extensions/source/scanner/sanedlg.cxx b/extensions/source/scanner/sanedlg.cxx
index 0a7bdb2565c3..7b5ecf722547 100644
--- a/extensions/source/scanner/sanedlg.cxx
+++ b/extensions/source/scanner/sanedlg.cxx
@@ -642,11 +642,11 @@ IMPL_LINK( SaneDlg, ClickBtnHdl, Button*, pButton, void )
x[ i ] = static_cast<double>(i);
mrSane.GetOptionValue( mnCurrentOption, y.get() );
- ScopedVclPtrInstance< GridDialog > aGrid( x.get(), y.get(), nElements, this );
- aGrid->SetText( mrSane.GetOptionName( mnCurrentOption ) );
- aGrid->setBoundings( 0, mfMin, nElements, mfMax );
- if( aGrid->Execute() && aGrid->getNewYValues() )
- mrSane.SetOptionValue( mnCurrentOption, aGrid->getNewYValues() );
+ GridDialog aGrid(GetFrameWeld(), x.get(), y.get(), nElements);
+ aGrid.set_title( mrSane.GetOptionName( mnCurrentOption ) );
+ aGrid.setBoundings( 0, mfMin, nElements, mfMax );
+ if (aGrid.run() && aGrid.getNewYValues())
+ mrSane.SetOptionValue( mnCurrentOption, aGrid.getNewYValues() );
}
break;
case SANE_TYPE_BOOL:
diff --git a/extensions/uiconfig/scanner/ui/griddialog.ui b/extensions/uiconfig/scanner/ui/griddialog.ui
index 641e511db458..2a7e49555651 100644
--- a/extensions/uiconfig/scanner/ui/griddialog.ui
+++ b/extensions/uiconfig/scanner/ui/griddialog.ui
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="pcr">
<requires lib="gtk+" version="3.18"/>
- <requires lib="LibreOffice" version="1.0"/>
<object class="GtkDialog" id="GridDialog">
<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>
+ <placeholder/>
+ </child>
<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="orientation">vertical</property>
- <property name="layout_style">start</property>
+ <property name="layout_style">end</property>
<child>
<object class="GtkButton" id="ok">
<property name="label">gtk-ok</property>
@@ -46,69 +51,100 @@
<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="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="spacing">12</property>
<child>
- <object class="GtkComboBoxText" id="resetTypeCombobox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <items>
- <item translatable="yes" context="griddialog|resetTypeCombobox">Linear ascending</item>
- <item translatable="yes" context="griddialog|resetTypeCombobox">Linear descending</item>
- <item translatable="yes" context="griddialog|resetTypeCombobox">Original values</item>
- <item translatable="yes" context="griddialog|resetTypeCombobox">Exponential increasing</item>
- </items>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="resetButton">
- <property name="label" translatable="yes" context="griddialog|resetButton">_Set</property>
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkDrawingArea" id="gridwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">3</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkImage" id="handle">
+ <object class="GtkBox">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="no_show_all">True</property>
- <property name="pixbuf">extensions/res/scanner/handle.png</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkComboBoxText" id="resetTypeCombobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <items>
+ <item translatable="yes" context="griddialog|resetTypeCombobox">Linear ascending</item>
+ <item translatable="yes" context="griddialog|resetTypeCombobox">Linear descending</item>
+ <item translatable="yes" context="griddialog|resetTypeCombobox">Original values</item>
+ <item translatable="yes" context="griddialog|resetTypeCombobox">Exponential increasing</item>
+ </items>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="resetButton">
+ <property name="label" translatable="yes" context="griddialog|resetButton">_Set</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">4</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="scnlo-GridWindow" id="gridwindow">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">center</property>
- <property name="valign">start</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
@@ -117,7 +153,6 @@
<action-widgets>
<action-widget response="-5">ok</action-widget>
<action-widget response="-6">cancel</action-widget>
- <action-widget response="101">resetButton</action-widget>
</action-widgets>
</object>
</interface>