Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
b5a33fff
Kaydet (Commit)
b5a33fff
authored
Haz 05, 2012
tarafından
Markus Mohrhard
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
remove uno from oox cond format import code
Change-Id: I762a502403ecb31371efc0384376d283f7f09949
üst
caad0f6c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
128 deletions
+102
-128
conditio.hxx
sc/inc/conditio.hxx
+2
-0
conditio.cxx
sc/source/core/data/conditio.cxx
+45
-0
condformatbuffer.hxx
sc/source/filter/inc/condformatbuffer.hxx
+5
-3
condformatbuffer.cxx
sc/source/filter/oox/condformatbuffer.cxx
+47
-99
fmtuno.cxx
sc/source/ui/unoobj/fmtuno.cxx
+3
-26
No files found.
sc/inc/conditio.hxx
Dosyayı görüntüle @
b5a33fff
...
...
@@ -203,6 +203,8 @@ public:
virtual
ScFormatEntry
*
Clone
(
ScDocument
*
pDoc
=
NULL
)
const
;
static
ScConditionMode
GetModeFromApi
(
sal_Int32
nOperator
);
protected
:
virtual
void
DataChanged
(
const
ScRange
*
pModified
)
const
;
ScDocument
*
GetDocument
()
const
{
return
mpDoc
;
}
...
...
sc/source/core/data/conditio.cxx
Dosyayı görüntüle @
b5a33fff
...
...
@@ -33,6 +33,8 @@
#include <rtl/math.hxx>
#include <unotools/collatorwrapper.hxx>
#include <com/sun/star/sheet/ConditionOperator2.hpp>
#include "conditio.hxx"
#include "cell.hxx"
#include "document.hxx"
...
...
@@ -1202,6 +1204,49 @@ ScFormatEntry* ScConditionEntry::Clone(ScDocument* pDoc) const
return
new
ScConditionEntry
(
pDoc
,
*
this
);
}
ScConditionMode
ScConditionEntry
::
GetModeFromApi
(
sal_Int32
nOperation
)
{
ScConditionMode
eMode
=
SC_COND_NONE
;
switch
(
nOperation
)
{
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
EQUAL
:
eMode
=
SC_COND_EQUAL
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
LESS
:
eMode
=
SC_COND_LESS
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
GREATER
:
eMode
=
SC_COND_GREATER
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
LESS_EQUAL
:
eMode
=
SC_COND_EQLESS
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
GREATER_EQUAL
:
eMode
=
SC_COND_EQGREATER
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
NOT_EQUAL
:
eMode
=
SC_COND_NOTEQUAL
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
BETWEEN
:
eMode
=
SC_COND_BETWEEN
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
NOT_BETWEEN
:
eMode
=
SC_COND_NOTBETWEEN
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
FORMULA
:
eMode
=
SC_COND_DIRECT
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
DUPLICATE
:
eMode
=
SC_COND_DUPLICATE
;
break
;
case
com
:
:
sun
::
star
::
sheet
::
ConditionOperator2
::
NOT_DUPLICATE
:
eMode
=
SC_COND_NOTDUPLICATE
;
break
;
default
:
break
;
}
return
eMode
;
}
//------------------------------------------------------------------------
ScCondFormatEntry
::
ScCondFormatEntry
(
ScConditionMode
eOper
,
...
...
sc/source/filter/inc/condformatbuffer.hxx
Dosyayı görüntüle @
b5a33fff
...
...
@@ -41,6 +41,7 @@ namespace com { namespace sun { namespace star {
class
ScColorScaleFormat
;
class
ScDataBarFormat
;
struct
ScDataBarFormatData
;
class
ScConditionalFormat
;
namespace
oox
{
namespace
xls
{
...
...
@@ -144,7 +145,7 @@ private:
class
CondFormatRule
:
public
WorksheetHelper
{
public
:
explicit
CondFormatRule
(
const
CondFormat
&
rCondFormat
);
explicit
CondFormatRule
(
const
CondFormat
&
rCondFormat
,
ScConditionalFormat
*
pFormat
);
/** Imports rule settings from the cfRule element. */
void
importCfRule
(
const
AttributeList
&
rAttribs
);
...
...
@@ -155,8 +156,7 @@ public:
void
importCfRule
(
SequenceInputStream
&
rStrm
);
/** Creates a conditional formatting rule in the Calc document. */
void
finalizeImport
(
const
::
com
::
sun
::
star
::
uno
::
Reference
<
::
com
::
sun
::
star
::
sheet
::
XSheetConditionalEntries
>&
rxEntries
);
void
finalizeImport
();
/** Returns the priority of this rule. */
inline
sal_Int32
getPriority
()
const
{
return
maModel
.
mnPriority
;
}
...
...
@@ -167,6 +167,7 @@ public:
private
:
const
CondFormat
&
mrCondFormat
;
CondFormatRuleModel
maModel
;
ScConditionalFormat
*
mpFormat
;
boost
::
scoped_ptr
<
ColorScaleRule
>
mpColor
;
boost
::
scoped_ptr
<
DataBarRule
>
mpDataBar
;
};
...
...
@@ -217,6 +218,7 @@ private:
CondFormatModel
maModel
;
/// Model of this conditional formatting.
CondFormatRuleMap
maRules
;
/// Maps formatting rules by priority.
ScConditionalFormat
*
mpFormat
;
};
typedef
::
boost
::
shared_ptr
<
CondFormat
>
CondFormatRef
;
...
...
sc/source/filter/oox/condformatbuffer.cxx
Dosyayı görüntüle @
b5a33fff
...
...
@@ -54,12 +54,15 @@
#include "themebuffer.hxx"
#include "colorscale.hxx"
#include "conditio.hxx"
#include "document.hxx"
#include "convuno.hxx"
#include "docfunc.hxx"
#include "markdata.hxx"
#include "docpool.hxx"
#include "scitems.hxx"
#include "tokenarray.hxx"
#include "tokenuno.hxx"
namespace
oox
{
namespace
xls
{
...
...
@@ -379,9 +382,10 @@ void CondFormatRuleModel::setBiff12TextType( sal_Int32 nOperator )
// ============================================================================
CondFormatRule
::
CondFormatRule
(
const
CondFormat
&
rCondFormat
)
:
CondFormatRule
::
CondFormatRule
(
const
CondFormat
&
rCondFormat
,
ScConditionalFormat
*
pFormat
)
:
WorksheetHelper
(
rCondFormat
),
mrCondFormat
(
rCondFormat
)
mrCondFormat
(
rCondFormat
),
mpFormat
(
pFormat
)
{
}
...
...
@@ -611,7 +615,7 @@ void CondFormatRule::importCfRule( SequenceInputStream& rStrm )
}
}
void
CondFormatRule
::
finalizeImport
(
const
Reference
<
XSheetConditionalEntries
>&
rxEntries
)
void
CondFormatRule
::
finalizeImport
()
{
sal_Int32
eOperator
=
::
com
::
sun
::
star
::
sheet
::
ConditionOperator2
::
NONE
;
...
...
@@ -781,107 +785,43 @@ void CondFormatRule::finalizeImport( const Reference< XSheetConditionalEntries >
eOperator
=
::
com
::
sun
::
star
::
sheet
::
ConditionOperator2
::
FORMULA
;
}
if
(
rxEntries
.
is
()
&&
(
eOperator
!=
::
com
::
sun
::
star
::
sheet
::
ConditionOperator2
::
NONE
)
&&
!
maModel
.
maFormulas
.
empty
()
)
CellAddress
aBaseAddr
=
mrCondFormat
.
getRanges
().
getBaseAddress
();
ScAddress
aPos
;
ScUnoConversion
::
FillScAddress
(
aPos
,
aBaseAddr
);
if
(
(
eOperator
!=
::
com
::
sun
::
star
::
sheet
::
ConditionOperator2
::
NONE
)
&&
!
maModel
.
maFormulas
.
empty
()
)
{
::
std
::
vector
<
PropertyValue
>
aProps
;
// create condition properties
lclAppendProperty
(
aProps
,
CREATE_OUSTRING
(
"Operator"
),
eOperator
);
lclAppendProperty
(
aProps
,
CREATE_OUSTRING
(
"Formula1"
),
maModel
.
maFormulas
[
0
]
);
if
(
maModel
.
maFormulas
.
size
()
>=
2
)
lclAppendProperty
(
aProps
,
CREATE_OUSTRING
(
"Formula2"
),
maModel
.
maFormulas
[
1
]
);
// style name for the formatting attributes
OUString
aStyleName
=
getStyles
().
createDxfStyle
(
maModel
.
mnDxfId
);
if
(
!
aStyleName
.
isEmpty
()
)
lclAppendProperty
(
aProps
,
CREATE_OUSTRING
(
"StyleName"
),
aStyleName
);
// append the new rule
try
{
rxEntries
->
addNew
(
ContainerHelper
::
vectorToSequence
(
aProps
)
);
}
catch
(
Exception
&
)
ScDocument
&
rDoc
=
getScDocument
();
boost
::
scoped_ptr
<
ScTokenArray
>
pTokenArray2
;
if
(
maModel
.
maFormulas
.
size
()
>=
2
)
{
pTokenArray2
.
reset
(
new
ScTokenArray
());
ScTokenConversion
::
ConvertToTokenArray
(
rDoc
,
*
pTokenArray2
.
get
(),
maModel
.
maFormulas
[
1
]
);
}
ScTokenArray
aTokenArray
;
OUString
aStyleName
=
getStyles
().
createDxfStyle
(
maModel
.
mnDxfId
);
ScTokenConversion
::
ConvertToTokenArray
(
rDoc
,
aTokenArray
,
maModel
.
maFormulas
[
0
]
);
ScCondFormatEntry
*
pNewEntry
=
new
ScCondFormatEntry
(
ScCondFormatEntry
::
GetModeFromApi
(
eOperator
),
&
aTokenArray
,
pTokenArray2
.
get
(),
&
rDoc
,
aPos
,
aStyleName
);
mpFormat
->
AddEntry
(
pNewEntry
);
}
else
if
(
mpColor
)
{
ScDocument
&
rDoc
=
getScDocument
();
ScColorScaleFormat
*
pFormatEntry
=
new
ScColorScaleFormat
(
&
rDoc
);
const
ApiCellRangeList
&
rRanges
=
mrCondFormat
.
getRanges
();
ScRange
aRange
;
ScUnoConversion
::
FillScRange
(
aRange
,
*
rRanges
.
begin
());
ScConditionalFormat
*
pFormat
=
rDoc
.
GetCondFormat
(
aRange
.
aStart
.
Col
(),
aRange
.
aStart
.
Row
(),
aRange
.
aStart
.
Tab
()
);
if
(
!
pFormat
)
{
pFormat
=
new
ScConditionalFormat
(
0
,
&
rDoc
);
pFormat
->
AddEntry
(
pFormatEntry
);
rDoc
.
AddCondFormat
(
pFormat
,
aRange
.
aStart
.
Tab
());
}
else
pFormat
->
AddEntry
(
pFormatEntry
);
sal_Int32
nIndex
=
pFormat
->
GetKey
();
mpFormat
->
AddEntry
(
pFormatEntry
);
ScRangeList
aList
;
// apply attributes to cells
//
for
(
ApiCellRangeList
::
const_iterator
itr
=
rRanges
.
begin
();
itr
!=
rRanges
.
end
();
++
itr
)
{
ScUnoConversion
::
FillScRange
(
aRange
,
*
itr
);
ScPatternAttr
aPattern
(
rDoc
.
GetPool
()
);
aPattern
.
GetItemSet
().
Put
(
SfxUInt32Item
(
ATTR_CONDITIONAL
,
nIndex
)
);
ScMarkData
aMarkData
;
aMarkData
.
SetMarkArea
(
aRange
);
rDoc
.
ApplySelectionPattern
(
aPattern
,
aMarkData
);
aList
.
Append
(
aRange
);
}
if
(
aList
.
size
())
mpColor
->
AddEntries
(
pFormatEntry
,
&
rDoc
,
aList
.
front
()
->
aStart
);
else
mpColor
->
AddEntries
(
pFormatEntry
,
&
rDoc
,
ScAddress
()
);
pFormat
->
AddRange
(
aList
);
mpColor
->
AddEntries
(
pFormatEntry
,
&
rDoc
,
aPos
);
}
else
if
(
mpDataBar
)
{
ScRangeList
aList
;
ScDocument
&
rDoc
=
getScDocument
();
ScDataBarFormat
*
pFormatEntry
=
new
ScDataBarFormat
(
&
rDoc
);
const
ApiCellRangeList
&
rRanges
=
mrCondFormat
.
getRanges
();
ScRange
aRange
;
ScUnoConversion
::
FillScRange
(
aRange
,
*
rRanges
.
begin
());
ScConditionalFormat
*
pFormat
=
rDoc
.
GetCondFormat
(
aRange
.
aStart
.
Col
(),
aRange
.
aStart
.
Row
(),
aRange
.
aStart
.
Tab
()
);
if
(
!
pFormat
)
{
pFormat
=
new
ScConditionalFormat
(
0
,
&
rDoc
);
sal_Int32
nKey
=
rDoc
.
AddCondFormat
(
pFormat
,
aRange
.
aStart
.
Tab
());
pFormat
->
SetKey
(
nKey
);
}
pFormat
->
AddEntry
(
pFormatEntry
);
sal_Int32
nIndex
=
pFormat
->
GetKey
();
// apply attributes to cells
//
for
(
ApiCellRangeList
::
const_iterator
itr
=
rRanges
.
begin
();
itr
!=
rRanges
.
end
();
++
itr
)
{
ScUnoConversion
::
FillScRange
(
aRange
,
*
itr
);
ScPatternAttr
aPattern
(
rDoc
.
GetPool
()
);
aPattern
.
GetItemSet
().
Put
(
SfxUInt32Item
(
ATTR_CONDITIONAL
,
nIndex
)
);
ScMarkData
aMarkData
;
aMarkData
.
SetMarkArea
(
aRange
);
rDoc
.
ApplySelectionPattern
(
aPattern
,
aMarkData
);
aList
.
Append
(
aRange
);
}
mpDataBar
->
SetData
(
pFormatEntry
,
&
rDoc
,
aList
.
front
()
->
aStart
);
mpFormat
->
AddEntry
(
pFormatEntry
);
mpDataBar
->
SetData
(
pFormatEntry
,
&
rDoc
,
aPos
);
pFormat
->
AddRange
(
aList
);
}
}
...
...
@@ -911,7 +851,8 @@ CondFormatModel::CondFormatModel() :
// ============================================================================
CondFormat
::
CondFormat
(
const
WorksheetHelper
&
rHelper
)
:
WorksheetHelper
(
rHelper
)
WorksheetHelper
(
rHelper
),
mpFormat
(
NULL
)
{
}
...
...
@@ -919,6 +860,7 @@ void CondFormat::importConditionalFormatting( const AttributeList& rAttribs )
{
getAddressConverter
().
convertToCellRangeList
(
maModel
.
maRanges
,
rAttribs
.
getString
(
XML_sqref
,
OUString
()
),
getSheetIndex
(),
true
);
maModel
.
mbPivot
=
rAttribs
.
getBool
(
XML_pivot
,
false
);
mpFormat
=
new
ScConditionalFormat
(
0
,
&
getScDocument
());
}
CondFormatRuleRef
CondFormat
::
importCfRule
(
const
AttributeList
&
rAttribs
)
...
...
@@ -946,23 +888,29 @@ void CondFormat::importCfRule( SequenceInputStream& rStrm )
void
CondFormat
::
finalizeImport
()
{
try
{
Reference
<
XSheetCellRanges
>
xRanges
(
getCellRangeList
(
maModel
.
maRanges
),
UNO_SET_THROW
);
PropertySet
aPropSet
(
xRanges
);
Reference
<
XSheetConditionalEntries
>
xEntries
(
aPropSet
.
getAnyProperty
(
PROP_ConditionalFormat
),
UNO_QUERY_THROW
);
// maRules is sorted by rule priority
maRules
.
forEachMem
(
&
CondFormatRule
::
finalizeImport
,
::
boost
::
cref
(
xEntries
)
);
aPropSet
.
setProperty
(
PROP_ConditionalFormat
,
xEntries
);
}
catch
(
Exception
&
)
ScDocument
&
rDoc
=
getScDocument
();
maRules
.
forEachMem
(
&
CondFormatRule
::
finalizeImport
);
sal_Int32
nIndex
=
getScDocument
().
AddCondFormat
(
mpFormat
,
maModel
.
maRanges
.
getBaseAddress
().
Sheet
);
ScRangeList
aList
;
for
(
ApiCellRangeList
::
const_iterator
itr
=
maModel
.
maRanges
.
begin
();
itr
!=
maModel
.
maRanges
.
end
();
++
itr
)
{
ScRange
aRange
;
ScUnoConversion
::
FillScRange
(
aRange
,
*
itr
);
ScPatternAttr
aPattern
(
rDoc
.
GetPool
()
);
aPattern
.
GetItemSet
().
Put
(
SfxUInt32Item
(
ATTR_CONDITIONAL
,
nIndex
)
);
ScMarkData
aMarkData
;
aMarkData
.
SetMarkArea
(
aRange
);
rDoc
.
ApplySelectionPattern
(
aPattern
,
aMarkData
);
aList
.
Append
(
aRange
);
}
mpFormat
->
AddRange
(
aList
);
}
CondFormatRuleRef
CondFormat
::
createRule
()
{
return
CondFormatRuleRef
(
new
CondFormatRule
(
*
this
)
);
return
CondFormatRuleRef
(
new
CondFormatRule
(
*
this
,
mpFormat
)
);
}
void
CondFormat
::
insertRule
(
CondFormatRuleRef
xRule
)
...
...
sc/source/ui/unoobj/fmtuno.cxx
Dosyayı görüntüle @
b5a33fff
...
...
@@ -102,29 +102,6 @@ sal_Int32 lcl_ConditionModeToOperatorNew( ScConditionMode eMode )
return
eOper
;
}
ScConditionMode
lcl_ConditionOperatorToModeNew
(
sal_Int32
eOper
)
{
ScConditionMode
eMode
=
SC_COND_NONE
;
switch
(
eOper
)
{
case
sheet
:
:
ConditionOperator2
::
EQUAL
:
eMode
=
SC_COND_EQUAL
;
break
;
case
sheet
:
:
ConditionOperator2
::
LESS
:
eMode
=
SC_COND_LESS
;
break
;
case
sheet
:
:
ConditionOperator2
::
GREATER
:
eMode
=
SC_COND_GREATER
;
break
;
case
sheet
:
:
ConditionOperator2
::
LESS_EQUAL
:
eMode
=
SC_COND_EQLESS
;
break
;
case
sheet
:
:
ConditionOperator2
::
GREATER_EQUAL
:
eMode
=
SC_COND_EQGREATER
;
break
;
case
sheet
:
:
ConditionOperator2
::
NOT_EQUAL
:
eMode
=
SC_COND_NOTEQUAL
;
break
;
case
sheet
:
:
ConditionOperator2
::
BETWEEN
:
eMode
=
SC_COND_BETWEEN
;
break
;
case
sheet
:
:
ConditionOperator2
::
NOT_BETWEEN
:
eMode
=
SC_COND_NOTBETWEEN
;
break
;
case
sheet
:
:
ConditionOperator2
::
FORMULA
:
eMode
=
SC_COND_DIRECT
;
break
;
case
sheet
:
:
ConditionOperator2
::
DUPLICATE
:
eMode
=
SC_COND_DUPLICATE
;
break
;
default
:
{
// added to avoid warnings
}
}
return
eMode
;
}
sheet
::
ConditionOperator
lcl_ConditionModeToOperator
(
ScConditionMode
eMode
)
{
sheet
::
ConditionOperator
eOper
=
sheet
::
ConditionOperator_NONE
;
...
...
@@ -307,7 +284,7 @@ void SAL_CALL ScTableConditionalFormat::addNew(
if
(
rProp
.
Name
==
SC_UNONAME_OPERATOR
)
{
sal_Int32
eOper
=
ScUnoHelpFunctions
::
GetEnumFromAny
(
rProp
.
Value
);
aEntry
.
meMode
=
lcl_ConditionOperatorToModeNew
(
eOper
);
aEntry
.
meMode
=
ScConditionEntry
::
GetModeFromApi
(
eOper
);
}
else
if
(
rProp
.
Name
==
SC_UNONAME_FORMULA1
)
{
...
...
@@ -586,7 +563,7 @@ void SAL_CALL ScTableConditionalEntry::setConditionOperator( sal_Int32 nOperator
throw
(
uno
::
RuntimeException
)
{
SolarMutexGuard
aGuard
;
aData
.
meMode
=
lcl_ConditionOperatorToModeNew
(
nOperator
);
aData
.
meMode
=
ScConditionEntry
::
GetModeFromApi
(
nOperator
);
}
rtl
::
OUString
SAL_CALL
ScTableConditionalEntry
::
getFormula1
()
throw
(
uno
::
RuntimeException
)
...
...
@@ -784,7 +761,7 @@ void SAL_CALL ScTableValidationObj::setConditionOperator( sal_Int32 nOperator )
throw
(
uno
::
RuntimeException
)
{
SolarMutexGuard
aGuard
;
nMode
=
sal
::
static_int_cast
<
sal_uInt16
>
(
lcl_ConditionOperatorToModeNew
(
nOperator
)
);
nMode
=
sal
::
static_int_cast
<
sal_uInt16
>
(
ScConditionEntry
::
GetModeFromApi
(
nOperator
)
);
}
rtl
::
OUString
SAL_CALL
ScTableValidationObj
::
getFormula1
()
throw
(
uno
::
RuntimeException
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment