Kaydet (Commit) 7cf8320c authored tarafından Caolán McNamara's avatar Caolán McNamara

add a mechanism to load TimeFields from .ui files

Change-Id: I7704f46d262888639a17c5219e784559db91b847
üst 9a49ff64
...@@ -23,6 +23,7 @@ class ListBox; ...@@ -23,6 +23,7 @@ class ListBox;
class NumericFormatter; class NumericFormatter;
class PopupMenu; class PopupMenu;
class ScrollBar; class ScrollBar;
class TimeField;
class VclMultiLineEdit; class VclMultiLineEdit;
class VCL_DLLPUBLIC VclBuilder class VCL_DLLPUBLIC VclBuilder
...@@ -127,8 +128,9 @@ private: ...@@ -127,8 +128,9 @@ private:
typedef stringmap Adjustment; typedef stringmap Adjustment;
const Adjustment *get_adjustment_by_name(OString sID) const; const Adjustment *get_adjustment_by_name(OString sID) const;
static void mungeSpinAdjustment(NumericFormatter &rTarget, const Adjustment &rAdjustment); static void mungeAdjustment(NumericFormatter &rTarget, const Adjustment &rAdjustment);
static void mungeScrollAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment); static void mungeAdjustment(TimeField &rTarget, const Adjustment &rAdjustment);
static void mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment);
typedef std::map<OString, OString> WidgetTranslations; typedef std::map<OString, OString> WidgetTranslations;
typedef std::map<OString, WidgetTranslations> Translations; typedef std::map<OString, WidgetTranslations> Translations;
...@@ -165,7 +167,8 @@ private: ...@@ -165,7 +167,8 @@ private:
std::vector<TextBufferMap> m_aTextBufferMaps; std::vector<TextBufferMap> m_aTextBufferMaps;
std::map<OString, TextBuffer> m_aTextBuffers; std::map<OString, TextBuffer> m_aTextBuffers;
std::vector<WidgetAdjustmentMap> m_aSpinAdjustmentMaps; std::vector<WidgetAdjustmentMap> m_aNumericFormatterAdjustmentMaps;
std::vector<WidgetAdjustmentMap> m_aTimeFormatterAdjustmentMaps;
std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps; std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps;
std::map<OString, Adjustment> m_aAdjustments; std::map<OString, Adjustment> m_aAdjustments;
...@@ -258,10 +261,12 @@ private: ...@@ -258,10 +261,12 @@ private:
Window *makeObject(Window *pParent, const OString &rClass, const OString &rID, Window *makeObject(Window *pParent, const OString &rClass, const OString &rID,
stringmap &rVec, const std::vector<OString> &rItems); stringmap &rVec, const std::vector<OString> &rItems);
void connectNumericFormatterAdjustment(const OString &id, const OString &rAdjustment);
void connectTimeFormatterAdjustment(const OString &id, const OString &rAdjustment);
bool extractGroup(const OString &id, stringmap &rVec); bool extractGroup(const OString &id, stringmap &rVec);
bool extractModel(const OString &id, stringmap &rVec); bool extractModel(const OString &id, stringmap &rVec);
bool extractBuffer(const OString &id, stringmap &rVec); bool extractBuffer(const OString &id, stringmap &rVec);
bool extractSpinAdjustment(const OString &id, stringmap &rVec);
bool extractScrollAdjustment(const OString &id, stringmap &rVec); bool extractScrollAdjustment(const OString &id, stringmap &rVec);
bool extractButtonImage(const OString &id, stringmap &rMap, bool bRadio); bool extractButtonImage(const OString &id, stringmap &rMap, bool bRadio);
bool extractStock(const OString &id, stringmap &rMap); bool extractStock(const OString &id, stringmap &rMap);
......
...@@ -236,14 +236,24 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri ...@@ -236,14 +236,24 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri
} }
//Set SpinButton adjustments when everything has been imported //Set SpinButton adjustments when everything has been imported
for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aSpinAdjustmentMaps.begin(), for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aNumericFormatterAdjustmentMaps.begin(),
aEnd = m_pParserState->m_aSpinAdjustmentMaps.end(); aI != aEnd; ++aI) aEnd = m_pParserState->m_aNumericFormatterAdjustmentMaps.end(); aI != aEnd; ++aI)
{ {
NumericFormatter *pTarget = dynamic_cast<NumericFormatter*>(get<Window>(aI->m_sID)); NumericFormatter *pTarget = dynamic_cast<NumericFormatter*>(get<Window>(aI->m_sID));
const Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue); const Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of spinbutton/adjustment"); SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of spinbutton/adjustment");
if (pTarget && pAdjustment) if (pTarget && pAdjustment)
mungeSpinAdjustment(*pTarget, *pAdjustment); mungeAdjustment(*pTarget, *pAdjustment);
}
for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aTimeFormatterAdjustmentMaps.begin(),
aEnd = m_pParserState->m_aTimeFormatterAdjustmentMaps.end(); aI != aEnd; ++aI)
{
TimeField *pTarget = dynamic_cast<TimeField*>(get<Window>(aI->m_sID));
const 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);
} }
//Set ScrollBar adjustments when everything has been imported //Set ScrollBar adjustments when everything has been imported
...@@ -254,7 +264,7 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri ...@@ -254,7 +264,7 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri
const Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue); const Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scrollbar/adjustment"); SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scrollbar/adjustment");
if (pTarget && pAdjustment) if (pTarget && pAdjustment)
mungeScrollAdjustment(*pTarget, *pAdjustment); mungeAdjustment(*pTarget, *pAdjustment);
} }
//Set size-groups when all widgets have been imported //Set size-groups when all widgets have been imported
...@@ -663,6 +673,8 @@ namespace ...@@ -663,6 +673,8 @@ namespace
else if (sUnit == "%") else if (sUnit == "%")
eUnit = FUNIT_PERCENT; eUnit = FUNIT_PERCENT;
assert(eUnit != FUNIT_NONE); //unknown unit
return eUnit; return eUnit;
} }
...@@ -691,19 +703,19 @@ bool VclBuilder::extractGroup(const OString &id, stringmap &rMap) ...@@ -691,19 +703,19 @@ bool VclBuilder::extractGroup(const OString &id, stringmap &rMap)
return false; return false;
} }
bool VclBuilder::extractSpinAdjustment(const OString &id, stringmap &rMap) void VclBuilder::connectNumericFormatterAdjustment(const OString &id, const OString &rAdjustment)
{ {
VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment")); if (!rAdjustment.isEmpty())
if (aFind != rMap.end()) m_pParserState->m_aNumericFormatterAdjustmentMaps.push_back(WidgetAdjustmentMap(id, rAdjustment));
{ }
m_pParserState->m_aSpinAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second));
rMap.erase(aFind); void VclBuilder::connectTimeFormatterAdjustment(const OString &id, const OString &rAdjustment)
return true; {
} if (!rAdjustment.isEmpty())
return false; m_pParserState->m_aTimeFormatterAdjustmentMaps.push_back(WidgetAdjustmentMap(id, rAdjustment));
} }
bool VclBuilder::extractScrollAdjustment(const OString &id, stringmap &rMap) bool VclBuilder::extractScrollAdjustment(const OString &id, VclBuilder::stringmap &rMap)
{ {
VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment")); VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment"));
if (aFind != rMap.end()) if (aFind != rMap.end())
...@@ -741,6 +753,18 @@ namespace ...@@ -741,6 +753,18 @@ namespace
return bSelectable; return bSelectable;
} }
OString extractAdjustment(VclBuilder::stringmap &rMap)
{
OString sAdjustment;
VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment"));
if (aFind != rMap.end())
{
sAdjustment= aFind->second;
rMap.erase(aFind);
return sAdjustment;
}
return sAdjustment;
}
} }
bool VclBuilder::extractModel(const OString &id, stringmap &rMap) bool VclBuilder::extractModel(const OString &id, stringmap &rMap)
...@@ -968,7 +992,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri ...@@ -968,7 +992,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri
} }
else if (name == "GtkSpinButton") else if (name == "GtkSpinButton")
{ {
extractSpinAdjustment(id, rMap); OString sAdjustment = extractAdjustment(rMap);
OString sPattern = extractCustomProperty(rMap); OString sPattern = extractCustomProperty(rMap);
OString sUnit = sPattern; OString sUnit = sPattern;
...@@ -981,23 +1005,34 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri ...@@ -981,23 +1005,34 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri
} }
} }
FieldUnit eUnit = detectMetricUnit(sUnit);
WinBits nBits = WB_LEFT|WB_BORDER|WB_3DLOOK; WinBits nBits = WB_LEFT|WB_BORDER|WB_3DLOOK;
if (!id.endsWith("-nospin")) if (!id.endsWith("-nospin"))
nBits |= WB_SPIN; nBits |= WB_SPIN;
if (sPattern.isEmpty()) if (sPattern.isEmpty())
{ {
connectNumericFormatterAdjustment(id, sAdjustment);
SAL_INFO("vcl.layout", "making numeric field for " << name.getStr() << " " << sUnit.getStr()); SAL_INFO("vcl.layout", "making numeric field for " << name.getStr() << " " << sUnit.getStr());
pWindow = new NumericField(pParent, nBits); pWindow = new NumericField(pParent, nBits);
} }
else else
{ {
SAL_INFO("vcl.layout", "making metric field for " << name.getStr() << " " << sUnit.getStr()); if (sPattern == "hh:mm")
MetricField *pField = new MetricField(pParent, nBits); {
pField->SetUnit(eUnit); connectTimeFormatterAdjustment(id, sAdjustment);
pWindow = pField; SAL_INFO("vcl.layout", "making time field for " << name.getStr() << " " << sUnit.getStr());
TimeField *pField = new TimeField(pParent, nBits);
pWindow = pField;
}
else
{
connectNumericFormatterAdjustment(id, sAdjustment);
FieldUnit eUnit = detectMetricUnit(sUnit);
SAL_INFO("vcl.layout", "making metric field for " << name.getStr() << " " << sUnit.getStr());
MetricField *pField = new MetricField(pParent, nBits);
pField->SetUnit(eUnit);
pWindow = pField;
}
} }
} }
else if (name == "GtkLinkButton") else if (name == "GtkLinkButton")
...@@ -2467,7 +2502,7 @@ void VclBuilder::mungeModel(ListBox &rTarget, const ListStore &rStore, sal_uInt1 ...@@ -2467,7 +2502,7 @@ void VclBuilder::mungeModel(ListBox &rTarget, const ListStore &rStore, sal_uInt1
rTarget.SelectEntryPos(nActiveId); rTarget.SelectEntryPos(nActiveId);
} }
void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, const Adjustment &rAdjustment) void VclBuilder::mungeAdjustment(NumericFormatter &rTarget, const Adjustment &rAdjustment)
{ {
int nMul = rtl_math_pow10Exp(1, rTarget.GetDecimalDigits()); int nMul = rtl_math_pow10Exp(1, rTarget.GetDecimalDigits());
...@@ -2505,7 +2540,40 @@ void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, const Adjustment ...@@ -2505,7 +2540,40 @@ void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, const Adjustment
} }
} }
void VclBuilder::mungeScrollAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment) //assume all in minutes for the moment
void VclBuilder::mungeAdjustment(TimeField &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")
{
Time aUpper(0, rValue.toInt32());
rTarget.SetMax(aUpper);
rTarget.SetLast(aUpper);
}
else if (rKey == "lower")
{
Time aLower(0, rValue.toInt32());
rTarget.SetMin(aLower);
rTarget.SetFirst(aLower);
}
else if (rKey == "value")
{
Time aValue(0, rValue.toInt32());
rTarget.SetTime(aValue);
}
else
{
SAL_INFO("vcl.layout", "unhandled property :" << rKey.getStr());
}
}
}
void VclBuilder::mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment)
{ {
for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI) for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment