Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fallenstardust
YGOMobile
Commits
5180c001
Commit
5180c001
authored
May 12, 2019
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
移除AndroidGUIListbox并放大GUIListBox的scrollbar大小
parent
9041b4d8
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
7 additions
and
1325 deletions
+7
-1325
Classes/gframe/CGUIListBox.h
Classes/gframe/CGUIListBox.h
+0
-192
Classes/gframe/game.cpp
Classes/gframe/game.cpp
+6
-11
libcore/android/CAndroidGUIListBox.cpp
libcore/android/CAndroidGUIListBox.cpp
+0
-921
libcore/android/CAndroidGUIListBox.h
libcore/android/CAndroidGUIListBox.h
+0
-199
libcore/android/CAndroidGUISkin.cpp
libcore/android/CAndroidGUISkin.cpp
+1
-1
libcore/jni/Android.mk
libcore/jni/Android.mk
+0
-1
No files found.
Classes/gframe/CGUIListBox.h
deleted
100644 → 0
View file @
9041b4d8
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_GUI_LIST_BOX_H_INCLUDED__
#define __C_GUI_LIST_BOX_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_GUI_
#include "IGUIListBox.h"
#include "irrArray.h"
namespace
irr
{
namespace
gui
{
class
IGUIFont
;
class
IGUIScrollBar
;
class
CGUIListBox
:
public
IGUIListBox
{
public:
//! constructor
CGUIListBox
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
,
bool
clip
=
true
,
bool
drawBack
=
false
,
bool
moveOverSelect
=
false
);
//! destructor
virtual
~
CGUIListBox
();
//! returns amount of list items
virtual
u32
getItemCount
()
const
_IRR_OVERRIDE_
;
//! returns string of a list item. the id may be a value from 0 to itemCount-1
virtual
const
wchar_t
*
getListItem
(
u32
id
)
const
_IRR_OVERRIDE_
;
//! adds an list item, returns id of item
virtual
u32
addItem
(
const
wchar_t
*
text
)
_IRR_OVERRIDE_
;
//! clears the list
virtual
void
clear
()
_IRR_OVERRIDE_
;
//! returns id of selected item. returns -1 if no item is selected.
virtual
s32
getSelected
()
const
_IRR_OVERRIDE_
;
//! sets the selected item. Set this to -1 if no item should be selected
virtual
void
setSelected
(
s32
id
)
_IRR_OVERRIDE_
;
//! sets the selected item. Set this to -1 if no item should be selected
virtual
void
setSelected
(
const
wchar_t
*
item
)
_IRR_OVERRIDE_
;
//! called if an event happened.
virtual
bool
OnEvent
(
const
SEvent
&
event
)
_IRR_OVERRIDE_
;
//! draws the element and its children
virtual
void
draw
()
_IRR_OVERRIDE_
;
//! adds an list item with an icon
//! \param text Text of list entry
//! \param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
//! \return
//! returns the id of the new created item
virtual
u32
addItem
(
const
wchar_t
*
text
,
s32
icon
)
_IRR_OVERRIDE_
;
//! Returns the icon of an item
virtual
s32
getIcon
(
u32
id
)
const
_IRR_OVERRIDE_
;
//! removes an item from the list
virtual
void
removeItem
(
u32
id
)
_IRR_OVERRIDE_
;
//! get the the id of the item at the given absolute coordinates
virtual
s32
getItemAt
(
s32
xpos
,
s32
ypos
)
const
_IRR_OVERRIDE_
;
//! Sets the sprite bank which should be used to draw list icons. This font is set to the sprite bank of
//! the built-in-font by default. A sprite can be displayed in front of every list item.
//! An icon is an index within the icon sprite bank. Several default icons are available in the
//! skin through getIcon
virtual
void
setSpriteBank
(
IGUISpriteBank
*
bank
)
_IRR_OVERRIDE_
;
//! set whether the listbox should scroll to newly selected items
virtual
void
setAutoScrollEnabled
(
bool
scroll
)
_IRR_OVERRIDE_
;
//! returns true if automatic scrolling is enabled, false if not.
virtual
bool
isAutoScrollEnabled
()
const
_IRR_OVERRIDE_
;
//! Update the position and size of the listbox, and update the scrollbar
virtual
void
updateAbsolutePosition
()
_IRR_OVERRIDE_
;
//! Writes attributes of the element.
virtual
void
serializeAttributes
(
io
::
IAttributes
*
out
,
io
::
SAttributeReadWriteOptions
*
options
)
const
_IRR_OVERRIDE_
;
//! Reads attributes of the element
virtual
void
deserializeAttributes
(
io
::
IAttributes
*
in
,
io
::
SAttributeReadWriteOptions
*
options
)
_IRR_OVERRIDE_
;
//! set all item colors at given index to color
virtual
void
setItemOverrideColor
(
u32
index
,
video
::
SColor
color
)
_IRR_OVERRIDE_
;
//! set all item colors of specified type at given index to color
virtual
void
setItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
,
video
::
SColor
color
)
_IRR_OVERRIDE_
;
//! clear all item colors at index
virtual
void
clearItemOverrideColor
(
u32
index
)
_IRR_OVERRIDE_
;
//! clear item color at index for given colortype
virtual
void
clearItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
_IRR_OVERRIDE_
;
//! has the item at index its color overwritten?
virtual
bool
hasItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
const
_IRR_OVERRIDE_
;
//! return the overwrite color at given item index.
virtual
video
::
SColor
getItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
const
_IRR_OVERRIDE_
;
//! return the default color which is used for the given colorType
virtual
video
::
SColor
getItemDefaultColor
(
EGUI_LISTBOX_COLOR
colorType
)
const
_IRR_OVERRIDE_
;
//! set the item at the given index
virtual
void
setItem
(
u32
index
,
const
wchar_t
*
text
,
s32
icon
)
_IRR_OVERRIDE_
;
//! Insert the item at the given index
//! Return the index on success or -1 on failure.
virtual
s32
insertItem
(
u32
index
,
const
wchar_t
*
text
,
s32
icon
)
_IRR_OVERRIDE_
;
//! Swap the items at the given indices
virtual
void
swapItems
(
u32
index1
,
u32
index2
)
_IRR_OVERRIDE_
;
//! set global itemHeight
virtual
void
setItemHeight
(
s32
height
)
_IRR_OVERRIDE_
;
//! Sets whether to draw the background
virtual
void
setDrawBackground
(
bool
draw
)
_IRR_OVERRIDE_
;
//! Access the vertical scrollbar
virtual
IGUIScrollBar
*
getVerticalScrollBar
()
const
_IRR_OVERRIDE_
;
private:
struct
ListItem
{
ListItem
()
:
Icon
(
-
1
)
{}
core
::
stringw
Text
;
s32
Icon
;
// A multicolor extension
struct
ListItemOverrideColor
{
ListItemOverrideColor
()
:
Use
(
false
)
{}
bool
Use
;
video
::
SColor
Color
;
};
ListItemOverrideColor
OverrideColors
[
EGUI_LBC_COUNT
];
};
void
recalculateItemHeight
();
void
selectNew
(
s32
ypos
,
bool
onlyHover
=
false
);
void
recalculateScrollPos
();
// extracted that function to avoid copy&paste code
void
recalculateItemWidth
(
s32
icon
);
// get labels used for serialization
bool
getSerializationLabels
(
EGUI_LISTBOX_COLOR
colorType
,
core
::
stringc
&
useColorLabel
,
core
::
stringc
&
colorLabel
)
const
;
core
::
array
<
ListItem
>
Items
;
s32
Selected
;
s32
ItemHeight
;
s32
ItemHeightOverride
;
s32
TotalItemHeight
;
s32
ItemsIconWidth
;
gui
::
IGUIFont
*
Font
;
gui
::
IGUISpriteBank
*
IconBank
;
gui
::
IGUIScrollBar
*
ScrollBar
;
u32
selectTime
;
u32
LastKeyTime
;
core
::
stringw
KeyBuffer
;
bool
Selecting
;
bool
DrawBack
;
bool
MoveOverSelect
;
bool
AutoScroll
;
bool
HighlightWhenNotFocused
;
};
}
// end namespace gui
}
// end namespace irr
#endif // _IRR_COMPILE_WITH_GUI_
#endif
Classes/gframe/game.cpp
View file @
5180c001
...
...
@@ -14,7 +14,6 @@
#include <android/AndroidSoundEffectPlayer.h>
#include <android/CAndroidGUIEditBox.h>
#include <android/CAndroidGUIComboBox.h>
#include <android/CAndroidGUIListBox.h>
#include <android/CAndroidGUISkin.h>
#include <COGLES2ExtensionHandler.h>
#include <COGLESExtensionHandler.h>
...
...
@@ -428,9 +427,7 @@ bool Game::Initialize() {
scrCardText
->
setVisible
(
false
);
//log
irr
::
gui
::
IGUITab
*
tabLog
=
wInfos
->
addTab
(
dataManager
.
GetSysString
(
1271
));
#ifdef _IRR_ANDROID_PLATFORM_
lstLog
=
CAndroidGUIListBox
::
addAndroidGUIListBox
(
env
,
rect
<
s32
>
(
10
*
xScale
,
10
*
yScale
,
290
*
xScale
,
290
*
yScale
),
tabLog
,
LISTBOX_LOG
,
false
,
40
*
xScale
);
#endif
lstLog
=
env
->
addListBox
(
rect
<
s32
>
(
10
*
xScale
,
10
*
yScale
,
290
*
xScale
,
290
*
yScale
),
tabLog
,
LISTBOX_LOG
,
false
);
lstLog
->
setItemHeight
(
22
*
yScale
);
btnClearLog
=
env
->
addButton
(
rect
<
s32
>
(
160
*
xScale
,
300
*
yScale
,
260
*
xScale
,
325
*
yScale
),
tabLog
,
BUTTON_CLEAR_LOG
,
dataManager
.
GetSysString
(
1272
));
//helper
...
...
@@ -640,12 +637,9 @@ bool Game::Initialize() {
wANCard
=
env
->
addWindow
(
rect
<
s32
>
(
400
*
xScale
,
100
*
yScale
,
800
*
xScale
,
400
*
yScale
),
false
,
L""
);
wANCard
->
getCloseButton
()
->
setVisible
(
false
);
wANCard
->
setVisible
(
false
);
#ifdef _IRR_ANDROID_PLATFORM_
ebANCard
=
CAndroidGUIEditBox
::
addAndroidEditBox
(
L""
,
true
,
env
,
rect
<
s32
>
(
20
*
xScale
,
25
*
yScale
,
380
*
xScale
,
55
*
yScale
),
wANCard
,
EDITBOX_ANCARD
);
lstANCard
=
CAndroidGUIListBox
::
addAndroidGUIListBox
(
env
,
rect
<
s32
>
(
20
*
xScale
,
55
*
yScale
,
380
*
xScale
,
260
*
yScale
),
wANCard
,
LISTBOX_ANCARD
,
true
,
40
*
xScale
);
#endif
ebANCard
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
//dont merge
lstANCard
=
env
->
addListBox
(
rect
<
s32
>
(
20
*
xScale
,
55
*
yScale
,
380
*
xScale
,
260
*
yScale
),
wANCard
,
LISTBOX_ANCARD
,
true
);
btnANCardOK
=
env
->
addButton
(
rect
<
s32
>
(
140
*
xScale
,
260
*
yScale
,
270
*
xScale
,
295
*
yScale
),
wANCard
,
BUTTON_ANCARD_OK
,
dataManager
.
GetSysString
(
1211
));
//announce attribute
wANAttribute
=
env
->
addWindow
(
rect
<
s32
>
(
450
*
xScale
,
200
*
yScale
,
800
*
xScale
,
370
*
yScale
),
false
,
dataManager
.
GetSysString
(
562
));
...
...
@@ -864,7 +858,7 @@ bool Game::Initialize() {
wReplay
=
env
->
addWindow
(
rect
<
s32
>
(
220
*
xScale
,
100
*
yScale
,
800
*
xScale
,
520
*
yScale
),
false
,
dataManager
.
GetSysString
(
1202
));
wReplay
->
getCloseButton
()
->
setVisible
(
false
);
wReplay
->
setVisible
(
false
);
lstReplayList
=
CAndroidGUIListBox
::
addAndroidGUIListBox
(
env
,
rect
<
s32
>
(
10
*
xScale
,
30
*
yScale
,
350
*
xScale
,
400
*
yScale
),
wReplay
,
LISTBOX_REPLAY_LIST
,
true
,
40
*
xScal
e
);
lstReplayList
=
env
->
addListBox
(
rect
<
s32
>
(
10
*
xScale
,
30
*
yScale
,
350
*
xScale
,
400
*
yScale
),
wReplay
,
LISTBOX_REPLAY_LIST
,
tru
e
);
lstReplayList
->
setItemHeight
(
22
*
yScale
);
btnLoadReplay
=
env
->
addButton
(
rect
<
s32
>
(
470
*
xScale
,
320
*
yScale
,
570
*
xScale
,
360
*
yScale
),
wReplay
,
BUTTON_LOAD_REPLAY
,
dataManager
.
GetSysString
(
1348
));
btnDeleteReplay
=
env
->
addButton
(
rect
<
s32
>
(
360
*
xScale
,
320
*
yScale
,
460
*
xScale
,
360
*
yScale
),
wReplay
,
BUTTON_DELETE_REPLAY
,
dataManager
.
GetSysString
(
1361
));
...
...
@@ -885,7 +879,7 @@ bool Game::Initialize() {
//TEST BOT MODE
if
(
gameConf
.
enable_bot_mode
)
{
irr
::
gui
::
IGUITab
*
tabBot
=
wSingle
->
addTab
(
dataManager
.
GetSysString
(
1380
));
lstBotList
=
CAndroidGUIListBox
::
addAndroidGUIListBox
(
env
,
rect
<
s32
>
(
10
*
xScale
,
10
*
yScale
,
350
*
xScale
,
350
*
yScale
),
tabBot
,
LISTBOX_BOT_LIST
,
true
,
40
*
xScal
e
);
lstBotList
=
env
->
addListBox
(
rect
<
s32
>
(
10
*
xScale
,
10
*
yScale
,
350
*
xScale
,
350
*
yScale
),
tabBot
,
LISTBOX_BOT_LIST
,
tru
e
);
lstBotList
->
setItemHeight
(
25
*
yScale
);
btnStartBot
=
env
->
addButton
(
rect
<
s32
>
(
460
*
xScale
,
260
*
yScale
,
570
*
xScale
,
300
*
yScale
),
tabBot
,
BUTTON_BOT_START
,
dataManager
.
GetSysString
(
1211
));
btnBotCancel
=
env
->
addButton
(
rect
<
s32
>
(
460
*
xScale
,
310
*
yScale
,
570
*
xScale
,
350
*
yScale
),
tabBot
,
BUTTON_CANCEL_SINGLEPLAY
,
dataManager
.
GetSysString
(
1210
));
...
...
@@ -904,7 +898,8 @@ bool Game::Initialize() {
//SINGLE MODE
irr
::
gui
::
IGUITab
*
tabSingle
=
wSingle
->
addTab
(
dataManager
.
GetSysString
(
1381
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1352
),
rect
<
s32
>
(
360
*
xScale
,
30
*
yScale
,
570
*
xScale
,
50
*
yScale
),
false
,
true
,
tabSingle
);
stSinglePlayInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
*
xScale
,
60
*
yScale
,
570
*
xScale
,
295
*
yScale
),
false
,
true
,
tabSingle
);
lstSinglePlayList
=
CAndroidGUIListBox
::
addAndroidGUIListBox
(
env
,
rect
<
s32
>
(
10
*
xScale
,
10
*
yScale
,
350
*
xScale
,
350
*
yScale
),
tabSingle
,
LISTBOX_SINGLEPLAY_LIST
,
true
,
40
*
xScale
);
stSinglePlayInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
*
xScale
,
60
*
yScale
,
570
*
xScale
,
295
*
yScale
),
false
,
true
,
tabSingle
);
lstSinglePlayList
=
env
->
addListBox
(
rect
<
s32
>
(
10
*
xScale
,
10
*
yScale
,
350
*
xScale
,
350
*
yScale
),
tabSingle
,
LISTBOX_SINGLEPLAY_LIST
,
true
);
lstSinglePlayList
->
setItemHeight
(
25
*
yScale
);
btnLoadSinglePlay
=
env
->
addButton
(
rect
<
s32
>
(
460
*
xScale
,
260
*
yScale
,
570
*
xScale
,
300
*
yScale
),
tabSingle
,
BUTTON_LOAD_SINGLEPLAY
,
dataManager
.
GetSysString
(
1211
));
btnSinglePlayCancel
=
env
->
addButton
(
rect
<
s32
>
(
460
*
xScale
,
310
*
yScale
,
570
*
xScale
,
350
*
yScale
),
tabSingle
,
BUTTON_CANCEL_SINGLEPLAY
,
dataManager
.
GetSysString
(
1210
));
...
...
libcore/android/CAndroidGUIListBox.cpp
deleted
100644 → 0
View file @
9041b4d8
/*
* CAndroidGUIListBox.cpp
*
* Created on: 2014年3月24日
* Author: mabin
*/
#include "CAndroidGUIListBox.h"
#include "IGUISkin.h"
#include "IGUIEnvironment.h"
#include "IVideoDriver.h"
#include "IGUIFont.h"
#include "IGUISpriteBank.h"
#include "../gframe/CGUIScrollBar.h"
#include "../gframe/os.h"
namespace
irr
{
namespace
gui
{
//! constructor
CAndroidGUIListBox
::
CAndroidGUIListBox
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
,
bool
clip
,
bool
drawBack
,
bool
moveOverSelect
,
int
scrollbarSize
)
:
IGUIListBox
(
environment
,
parent
,
id
,
rectangle
),
Selected
(
-
1
),
ItemHeight
(
0
),
ItemHeightOverride
(
0
),
TotalItemHeight
(
0
),
ItemsIconWidth
(
0
),
Font
(
0
),
IconBank
(
0
),
ScrollBar
(
0
),
selectTime
(
0
),
LastKeyTime
(
0
),
Selecting
(
false
),
DrawBack
(
drawBack
),
MoveOverSelect
(
moveOverSelect
),
AutoScroll
(
true
),
HighlightWhenNotFocused
(
true
)
{
#ifdef _DEBUG
setDebugName
(
"CAndroidGUIListBox"
);
#endif
const
s32
s
=
scrollbarSize
;
ScrollBar
=
new
CGUIScrollBar
(
false
,
Environment
,
this
,
-
1
,
core
::
rect
<
s32
>
(
RelativeRect
.
getWidth
()
-
s
,
0
,
RelativeRect
.
getWidth
(),
RelativeRect
.
getHeight
()),
!
clip
);
ScrollBar
->
setSubElement
(
true
);
ScrollBar
->
setTabStop
(
false
);
ScrollBar
->
setAlignment
(
EGUIA_LOWERRIGHT
,
EGUIA_LOWERRIGHT
,
EGUIA_UPPERLEFT
,
EGUIA_LOWERRIGHT
);
ScrollBar
->
setVisible
(
false
);
ScrollBar
->
setPos
(
0
);
setNotClipped
(
!
clip
);
// this element can be tabbed to
setTabStop
(
true
);
setTabOrder
(
-
1
);
updateAbsolutePosition
();
}
CAndroidGUIListBox
*
CAndroidGUIListBox
::
addAndroidGUIListBox
(
IGUIEnvironment
*
environment
,
core
::
rect
<
s32
>
rectangle
,
IGUIElement
*
parent
,
s32
id
,
bool
drawBack
,
int
scrollbarSize
)
{
CAndroidGUIListBox
*
b
=
new
CAndroidGUIListBox
(
environment
,
parent
?
parent
:
0
,
id
,
rectangle
,
true
,
drawBack
,
false
,
scrollbarSize
);
b
->
drop
();
return
b
;
}
//! destructor
CAndroidGUIListBox
::~
CAndroidGUIListBox
()
{
if
(
ScrollBar
)
ScrollBar
->
drop
();
if
(
Font
)
Font
->
drop
();
if
(
IconBank
)
IconBank
->
drop
();
}
//! returns amount of list items
u32
CAndroidGUIListBox
::
getItemCount
()
const
{
return
Items
.
size
();
}
//! returns string of a list item. the may be a value from 0 to itemCount-1
const
wchar_t
*
CAndroidGUIListBox
::
getListItem
(
u32
id
)
const
{
if
(
id
>=
Items
.
size
())
return
0
;
return
Items
[
id
].
text
.
c_str
();
}
//! Returns the icon of an item
s32
CAndroidGUIListBox
::
getIcon
(
u32
id
)
const
{
if
(
id
>=
Items
.
size
())
return
-
1
;
return
Items
[
id
].
icon
;
}
//! adds a list item, returns id of item
u32
CAndroidGUIListBox
::
addItem
(
const
wchar_t
*
text
)
{
return
addItem
(
text
,
-
1
);
}
//! adds a list item, returns id of item
void
CAndroidGUIListBox
::
removeItem
(
u32
id
)
{
if
(
id
>=
Items
.
size
())
return
;
if
((
u32
)
Selected
==
id
)
{
Selected
=
-
1
;
}
else
if
((
u32
)
Selected
>
id
)
{
Selected
-=
1
;
selectTime
=
os
::
Timer
::
getTime
();
}
Items
.
erase
(
id
);
recalculateItemHeight
();
}
s32
CAndroidGUIListBox
::
getItemAt
(
s32
xpos
,
s32
ypos
)
const
{
if
(
xpos
<
AbsoluteRect
.
UpperLeftCorner
.
X
||
xpos
>=
AbsoluteRect
.
LowerRightCorner
.
X
||
ypos
<
AbsoluteRect
.
UpperLeftCorner
.
Y
||
ypos
>=
AbsoluteRect
.
LowerRightCorner
.
Y
)
return
-
1
;
if
(
ItemHeight
==
0
)
return
-
1
;
s32
item
=
((
ypos
-
AbsoluteRect
.
UpperLeftCorner
.
Y
-
1
)
+
ScrollBar
->
getPos
())
/
ItemHeight
;
if
(
item
<
0
||
item
>=
(
s32
)
Items
.
size
())
return
-
1
;
return
item
;
}
//! clears the list
void
CAndroidGUIListBox
::
clear
()
{
Items
.
clear
();
ItemsIconWidth
=
0
;
Selected
=
-
1
;
if
(
ScrollBar
)
ScrollBar
->
setPos
(
0
);
recalculateItemHeight
();
}
void
CAndroidGUIListBox
::
recalculateItemHeight
()
{
IGUISkin
*
skin
=
Environment
->
getSkin
();
if
(
Font
!=
skin
->
getFont
())
{
if
(
Font
)
Font
->
drop
();
Font
=
skin
->
getFont
();
if
(
0
==
ItemHeightOverride
)
ItemHeight
=
0
;
if
(
Font
)
{
if
(
0
==
ItemHeightOverride
)
ItemHeight
=
Font
->
getDimension
(
L"A"
).
Height
+
4
;
Font
->
grab
();
}
}
TotalItemHeight
=
ItemHeight
*
Items
.
size
();
ScrollBar
->
setMax
(
core
::
max_
(
0
,
TotalItemHeight
-
AbsoluteRect
.
getHeight
())
);
s32
minItemHeight
=
ItemHeight
>
0
?
ItemHeight
:
1
;
ScrollBar
->
setSmallStep
(
minItemHeight
);
ScrollBar
->
setLargeStep
(
2
*
minItemHeight
);
if
(
TotalItemHeight
<=
AbsoluteRect
.
getHeight
()
)
ScrollBar
->
setVisible
(
false
);
else
ScrollBar
->
setVisible
(
true
);
}
//! returns id of selected item. returns -1 if no item is selected.
s32
CAndroidGUIListBox
::
getSelected
()
const
{
return
Selected
;
}
//! sets the selected item. Set this to -1 if no item should be selected
void
CAndroidGUIListBox
::
setSelected
(
s32
id
)
{
if
((
u32
)
id
>=
Items
.
size
())
Selected
=
-
1
;
else
Selected
=
id
;
selectTime
=
os
::
Timer
::
getTime
();
recalculateScrollPos
();
}
//! sets the selected item. Set this to -1 if no item should be selected
void
CAndroidGUIListBox
::
setSelected
(
const
wchar_t
*
item
)
{
s32
index
=
-
1
;
if
(
item
)
{
for
(
index
=
0
;
index
<
(
s32
)
Items
.
size
();
++
index
)
{
if
(
Items
[
index
].
text
==
item
)
break
;
}
}
setSelected
(
index
);
}
//! called if an event happened.
bool
CAndroidGUIListBox
::
OnEvent
(
const
SEvent
&
event
)
{
if
(
isEnabled
())
{
switch
(
event
.
EventType
)
{
case
EET_KEY_INPUT_EVENT
:
if
(
event
.
KeyInput
.
PressedDown
&&
(
event
.
KeyInput
.
Key
==
KEY_DOWN
||
event
.
KeyInput
.
Key
==
KEY_UP
||
event
.
KeyInput
.
Key
==
KEY_HOME
||
event
.
KeyInput
.
Key
==
KEY_END
||
event
.
KeyInput
.
Key
==
KEY_NEXT
||
event
.
KeyInput
.
Key
==
KEY_PRIOR
)
)
{
s32
oldSelected
=
Selected
;
switch
(
event
.
KeyInput
.
Key
)
{
case
KEY_DOWN
:
Selected
+=
1
;
break
;
case
KEY_UP
:
Selected
-=
1
;
break
;
case
KEY_HOME
:
Selected
=
0
;
break
;
case
KEY_END
:
Selected
=
(
s32
)
Items
.
size
()
-
1
;
break
;
case
KEY_NEXT
:
Selected
+=
AbsoluteRect
.
getHeight
()
/
ItemHeight
;
break
;
case
KEY_PRIOR
:
Selected
-=
AbsoluteRect
.
getHeight
()
/
ItemHeight
;
break
;
default:
break
;
}
if
(
Selected
>=
(
s32
)
Items
.
size
())
Selected
=
Items
.
size
()
-
1
;
else
if
(
Selected
<
0
)
Selected
=
0
;
recalculateScrollPos
();
// post the news
if
(
oldSelected
!=
Selected
&&
Parent
&&
!
Selecting
&&
!
MoveOverSelect
)
{
SEvent
e
;
e
.
EventType
=
EET_GUI_EVENT
;
e
.
GUIEvent
.
Caller
=
this
;
e
.
GUIEvent
.
Element
=
0
;
e
.
GUIEvent
.
EventType
=
EGET_LISTBOX_CHANGED
;
Parent
->
OnEvent
(
e
);
}
return
true
;
}
else
if
(
!
event
.
KeyInput
.
PressedDown
&&
(
event
.
KeyInput
.
Key
==
KEY_RETURN
||
event
.
KeyInput
.
Key
==
KEY_SPACE
)
)
{
if
(
Parent
)
{
SEvent
e
;
e
.
EventType
=
EET_GUI_EVENT
;
e
.
GUIEvent
.
Caller
=
this
;
e
.
GUIEvent
.
Element
=
0
;
e
.
GUIEvent
.
EventType
=
EGET_LISTBOX_SELECTED_AGAIN
;
Parent
->
OnEvent
(
e
);
}
return
true
;
}
else
if
(
event
.
KeyInput
.
Key
==
KEY_TAB
)
{
return
false
;
}
else
if
(
event
.
KeyInput
.
PressedDown
&&
event
.
KeyInput
.
Char
)
{
// change selection based on text as it is typed.
u32
now
=
os
::
Timer
::
getTime
();
if
(
now
-
LastKeyTime
<
500
)
{
// add to key buffer if it isn't a key repeat
if
(
!
(
KeyBuffer
.
size
()
==
1
&&
KeyBuffer
[
0
]
==
event
.
KeyInput
.
Char
))
{
KeyBuffer
+=
L" "
;
KeyBuffer
[
KeyBuffer
.
size
()
-
1
]
=
event
.
KeyInput
.
Char
;
}
}
else
{
KeyBuffer
=
L" "
;
KeyBuffer
[
0
]
=
event
.
KeyInput
.
Char
;
}
LastKeyTime
=
now
;
// find the selected item, starting at the current selection
s32
start
=
Selected
;
// dont change selection if the key buffer matches the current item
if
(
Selected
>
-
1
&&
KeyBuffer
.
size
()
>
1
)
{
if
(
Items
[
Selected
].
text
.
size
()
>=
KeyBuffer
.
size
()
&&
KeyBuffer
.
equals_ignore_case
(
Items
[
Selected
].
text
.
subString
(
0
,
KeyBuffer
.
size
())))
return
true
;
}
s32
current
;
for
(
current
=
start
+
1
;
current
<
(
s32
)
Items
.
size
();
++
current
)
{
if
(
Items
[
current
].
text
.
size
()
>=
KeyBuffer
.
size
())
{
if
(
KeyBuffer
.
equals_ignore_case
(
Items
[
current
].
text
.
subString
(
0
,
KeyBuffer
.
size
())))
{
if
(
Parent
&&
Selected
!=
current
&&
!
Selecting
&&
!
MoveOverSelect
)
{
SEvent
e
;
e
.
EventType
=
EET_GUI_EVENT
;
e
.
GUIEvent
.
Caller
=
this
;
e
.
GUIEvent
.
Element
=
0
;
e
.
GUIEvent
.
EventType
=
EGET_LISTBOX_CHANGED
;
Parent
->
OnEvent
(
e
);
}
setSelected
(
current
);
return
true
;
}
}
}
for
(
current
=
0
;
current
<=
start
;
++
current
)
{
if
(
Items
[
current
].
text
.
size
()
>=
KeyBuffer
.
size
())
{
if
(
KeyBuffer
.
equals_ignore_case
(
Items
[
current
].
text
.
subString
(
0
,
KeyBuffer
.
size
())))
{
if
(
Parent
&&
Selected
!=
current
&&
!
Selecting
&&
!
MoveOverSelect
)
{
Selected
=
current
;
SEvent
e
;
e
.
EventType
=
EET_GUI_EVENT
;
e
.
GUIEvent
.
Caller
=
this
;
e
.
GUIEvent
.
Element
=
0
;
e
.
GUIEvent
.
EventType
=
EGET_LISTBOX_CHANGED
;
Parent
->
OnEvent
(
e
);
}
setSelected
(
current
);
return
true
;
}
}
}
return
true
;
}
break
;
case
EET_GUI_EVENT
:
switch
(
event
.
GUIEvent
.
EventType
)
{
case
gui
:
:
EGET_SCROLL_BAR_CHANGED
:
if
(
event
.
GUIEvent
.
Caller
==
ScrollBar
)
return
true
;
break
;
case
gui
:
:
EGET_ELEMENT_FOCUS_LOST
:
{
if
(
event
.
GUIEvent
.
Caller
==
this
)
Selecting
=
false
;
break
;
}
default:
break
;
}
break
;
case
EET_MOUSE_INPUT_EVENT
:
{
core
::
position2d
<
s32
>
p
(
event
.
MouseInput
.
X
,
event
.
MouseInput
.
Y
);
switch
(
event
.
MouseInput
.
Event
)
{
case
EMIE_MOUSE_WHEEL
:
ScrollBar
->
setPos
(
ScrollBar
->
getPos
()
+
(
event
.
MouseInput
.
Wheel
<
0
?
-
1
:
1
)
*-
ItemHeight
/
2
);
return
true
;
case
EMIE_LMOUSE_PRESSED_DOWN
:
{
Selecting
=
true
;
return
true
;
}
case
EMIE_LMOUSE_LEFT_UP
:
{
Selecting
=
false
;
if
(
isPointInside
(
p
))
selectNew
(
event
.
MouseInput
.
Y
);
return
true
;
}
case
EMIE_MOUSE_MOVED
:
if
(
Selecting
||
MoveOverSelect
)
{
if
(
isPointInside
(
p
))
{
selectNew
(
event
.
MouseInput
.
Y
,
true
);
return
true
;
}
}
default:
break
;
}
}
break
;
case
EET_LOG_TEXT_EVENT
:
case
EET_USER_EVENT
:
case
EET_JOYSTICK_INPUT_EVENT
:
case
EGUIET_FORCE_32_BIT
:
break
;
}
}
return
IGUIElement
::
OnEvent
(
event
);
}
void
CAndroidGUIListBox
::
selectNew
(
s32
ypos
,
bool
onlyHover
)
{
u32
now
=
os
::
Timer
::
getTime
();
s32
oldSelected
=
Selected
;
Selected
=
getItemAt
(
AbsoluteRect
.
UpperLeftCorner
.
X
,
ypos
);
if
(
Selected
<
0
&&
!
Items
.
empty
())
Selected
=
0
;
recalculateScrollPos
();
gui
::
EGUI_EVENT_TYPE
eventType
=
(
Selected
==
oldSelected
&&
now
<
selectTime
+
500
)
?
EGET_LISTBOX_SELECTED_AGAIN
:
EGET_LISTBOX_CHANGED
;
selectTime
=
now
;
// post the news
if
(
Parent
&&
!
onlyHover
)
{
SEvent
event
;
event
.
EventType
=
EET_GUI_EVENT
;
event
.
GUIEvent
.
Caller
=
this
;
event
.
GUIEvent
.
Element
=
0
;
event
.
GUIEvent
.
EventType
=
eventType
;
Parent
->
OnEvent
(
event
);
}
}
//! Update the position and size of the listbox, and update the scrollbar
void
CAndroidGUIListBox
::
updateAbsolutePosition
()
{
IGUIElement
::
updateAbsolutePosition
();
recalculateItemHeight
();
}
//! draws the element and its children
void
CAndroidGUIListBox
::
draw
()
{
if
(
!
IsVisible
)
return
;
recalculateItemHeight
();
// if the font changed
IGUISkin
*
skin
=
Environment
->
getSkin
();
core
::
rect
<
s32
>*
clipRect
=
0
;
// draw background
core
::
rect
<
s32
>
frameRect
(
AbsoluteRect
);
// draw items
core
::
rect
<
s32
>
clientClip
(
AbsoluteRect
);
clientClip
.
UpperLeftCorner
.
Y
+=
1
;
clientClip
.
UpperLeftCorner
.
X
+=
1
;
if
(
ScrollBar
->
isVisible
())
clientClip
.
LowerRightCorner
.
X
=
AbsoluteRect
.
LowerRightCorner
.
X
-
skin
->
getSize
(
EGDS_SCROLLBAR_SIZE
);
clientClip
.
LowerRightCorner
.
Y
-=
1
;
clientClip
.
clipAgainst
(
AbsoluteClippingRect
);
skin
->
draw3DSunkenPane
(
this
,
skin
->
getColor
(
EGDC_3D_HIGH_LIGHT
),
true
,
DrawBack
,
frameRect
,
&
AbsoluteClippingRect
);
if
(
clipRect
)
clientClip
.
clipAgainst
(
*
clipRect
);
frameRect
=
AbsoluteRect
;
frameRect
.
UpperLeftCorner
.
X
+=
1
;
if
(
ScrollBar
->
isVisible
())
frameRect
.
LowerRightCorner
.
X
=
AbsoluteRect
.
LowerRightCorner
.
X
-
skin
->
getSize
(
EGDS_SCROLLBAR_SIZE
);
frameRect
.
LowerRightCorner
.
Y
=
AbsoluteRect
.
UpperLeftCorner
.
Y
+
ItemHeight
;
frameRect
.
UpperLeftCorner
.
Y
-=
ScrollBar
->
getPos
();
frameRect
.
LowerRightCorner
.
Y
-=
ScrollBar
->
getPos
();
bool
hl
=
(
HighlightWhenNotFocused
||
Environment
->
hasFocus
(
this
)
||
Environment
->
hasFocus
(
ScrollBar
));
for
(
s32
i
=
0
;
i
<
(
s32
)
Items
.
size
();
++
i
)
{
if
(
frameRect
.
LowerRightCorner
.
Y
>=
AbsoluteRect
.
UpperLeftCorner
.
Y
&&
frameRect
.
UpperLeftCorner
.
Y
<=
AbsoluteRect
.
LowerRightCorner
.
Y
)
{
if
(
i
==
Selected
&&
hl
)
skin
->
draw2DRectangle
(
this
,
skin
->
getColor
(
EGDC_HIGH_LIGHT
),
frameRect
,
&
clientClip
);
core
::
rect
<
s32
>
textRect
=
frameRect
;
textRect
.
UpperLeftCorner
.
X
+=
3
;
if
(
Font
)
{
if
(
IconBank
&&
(
Items
[
i
].
icon
>
-
1
))
{
core
::
position2di
iconPos
=
textRect
.
UpperLeftCorner
;
iconPos
.
Y
+=
textRect
.
getHeight
()
/
2
;
iconPos
.
X
+=
ItemsIconWidth
/
2
;
if
(
i
==
Selected
&&
hl
)
{
IconBank
->
draw2DSprite
(
(
u32
)
Items
[
i
].
icon
,
iconPos
,
&
clientClip
,
hasItemOverrideColor
(
i
,
EGUI_LBC_ICON_HIGHLIGHT
)
?
getItemOverrideColor
(
i
,
EGUI_LBC_ICON_HIGHLIGHT
)
:
getItemDefaultColor
(
EGUI_LBC_ICON_HIGHLIGHT
),
selectTime
,
os
::
Timer
::
getTime
(),
false
,
true
);
}
else
{
IconBank
->
draw2DSprite
(
(
u32
)
Items
[
i
].
icon
,
iconPos
,
&
clientClip
,
hasItemOverrideColor
(
i
,
EGUI_LBC_ICON
)
?
getItemOverrideColor
(
i
,
EGUI_LBC_ICON
)
:
getItemDefaultColor
(
EGUI_LBC_ICON
),
0
,
(
i
==
Selected
)
?
os
::
Timer
::
getTime
()
:
0
,
false
,
true
);
}
}
textRect
.
UpperLeftCorner
.
X
+=
ItemsIconWidth
+
3
;
if
(
i
==
Selected
&&
hl
)
{
Font
->
draw
(
Items
[
i
].
text
.
c_str
(),
textRect
,
hasItemOverrideColor
(
i
,
EGUI_LBC_TEXT_HIGHLIGHT
)
?
getItemOverrideColor
(
i
,
EGUI_LBC_TEXT_HIGHLIGHT
)
:
getItemDefaultColor
(
EGUI_LBC_TEXT_HIGHLIGHT
),
false
,
true
,
&
clientClip
);
}
else
{
Font
->
draw
(
Items
[
i
].
text
.
c_str
(),
textRect
,
hasItemOverrideColor
(
i
,
EGUI_LBC_TEXT
)
?
getItemOverrideColor
(
i
,
EGUI_LBC_TEXT
)
:
getItemDefaultColor
(
EGUI_LBC_TEXT
),
false
,
true
,
&
clientClip
);
}
textRect
.
UpperLeftCorner
.
X
-=
ItemsIconWidth
+
3
;
}
}
frameRect
.
UpperLeftCorner
.
Y
+=
ItemHeight
;
frameRect
.
LowerRightCorner
.
Y
+=
ItemHeight
;
}
IGUIElement
::
draw
();
}
//! adds an list item with an icon
u32
CAndroidGUIListBox
::
addItem
(
const
wchar_t
*
text
,
s32
icon
)
{
ListItem
i
;
i
.
text
=
text
;
i
.
icon
=
icon
;
Items
.
push_back
(
i
);
recalculateItemHeight
();
recalculateItemWidth
(
icon
);
return
Items
.
size
()
-
1
;
}
void
CAndroidGUIListBox
::
setSpriteBank
(
IGUISpriteBank
*
bank
)
{
if
(
bank
==
IconBank
)
return
;
if
(
IconBank
)
IconBank
->
drop
();
IconBank
=
bank
;
if
(
IconBank
)
IconBank
->
grab
();
}
void
CAndroidGUIListBox
::
recalculateScrollPos
()
{
if
(
!
AutoScroll
)
return
;
const
s32
selPos
=
(
Selected
==
-
1
?
TotalItemHeight
:
Selected
*
ItemHeight
)
-
ScrollBar
->
getPos
();
if
(
selPos
<
0
)
{
ScrollBar
->
setPos
(
ScrollBar
->
getPos
()
+
selPos
);
}
else
if
(
selPos
>
AbsoluteRect
.
getHeight
()
-
ItemHeight
)
{
ScrollBar
->
setPos
(
ScrollBar
->
getPos
()
+
selPos
-
AbsoluteRect
.
getHeight
()
+
ItemHeight
);
}
}
void
CAndroidGUIListBox
::
setAutoScrollEnabled
(
bool
scroll
)
{
AutoScroll
=
scroll
;
}
bool
CAndroidGUIListBox
::
isAutoScrollEnabled
()
const
{
_IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX
;
return
AutoScroll
;
}
bool
CAndroidGUIListBox
::
getSerializationLabels
(
EGUI_LISTBOX_COLOR
colorType
,
core
::
stringc
&
useColorLabel
,
core
::
stringc
&
colorLabel
)
const
{
switch
(
colorType
)
{
case
EGUI_LBC_TEXT
:
useColorLabel
=
"UseColText"
;
colorLabel
=
"ColText"
;
break
;
case
EGUI_LBC_TEXT_HIGHLIGHT
:
useColorLabel
=
"UseColTextHl"
;
colorLabel
=
"ColTextHl"
;
break
;
case
EGUI_LBC_ICON
:
useColorLabel
=
"UseColIcon"
;
colorLabel
=
"ColIcon"
;
break
;
case
EGUI_LBC_ICON_HIGHLIGHT
:
useColorLabel
=
"UseColIconHl"
;
colorLabel
=
"ColIconHl"
;
break
;
default:
return
false
;
}
return
true
;
}
//! Writes attributes of the element.
void
CAndroidGUIListBox
::
serializeAttributes
(
io
::
IAttributes
*
out
,
io
::
SAttributeReadWriteOptions
*
options
=
0
)
const
{
IGUIListBox
::
serializeAttributes
(
out
,
options
);
// todo: out->addString ("IconBank", IconBank->getName?);
out
->
addBool
(
"DrawBack"
,
DrawBack
);
out
->
addBool
(
"MoveOverSelect"
,
MoveOverSelect
);
out
->
addBool
(
"AutoScroll"
,
AutoScroll
);
out
->
addInt
(
"ItemCount"
,
Items
.
size
());
for
(
u32
i
=
0
;
i
<
Items
.
size
();
++
i
)
{
core
::
stringc
label
(
"text"
);
label
+=
i
;
out
->
addString
(
label
.
c_str
(),
Items
[
i
].
text
.
c_str
()
);
for
(
s32
c
=
0
;
c
<
(
s32
)
EGUI_LBC_COUNT
;
++
c
)
{
core
::
stringc
useColorLabel
,
colorLabel
;
if
(
!
getSerializationLabels
((
EGUI_LISTBOX_COLOR
)
c
,
useColorLabel
,
colorLabel
)
)
return
;
label
=
useColorLabel
;
label
+=
i
;
if
(
Items
[
i
].
OverrideColors
[
c
].
Use
)
{
out
->
addBool
(
label
.
c_str
(),
true
);
label
=
colorLabel
;
label
+=
i
;
out
->
addColor
(
label
.
c_str
(),
Items
[
i
].
OverrideColors
[
c
].
Color
);
}
else
{
out
->
addBool
(
label
.
c_str
(),
false
);
}
}
}
}
//! Reads attributes of the element
void
CAndroidGUIListBox
::
deserializeAttributes
(
io
::
IAttributes
*
in
,
io
::
SAttributeReadWriteOptions
*
options
=
0
)
{
clear
();
DrawBack
=
in
->
getAttributeAsBool
(
"DrawBack"
);
MoveOverSelect
=
in
->
getAttributeAsBool
(
"MoveOverSelect"
);
AutoScroll
=
in
->
getAttributeAsBool
(
"AutoScroll"
);
IGUIListBox
::
deserializeAttributes
(
in
,
options
);
const
s32
count
=
in
->
getAttributeAsInt
(
"ItemCount"
);
for
(
s32
i
=
0
;
i
<
count
;
++
i
)
{
core
::
stringc
label
(
"text"
);
ListItem
item
;
label
+=
i
;
item
.
text
=
in
->
getAttributeAsStringW
(
label
.
c_str
());
addItem
(
item
.
text
.
c_str
(),
item
.
icon
);
for
(
u32
c
=
0
;
c
<
EGUI_LBC_COUNT
;
++
c
)
{
core
::
stringc
useColorLabel
,
colorLabel
;
if
(
!
getSerializationLabels
((
EGUI_LISTBOX_COLOR
)
c
,
useColorLabel
,
colorLabel
)
)
return
;
label
=
useColorLabel
;
label
+=
i
;
Items
[
i
].
OverrideColors
[
c
].
Use
=
in
->
getAttributeAsBool
(
label
.
c_str
());
if
(
Items
[
i
].
OverrideColors
[
c
].
Use
)
{
label
=
colorLabel
;
label
+=
i
;
Items
[
i
].
OverrideColors
[
c
].
Color
=
in
->
getAttributeAsColor
(
label
.
c_str
());
}
}
}
}
void
CAndroidGUIListBox
::
recalculateItemWidth
(
s32
icon
)
{
if
(
IconBank
&&
icon
>
-
1
&&
IconBank
->
getSprites
().
size
()
>
(
u32
)
icon
&&
IconBank
->
getSprites
()[(
u32
)
icon
].
Frames
.
size
())
{
u32
rno
=
IconBank
->
getSprites
()[(
u32
)
icon
].
Frames
[
0
].
rectNumber
;
if
(
IconBank
->
getPositions
().
size
()
>
rno
)
{
const
s32
w
=
IconBank
->
getPositions
()[
rno
].
getWidth
();
if
(
w
>
ItemsIconWidth
)
ItemsIconWidth
=
w
;
}
}
}
void
CAndroidGUIListBox
::
setItem
(
u32
index
,
const
wchar_t
*
text
,
s32
icon
)
{
if
(
index
>=
Items
.
size
()
)
return
;
Items
[
index
].
text
=
text
;
Items
[
index
].
icon
=
icon
;
recalculateItemHeight
();
recalculateItemWidth
(
icon
);
}
//! Insert the item at the given index
//! Return the index on success or -1 on failure.
s32
CAndroidGUIListBox
::
insertItem
(
u32
index
,
const
wchar_t
*
text
,
s32
icon
)
{
ListItem
i
;
i
.
text
=
text
;
i
.
icon
=
icon
;
Items
.
insert
(
i
,
index
);
recalculateItemHeight
();
recalculateItemWidth
(
icon
);
return
index
;
}
void
CAndroidGUIListBox
::
swapItems
(
u32
index1
,
u32
index2
)
{
if
(
index1
>=
Items
.
size
()
||
index2
>=
Items
.
size
()
)
return
;
ListItem
dummmy
=
Items
[
index1
];
Items
[
index1
]
=
Items
[
index2
];
Items
[
index2
]
=
dummmy
;
}
void
CAndroidGUIListBox
::
setItemOverrideColor
(
u32
index
,
video
::
SColor
color
)
{
for
(
u32
c
=
0
;
c
<
EGUI_LBC_COUNT
;
++
c
)
{
Items
[
index
].
OverrideColors
[
c
].
Use
=
true
;
Items
[
index
].
OverrideColors
[
c
].
Color
=
color
;
}
}
void
CAndroidGUIListBox
::
setItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
,
video
::
SColor
color
)
{
if
(
index
>=
Items
.
size
()
||
colorType
<
0
||
colorType
>=
EGUI_LBC_COUNT
)
return
;
Items
[
index
].
OverrideColors
[
colorType
].
Use
=
true
;
Items
[
index
].
OverrideColors
[
colorType
].
Color
=
color
;
}
void
CAndroidGUIListBox
::
clearItemOverrideColor
(
u32
index
)
{
for
(
u32
c
=
0
;
c
<
(
u32
)
EGUI_LBC_COUNT
;
++
c
)
{
Items
[
index
].
OverrideColors
[
c
].
Use
=
false
;
}
}
void
CAndroidGUIListBox
::
clearItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
{
if
(
index
>=
Items
.
size
()
||
colorType
<
0
||
colorType
>=
EGUI_LBC_COUNT
)
return
;
Items
[
index
].
OverrideColors
[
colorType
].
Use
=
false
;
}
bool
CAndroidGUIListBox
::
hasItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
const
{
if
(
index
>=
Items
.
size
()
||
colorType
<
0
||
colorType
>=
EGUI_LBC_COUNT
)
return
false
;
return
Items
[
index
].
OverrideColors
[
colorType
].
Use
;
}
video
::
SColor
CAndroidGUIListBox
::
getItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
const
{
if
(
(
u32
)
index
>=
Items
.
size
()
||
colorType
<
0
||
colorType
>=
EGUI_LBC_COUNT
)
return
video
::
SColor
();
return
Items
[
index
].
OverrideColors
[
colorType
].
Color
;
}
video
::
SColor
CAndroidGUIListBox
::
getItemDefaultColor
(
EGUI_LISTBOX_COLOR
colorType
)
const
{
IGUISkin
*
skin
=
Environment
->
getSkin
();
if
(
!
skin
)
return
video
::
SColor
();
switch
(
colorType
)
{
case
EGUI_LBC_TEXT
:
return
skin
->
getColor
(
EGDC_BUTTON_TEXT
);
case
EGUI_LBC_TEXT_HIGHLIGHT
:
return
skin
->
getColor
(
EGDC_HIGH_LIGHT_TEXT
);
case
EGUI_LBC_ICON
:
return
skin
->
getColor
(
EGDC_ICON
);
case
EGUI_LBC_ICON_HIGHLIGHT
:
return
skin
->
getColor
(
EGDC_ICON_HIGH_LIGHT
);
default:
return
video
::
SColor
();
}
}
//! set global itemHeight
void
CAndroidGUIListBox
::
setItemHeight
(
s32
height
)
{
ItemHeight
=
height
;
ItemHeightOverride
=
1
;
}
//! Sets whether to draw the background
void
CAndroidGUIListBox
::
setDrawBackground
(
bool
draw
)
{
DrawBack
=
draw
;
}
//! Access the vertical scrollbar
IGUIScrollBar
*
CAndroidGUIListBox
::
getVerticalScrollBar
()
const
{
return
ScrollBar
;
}
}
// end namespace gui
}
// end namespace irr
libcore/android/CAndroidGUIListBox.h
deleted
100644 → 0
View file @
9041b4d8
/*
* CAndroidGUIListBox.h
*
* Created on: 2014年3月24日
* Author: mabin
*/
#ifndef CANDROIDGUILISTBOX_H_
#define CANDROIDGUILISTBOX_H_
#include "irrlicht.h"
namespace
irr
{
namespace
gui
{
class
IGUIFont
;
class
IGUIScrollBar
;
class
CAndroidGUIListBox
:
public
irr
::
gui
::
IGUIListBox
{
public:
//! constructor
CAndroidGUIListBox
(
IGUIEnvironment
*
environment
,
IGUIElement
*
parent
,
s32
id
,
core
::
rect
<
s32
>
rectangle
,
bool
clip
,
bool
drawBack
,
bool
moveOverSelect
,
int
scrollbarSize
);
static
CAndroidGUIListBox
*
addAndroidGUIListBox
(
IGUIEnvironment
*
environment
,
core
::
rect
<
s32
>
rectangle
,
IGUIElement
*
parent
,
s32
id
,
bool
drawBack
,
int
scrollbarSize
);
//! destructor
virtual
~
CAndroidGUIListBox
();
//! returns amount of list items
virtual
u32
getItemCount
()
const
_IRR_OVERRIDE_
;
//! returns string of a list item. the id may be a value from 0 to itemCount-1
virtual
const
wchar_t
*
getListItem
(
u32
id
)
const
_IRR_OVERRIDE_
;
//! adds an list item, returns id of item
virtual
u32
addItem
(
const
wchar_t
*
text
)
_IRR_OVERRIDE_
;
//! clears the list
virtual
void
clear
()
_IRR_OVERRIDE_
;
//! returns id of selected item. returns -1 if no item is selected.
virtual
s32
getSelected
()
const
_IRR_OVERRIDE_
;
//! sets the selected item. Set this to -1 if no item should be selected
virtual
void
setSelected
(
s32
id
)
_IRR_OVERRIDE_
;
//! sets the selected item. Set this to -1 if no item should be selected
virtual
void
setSelected
(
const
wchar_t
*
item
)
_IRR_OVERRIDE_
;
//! called if an event happened.
virtual
bool
OnEvent
(
const
SEvent
&
event
)
_IRR_OVERRIDE_
;
//! draws the element and its children
virtual
void
draw
()
_IRR_OVERRIDE_
;
//! adds an list item with an icon
//! \param text Text of list entry
//! \param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
//! \return
//! returns the id of the new created item
virtual
u32
addItem
(
const
wchar_t
*
text
,
s32
icon
)
_IRR_OVERRIDE_
;
//! Returns the icon of an item
virtual
s32
getIcon
(
u32
id
)
const
_IRR_OVERRIDE_
;
//! removes an item from the list
virtual
void
removeItem
(
u32
id
)
_IRR_OVERRIDE_
;
//! get the the id of the item at the given absolute coordinates
virtual
s32
getItemAt
(
s32
xpos
,
s32
ypos
)
const
_IRR_OVERRIDE_
;
//! Sets the sprite bank which should be used to draw list icons. This font is set to the sprite bank of
//! the built-in-font by default. A sprite can be displayed in front of every list item.
//! An icon is an index within the icon sprite bank. Several default icons are available in the
//! skin through getIcon
virtual
void
setSpriteBank
(
IGUISpriteBank
*
bank
)
_IRR_OVERRIDE_
;
//! set whether the listbox should scroll to newly selected items
virtual
void
setAutoScrollEnabled
(
bool
scroll
)
_IRR_OVERRIDE_
;
//! returns true if automatic scrolling is enabled, false if not.
virtual
bool
isAutoScrollEnabled
()
const
_IRR_OVERRIDE_
;
//! Update the position and size of the listbox, and update the scrollbar
virtual
void
updateAbsolutePosition
()
_IRR_OVERRIDE_
;
//! Writes attributes of the element.
virtual
void
serializeAttributes
(
io
::
IAttributes
*
out
,
io
::
SAttributeReadWriteOptions
*
options
)
const
_IRR_OVERRIDE_
;
//! Reads attributes of the element
virtual
void
deserializeAttributes
(
io
::
IAttributes
*
in
,
io
::
SAttributeReadWriteOptions
*
options
)
_IRR_OVERRIDE_
;
//! set all item colors at given index to color
virtual
void
setItemOverrideColor
(
u32
index
,
video
::
SColor
color
)
_IRR_OVERRIDE_
;
//! set all item colors of specified type at given index to color
virtual
void
setItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
,
video
::
SColor
color
)
_IRR_OVERRIDE_
;
//! clear all item colors at index
virtual
void
clearItemOverrideColor
(
u32
index
)
_IRR_OVERRIDE_
;
//! clear item color at index for given colortype
virtual
void
clearItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
_IRR_OVERRIDE_
;
//! has the item at index its color overwritten?
virtual
bool
hasItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
const
_IRR_OVERRIDE_
;
//! return the overwrite color at given item index.
virtual
video
::
SColor
getItemOverrideColor
(
u32
index
,
EGUI_LISTBOX_COLOR
colorType
)
const
_IRR_OVERRIDE_
;
//! return the default color which is used for the given colorType
virtual
video
::
SColor
getItemDefaultColor
(
EGUI_LISTBOX_COLOR
colorType
)
const
_IRR_OVERRIDE_
;
//! set the item at the given index
virtual
void
setItem
(
u32
index
,
const
wchar_t
*
text
,
s32
icon
)
_IRR_OVERRIDE_
;
//! Insert the item at the given index
//! Return the index on success or -1 on failure.
virtual
s32
insertItem
(
u32
index
,
const
wchar_t
*
text
,
s32
icon
)
_IRR_OVERRIDE_
;
//! Swap the items at the given indices
virtual
void
swapItems
(
u32
index1
,
u32
index2
)
_IRR_OVERRIDE_
;
//! set global itemHeight
virtual
void
setItemHeight
(
s32
height
)
_IRR_OVERRIDE_
;
//! Sets whether to draw the background
virtual
void
setDrawBackground
(
bool
draw
)
_IRR_OVERRIDE_
;
//! Access the vertical scrollbar
virtual
IGUIScrollBar
*
getVerticalScrollBar
()
const
_IRR_OVERRIDE_
;
private:
struct
ListItem
{
ListItem
()
:
icon
(
-
1
)
{
}
core
::
stringw
text
;
s32
icon
;
// A multicolor extension
struct
ListItemOverrideColor
{
ListItemOverrideColor
()
:
Use
(
false
)
{
}
bool
Use
;
video
::
SColor
Color
;
};
ListItemOverrideColor
OverrideColors
[
EGUI_LBC_COUNT
];
};
void
recalculateItemHeight
();
void
selectNew
(
s32
ypos
,
bool
onlyHover
=
false
);
void
recalculateScrollPos
();
// extracted that function to avoid copy&paste code
void
recalculateItemWidth
(
s32
icon
);
// get labels used for serialization
bool
getSerializationLabels
(
EGUI_LISTBOX_COLOR
colorType
,
core
::
stringc
&
useColorLabel
,
core
::
stringc
&
colorLabel
)
const
;
core
::
array
<
ListItem
>
Items
;
s32
Selected
;
s32
ItemHeight
;
s32
ItemHeightOverride
;
s32
TotalItemHeight
;
s32
ItemsIconWidth
;
gui
::
IGUIFont
*
Font
;
gui
::
IGUISpriteBank
*
IconBank
;
gui
::
IGUIScrollBar
*
ScrollBar
;
u32
selectTime
;
u32
LastKeyTime
;
core
::
stringw
KeyBuffer
;
bool
Selecting
;
bool
DrawBack
;
bool
MoveOverSelect
;
bool
AutoScroll
;
bool
HighlightWhenNotFocused
;
};
}
/* namespace gui */
}
/* namespace irr */
#endif
/* CANDROIDGUILISTBOX_H_ */
libcore/android/CAndroidGUISkin.cpp
View file @
5180c001
...
...
@@ -113,7 +113,7 @@ CAndroidGUISkin::CAndroidGUISkin(EGUI_SKIN_TYPE type,
Colors
[
EGDC_GRAY_EDITABLE
]
=
0xff5a5a5a
;
//输入框不可用时的颜色
Colors
[
EGDC_FOCUSED_EDITABLE
]
=
0xffffffff
;
//输入状态的框色
Sizes
[
EGDS_SCROLLBAR_SIZE
]
=
14
;
Sizes
[
EGDS_SCROLLBAR_SIZE
]
=
50
;
//实际控制scrollbar的大小
Sizes
[
EGDS_MENU_HEIGHT
]
=
48
;
Sizes
[
EGDS_WINDOW_BUTTON_WIDTH
]
=
15
;
Sizes
[
EGDS_CHECK_BOX_WIDTH
]
=
18
;
...
...
libcore/jni/Android.mk
View file @
5180c001
...
...
@@ -42,7 +42,6 @@ LOCAL_SRC_FILES := $(LOCAL_PATH)/android/android_tools.cpp \
$(LOCAL_PATH)
/android/TouchEventTransferAndroid.cpp
\
$(LOCAL_PATH)
/android/CAndroidGUIEditBox.cpp
\
$(LOCAL_PATH)
/android/CAndroidGUIComboBox.cpp
\
$(LOCAL_PATH)
/android/CAndroidGUIListBox.cpp
\
$(LOCAL_PATH)
/android/CAndroidGUISkin.cpp
\
$(LOCAL_PATH)
/android/CustomShaderConstantSetCallBack.cpp
\
$(LOCAL_PATH)
/android/YGOGameOptions.cpp
\
...
...
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