summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-10-06 17:14:10 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-10-08 13:03:13 +0100
commit6799ec80cd9ec6a5d0c3e11ec8a69084396f5420 (patch)
tree5ec5e7daba874c3859a61afc0ddc730570dcc919 /vcl
parent9897942db6c53dff3a85b880d9d2b955011ef189 (diff)
import GtkScrollbar as scrollbars and connect GtkAdjustments
Change-Id: Idef8a338f09b52cf0758a6a35e3b5bbcc96a7383
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/vcl/builder.hxx12
-rw-r--r--vcl/source/window/builder.cxx72
2 files changed, 73 insertions, 11 deletions
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx
index 246f68dd208c..0a6574c8af03 100644
--- a/vcl/inc/vcl/builder.hxx
+++ b/vcl/inc/vcl/builder.hxx
@@ -19,6 +19,7 @@
class ListBox;
class NumericFormatter;
+class ScrollBar;
class VCL_DLLPUBLIC VclBuilder
{
@@ -90,10 +91,11 @@ private:
}
};
- typedef StringPair SpinButtonAdjustmentMap;
+ typedef StringPair WidgetAdjustmentMap;
Adjustment *get_adjustment_by_name(OString sID);
- static void mungeadjustment(NumericFormatter &rTarget, Adjustment &rAdjustment);
+ static void mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdjustment);
+ static void mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustment);
typedef std::map<OString, OString> WidgetTranslations;
typedef std::map<OString, WidgetTranslations> Translations;
@@ -105,7 +107,8 @@ private:
std::vector<ComboBoxModelMap> m_aModelMaps;
std::vector<ModelAndId> m_aModels;
std::vector<AdjustmentAndId> m_aAdjustments;
- std::vector<SpinButtonAdjustmentMap> m_aAdjustmentMaps;
+ std::vector<WidgetAdjustmentMap> m_aSpinAdjustmentMaps;
+ std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps;
std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
StockMap m_aStockMap;
Translations m_aTranslations;
@@ -179,7 +182,8 @@ private:
Window *makeObject(Window *pParent, const OString &rClass, const OString &rID, stringmap &rVec);
bool extractGroup(const OString &id, stringmap &rVec);
bool extractModel(const OString &id, stringmap &rVec);
- bool extractAdjustment(const OString &id, stringmap &rVec);
+ bool extractSpinAdjustment(const OString &id, stringmap &rVec);
+ bool extractScrollAdjustment(const OString &id, stringmap &rVec);
bool extractImage(const OString &id, stringmap &rMap);
bool extractStock(const OString &id, stringmap &rMap);
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 86c06d109067..80daaab2c214 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -18,6 +18,7 @@
#include <vcl/layout.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/menubtn.hxx>
+#include <vcl/scrbar.hxx>
#include <vcl/svapp.hxx>
#include <vcl/tabctrl.hxx>
#include <vcl/tabpage.hxx>
@@ -130,14 +131,25 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri
}
//Set SpinButton adjustments when everything has been imported
- for (std::vector<SpinButtonAdjustmentMap>::iterator aI = m_pParserState->m_aAdjustmentMaps.begin(),
- aEnd = m_pParserState->m_aAdjustmentMaps.end(); aI != aEnd; ++aI)
+ for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aSpinAdjustmentMaps.begin(),
+ aEnd = m_pParserState->m_aSpinAdjustmentMaps.end(); aI != aEnd; ++aI)
{
NumericFormatter *pTarget = dynamic_cast<NumericFormatter*>(get<Window>(aI->m_sID));
Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of spinbutton/adjustment");
if (pTarget && pAdjustment)
- mungeadjustment(*pTarget, *pAdjustment);
+ mungeSpinAdjustment(*pTarget, *pAdjustment);
+ }
+
+ //Set ScrollBar adjustments when everything has been imported
+ for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aScrollAdjustmentMaps.begin(),
+ aEnd = m_pParserState->m_aScrollAdjustmentMaps.end(); aI != aEnd; ++aI)
+ {
+ ScrollBar *pTarget = get<ScrollBar>(aI->m_sID);
+ Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
+ SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scrollbar/adjustment");
+ if (pTarget && pAdjustment)
+ mungeScrollAdjustment(*pTarget, *pAdjustment);
}
//Set button images when everything has been imported
@@ -430,18 +442,31 @@ bool VclBuilder::extractGroup(const OString &id, stringmap &rMap)
return false;
}
-bool VclBuilder::extractAdjustment(const OString &id, stringmap &rMap)
+bool VclBuilder::extractSpinAdjustment(const OString &id, stringmap &rMap)
{
VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment"));
if (aFind != rMap.end())
{
- m_pParserState->m_aAdjustmentMaps.push_back(SpinButtonAdjustmentMap(id, aFind->second));
+ m_pParserState->m_aSpinAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second));
rMap.erase(aFind);
return true;
}
return false;
}
+bool VclBuilder::extractScrollAdjustment(const OString &id, stringmap &rMap)
+{
+ VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment"));
+ if (aFind != rMap.end())
+ {
+ m_pParserState->m_aScrollAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second));
+ rMap.erase(aFind);
+ return true;
+ }
+ return false;
+}
+
+
bool VclBuilder::extractModel(const OString &id, stringmap &rMap)
{
VclBuilder::stringmap::iterator aFind = rMap.find(OString("model"));
@@ -580,7 +605,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri
}
else if (name == "GtkSpinButton")
{
- extractAdjustment(id, rMap);
+ extractSpinAdjustment(id, rMap);
OString sPattern = extractPattern(rMap);
OString sUnit = sPattern;
@@ -656,6 +681,14 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri
else
pWindow = new FixedLine(pParent, WB_HORZ);
}
+ else if (name == "GtkScrollbar")
+ {
+ extractScrollAdjustment(id, rMap);
+ if (extractOrientation(rMap))
+ pWindow = new ScrollBar(pParent, WB_VERT);
+ else
+ pWindow = new ScrollBar(pParent, WB_HORZ);
+ }
else if (name == "GtkEntry")
{
pWindow = new Edit(pParent, WB_LEFT|WB_VCENTER|WB_BORDER|WB_3DLOOK);
@@ -1479,7 +1512,7 @@ void VclBuilder::mungemodel(ListBox &rTarget, ListStore &rStore)
rTarget.SelectEntryPos(0);
}
-void VclBuilder::mungeadjustment(NumericFormatter &rTarget, Adjustment &rAdjustment)
+void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdjustment)
{
int nMul = rtl_math_pow10Exp(1, rTarget.GetDecimalDigits());
@@ -1517,4 +1550,29 @@ void VclBuilder::mungeadjustment(NumericFormatter &rTarget, Adjustment &rAdjustm
}
}
+void VclBuilder::mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustment)
+{
+ for (stringmap::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());
+ }
+ }
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */