Darrell Anderson 12 years ago
commit 0a232e5b3c

@ -1847,6 +1847,37 @@ QPalette QApplication::palette(const QWidget* w)
return *app_pal; return *app_pal;
} }
QPalette QApplication::palette(QStringList objectTypeList)
{
#if defined(QT_CHECK_STATE)
if ( !qApp )
qWarning( "QApplication::palette: This function can only be "
"called after the QApplication object has been created" );
#endif
if ( !app_pal ) {
if ( !qt_std_pal )
qt_create_std_palette();
app_pal = new QPalette( *qt_std_pal );
qt_fix_tooltips();
}
if ( (objectTypeList.count() > 0) && app_palettes ) {
QPalette* wp = app_palettes->find( objectTypeList[objectTypeList.count()-1] );
if ( wp ) {
return *wp;
}
QAsciiDictIterator<QPalette> it( *app_palettes );
const char* name;
while ( (name=it.currentKey()) != 0 ) {
if ( objectTypeList.contains(name) ) {
return *it.current();
}
++it;
}
}
return *app_pal;
}
/*! /*!
Changes the default application palette to \a palette. If \a Changes the default application palette to \a palette. If \a
informWidgets is TRUE, then existing widgets are informed about the informWidgets is TRUE, then existing widgets are informed about the

@ -113,6 +113,7 @@ public:
static void setGlobalMouseTracking( bool enable ); static void setGlobalMouseTracking( bool enable );
#ifndef QT_NO_PALETTE #ifndef QT_NO_PALETTE
static QPalette palette( const QWidget* = 0 ); static QPalette palette( const QWidget* = 0 );
static QPalette palette( QStringList );
static void setPalette( const QPalette &, bool informWidgets=FALSE, static void setPalette( const QPalette &, bool informWidgets=FALSE,
const char* className = 0 ); const char* className = 0 );
#endif #endif

@ -458,6 +458,11 @@ public:
PE_HeaderSectionMenu, PE_HeaderSectionMenu,
PE_PanelScrollBar,
PE_MenuItemIndicatorFrame,
PE_MenuItemIndicatorIconFrame,
PE_MenuItemIndicatorCheck,
// do not add any values below/greater this // do not add any values below/greater this
PE_CustomBase = 0xf000000 PE_CustomBase = 0xf000000
}; };
@ -830,6 +835,13 @@ public:
PM_MenuBarItemSpacing, PM_MenuBarItemSpacing,
PM_ToolBarItemSpacing, PM_ToolBarItemSpacing,
PM_MenuIndicatorFrameHBorder,
PM_MenuIndicatorFrameVBorder,
PM_MenuIconIndicatorFrameHBorder,
PM_MenuIconIndicatorFrameVBorder,
PM_ArrowSize,
// do not add any values below/greater than this // do not add any values below/greater than this
PM_CustomBase = 0xf0000000 PM_CustomBase = 0xf0000000
}; };
@ -1029,6 +1041,9 @@ public:
// bool - hide underlined accelerators uless Alt key is currently down // bool - hide underlined accelerators uless Alt key is currently down
SH_HideUnderlineAcceleratorWhenAltUp, SH_HideUnderlineAcceleratorWhenAltUp,
// int - width of menu check column
SH_MenuIndicatorColumnWidth,
// do not add any values below/greater than this // do not add any values below/greater than this
SH_CustomBase = 0xf0000000 SH_CustomBase = 0xf0000000
}; };

@ -2870,6 +2870,9 @@ int QCommonStyle::pixelMetric(PixelMetric m, QStyleControlElementData ceData, Co
case PM_TabBarScrollButtonWidth: case PM_TabBarScrollButtonWidth:
ret = 16; ret = 16;
break; break;
case PM_ArrowSize:
ret = 7;
break;
default: default:
ret = 0; ret = 0;
break; break;

@ -67,6 +67,12 @@ int QCompactStyle::pixelMetric( PixelMetric metric, QStyleControlElementData ceD
case PM_MaximumDragDistance: case PM_MaximumDragDistance:
ret = -1; ret = -1;
break; break;
case PM_MenuIndicatorFrameHBorder:
case PM_MenuIndicatorFrameVBorder:
case PM_MenuIconIndicatorFrameHBorder:
case PM_MenuIconIndicatorFrameVBorder:
ret = 0;
break;
default: default:
ret = QWindowsStyle::pixelMetric( metric, ceData, elementFlags, widget ); ret = QWindowsStyle::pixelMetric( metric, ceData, elementFlags, widget );
break; break;
@ -189,13 +195,7 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
return; return;
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
if ( act && !dis ) { drawPrimitive( PE_MenuItemIndicatorFrame, p, ceData, elementFlags, r, itemg, flags, opt );
qDrawShadePanel( p, x, y, checkcol, h,
g, TRUE, 1, &g.brush( QColorGroup::Button ) );
} else {
qDrawShadePanel( p, x, y, checkcol, h,
g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
}
} else if ( !act ) { } else if ( !act ) {
p->fillRect(x, y, checkcol , h, p->fillRect(x, y, checkcol , h,
g.brush( QColorGroup::Button )); g.brush( QColorGroup::Button ));
@ -214,7 +214,7 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
int pixh = pixmap.height(); int pixh = pixmap.height();
if ( act && !dis ) { if ( act && !dis ) {
if ( !mi->isChecked() ) if ( !mi->isChecked() )
qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); drawPrimitive( PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, itemg, flags, opt );
} }
QRect cr( x, y, checkcol, h ); QRect cr( x, y, checkcol, h );
QRect pmr( 0, 0, pixw, pixh ); QRect pmr( 0, 0, pixw, pixh );
@ -226,18 +226,8 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
g.brush( QColorGroup::Button ); g.brush( QColorGroup::Button );
p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
} else if ( checkable ) { // just "checking"... } else if ( checkable ) { // just "checking"...
int mw = checkcol + motifItemFrame;
int mh = h - 2*motifItemFrame;
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
drawPrimitive( PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, itemg, flags, opt );
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive( PE_CheckMark, p, ceData, elementFlags, QRect(x + motifItemFrame + 2, y + motifItemFrame,
mw, mh), itemg, cflags, opt );
} }
} }
@ -319,4 +309,87 @@ void QCompactStyle::drawControl( ControlElement element, QPainter *p, QStyleCont
} }
} }
/*! \reimp */
void QCompactStyle::drawPrimitive( PrimitiveElement pe,
QPainter *p,
QStyleControlElementData ceData,
ControlElementFlags elementFlags,
const QRect &r,
const QColorGroup &cg,
SFlags flags,
const QStyleOption& opt ) const
{
bool dis = !(flags & Style_Enabled);
bool act = flags & Style_Active;
int x, y, w, h;
r.rect( &x, &y, &w, &h );
switch (pe) {
case PE_MenuItemIndicatorFrame:
{
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
if ( act && !dis ) {
qDrawShadePanel( p, x, y, checkcol, h, cg, TRUE, 1, &cg.brush( QColorGroup::Button ) );
} else {
qDrawShadePanel( p, x, y, checkcol, h, cg, TRUE, 1, &cg.brush( QColorGroup::Midlight ) );
}
}
break;
case PE_MenuItemIndicatorIconFrame:
{
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
qDrawShadePanel( p, x, y, checkcol, h, cg, FALSE, 1, &cg.brush( QColorGroup::Button ) );
}
break;
case PE_MenuItemIndicatorCheck:
{
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
int mw = checkcol + motifItemFrame;
int mh = h - 2*motifItemFrame;
SFlags cflags = Style_Default;
if (! dis) {
cflags |= Style_Enabled;
}
if (act) {
cflags |= Style_On;
}
drawPrimitive( PE_CheckMark, p, ceData, elementFlags, QRect(x + motifItemFrame + 2, y + motifItemFrame, mw, mh), cg, cflags, opt );
}
break;
default:
break;
}
}
/*! \reimp */
int QCompactStyle::styleHint(StyleHint sh, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QStyleOption &opt, QStyleHintReturn *returnData, const QWidget *w) const
{
int ret;
switch (sh) {
case SH_MenuIndicatorColumnWidth:
{
int maxpmw = opt.maxIconWidth();
bool checkable = (elementFlags & CEF_IsCheckable);
if ( checkable )
maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
ret = maxpmw;
}
break;
default:
ret = QWindowsStyle::styleHint(sh, ceData, elementFlags, opt, returnData, w);
break;
}
return ret;
}
#endif #endif

@ -60,9 +60,20 @@ public:
int pixelMetric( PixelMetric metric, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QWidget *widget = 0 ); int pixelMetric( PixelMetric metric, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QWidget *widget = 0 );
void drawPrimitive( PrimitiveElement pe,
QPainter *p,
QStyleControlElementData ceData,
ControlElementFlags elementFlags,
const QRect &r,
const QColorGroup &cg,
SFlags flags = Style_Default,
const QStyleOption& = QStyleOption::Default ) const;
void drawControl( ControlElement element, QPainter *p, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QRect &r, void drawControl( ControlElement element, QPainter *p, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QRect &r,
const QColorGroup &cg, SFlags how = Style_Default, const QStyleOption& = QStyleOption::Default, const QWidget *w = 0 ); const QColorGroup &cg, SFlags how = Style_Default, const QStyleOption& = QStyleOption::Default, const QWidget *w = 0 );
int styleHint(StyleHint sh, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QStyleOption &, QStyleHintReturn *, const QWidget *) const;
private: // Disabled copy constructor and operator= private: // Disabled copy constructor and operator=
#if defined(Q_DISABLE_COPY) #if defined(Q_DISABLE_COPY)
QCompactStyle( const QCompactStyle & ); QCompactStyle( const QCompactStyle & );

@ -263,6 +263,13 @@ int QMotifPlusStyle::pixelMetric(PixelMetric metric, QStyleControlElementData ce
ret = 11; ret = 11;
break; break;
case PM_MenuIndicatorFrameHBorder:
case PM_MenuIndicatorFrameVBorder:
case PM_MenuIconIndicatorFrameHBorder:
case PM_MenuIconIndicatorFrameVBorder:
ret = 2;
break;
default: default:
ret = QMotifStyle::pixelMetric(metric, ceData, elementFlags, widget); ret = QMotifStyle::pixelMetric(metric, ceData, elementFlags, widget);
break; break;
@ -282,6 +289,9 @@ void QMotifPlusStyle::drawPrimitive( PrimitiveElement pe,
SFlags flags, SFlags flags,
const QStyleOption& opt ) const const QStyleOption& opt ) const
{ {
bool dis = ! (flags & Style_Enabled);
bool act = flags & Style_Active;
switch (pe) { switch (pe) {
case PE_HeaderSection: case PE_HeaderSection:
@ -638,6 +648,47 @@ void QMotifPlusStyle::drawPrimitive( PrimitiveElement pe,
break; break;
} }
case PE_PanelScrollBar:
{
drawMotifPlusShade(p, r, cg, TRUE, FALSE, &cg.brush(QColorGroup::Mid));
break;
}
case PE_MenuItemIndicatorFrame:
{
// Draw nothing
break;
}
case PE_MenuItemIndicatorIconFrame:
{
int x, y, w, h;
r.rect(&x, &y, &w, &h);
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
QRect vrect = visualRect( QRect( x+2, y+2, checkcol, h-2 ), r );
qDrawShadePanel( p, vrect.x(), y+2, checkcol, h-2*2, cg, TRUE, 1, &cg.brush( QColorGroup::Midlight ) );
break;
}
case PE_MenuItemIndicatorCheck:
{
int x, y, w, h;
r.rect(&x, &y, &w, &h);
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
QRect vrect = visualRect( QRect( x+2, y+2, checkcol, h-2 ), r );
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive(PE_CheckMark, p, ceData, elementFlags, vrect, cg, cflags);
break;
}
default: default:
QMotifStyle::drawPrimitive(pe, p, ceData, elementFlags, r, cg, flags, opt); QMotifStyle::drawPrimitive(pe, p, ceData, elementFlags, r, cg, flags, opt);
break; break;
@ -795,8 +846,7 @@ void QMotifPlusStyle::drawControl( ControlElement element,
QRect vrect = visualRect( QRect( x+2, y+2, checkcol, h-2 ), r ); QRect vrect = visualRect( QRect( x+2, y+2, checkcol, h-2 ), r );
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
if ( mi->iconSet() ) { if ( mi->iconSet() ) {
qDrawShadePanel( p, vrect.x(), y+2, checkcol, h-2*2, drawPrimitive(PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, cg, flags, opt);
cg, TRUE, 1, &cg.brush( QColorGroup::Midlight ) );
} }
} else if ( !act ) { } else if ( !act ) {
p->fillRect(vrect, p->fillRect(vrect,
@ -828,13 +878,7 @@ void QMotifPlusStyle::drawControl( ControlElement element,
} else if (checkable) { } else if (checkable) {
if (mi->isChecked()) { if (mi->isChecked()) {
SFlags cflags = Style_Default; drawPrimitive(PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, cg, flags, opt);
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive(PE_CheckMark, p, ceData, elementFlags, vrect, cg, cflags);
} }
} }
@ -1147,8 +1191,12 @@ void QMotifPlusStyle::drawComplexControl(ComplexControl control,
if (controls == (SC_ScrollBarAddLine | SC_ScrollBarSubLine | if (controls == (SC_ScrollBarAddLine | SC_ScrollBarSubLine |
SC_ScrollBarAddPage | SC_ScrollBarSubPage | SC_ScrollBarAddPage | SC_ScrollBarSubPage |
SC_ScrollBarFirst | SC_ScrollBarLast | SC_ScrollBarSlider)) SC_ScrollBarFirst | SC_ScrollBarLast | SC_ScrollBarSlider))
drawMotifPlusShade(p, widget->rect(), cg, TRUE, FALSE, drawPrimitive(PE_PanelScrollBar, p, ceData, elementFlags, ceData.rect, cg,
&cg.brush(QColorGroup::Mid)); ((maxedOut) ? Style_Default : Style_Enabled) |
((active == SC_ScrollBarLast) ?
Style_Down : Style_Default) |
((ceData.orientation == Qt::Horizontal) ?
Style_Horizontal : Style_Default));
if ((controls & SC_ScrollBarSubLine) && subline.isValid()) if ((controls & SC_ScrollBarSubLine) && subline.isValid())
drawPrimitive(PE_ScrollBarSubLine, p, ceData, elementFlags, subline, cg, drawPrimitive(PE_ScrollBarSubLine, p, ceData, elementFlags, subline, cg,
@ -1559,6 +1607,17 @@ int QMotifPlusStyle::styleHint(StyleHint hint,
case SH_PopupMenu_MouseTracking: case SH_PopupMenu_MouseTracking:
ret = 1; ret = 1;
break; break;
case SH_MenuIndicatorColumnWidth:
{
int maxpmw = opt.maxIconWidth();
bool checkable = (elementFlags & CEF_IsCheckable);
if (checkable)
maxpmw = QMAX(maxpmw, 15);
ret = maxpmw;
break;
}
default: default:
ret = QMotifStyle::styleHint(hint, ceData, elementFlags, opt, returnData, widget); ret = QMotifStyle::styleHint(hint, ceData, elementFlags, opt, returnData, widget);
break; break;

@ -211,6 +211,9 @@ void QMotifStyle::drawPrimitive( PrimitiveElement pe,
SFlags flags, SFlags flags,
const QStyleOption& opt ) const const QStyleOption& opt ) const
{ {
bool dis = ! (flags & Style_Enabled);
bool act = flags & Style_Active;
switch( pe ) { switch( pe ) {
#ifndef QT_NO_LISTVIEW #ifndef QT_NO_LISTVIEW
case PE_CheckListExclusiveIndicator: { case PE_CheckListExclusiveIndicator: {
@ -761,6 +764,52 @@ void QMotifStyle::drawPrimitive( PrimitiveElement pe,
r.height() - 4, cg.brush(QColorGroup::Highlight)); r.height() - 4, cg.brush(QColorGroup::Highlight));
break; break;
case PE_PanelScrollBar:
qDrawShadePanel(p, r, cg, TRUE,
pixelMetric(PM_DefaultFrameWidth, ceData, elementFlags),
&cg.brush(QColorGroup::Mid));
break;
case PE_MenuItemIndicatorFrame:
{
// Draw nothing
break;
}
case PE_MenuItemIndicatorIconFrame:
{
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
QRect vrect = visualRect( QRect( x+motifItemFrame, y+motifItemFrame, checkcol, h-2*motifItemFrame ), r );
int xvis = vrect.x();
qDrawShadePanel( p, xvis, y+motifItemFrame, checkcol, h-2*motifItemFrame, cg, TRUE, 1, &cg.brush( QColorGroup::Midlight ) );
break;
}
case PE_MenuItemIndicatorCheck:
{
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
QRect vrect = visualRect( QRect( x+motifItemFrame, y+motifItemFrame, checkcol, h-2*motifItemFrame ), r );
int xvis = vrect.x();
int mw = checkcol;
int mh = h - 2*motifItemFrame;
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive(PE_CheckMark, p, ceData, elementFlags, QRect(xvis, y+motifItemFrame, mw, mh), cg, cflags);
break;
}
default: default:
QCommonStyle::drawPrimitive( pe, p, ceData, elementFlags, r, cg, flags, opt ); QCommonStyle::drawPrimitive( pe, p, ceData, elementFlags, r, cg, flags, opt );
break; break;
@ -1050,8 +1099,7 @@ void QMotifStyle::drawControl( ControlElement element,
int xvis = vrect.x(); int xvis = vrect.x();
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
if ( mi->iconSet() ) { if ( mi->iconSet() ) {
qDrawShadePanel( p, xvis, y+motifItemFrame, checkcol, h-2*motifItemFrame, drawPrimitive(PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, cg, flags, opt);
cg, TRUE, 1, &cg.brush( QColorGroup::Midlight ) );
} }
} else if ( !act ) { } else if ( !act ) {
p->fillRect(xvis, y+motifItemFrame, checkcol, h-2*motifItemFrame, p->fillRect(xvis, y+motifItemFrame, checkcol, h-2*motifItemFrame,
@ -1076,18 +1124,8 @@ void QMotifStyle::drawControl( ControlElement element,
p->drawPixmap( pmr.topLeft(), pixmap ); p->drawPixmap( pmr.topLeft(), pixmap );
} else if ( checkable ) { // just "checking"... } else if ( checkable ) { // just "checking"...
int mw = checkcol;
int mh = h - 2*motifItemFrame;
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
SFlags cflags = Style_Default; drawPrimitive(PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, cg, flags, opt);
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive(PE_CheckMark, p, ceData, elementFlags,
QRect(xvis, y+motifItemFrame, mw, mh),
cg, cflags);
} }
} }
@ -1339,9 +1377,10 @@ void QMotifStyle::drawComplexControl( ComplexControl control,
if (sub == (SC_ScrollBarAddLine | SC_ScrollBarSubLine | SC_ScrollBarAddPage | if (sub == (SC_ScrollBarAddLine | SC_ScrollBarSubLine | SC_ScrollBarAddPage |
SC_ScrollBarSubPage | SC_ScrollBarFirst | SC_ScrollBarLast | SC_ScrollBarSubPage | SC_ScrollBarFirst | SC_ScrollBarLast |
SC_ScrollBarSlider)) SC_ScrollBarSlider))
qDrawShadePanel(p, ceData.rect, cg, TRUE, drawPrimitive(PE_PanelScrollBar, p, ceData, elementFlags, ceData.rect, cg,
pixelMetric(PM_DefaultFrameWidth, ceData, elementFlags, widget), ((ceData.orientation == Qt::Horizontal) ?
&cg.brush(QColorGroup::Mid)); Style_Horizontal : Style_Default));
QCommonStyle::drawComplexControl(control, p, ceData, elementFlags, r, cg, flags, sub, QCommonStyle::drawComplexControl(control, p, ceData, elementFlags, r, cg, flags, sub,
subActive, opt, widget); subActive, opt, widget);
break; break;
@ -1538,6 +1577,13 @@ int QMotifStyle::pixelMetric( PixelMetric metric, QStyleControlElementData ceDat
ret = 13; ret = 13;
break; break;
case PM_MenuIndicatorFrameHBorder:
case PM_MenuIndicatorFrameVBorder:
case PM_MenuIconIndicatorFrameHBorder:
case PM_MenuIconIndicatorFrameVBorder:
ret = motifItemFrame;
break;
default: default:
ret = QCommonStyle::pixelMetric( metric, ceData, elementFlags, widget ); ret = QCommonStyle::pixelMetric( metric, ceData, elementFlags, widget );
break; break;
@ -2346,6 +2392,18 @@ int QMotifStyle::styleHint(StyleHint hint,
ret = 0; ret = 0;
break; break;
case SH_MenuIndicatorColumnWidth:
{
int maxpmw = opt.maxIconWidth();
bool checkable = (elementFlags & CEF_IsCheckable);
if ( checkable )
maxpmw = QMAX( maxpmw, motifCheckMarkSpace );
ret = maxpmw;
break;
}
default: default:
ret = QCommonStyle::styleHint(hint, ceData, elementFlags, opt, returnData, widget); ret = QCommonStyle::styleHint(hint, ceData, elementFlags, opt, returnData, widget);
break; break;

@ -398,6 +398,14 @@ int QSGIStyle::pixelMetric( PixelMetric metric, QStyleControlElementData ceData,
case PM_SplitterWidth: case PM_SplitterWidth:
return QMAX( 10, QApplication::globalStrut().width() ); return QMAX( 10, QApplication::globalStrut().width() );
case PM_MenuIndicatorFrameHBorder:
return (sgiItemFrame+2);
case PM_MenuIndicatorFrameVBorder:
return (sgiItemFrame+4);
case PM_MenuIconIndicatorFrameHBorder:
case PM_MenuIconIndicatorFrameVBorder:
return sgiItemFrame;
default: default:
break; break;
} }
@ -567,6 +575,9 @@ void QSGIStyle::drawPrimitive( PrimitiveElement pe,
const int defaultFrameWidth = pixelMetric( PM_DefaultFrameWidth, ceData, elementFlags ); const int defaultFrameWidth = pixelMetric( PM_DefaultFrameWidth, ceData, elementFlags );
bool hot = ( flags & Style_MouseOver ) && ( flags & Style_Enabled ); bool hot = ( flags & Style_MouseOver ) && ( flags & Style_Enabled );
bool dis = ! (flags & Style_Enabled);
bool act = flags & Style_Active;
switch ( pe ) { switch ( pe ) {
case PE_ButtonCommand: case PE_ButtonCommand:
{ {
@ -878,6 +889,51 @@ void QSGIStyle::drawPrimitive( PrimitiveElement pe,
} }
break; break;
case PE_MenuItemIndicatorFrame:
{
int x, y, w, h;
r.rect(&x, &y, &w, &h);
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
QRect er( x+sgiItemFrame+1, y+sgiItemFrame+3, pixelMetric(PM_IndicatorWidth, ceData, elementFlags), pixelMetric(PM_IndicatorHeight, ceData, elementFlags) );
er.addCoords( 1, 1, -1, -1 );
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, er, cg, cflags, opt );
}
break;
case PE_MenuItemIndicatorIconFrame:
{
int x, y, w, h;
r.rect(&x, &y, &w, &h);
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
drawPanel( p, x+sgiItemFrame, y+sgiItemFrame, checkcol, h-2*sgiItemFrame, cg, TRUE, 1, &cg.brush( QColorGroup::Light ) );
}
break;
case PE_MenuItemIndicatorCheck:
{
int x, y, w, h;
r.rect(&x, &y, &w, &h);
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
QRect er( x+sgiItemFrame+1, y+sgiItemFrame+3, pixelMetric(PM_IndicatorWidth, ceData, elementFlags), pixelMetric(PM_IndicatorHeight, ceData, elementFlags) );
er.addCoords( 1, 1, -1, -1 );
er.addCoords( 0, 1, 1, 1 );
drawPrimitive( PE_CheckMark, p, ceData, elementFlags, er, cg, cflags | Style_On, opt );
}
break;
default: default:
QMotifStyle::drawPrimitive( pe, p, ceData, elementFlags, r, cg, flags, opt ); QMotifStyle::drawPrimitive( pe, p, ceData, elementFlags, r, cg, flags, opt );
break; break;
@ -990,8 +1046,7 @@ void QSGIStyle::drawControl( ControlElement element,
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
if ( mi->iconSet() ) { if ( mi->iconSet() ) {
drawPanel( p, x+sgiItemFrame, y+sgiItemFrame, checkcol, h-2*sgiItemFrame, drawPrimitive(PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, cg, flags, opt);
cg, TRUE, 1, &cg.brush( QColorGroup::Light ) );
} }
} else { } else {
if ( !act ) if ( !act )
@ -1018,20 +1073,9 @@ void QSGIStyle::drawControl( ControlElement element,
p->drawPixmap( pmr.topLeft(), pixmap ); p->drawPixmap( pmr.topLeft(), pixmap );
} else { } else {
if ( checkable ) { if ( checkable ) {
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
QRect er( x+sgiItemFrame+1, y+sgiItemFrame+3, drawPrimitive(PE_MenuItemIndicatorFrame, p, ceData, elementFlags, r, cg, flags, opt);
pixelMetric(PM_IndicatorWidth, ceData, elementFlags), drawPrimitive(PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, cg, flags, opt);
pixelMetric(PM_IndicatorHeight, ceData, elementFlags) );
er.addCoords( 1, 1, -1, -1 );
drawPrimitive( PE_ButtonBevel, p, ceData, elementFlags, er, cg, cflags, opt );
er.addCoords( 0, 1, 1, 1 );
drawPrimitive( PE_CheckMark, p, ceData, elementFlags, er, cg, cflags | Style_On, opt );
} }
} }
} }
@ -1467,4 +1511,28 @@ QRect QSGIStyle::querySubControlMetrics( ComplexControl control,
return QMotifStyle::querySubControlMetrics( control, ceData, elementFlags, sub, opt, widget ); return QMotifStyle::querySubControlMetrics( control, ceData, elementFlags, sub, opt, widget );
} }
/*! \reimp */
int QSGIStyle::styleHint(StyleHint sh, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QStyleOption &opt, QStyleHintReturn *returnData, const QWidget *w) const
{
int ret;
switch (sh) {
case SH_MenuIndicatorColumnWidth:
{
int maxpmw = opt.maxIconWidth();
bool checkable = ( elementFlags & CEF_IsCheckable );
if ( checkable )
maxpmw = QMAX( maxpmw, sgiCheckMarkSpace );
ret = maxpmw;
}
break;
default:
ret = QMotifStyle::styleHint(sh, ceData, elementFlags, opt, returnData, w);
break;
}
return ret;
}
#endif // QT_NO_STYLE_SGI #endif // QT_NO_STYLE_SGI

@ -124,6 +124,8 @@ public:
const QStyleOption& = QStyleOption::Default, const QStyleOption& = QStyleOption::Default,
const QWidget *widget = 0 ) const; const QWidget *widget = 0 ) const;
int styleHint(StyleHint sh, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QStyleOption &, QStyleHintReturn *, const QWidget *) const;
bool objectEventHandler( QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QEvent *e ); bool objectEventHandler( QStyleControlElementData ceData, ControlElementFlags elementFlags, void* source, QEvent *e );
private: private:

@ -225,6 +225,9 @@ void QWindowsStyle::drawPrimitive( PrimitiveElement pe,
SFlags flags, SFlags flags,
const QStyleOption& opt ) const const QStyleOption& opt ) const
{ {
bool dis = !(flags & Style_Enabled);
bool act = flags & Style_Active;
QRect rr( r ); QRect rr( r );
switch (pe) { switch (pe) {
case PE_ButtonCommand: case PE_ButtonCommand:
@ -568,6 +571,63 @@ void QWindowsStyle::drawPrimitive( PrimitiveElement pe,
} }
break; break;
case PE_MenuItemIndicatorFrame:
{
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
QRect vrect = visualRect( QRect( x, y, checkcol, h ), r );
int xvis = vrect.x();
if ( act && !dis ) {
qDrawShadePanel( p, xvis, y, checkcol, h, cg, TRUE, 1, &cg.brush( QColorGroup::Button ) );
}
else {
QBrush fill( cg.light(), Dense4Pattern );
// set the brush origin for the hash pattern to the x/y coordinate
// of the menu item's checkmark... this way, the check marks have
// a consistent look
QPoint origin = p->brushOrigin();
p->setBrushOrigin( xvis, y );
qDrawShadePanel( p, xvis, y, checkcol, h, cg, TRUE, 1, &fill );
// restore the previous brush origin
p->setBrushOrigin( origin );
}
}
break;
case PE_MenuItemIndicatorIconFrame:
{
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
QRect vrect = visualRect( QRect( x, y, checkcol, h ), r );
int xvis = vrect.x();
qDrawShadePanel( p, xvis, y, w, h, cg, FALSE, 1, &cg.brush( QColorGroup::Button ) );
}
break;
case PE_MenuItemIndicatorCheck:
{
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int checkcol = styleHint(SH_MenuIndicatorColumnWidth, ceData, elementFlags, opt, NULL, NULL);
int xp = x + windowsItemFrame;
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive(PE_CheckMark, p, ceData, elementFlags, visualRect( QRect(xp, y + windowsItemFrame, checkcol - 2*windowsItemFrame, h - 2*windowsItemFrame), r ), cg, cflags);
}
break;
default: default:
if (pe >= PE_ArrowUp && pe <= PE_ArrowLeft) { if (pe >= PE_ArrowUp && pe <= PE_ArrowLeft) {
QPointArray a; QPointArray a;
@ -809,21 +869,7 @@ void QWindowsStyle::drawControl( ControlElement element,
QRect vrect = visualRect( QRect( xpos, y, checkcol, h ), r ); QRect vrect = visualRect( QRect( xpos, y, checkcol, h ), r );
int xvis = vrect.x(); int xvis = vrect.x();
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
if ( act && !dis ) drawPrimitive(PE_MenuItemIndicatorFrame, p, ceData, elementFlags, r, cg, flags, opt);
qDrawShadePanel( p, xvis, y, checkcol, h,
cg, TRUE, 1, &cg.brush( QColorGroup::Button ) );
else {
QBrush fill( cg.light(), Dense4Pattern );
// set the brush origin for the hash pattern to the x/y coordinate
// of the menu item's checkmark... this way, the check marks have
// a consistent look
QPoint origin = p->brushOrigin();
p->setBrushOrigin( xvis, y );
qDrawShadePanel( p, xvis, y, checkcol, h, cg, TRUE, 1,
&fill );
// restore the previous brush origin
p->setBrushOrigin( origin );
}
} else if (! act) } else if (! act)
p->fillRect(xvis, y, checkcol , h, cg.brush( QColorGroup::Button )); p->fillRect(xvis, y, checkcol , h, cg.brush( QColorGroup::Button ));
@ -839,8 +885,7 @@ void QWindowsStyle::drawControl( ControlElement element,
int pixw = pixmap.width(); int pixw = pixmap.width();
int pixh = pixmap.height(); int pixh = pixmap.height();
if ( act && !dis && !mi->isChecked() ) if ( act && !dis && !mi->isChecked() )
qDrawShadePanel( p, xvis, y, checkcol, h, cg, FALSE, 1, drawPrimitive(PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, cg, flags, opt);
&cg.brush( QColorGroup::Button ) );
QRect pmr( 0, 0, pixw, pixh ); QRect pmr( 0, 0, pixw, pixh );
pmr.moveCenter( vrect.center() ); pmr.moveCenter( vrect.center() );
p->setPen( cg.text() ); p->setPen( cg.text() );
@ -851,20 +896,9 @@ void QWindowsStyle::drawControl( ControlElement element,
cg.brush( QColorGroup::Button )); cg.brush( QColorGroup::Button ));
int xp = xpos + checkcol + 1; int xp = xpos + checkcol + 1;
p->fillRect( visualRect( QRect( xp, y, w - checkcol - 1, h ), r ), fill); p->fillRect( visualRect( QRect( xp, y, w - checkcol - 1, h ), r ), fill);
} else if ( checkable ) { // just "checking"... } else if ( checkable ) { // just "checking"...
if ( mi->isChecked() ) { if ( mi->isChecked() ) {
int xp = xpos + windowsItemFrame; drawPrimitive(PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, cg, flags, opt);
SFlags cflags = Style_Default;
if (! dis)
cflags |= Style_Enabled;
if (act)
cflags |= Style_On;
drawPrimitive(PE_CheckMark, p, ceData, elementFlags,
visualRect( QRect(xp, y + windowsItemFrame,
checkcol - 2*windowsItemFrame,
h - 2*windowsItemFrame), r ), cg, cflags);
} }
} }
@ -1042,6 +1076,13 @@ int QWindowsStyle::pixelMetric(PixelMetric metric, QStyleControlElementData ceDa
ret = QMAX( 6, QApplication::globalStrut().width() ); ret = QMAX( 6, QApplication::globalStrut().width() );
break; break;
case PM_MenuIndicatorFrameHBorder:
case PM_MenuIndicatorFrameVBorder:
case PM_MenuIconIndicatorFrameHBorder:
case PM_MenuIconIndicatorFrameVBorder:
ret = windowsItemFrame;
break;
default: default:
ret = QCommonStyle::pixelMetric(metric, ceData, elementFlags, widget); ret = QCommonStyle::pixelMetric(metric, ceData, elementFlags, widget);
break; break;
@ -1965,6 +2006,23 @@ int QWindowsStyle::styleHint( StyleHint hint,
ret = 0; ret = 0;
break; break;
case SH_MenuIndicatorColumnWidth:
{
int maxpmw = opt.maxIconWidth();
bool checkable = ( elementFlags & CEF_IsCheckable );
if ( checkable ) {
// space for the checkmarks
if (use2000style)
maxpmw = QMAX( maxpmw, 20 );
else
maxpmw = QMAX( maxpmw, 12 );
}
ret = maxpmw;
break;
}
default: default:
ret = QCommonStyle::styleHint(hint, ceData, elementFlags, opt, returnData, widget); ret = QCommonStyle::styleHint(hint, ceData, elementFlags, opt, returnData, widget);
break; break;

@ -90,6 +90,20 @@ public:
void setVisible( bool visible ) { is_visible = visible; } void setVisible( bool visible ) { is_visible = visible; }
void setWhatsThis( const QString &text ) { whatsthis_data = text; } void setWhatsThis( const QString &text ) { whatsthis_data = text; }
// Do not use these methods unless you know exactly what you are doing!
void setSeparator( bool separator ) { is_separator = separator; }
void setEnabled( bool enabled ) { is_enabled = enabled; }
void setChecked( bool checked ) { is_checked = checked; }
void setIdent( int identifier ) { ident = identifier; }
void setIconSet( QIconSet* iconset ) { iconset_data = iconset; }
void setPixmap( QPixmap* pixmap ) { pixmap_data = pixmap; }
void setPopup( QPopupMenu* popup ) { popup_menu = popup; }
void setWidget( QWidget* widget ) { widget_item = widget; }
#ifndef QT_NO_ACCEL
void setKey( QKeySequence key ) { accel_key = key; }
#endif
void setSignal( QSignal* signal ) { signal_data = signal; }
private: private:
int ident; // item identifier int ident; // item identifier
QIconSet *iconset_data; // icons QIconSet *iconset_data; // icons

Loading…
Cancel
Save