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
1c9f0a6d
Kaydet (Commit)
1c9f0a6d
authored
Şub 20, 2012
tarafından
Markus Mohrhard
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
move SvListView from Table to ptr_map, related fdo#45679
üst
cfae02e4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
58 additions
and
55 deletions
+58
-55
treelist.hxx
svtools/inc/svtools/treelist.hxx
+38
-23
treelist.cxx
svtools/source/contnr/treelist.cxx
+20
-32
No files found.
svtools/inc/svtools/treelist.hxx
Dosyayı görüntüle @
1c9f0a6d
...
...
@@ -32,6 +32,7 @@
#include "svtools/svtdllapi.h"
#include <tools/solar.h>
#include <vector>
#include <boost/ptr_container/ptr_map.hpp>
#include <tools/table.hxx>
#include <tools/link.hxx>
...
...
@@ -280,7 +281,7 @@ class SVT_DLLPUBLIC SvTreeList
sal_Bool
IsEntryVisible
(
const
SvListView
*
,
SvListEntry
*
pEntry
)
const
;
SvListEntry
*
GetEntryAtVisPos
(
const
SvListView
*
,
sal_uLong
nVisPos
)
const
;
sal_uLong
GetVisiblePos
(
const
SvListView
*
,
SvListEntry
*
pEntry
)
const
;
sal_uLong
GetVisibleCount
(
const
SvListView
*
)
const
;
sal_uLong
GetVisibleCount
(
SvListView
*
)
const
;
sal_uLong
GetVisibleChildCount
(
const
SvListView
*
,
SvListEntry
*
pParent
)
const
;
SvListEntry
*
FirstSelected
(
const
SvListView
*
)
const
;
...
...
@@ -421,6 +422,8 @@ class SVT_DLLPUBLIC SvListView
{
friend
class
SvTreeList
;
typedef
boost
::
ptr_map
<
SvListEntry
*
,
SvViewData
>
SvDataTable
;
sal_uLong
nVisibleCount
;
sal_uLong
nSelectionCount
;
sal_Bool
bVisPositionsValid
;
...
...
@@ -430,7 +433,7 @@ class SVT_DLLPUBLIC SvListView
SVT_DLLPRIVATE
void
RemoveViewData
(
SvListEntry
*
pParent
);
protected
:
Table
aDataTable
;
// Mapping SvListEntry -> ViewData
SvDataTable
m
aDataTable
;
// Mapping SvListEntry -> ViewData
SvTreeList
*
pModel
;
void
ActionMoving
(
SvListEntry
*
pEntry
,
SvListEntry
*
pTargetPrnt
,
sal_uLong
nChildPos
);
...
...
@@ -527,10 +530,11 @@ public:
sal_Bool
IsExpanded
(
SvListEntry
*
pEntry
)
const
;
sal_Bool
IsSelected
(
SvListEntry
*
pEntry
)
const
;
sal_Bool
HasEntryFocus
(
SvListEntry
*
pEntry
)
const
;
void
SetEntryFocus
(
SvListEntry
*
pEntry
,
sal_Bool
bFocus
)
const
;
SvViewData
*
GetViewData
(
SvListEntry
*
pEntry
)
const
;
void
SetEntryFocus
(
SvListEntry
*
pEntry
,
sal_Bool
bFocus
);
const
SvViewData
*
GetViewData
(
SvListEntry
*
pEntry
)
const
;
SvViewData
*
GetViewData
(
SvListEntry
*
pEntry
);
sal_Bool
HasViewData
()
const
{
return
aDataTable
.
Count
()
>
1
;
}
// eine ROOT gibts immer
{
return
maDataTable
.
size
()
>
1
;
}
// eine ROOT gibts immer
virtual
SvViewData
*
CreateViewData
(
SvListEntry
*
pEntry
);
virtual
void
InitViewData
(
SvViewData
*
,
SvListEntry
*
pEntry
);
...
...
@@ -552,43 +556,54 @@ public:
inline
sal_Bool
SvListView
::
IsExpanded
(
SvListEntry
*
pEntry
)
const
{
DBG_ASSERT
(
pEntry
,
"IsExpanded:No Entry"
);
Sv
ViewData
*
pData
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
);
DBG_ASSERT
(
pData
,
"Entry not in Table"
);
return
pData
->
IsExpanded
();
Sv
DataTable
::
const_iterator
itr
=
maDataTable
.
find
(
pEntry
);
DBG_ASSERT
(
itr
!=
maDataTable
.
end
()
,
"Entry not in Table"
);
return
itr
->
second
->
IsExpanded
();
}
inline
sal_Bool
SvListView
::
IsSelected
(
SvListEntry
*
pEntry
)
const
{
DBG_ASSERT
(
pEntry
,
"IsExpanded:No Entry"
);
Sv
ViewData
*
pData
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
);
DBG_ASSERT
(
pData
,
"Entry not in Table"
);
return
pData
->
IsSelected
();
Sv
DataTable
::
const_iterator
itr
=
maDataTable
.
find
(
pEntry
);
DBG_ASSERT
(
itr
!=
maDataTable
.
end
()
,
"Entry not in Table"
);
return
itr
->
second
->
IsSelected
();
}
inline
sal_Bool
SvListView
::
HasEntryFocus
(
SvListEntry
*
pEntry
)
const
{
DBG_ASSERT
(
pEntry
,
"IsExpanded:No Entry"
);
Sv
ViewData
*
pData
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
);
DBG_ASSERT
(
pData
,
"Entry not in Table"
);
return
pData
->
HasFocus
();
Sv
DataTable
::
const_iterator
itr
=
maDataTable
.
find
(
pEntry
);
DBG_ASSERT
(
itr
!=
maDataTable
.
end
()
,
"Entry not in Table"
);
return
itr
->
second
->
HasFocus
();
}
inline
void
SvListView
::
SetEntryFocus
(
SvListEntry
*
pEntry
,
sal_Bool
bFocus
)
const
inline
void
SvListView
::
SetEntryFocus
(
SvListEntry
*
pEntry
,
sal_Bool
bFocus
)
{
DBG_ASSERT
(
pEntry
,
"SetEntryFocus:No Entry"
);
SvViewData
*
pData
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
);
DBG_ASSERT
(
pData
,
"Entry not in Table"
);
pData
->
SetFocus
(
bFocus
);
SvDataTable
::
iterator
itr
=
maDataTable
.
find
(
pEntry
);
DBG_ASSERT
(
itr
!=
maDataTable
.
end
(),
"Entry not in Table"
);
itr
->
second
->
SetFocus
(
bFocus
);
}
inline
const
SvViewData
*
SvListView
::
GetViewData
(
SvListEntry
*
pEntry
)
const
{
#ifndef DBG_UTIL
return
maDataTable
.
find
(
pEntry
)
->
second
;
#else
SvDataTable
::
const_iterator
itr
=
maDataTable
.
find
(
pEntry
);
DBG_ASSERT
(
itr
!=
maDataTable
.
end
(),
"Entry not in model or wrong view"
);
return
itr
->
second
;
#endif
}
inline
SvViewData
*
SvListView
::
GetViewData
(
SvListEntry
*
pEntry
)
const
inline
SvViewData
*
SvListView
::
GetViewData
(
SvListEntry
*
pEntry
)
{
#ifndef DBG_UTIL
return
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
)
;
return
maDataTable
.
find
(
pEntry
)
->
second
;
#else
Sv
ViewData
*
pResult
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
);
DBG_ASSERT
(
pResult
,
"Entry not in model or wrong view"
);
return
pResult
;
Sv
DataTable
::
iterator
itr
=
maDataTable
.
find
(
pEntry
);
DBG_ASSERT
(
itr
!=
maDataTable
.
end
()
,
"Entry not in model or wrong view"
);
return
itr
->
second
;
#endif
}
...
...
svtools/source/contnr/treelist.cxx
Dosyayı görüntüle @
1c9f0a6d
...
...
@@ -732,9 +732,9 @@ sal_uLong SvTreeList::GetVisiblePos( const SvListView* pView, SvListEntry* pEntr
{
// damit GetVisibleCount die Positionen aktualisiert
((
SvListView
*
)
pView
)
->
nVisibleCount
=
0
;
GetVisibleCount
(
pView
);
GetVisibleCount
(
const_cast
<
SvListView
*>
(
pView
)
);
}
SvViewData
*
pViewData
=
pView
->
GetViewData
(
pEntry
);
const
SvViewData
*
pViewData
=
pView
->
GetViewData
(
pEntry
);
return
pViewData
->
nVisPos
;
}
...
...
@@ -744,7 +744,7 @@ sal_uLong SvTreeList::GetVisiblePos( const SvListView* pView, SvListEntry* pEntr
|*
*************************************************************************/
sal_uLong
SvTreeList
::
GetVisibleCount
(
const
SvListView
*
pView
)
const
sal_uLong
SvTreeList
::
GetVisibleCount
(
SvListView
*
pView
)
const
{
DBG_ASSERT
(
pView
,
"GetVisCount:No View"
);
if
(
!
pView
->
HasViewData
()
)
...
...
@@ -1445,15 +1445,13 @@ void SvListView::InitTable()
DBG_ASSERT
(
pModel
,
"InitTable:No Model"
);
DBG_ASSERT
(
!
nSelectionCount
&&!
nVisibleCount
&&!
bVisPositionsValid
,
"InitTable: Not cleared!"
);
if
(
aDataTable
.
Count
()
)
if
(
maDataTable
.
size
()
)
{
DBG_ASSERT
(
aDataTable
.
Count
()
==
1
,
"InitTable: TableCount != 1"
);
DBG_ASSERT
(
maDataTable
.
size
()
==
1
,
"InitTable: TableCount != 1"
);
// die im Clear fuer die Root allozierten View-Daten loeschen
// Achtung: Das zu dem RootEntry (und damit auch der Entry)
// gehoerende Model kann bereits geloescht sein!
SvViewData
*
pViewData
=
(
SvViewData
*
)
aDataTable
.
GetObject
(
0
);
delete
pViewData
;
aDataTable
.
Clear
();
maDataTable
.
clear
();
}
SvListEntry
*
pEntry
;
...
...
@@ -1463,7 +1461,7 @@ void SvListView::InitTable()
pEntry
=
pModel
->
pRootItem
;
pViewData
=
new
SvViewData
;
pViewData
->
nFlags
=
SVLISTENTRYFLAG_EXPANDED
;
aDataTable
.
Insert
(
(
sal_uLong
)
pEntry
,
pViewData
);
maDataTable
.
insert
(
pEntry
,
pViewData
);
// Jetzt alle anderen Entries
pEntry
=
pModel
->
First
();
while
(
pEntry
)
...
...
@@ -1471,7 +1469,7 @@ void SvListView::InitTable()
pViewData
=
CreateViewData
(
pEntry
);
DBG_ASSERT
(
pViewData
,
"InitTable:No ViewData"
);
InitViewData
(
pViewData
,
pEntry
);
aDataTable
.
Insert
(
(
sal_uLong
)
pEntry
,
pViewData
);
maDataTable
.
insert
(
pEntry
,
pViewData
);
pEntry
=
pModel
->
Next
(
pEntry
);
}
}
...
...
@@ -1485,13 +1483,7 @@ SvViewData* SvListView::CreateViewData( SvListEntry* )
void
SvListView
::
ClearTable
()
{
DBG_CHKTHIS
(
SvListView
,
0
);
SvViewData
*
pViewData
=
(
SvViewData
*
)
aDataTable
.
First
();
while
(
pViewData
)
{
delete
pViewData
;
pViewData
=
(
SvViewData
*
)
aDataTable
.
Next
();
}
aDataTable
.
Clear
();
maDataTable
.
clear
();
}
void
SvListView
::
Clear
()
...
...
@@ -1506,7 +1498,7 @@ void SvListView::Clear()
SvListEntry
*
pEntry
=
pModel
->
pRootItem
;
SvViewData
*
pViewData
=
new
SvViewData
;
pViewData
->
nFlags
=
SVLISTENTRYFLAG_EXPANDED
;
aDataTable
.
Insert
(
(
sal_uLong
)
pEntry
,
pViewData
);
maDataTable
.
insert
(
pEntry
,
pViewData
);
}
}
...
...
@@ -1579,7 +1571,7 @@ void SvListView::ActionMoving( SvListEntry* pEntry,SvListEntry*,sal_uLong)
DBG_ASSERT
(
pParent
,
"Model not consistent"
);
if
(
pParent
!=
pModel
->
pRootItem
&&
pParent
->
pChildren
->
size
()
==
1
)
{
SvViewData
*
pViewData
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pParent
)
;
SvViewData
*
pViewData
=
maDataTable
.
find
(
pParent
)
->
second
;
pViewData
->
nFlags
&=
(
~
SVLISTENTRYFLAG_EXPANDED
);
}
// vorlaeufig
...
...
@@ -1603,10 +1595,10 @@ void SvListView::ActionInserted( SvListEntry* pEntry )
SvViewData
*
pData
=
CreateViewData
(
pEntry
);
InitViewData
(
pData
,
pEntry
);
#ifdef DBG_UTIL
s
al_Bool
b
Success
=
s
td
::
pair
<
SvDataTable
::
iterator
,
bool
>
a
Success
=
#endif
aDataTable
.
Insert
(
(
sal_uLong
)
pEntry
,
pData
);
DBG_ASSERT
(
bSuccess
,
"Entry already in View"
);
maDataTable
.
insert
(
pEntry
,
pData
);
DBG_ASSERT
(
aSuccess
.
second
,
"Entry already in View"
);
if
(
nVisibleCount
&&
pModel
->
IsEntryVisible
(
this
,
pEntry
))
{
nVisibleCount
=
0
;
...
...
@@ -1627,11 +1619,11 @@ void SvListView::ActionInsertedTree( SvListEntry* pEntry )
sal_uInt16
nRefDepth
=
pModel
->
GetDepth
(
pCurEntry
);
while
(
pCurEntry
)
{
DBG_ASSERT
(
aDataTable
.
Get
((
sal_uLong
)
pCurEntry
)
==
0
,
"Entry already in Table"
);
DBG_ASSERT
(
maDataTable
.
find
(
pCurEntry
)
!=
maDataTable
.
end
()
,
"Entry already in Table"
);
SvViewData
*
pViewData
=
CreateViewData
(
pCurEntry
);
DBG_ASSERT
(
pViewData
,
"No ViewData"
);
InitViewData
(
pViewData
,
pEntry
);
aDataTable
.
Insert
(
(
sal_uLong
)
pCurEntry
,
pViewData
);
maDataTable
.
insert
(
pCurEntry
,
pViewData
);
pCurEntry
=
pModel
->
Next
(
pCurEntry
);
if
(
pCurEntry
&&
pModel
->
GetDepth
(
pCurEntry
)
<=
nRefDepth
)
pCurEntry
=
0
;
...
...
@@ -1646,9 +1638,7 @@ void SvListView::RemoveViewData( SvListEntry* pParent )
SvListEntry
*
pCur
=
(
SvListEntry
*
)
pChildren
->
First
();
while
(
pCur
)
{
SvViewData
*
pViewData
=
(
SvViewData
*
)
aDataTable
.
Get
((
sal_uLong
)
pCur
);
delete
pViewData
;
aDataTable
.
Remove
(
(
sal_uLong
)
pCur
);
maDataTable
.
erase
(
pCur
);
if
(
pCur
->
HasChildren
())
RemoveViewData
(
pCur
);
pCur
=
(
SvListEntry
*
)
pChildren
->
Next
();
...
...
@@ -1663,7 +1653,7 @@ void SvListView::ActionRemoving( SvListEntry* pEntry )
DBG_CHKTHIS
(
SvListView
,
0
);
DBG_ASSERT
(
pEntry
,
"Remove:No Entry"
);
SvViewData
*
pViewData
=
(
SvViewData
*
)
aDataTable
.
Get
(
(
sal_uLong
)
pEntry
)
;
SvViewData
*
pViewData
=
maDataTable
.
find
(
pEntry
)
->
second
;
sal_uLong
nSelRemoved
=
0
;
if
(
pViewData
->
IsSelected
()
)
nSelRemoved
=
1
+
pModel
->
GetChildSelectionCount
(
this
,
pEntry
);
...
...
@@ -1683,16 +1673,14 @@ void SvListView::ActionRemoving( SvListEntry* pEntry )
}
bVisPositionsValid
=
sal_False
;
pViewData
=
(
SvViewData
*
)
aDataTable
.
Get
((
sal_uLong
)
pEntry
);
delete
pViewData
;
aDataTable
.
Remove
(
(
sal_uLong
)
pEntry
);
maDataTable
.
erase
(
pEntry
);
RemoveViewData
(
pEntry
);
SvListEntry
*
pCurEntry
=
pEntry
->
pParent
;
if
(
pCurEntry
&&
pCurEntry
!=
pModel
->
pRootItem
&&
pCurEntry
->
pChildren
->
size
()
==
1
)
{
pViewData
=
(
SvViewData
*
)
aDataTable
.
Get
((
sal_uLong
)
pCurEntry
)
;
pViewData
=
maDataTable
.
find
(
pCurEntry
)
->
second
;
pViewData
->
nFlags
&=
(
~
SVLISTENTRYFLAG_EXPANDED
);
}
}
...
...
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