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
06d8a9d4
Kaydet (Commit)
06d8a9d4
authored
Ock 30, 2017
tarafından
Caolán McNamara
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
support accelerator modifiers in menu builder
Change-Id: I39c4260ecec288be61f4f2c42c5b7c72babdb7a8
üst
bf7168bd
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
20 deletions
+32
-20
builder.hxx
include/vcl/builder.hxx
+3
-2
builder.cxx
vcl/source/window/builder.cxx
+29
-18
No files found.
include/vcl/builder.hxx
Dosyayı görüntüle @
06d8a9d4
...
...
@@ -49,6 +49,7 @@ class VCL_DLLPUBLIC VclBuilder
{
public
:
typedef
std
::
map
<
OString
,
OString
>
stringmap
;
typedef
std
::
map
<
OString
,
std
::
pair
<
OString
,
OString
>>
accelmap
;
/// These functions create a new widget with parent pParent and return it in rRet
typedef
void
(
*
customMakeWidget
)(
VclPtr
<
vcl
::
Window
>
&
rRet
,
VclPtr
<
vcl
::
Window
>
&
pParent
,
stringmap
&
rVec
);
...
...
@@ -361,14 +362,14 @@ private:
void
collectProperty
(
xmlreader
::
XmlReader
&
reader
,
const
OString
&
rID
,
stringmap
&
rVec
);
static
void
collectPangoAttribute
(
xmlreader
::
XmlReader
&
reader
,
stringmap
&
rMap
);
static
void
collectAtkAttribute
(
xmlreader
::
XmlReader
&
reader
,
stringmap
&
rMap
);
static
void
collectAccelerator
(
xmlreader
::
XmlReader
&
reader
,
string
map
&
rMap
);
static
void
collectAccelerator
(
xmlreader
::
XmlReader
&
reader
,
accel
map
&
rMap
);
void
insertMenuObject
(
PopupMenu
*
pParent
,
const
OString
&
rClass
,
const
OString
&
rID
,
stringmap
&
rProps
,
string
map
&
rAccels
);
accel
map
&
rAccels
);
void
handleMenuChild
(
PopupMenu
*
pParent
,
xmlreader
::
XmlReader
&
reader
);
void
handleMenuObject
(
PopupMenu
*
pParent
,
xmlreader
::
XmlReader
&
reader
);
...
...
vcl/source/window/builder.cxx
Dosyayı görüntüle @
06d8a9d4
...
...
@@ -2579,7 +2579,8 @@ void VclBuilder::handleMenuObject(PopupMenu *pParent, xmlreader::XmlReader &read
int
nLevel
=
1
;
stringmap
aProperties
,
aAccelerators
;
stringmap
aProperties
;
accelmap
aAccelerators
;
if
(
!
sCustomProperty
.
isEmpty
())
aProperties
[
OString
(
"customproperty"
)]
=
sCustomProperty
;
...
...
@@ -2685,29 +2686,34 @@ OString VclBuilder::convertMnemonicMarkup(const OString &rIn)
namespace
{
vcl
::
KeyCode
makeKeyCode
(
const
OString
&
rKey
)
vcl
::
KeyCode
makeKeyCode
(
const
std
::
pair
<
OString
,
OString
>
&
rKey
)
{
if
(
rKey
==
"Insert"
)
return
vcl
::
KeyCode
(
KEY_INSERT
);
else
if
(
rKey
==
"Delete"
)
return
vcl
::
KeyCode
(
KEY_DELETE
);
bool
bShift
=
rKey
.
second
.
indexOf
(
"GDK_SHIFT_MASK"
)
!=
-
1
;
bool
bMod1
=
rKey
.
second
.
indexOf
(
"GDK_CONTROL_MASK"
)
!=
-
1
;
bool
bMod2
=
rKey
.
second
.
indexOf
(
"GDK_MOD1_MASK"
)
!=
-
1
;
bool
bMod3
=
rKey
.
second
.
indexOf
(
"GDK_MOD2_MASK"
)
!=
-
1
;
if
(
rKey
.
first
==
"Insert"
)
return
vcl
::
KeyCode
(
KEY_INSERT
,
bShift
,
bMod1
,
bMod2
,
bMod3
);
else
if
(
rKey
.
first
==
"Delete"
)
return
vcl
::
KeyCode
(
KEY_DELETE
,
bShift
,
bMod1
,
bMod2
,
bMod3
);
assert
(
rKey
.
getLength
()
==
1
);
sal_Char
cChar
=
rKey
.
toChar
();
assert
(
rKey
.
first
.
getLength
()
==
1
);
sal_Char
cChar
=
rKey
.
first
.
toChar
();
if
(
cChar
>=
'a'
&&
cChar
<=
'z'
)
return
vcl
::
KeyCode
(
KEY_A
+
(
cChar
-
'a'
));
return
vcl
::
KeyCode
(
KEY_A
+
(
cChar
-
'a'
)
,
bShift
,
bMod1
,
bMod2
,
bMod3
);
else
if
(
cChar
>=
'A'
&&
cChar
<=
'Z'
)
return
vcl
::
KeyCode
(
KEY_A
+
(
cChar
-
'A'
));
return
vcl
::
KeyCode
(
KEY_A
+
(
cChar
-
'A'
)
,
bShift
,
bMod1
,
bMod2
,
bMod3
);
else
if
(
cChar
>=
'0'
&&
cChar
<=
'9'
)
return
vcl
::
KeyCode
(
KEY_0
+
(
cChar
-
'A'
));
return
vcl
::
KeyCode
(
KEY_0
+
(
cChar
-
'A'
)
,
bShift
,
bMod1
,
bMod2
,
bMod3
);
return
vcl
::
KeyCode
(
cChar
);
return
vcl
::
KeyCode
(
cChar
,
bShift
,
bMod1
,
bMod2
,
bMod3
);
}
}
void
VclBuilder
::
insertMenuObject
(
PopupMenu
*
pParent
,
const
OString
&
rClass
,
const
OString
&
rID
,
stringmap
&
rProps
,
string
map
&
rAccels
)
stringmap
&
rProps
,
accel
map
&
rAccels
)
{
sal_uInt16
nOldCount
=
pParent
->
GetItemCount
();
sal_uInt16
nNewId
=
nOldCount
+
1
;
...
...
@@ -2745,10 +2751,10 @@ void VclBuilder::insertMenuObject(PopupMenu *pParent, const OString &rClass, con
SAL_INFO
(
"vcl.layout"
,
"unhandled property: "
<<
rKey
.
getStr
());
}
for
(
string
map
::
iterator
aI
=
rAccels
.
begin
(),
aEnd
=
rAccels
.
end
();
aI
!=
aEnd
;
++
aI
)
for
(
accel
map
::
iterator
aI
=
rAccels
.
begin
(),
aEnd
=
rAccels
.
end
();
aI
!=
aEnd
;
++
aI
)
{
const
OString
&
rSignal
=
aI
->
first
;
const
OString
&
rValue
=
aI
->
second
;
const
auto
&
rValue
=
aI
->
second
;
if
(
rSignal
==
"activate"
)
pParent
->
SetAccelKey
(
nNewId
,
makeKeyCode
(
rValue
));
...
...
@@ -3206,13 +3212,14 @@ void VclBuilder::handleActionWidget(xmlreader::XmlReader &reader)
set_response
(
sID
,
sResponse
.
toInt32
());
}
void
VclBuilder
::
collectAccelerator
(
xmlreader
::
XmlReader
&
reader
,
string
map
&
rMap
)
void
VclBuilder
::
collectAccelerator
(
xmlreader
::
XmlReader
&
reader
,
accel
map
&
rMap
)
{
xmlreader
::
Span
name
;
int
nsId
;
OString
sProperty
;
OString
sValue
;
OString
sModifiers
;
while
(
reader
.
nextAttribute
(
&
nsId
,
&
name
))
{
...
...
@@ -3226,12 +3233,16 @@ void VclBuilder::collectAccelerator(xmlreader::XmlReader &reader, stringmap &rMa
name
=
reader
.
getAttributeValue
(
false
);
sProperty
=
OString
(
name
.
begin
,
name
.
length
);
}
else
if
(
name
.
equals
(
"modifiers"
))
{
name
=
reader
.
getAttributeValue
(
false
);
sModifiers
=
OString
(
name
.
begin
,
name
.
length
);
}
}
if
(
!
sProperty
.
isEmpty
()
&&
!
sValue
.
isEmpty
())
{
rMap
[
sProperty
]
=
s
Value
;
rMap
[
sProperty
]
=
s
td
::
make_pair
(
sValue
,
sModifiers
)
;
}
}
...
...
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