summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-03-22 18:32:29 +0900
committerTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-03-22 18:55:37 +0900
commitc63497472b6b7406a07840ec312ccebe6154bb86 (patch)
tree34d82e78d2ff0ba60112a8bf2693ed6efb3f6e82
parent16c79edbd1f03a2fa7c480bcf7e2f1582f976885 (diff)
vcl: add initial support for GtkScale (as Slider) to VclBuilder
Change-Id: I5c987a3b1ca39c8d382ba775bab762f030496bf5
-rw-r--r--include/vcl/builder.hxx6
-rw-r--r--include/vcl/slider.hxx2
-rw-r--r--vcl/source/control/slider.cxx10
-rw-r--r--vcl/source/window/builder.cxx86
4 files changed, 99 insertions, 5 deletions
diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 0622f0922adc..2257343a50dd 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -33,6 +33,7 @@ class ListBox;
class NumericFormatter;
class PopupMenu;
class ScrollBar;
+class Slider;
class DateField;
class TimeField;
class VclExpander;
@@ -236,6 +237,7 @@ private:
static void mungeAdjustment(DateField &rTarget, const Adjustment &rAdjustment);
static void mungeAdjustment(TimeField &rTarget, const Adjustment &rAdjustment);
static void mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment);
+ static void mungeAdjustment(Slider &rTarget, const Adjustment &rAdjustment);
typedef std::map<OString, OString> WidgetTranslations;
typedef std::map<OString, WidgetTranslations> Translations;
@@ -276,6 +278,8 @@ private:
std::vector<WidgetAdjustmentMap> m_aTimeFormatterAdjustmentMaps;
std::vector<WidgetAdjustmentMap> m_aDateFormatterAdjustmentMaps;
std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps;
+ std::vector<WidgetAdjustmentMap> m_aSliderAdjustmentMaps;
+
std::map<OString, Adjustment> m_aAdjustments;
std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
@@ -350,7 +354,7 @@ private:
bool extractGroup(const OString &id, stringmap &rVec);
bool extractModel(const OString &id, stringmap &rVec);
bool extractBuffer(const OString &id, stringmap &rVec);
- bool extractScrollAdjustment(const OString &id, stringmap &rVec);
+ bool extractAdjustmentToMap(const OString &id, stringmap &rVec, std::vector<WidgetAdjustmentMap>& rAdjustmentMap);
bool extractButtonImage(const OString &id, stringmap &rMap, bool bRadio);
bool extractStock(const OString &id, stringmap &rMap);
void extractMnemonicWidget(const OString &id, stringmap &rMap);
diff --git a/include/vcl/slider.hxx b/include/vcl/slider.hxx
index 3eb720a89fc4..dfc399ba17fe 100644
--- a/include/vcl/slider.hxx
+++ b/include/vcl/slider.hxx
@@ -90,7 +90,9 @@ public:
{ mbFullDrag = bEnable; }
bool IsDragEnabled() const { return mbFullDrag; }
+ void SetRangeMin(long nNewRange);
long GetRangeMin() const { return mnMinRange; }
+ void SetRangeMax(long nNewRange);
long GetRangeMax() const { return mnMaxRange; }
void SetRange( const Range& rRange );
Range GetRange() const { return Range( GetRangeMin(), GetRangeMax() ); }
diff --git a/vcl/source/control/slider.cxx b/vcl/source/control/slider.cxx
index 4ef2adcb1ae2..773f31087ebc 100644
--- a/vcl/source/control/slider.cxx
+++ b/vcl/source/control/slider.cxx
@@ -893,6 +893,16 @@ void Slider::EndSlide()
maEndSlideHdl.Call( this );
}
+void Slider::SetRangeMin(long nNewRange)
+{
+ SetRange(Range(nNewRange, GetRangeMax()));
+}
+
+void Slider::SetRangeMax(long nNewRange)
+{
+ SetRange(Range(GetRangeMin(), nNewRange));
+}
+
void Slider::SetRange( const Range& rRange )
{
// adjust Range
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 0d921f14f72a..31736c43f787 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -42,6 +42,7 @@
#include <vcl/toolbox.hxx>
#include <vcl/vclmedit.hxx>
#include <vcl/settings.hxx>
+#include <vcl/slider.hxx>
#include <svdata.hxx>
#include <svids.hrc>
#include <window.h>
@@ -334,6 +335,20 @@ VclBuilder::VclBuilder(vcl::Window *pParent, const OUString& sUIDir, const OUStr
mungeAdjustment(*pTarget, *pAdjustment);
}
+ //Set Scale(Slider) adjustments
+ std::vector<WidgetAdjustmentMap>::iterator aIterator;
+ for (aIterator = m_pParserState->m_aSliderAdjustmentMaps.begin();
+ aIterator != m_pParserState->m_aSliderAdjustmentMaps.end(); ++aIterator)
+ {
+ Slider* pTarget = dynamic_cast<Slider*>(get<vcl::Window>(aIterator->m_sID));
+ const Adjustment* pAdjustment = get_adjustment_by_name(aIterator->m_sValue);
+ SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scale(slider)/adjustment");
+ if (pTarget && pAdjustment)
+ {
+ mungeAdjustment(*pTarget, *pAdjustment);
+ }
+ }
+
//Set size-groups when all widgets have been imported
for (std::vector<SizeGroup>::iterator aI = m_pParserState->m_aSizeGroups.begin(),
aEnd = m_pParserState->m_aSizeGroups.end(); aI != aEnd; ++aI)
@@ -586,6 +601,30 @@ OString VclBuilder::extractCustomProperty(VclBuilder::stringmap &rMap)
namespace
{
+ bool extractDrawValue(VclBuilder::stringmap& rMap)
+ {
+ bool bDrawValue = true;
+ VclBuilder::stringmap::iterator aFind = rMap.find(OString("draw_value"));
+ if (aFind != rMap.end())
+ {
+ bDrawValue = toBool(aFind->second);
+ rMap.erase(aFind);
+ }
+ return bDrawValue;
+ }
+
+ OString extractValuePos(VclBuilder::stringmap& rMap)
+ {
+ OString sRet("top");
+ VclBuilder::stringmap::iterator aFind = rMap.find(OString("value_pos"));
+ if (aFind != rMap.end())
+ {
+ sRet = aFind->second;
+ rMap.erase(aFind);
+ }
+ return sRet;
+ }
+
OString extractTypeHint(VclBuilder::stringmap &rMap)
{
OString sRet("normal");
@@ -1054,12 +1093,12 @@ void VclBuilder::connectDateFormatterAdjustment(const OString &id, const OString
m_pParserState->m_aDateFormatterAdjustmentMaps.push_back(WidgetAdjustmentMap(id, rAdjustment));
}
-bool VclBuilder::extractScrollAdjustment(const OString &id, VclBuilder::stringmap &rMap)
+bool VclBuilder::extractAdjustmentToMap(const OString& id, VclBuilder::stringmap& rMap, std::vector<WidgetAdjustmentMap>& rAdjustmentMap)
{
VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment"));
if (aFind != rMap.end())
{
- m_pParserState->m_aScrollAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second));
+ rAdjustmentMap.push_back(WidgetAdjustmentMap(id, aFind->second));
rMap.erase(aFind);
return true;
}
@@ -1540,7 +1579,7 @@ vcl::Window *VclBuilder::makeObject(vcl::Window *pParent, const OString &name, c
}
else if (name == "GtkScrollbar")
{
- extractScrollAdjustment(id, rMap);
+ extractAdjustmentToMap(id, rMap, m_pParserState->m_aScrollAdjustmentMaps);
bVertical = extractOrientation(rMap);
if (bVertical)
pWindow = new ScrollBar(pParent, WB_VERT);
@@ -1549,7 +1588,7 @@ vcl::Window *VclBuilder::makeObject(vcl::Window *pParent, const OString &name, c
}
else if (name == "GtkProgressBar")
{
- extractScrollAdjustment(id, rMap);
+ extractAdjustmentToMap(id, rMap, m_pParserState->m_aScrollAdjustmentMaps);
bVertical = extractOrientation(rMap);
if (bVertical)
pWindow = new ProgressBar(pParent, WB_VERT);
@@ -1598,6 +1637,21 @@ vcl::Window *VclBuilder::makeObject(vcl::Window *pParent, const OString &name, c
{
pWindow = new Throbber(pParent, WB_3DLOOK);
}
+ else if (name == "GtkScale")
+ {
+ extractAdjustmentToMap(id, rMap, m_pParserState->m_aSliderAdjustmentMaps);
+ bool bDrawValue = extractDrawValue(rMap);
+ if (bDrawValue)
+ {
+ OString sValuePos = extractValuePos(rMap);
+ (void)sValuePos;
+ }
+ bVertical = extractOrientation(rMap);
+
+ WinBits nWinStyle = bVertical ? WB_VERT : WB_HORZ;
+
+ pWindow = new Slider(pParent, nWinStyle);
+ }
else if (name == "GtkToolbar")
{
pWindow = new ToolBox(pParent, WB_3DLOOK | WB_TABSTOP);
@@ -3457,6 +3511,30 @@ void VclBuilder::mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustme
}
}
+void VclBuilder::mungeAdjustment(Slider& rTarget, const Adjustment& rAdjustment)
+{
+ for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
+ {
+ const OString &rKey = aI->first;
+ const OString &rValue = aI->second;
+
+ if (rKey == "upper")
+ rTarget.SetRangeMax(rValue.toInt32());
+ else if (rKey == "lower")
+ rTarget.SetRangeMin(rValue.toInt32());
+ else if (rKey == "value")
+ rTarget.SetThumbPos(rValue.toInt32());
+ else if (rKey == "step-increment")
+ rTarget.SetLineSize(rValue.toInt32());
+ else if (rKey == "page-increment")
+ rTarget.SetPageSize(rValue.toInt32());
+ else
+ {
+ SAL_INFO("vcl.layout", "unhandled property :" << rKey.getStr());
+ }
+ }
+}
+
void VclBuilder::mungeTextBuffer(VclMultiLineEdit &rTarget, const TextBuffer &rTextBuffer)
{
for (stringmap::const_iterator aI = rTextBuffer.begin(), aEnd = rTextBuffer.end(); aI != aEnd; ++aI)