Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
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
videolan
vlc-gpu
Commits
7f4508b3
Commit
7f4508b3
authored
Apr 11, 2005
by
Eric Petit
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
beos/PreferencesWindow*: fixed widgets
parent
31892994
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
248 additions
and
101 deletions
+248
-101
modules/gui/beos/PreferencesWindow.cpp
modules/gui/beos/PreferencesWindow.cpp
+225
-86
modules/gui/beos/PreferencesWindow.h
modules/gui/beos/PreferencesWindow.h
+23
-15
No files found.
modules/gui/beos/PreferencesWindow.cpp
View file @
7f4508b3
...
...
@@ -39,15 +39,18 @@
/*****************************************************************************
* PreferencesWindow::PreferencesWindow
*****************************************************************************/
PreferencesWindow
::
PreferencesWindow
(
intf_thread_t
*
p_interface
,
PreferencesWindow
::
PreferencesWindow
(
intf_thread_t
*
_p_intf
,
BRect
frame
,
const
char
*
name
)
:
BWindow
(
frame
,
name
,
B_FLOATING_WINDOW_LOOK
,
B_NORMAL_WINDOW_FEEL
,
B_NOT_ZOOMABLE
),
fConfigScroll
(
NULL
),
p_intf
(
p_interface
)
B_NOT_ZOOMABLE
)
{
p_intf
=
_p_intf
;
fCurrent
=
NULL
;
BRect
rect
;
SetSizeLimits
(
PREFS_WINDOW_WIDTH
,
2000
,
PREFS_WINDOW_HEIGHT
,
2000
);
/* The "background" view */
fPrefsView
=
new
BView
(
Bounds
(),
NULL
,
B_FOLLOW_ALL
,
B_WILL_DRAW
);
fPrefsView
->
SetViewColor
(
ui_color
(
B_PANEL_BACKGROUND_COLOR
)
);
...
...
@@ -182,9 +185,11 @@ PreferencesWindow::PreferencesWindow( intf_thread_t * p_interface,
if
(
options
<
1
||
category
<
0
||
subcategory
<
0
)
continue
;
#if 0
fprintf( stderr, "cat %d, sub %d, %s\n", category, subcategory,
p_module->psz_shortname ? p_module->psz_shortname :
p_module->psz_object_name );
#endif
catItem
=
NULL
;
for
(
int
j
=
0
;
j
<
fOutline
->
CountItemsUnder
(
NULL
,
true
);
j
++
)
...
...
@@ -322,8 +327,7 @@ void PreferencesWindow::MessageReceived( BMessage * message )
void
PreferencesWindow
::
FrameResized
(
float
width
,
float
height
)
{
BWindow
::
FrameResized
(
width
,
height
);
UpdateScrollBar
();
fCurrent
->
UpdateScrollBar
();
}
/*****************************************************************************
...
...
@@ -334,64 +338,24 @@ void PreferencesWindow::Update()
/* Get the selected item, if any */
if
(
fOutline
->
CurrentSelection
()
<
0
)
return
;
fCurrent
=
(
ConfigItem
*
)
fOutline
->
ItemAt
(
fOutline
->
CurrentSelection
()
);
/* Detach the old box if any */
if
(
fDummyView
->
CountChildren
()
>
0
)
fDummyView
->
RemoveChild
(
fDummyView
->
ChildAt
(
0
)
);
if
(
fCurrent
)
{
fCurrent
->
ResetScroll
();
fDummyView
->
RemoveChild
(
fCurrent
->
Box
()
);
}
/* Add the new one... */
fCurrent
=
(
ConfigItem
*
)
fOutline
->
ItemAt
(
fOutline
->
CurrentSelection
()
);
fDummyView
->
AddChild
(
fCurrent
->
Box
()
);
/* ...then resize it (we must resize it after it's attached or the
children don't get adjusted) */
fCurrent
->
Box
()
->
ResizeTo
(
fDummyView
->
Bounds
().
Width
(),
fDummyView
->
Bounds
().
Height
()
);
#if 0
/* Force redrawing of its children */
BRect rect = fCurrent->fConfigBox->Bounds();
rect.InsetBy( 10,10 );
rect.top += 10;
fCurrent->fConfigScroll->ResizeTo( rect.Width(), rect.Height() );
fCurrent->fConfigScroll->Draw( fCurrent->fConfigScroll->Bounds() );
UpdateScrollBar();
#endif
}
/*****************************************************************************
* PreferencesWindow::UpdateScrollBar
*****************************************************************************/
void
PreferencesWindow
::
UpdateScrollBar
()
{
/* We have to fix the scrollbar manually because it doesn't handle
correctly simple BViews */
#if 0
if( !fCurrent )
{
return;
}
/* Get the available BRect for display */
BRect display = fCurrent->fConfigScroll->Bounds();
display.right -= B_V_SCROLL_BAR_WIDTH;
/* Fix the scrollbar */
BScrollBar * scrollBar;
long max;
BRect visible = display & fCurrent->fConfigView->Bounds();
BRect total = display | fCurrent->fConfigView->Bounds();
scrollBar = fCurrent->fConfigScroll->ScrollBar( B_VERTICAL );
max = (long)( fCurrent->fConfigView->Bounds().Height() - visible.Height() );
if( max < 0 ) max = 0;
scrollBar->SetRange( 0, max );
scrollBar->SetProportion( visible.Height() / total.Height() );
scrollBar->SetSteps( 10, 100 );
#endif
fCurrent
->
UpdateScrollBar
();
}
/*****************************************************************************
...
...
@@ -444,15 +408,18 @@ ConfigItem::ConfigItem( intf_thread_t * _p_intf, char * name,
fType
=
type
;
fHelp
=
strdup
(
help
);
fTextView
=
NULL
;
BRect
r
;
r
=
BRect
(
0
,
0
,
100
,
100
);
fBox
=
new
BBox
(
r
,
NULL
,
B_FOLLOW_ALL
);
fBox
->
SetLabel
(
name
);
fTextView
=
NULL
;
fScroll
=
NULL
;
fView
=
NULL
;
if
(
fType
==
TYPE_CATEGORY
)
{
/* Category: we just show the help text */
r
=
fBox
->
Bounds
();
r
.
InsetBy
(
10
,
10
);
r
.
top
+=
5
;
...
...
@@ -463,7 +430,105 @@ ConfigItem::ConfigItem( intf_thread_t * _p_intf, char * name,
fTextView
->
MakeSelectable
(
false
);
fTextView
->
Insert
(
fHelp
);
fBox
->
AddChild
(
fTextView
);
return
;
}
vlc_list_t
*
p_list
=
NULL
;
module_t
*
p_module
=
NULL
;
if
(
fType
==
TYPE_MODULE
)
{
p_module
=
(
module_t
*
)
vlc_object_get
(
p_intf
,
fObjectId
);
}
else
{
if
(
!
(
p_list
=
vlc_list_find
(
p_intf
,
VLC_OBJECT_MODULE
,
FIND_ANYWHERE
)
)
)
{
return
;
}
for
(
int
i
=
0
;
i
<
p_list
->
i_count
;
i
++
)
{
p_module
=
(
module_t
*
)
p_list
->
p_values
[
i
].
p_object
;
if
(
!
strcmp
(
p_module
->
psz_object_name
,
"main"
)
)
break
;
else
p_module
=
NULL
;
}
}
if
(
!
p_module
||
p_module
->
i_object_type
!=
VLC_OBJECT_MODULE
)
{
/* Shouldn't happen */
return
;
}
module_config_t
*
p_item
;
p_item
=
fSubModule
?
((
module_t
*
)
p_module
->
p_parent
)
->
p_config
:
p_module
->
p_config
;
if
(
fType
==
TYPE_SUBCATEGORY
)
{
for
(
;
p_item
->
i_type
!=
CONFIG_HINT_END
;
p_item
++
)
{
if
(
p_item
->
i_type
==
CONFIG_SUBCATEGORY
&&
p_item
->
i_value
==
fObjectId
)
{
break
;
}
}
}
r
=
fBox
->
Bounds
();
r
=
BRect
(
10
,
20
,
fBox
->
Bounds
().
right
-
B_V_SCROLL_BAR_WIDTH
-
10
,
fBox
->
Bounds
().
bottom
-
10
);
fView
=
new
BView
(
r
,
NULL
,
B_FOLLOW_LEFT_RIGHT
|
B_FOLLOW_TOP
,
B_WILL_DRAW
|
B_FULL_UPDATE_ON_RESIZE
);
fView
->
SetViewColor
(
ui_color
(
B_PANEL_BACKGROUND_COLOR
)
);
r
=
fView
->
Bounds
();
r
.
InsetBy
(
10
,
10
);
ConfigWidget
*
widget
;
for
(
;
p_item
->
i_type
!=
CONFIG_HINT_END
;
p_item
++
)
{
if
(
(
p_item
->
i_type
==
CONFIG_CATEGORY
||
p_item
->
i_type
==
CONFIG_SUBCATEGORY
)
&&
fType
==
TYPE_SUBCATEGORY
&&
p_item
->
i_value
!=
fObjectId
)
{
break
;
}
widget
=
new
ConfigWidget
(
p_intf
,
r
,
p_item
);
if
(
!
widget
->
InitCheck
()
)
{
delete
widget
;
continue
;
}
fView
->
AddChild
(
widget
);
r
.
top
+=
widget
->
Bounds
().
Height
();
}
if
(
fType
==
TYPE_MODULE
)
{
vlc_object_release
(
p_module
);
}
else
{
vlc_list_release
(
p_list
);
}
/* Create a scroll view around our fView */
fScroll
=
new
BScrollView
(
NULL
,
fView
,
B_FOLLOW_ALL
,
0
,
false
,
true
,
B_FANCY_BORDER
);
fScroll
->
SetViewColor
(
ui_color
(
B_PANEL_BACKGROUND_COLOR
)
);
fBox
->
AddChild
(
fScroll
);
/* Adjust fView's height to the size it actually needs (we do this
only now so the BScrollView fits the BBox) */
fView
->
ResizeTo
(
fView
->
Bounds
().
Width
(),
r
.
top
+
10
);
}
/***********************************************************************
...
...
@@ -479,6 +544,53 @@ ConfigItem::~ConfigItem()
}
}
/*****************************************************************************
* ConfigItem::UpdateScrollBar
*****************************************************************************/
void
ConfigItem
::
UpdateScrollBar
()
{
/* We have to fix the scrollbar manually because it doesn't handle
correctly simple BViews */
if
(
!
fScroll
)
{
return
;
}
/* Get the available BRect for display */
BRect
display
=
fScroll
->
Bounds
();
display
.
right
-=
B_V_SCROLL_BAR_WIDTH
;
/* Fix the scrollbar */
BScrollBar
*
scrollBar
;
BRect
visible
=
display
&
fView
->
Bounds
();
BRect
total
=
display
|
fView
->
Bounds
();
scrollBar
=
fScroll
->
ScrollBar
(
B_VERTICAL
);
long
max
=
(
long
)(
fView
->
Bounds
().
Height
()
-
visible
.
Height
()
);
if
(
max
<
0
)
max
=
0
;
scrollBar
->
SetRange
(
0
,
max
);
scrollBar
->
SetProportion
(
visible
.
Height
()
/
total
.
Height
()
);
scrollBar
->
SetSteps
(
10
,
100
);
/* We have to force redraw to avoid visual bugs when resizing
(BeOS bug?) */
fScroll
->
Invalidate
();
fView
->
Invalidate
();
}
/*****************************************************************************
* ConfigItem::ResetScroll
*****************************************************************************/
void
ConfigItem
::
ResetScroll
()
{
if
(
!
fScroll
)
{
return
;
}
fView
->
ScrollTo
(
0
,
0
);
}
/***********************************************************************
* ConfigItem::Apply
***********************************************************************
...
...
@@ -514,64 +626,77 @@ void ConfigItem::Apply( bool doIt )
**********************************************************************/
ConfigWidget
::
ConfigWidget
(
intf_thread_t
*
_p_intf
,
BRect
rect
,
module_config_t
*
p_item
)
:
BView
(
rect
,
NULL
,
B_FOLLOW_ALL
,
B_WILL_DRAW
)
:
BView
(
rect
,
NULL
,
B_FOLLOW_LEFT_RIGHT
|
B_FOLLOW_TOP
,
B_WILL_DRAW
)
{
#if 0
fType = type;
p_intf
=
_p_intf
;
switch( fType )
fInitOK
=
true
;
SetViewColor
(
ui_color
(
B_PANEL_BACKGROUND_COLOR
)
);
BRect
r
;
BMenuItem
*
menuItem
;
switch
(
p_item
->
i_type
)
{
case
CONFIG_ITEM_MODULE
:
case
CONFIG_ITEM_MODULE_CAT
:
case
CONFIG_ITEM_MODULE_LIST_CAT
:
case
CONFIG_ITEM_STRING
:
case
CONFIG_ITEM_FILE
:
case CONFIG_ITEM_MODULE:
case
CONFIG_ITEM_DIRECTORY
:
case
CONFIG_ITEM_INTEGER
:
case
CONFIG_ITEM_FLOAT
:
ResizeTo
(
Bounds
().
Width
(),
25
);
fTextControl = new BTextControl( Bounds(), NULL, label, NULL,
new BMessage() );
fTextControl
=
new
VTextControl
(
Bounds
(),
NULL
,
p_item
->
psz_text
,
NULL
,
new
BMessage
(),
B_FOLLOW_LEFT_RIGHT
|
B_FOLLOW_TOP
);
AddChild
(
fTextControl
);
break
;
case CONFIG_ITEM_BOOL:
ResizeTo( Bounds().Width(), 25 );
fCheckBox = new BCheckBox( Bounds(), NULL, label, new BMessage() );
AddChild( fCheckBox );
break;
case
CONFIG_ITEM_KEY
:
ResizeTo
(
Bounds
().
Width
(),
25
);
r.left = r.right - 60;
r
=
Bounds
();
r
.
left
=
r
.
right
-
100
;
fPopUpMenu
=
new
BPopUpMenu
(
""
);
fMenuField = new BMenuField( r, NULL, NULL, fPopUpMenu );
fMenuField
=
new
BMenuField
(
r
,
NULL
,
NULL
,
fPopUpMenu
,
B_FOLLOW_RIGHT
|
B_FOLLOW_TOP
);
for
(
unsigned
i
=
0
;
i < sizeof( vlc_keys ) / sizeof( key_descriptor_t ); i++ )
i
<
sizeof
(
vlc_keys
)
/
sizeof
(
key_descriptor_t
);
i
++
)
{
menuItem
=
new
BMenuItem
(
vlc_keys
[
i
].
psz_key_string
,
NULL
);
fPopUpMenu
->
AddItem
(
menuItem
);
}
r
.
right
=
r
.
left
-
10
;
r
.
left
=
r
.
left
-
60
;
fShiftCheck = new BCheckBox( r, NULL, "Shift",
new BMessage );
fShiftCheck
=
new
BCheckBox
(
r
,
NULL
,
"Shift"
,
new
BMessage
(),
B_FOLLOW_RIGHT
|
B_FOLLOW_TOP
);
r
.
right
=
r
.
left
-
10
;
r
.
left
=
r
.
left
-
60
;
fCtrlCheck = new BCheckBox( r, NULL, "Ctrl",
new BMessage );
fCtrlCheck
=
new
BCheckBox
(
r
,
NULL
,
"Ctrl"
,
new
BMessage
(),
B_FOLLOW_RIGHT
|
B_FOLLOW_TOP
);
r
.
right
=
r
.
left
-
10
;
r
.
left
=
r
.
left
-
60
;
fAltCheck = new BCheckBox( r, NULL, "Alt", new BMessage );
/* Can someone tell me how we're supposed to get GUI items aligned ? */
r.right = r.left - 10; r.left = 0;
r.bottom -= 10;
fStringView = new BStringView( r, NULL, label );
fAltCheck
=
new
BCheckBox
(
r
,
NULL
,
"Alt"
,
new
BMessage
(),
B_FOLLOW_RIGHT
|
B_FOLLOW_TOP
);
r
.
right
=
r
.
left
-
10
;
r
.
left
=
0
;
r
.
bottom
-=
10
;
fStringView
=
new
BStringView
(
r
,
NULL
,
p_item
->
psz_text
,
B_FOLLOW_LEFT_RIGHT
|
B_FOLLOW_TOP
);
AddChild
(
fStringView
);
AddChild
(
fAltCheck
);
AddChild
(
fCtrlCheck
);
AddChild
(
fShiftCheck
);
AddChild
(
fMenuField
);
break
;
#endif
case
CONFIG_ITEM_BOOL
:
ResizeTo
(
Bounds
().
Width
(),
25
);
fCheckBox
=
new
BCheckBox
(
Bounds
(),
NULL
,
p_item
->
psz_text
,
new
BMessage
(),
B_FOLLOW_LEFT_RIGHT
|
B_FOLLOW_TOP
);
AddChild
(
fCheckBox
);
break
;
case
CONFIG_SECTION
:
fInitOK
=
false
;
break
;
default:
fInitOK
=
false
;
}
}
/***********************************************************************
...
...
@@ -698,3 +823,17 @@ void VTextView::FrameResized( float width, float height )
BTextView
::
FrameResized
(
width
,
height
);
SetTextRect
(
BRect
(
10
,
10
,
width
-
11
,
height
-
11
)
);
}
VTextControl
::
VTextControl
(
BRect
frame
,
const
char
*
name
,
const
char
*
label
,
const
char
*
text
,
BMessage
*
message
,
uint32
resizingMode
)
:
BTextControl
(
frame
,
name
,
label
,
text
,
message
,
resizingMode
)
{
FrameResized
(
Bounds
().
Width
(),
Bounds
().
Height
()
);
}
void
VTextControl
::
FrameResized
(
float
width
,
float
height
)
{
BTextControl
::
FrameResized
(
width
,
height
);
SetDivider
(
width
/
2
);
}
modules/gui/beos/PreferencesWindow.h
View file @
7f4508b3
...
...
@@ -27,7 +27,7 @@
#include <InterfaceKit.h>
#define PREFS_WINDOW_WIDTH 700
#define PREFS_WINDOW_HEIGHT
6
00
#define PREFS_WINDOW_HEIGHT
4
00
#define PREFS_ITEM_SELECTED 'pris'
#define PREFS_DEFAULTS 'prde'
#define PREFS_APPLY 'prap'
...
...
@@ -41,19 +41,28 @@ class VTextView : public BTextView
void
FrameResized
(
float
width
,
float
height
);
};
class
VTextControl
:
public
BTextControl
{
public:
VTextControl
(
BRect
frame
,
const
char
*
name
,
const
char
*
label
,
const
char
*
text
,
BMessage
*
message
,
uint32
resizingMode
);
void
FrameResized
(
float
width
,
float
height
);
};
class
ConfigWidget
:
public
BView
{
public:
ConfigWidget
(
intf_thread_t
*
p_intf
,
BRect
rect
,
module_config_t
*
p_item
);
bool
InitCheck
()
{
return
fInitOK
;
}
void
Apply
(
bool
doIt
);
private:
intf_thread_t
*
p_intf
;
int
fType
;
BTextControl
*
fTextControl
;
bool
fInitOK
;
VTextControl
*
fTextControl
;
BCheckBox
*
fCheckBox
;
BPopUpMenu
*
fPopUpMenu
;
BMenuField
*
fMenuField
;
...
...
@@ -73,8 +82,9 @@ class ConfigItem : public BStringItem
~
ConfigItem
();
int
ObjectId
()
{
return
fObjectId
;
}
BBox
*
Box
()
{
return
fBox
;
}
void
UpdateScrollBar
();
void
ResetScroll
();
void
Apply
(
bool
doIt
);
void
Pulse
();
private:
intf_thread_t
*
p_intf
;
...
...
@@ -84,10 +94,10 @@ class ConfigItem : public BStringItem
int
fType
;
char
*
fHelp
;
BBox
*
fBox
;
BScrollView
*
fScroll
;
BView
*
fView
;
BBox
*
fBox
;
VTextView
*
fTextView
;
BScrollView
*
fScroll
;
BView
*
fView
;
};
class
PreferencesWindow
:
public
BWindow
...
...
@@ -103,7 +113,6 @@ class PreferencesWindow : public BWindow
virtual
void
FrameResized
(
float
,
float
);
void
Update
();
void
UpdateScrollBar
();
void
ApplyChanges
(
bool
doIt
);
void
SaveChanges
();
...
...
@@ -114,13 +123,12 @@ class PreferencesWindow : public BWindow
module_config_t
**
pp_item
,
bool
stop_after_category
);
BView
*
fPrefsView
;
BOutlineListView
*
fOutline
;
BView
*
fDummyView
;
BScrollView
*
fConfigScroll
;
ConfigItem
*
fCurrent
;
BView
*
fPrefsView
;
BOutlineListView
*
fOutline
;
BView
*
fDummyView
;
ConfigItem
*
fCurrent
;
intf_thread_t
*
p_intf
;
intf_thread_t
*
p_intf
;
};
#endif // BEOS_PREFERENCES_WINDOW_H
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