diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2024-08-24 20:19:50 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2024-08-29 22:23:35 +0900 |
commit | d35eedcd87d59e716c6d49bbb6b634ef1a7660c5 (patch) | |
tree | 204d752457acf6403c99f3928f02b612ff14d178 /src/styles/tqcompactstyle.cpp | |
parent | ddce1c91f8582885497b463b24bac59f6fdfdf63 (diff) | |
download | tqt3-d35eedcd87d59e716c6d49bbb6b634ef1a7660c5.tar.gz tqt3-d35eedcd87d59e716c6d49bbb6b634ef1a7660c5.zip |
Rename style nt* related files to equivalent tq*
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/styles/tqcompactstyle.cpp')
-rw-r--r-- | src/styles/tqcompactstyle.cpp | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/src/styles/tqcompactstyle.cpp b/src/styles/tqcompactstyle.cpp new file mode 100644 index 000000000..b4c510229 --- /dev/null +++ b/src/styles/tqcompactstyle.cpp @@ -0,0 +1,395 @@ +/**************************************************************************** +** +** Implementation of compact style class +** +** Created : 006231 +** +** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the widgets module of the TQt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free TQt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.TQPL +** included in the packaging of this file. Licensees holding valid TQt +** Commercial licenses may use this file in accordance with the TQt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include "tqcompactstyle.h" + +#if !defined(TQT_NO_STYLE_COMPACT) || defined(QT_PLUGIN) + +#include "tqfontmetrics.h" +#include "tqpalette.h" +#include "tqpainter.h" +#include "ntqdrawutil.h" +#include "tqmenudata.h" +#include "tqpopupmenu.h" + +TQCompactStyle::TQCompactStyle() +: TQWindowsStyle() +{ +} + +/*! \reimp */ +int TQCompactStyle::pixelMetric( PixelMetric metric, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQWidget *widget ) +{ + int ret; + switch ( metric ) { + case PM_ButtonMargin: + ret = 2; + break; + // tws - I added this in to stop this "Windows Scroll behaivor." Remove it + // if you don't want it. + case PM_MaximumDragDistance: + ret = -1; + break; + case PM_MenuIndicatorFrameHBorder: + case PM_MenuIndicatorFrameVBorder: + case PM_MenuIconIndicatorFrameHBorder: + case PM_MenuIconIndicatorFrameVBorder: + ret = 0; + break; + default: + ret = TQWindowsStyle::pixelMetric( metric, ceData, elementFlags, widget ); + break; + } + return ret; +} + +static const int motifItemFrame = 0; // menu item frame width +static const int motifSepHeight = 2; // separator item height +static const int motifItemHMargin = 1; // menu item hor text margin +static const int motifItemVMargin = 2; // menu item ver text margin +static const int motifArrowHMargin = 0; // arrow horizontal margin +static const int motifTabSpacing = 4; // space between text and tab +static const int motifCheckMarkHMargin = 1; // horiz. margins of check mark +static const int windowsRightBorder = 8; // right border on windows +static const int windowsCheckMarkWidth = 2; // checkmarks width on windows + +#if 0 +static int extraPopupMenuItemWidth( bool checkable, int maxpmw, TQMenuItem* mi, const TQFontMetrics& /*fm*/ ) +{ + int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm + + if ( mi->isSeparator() ) + return 10; // arbitrary + else if ( mi->pixmap() ) + w += mi->pixmap()->width(); // pixmap only + + if ( !mi->text().isNull() ) { + if ( mi->text().find('\t') >= 0 ) // string contains tab + w += motifTabSpacing; + } + + if ( maxpmw ) { // we have iconsets + w += maxpmw; + w += 6; // add a little extra border around the iconset + } + + if ( checkable && maxpmw < windowsCheckMarkWidth ) { + w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks + } + + if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) + w += motifCheckMarkHMargin; // add space to separate the columns + + w += windowsRightBorder; // windows has a strange wide border on the right side + + return w; +} + +static int popupMenuItemHeight( bool /*checkable*/, TQMenuItem* mi, const TQFontMetrics& fm ) +{ + int h = 0; + if ( mi->isSeparator() ) // separator height + h = motifSepHeight; + else if ( mi->pixmap() ) // pixmap height + h = mi->pixmap()->height() + 2*motifItemFrame; + else // text height + h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame - 1; + + if ( !mi->isSeparator() && mi->iconSet() != 0 ) { + h = TQMAX( h, mi->iconSet()->pixmap( TQIconSet::Small, TQIconSet::Normal ).height() + 2*motifItemFrame ); + } + if ( mi->custom() ) + h = TQMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; + return h; +} +#endif + +void drawPopupMenuItem( TQPainter*, bool, + int, int, TQMenuItem*, + const TQPalette&, bool, + bool, + int, int, int, int) +{ + +} + +/*! \reimp */ +void TQCompactStyle::drawControl( ControlElement element, TQPainter *p, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQRect &r, + const TQColorGroup &g, SFlags flags, const TQStyleOption& opt, const TQWidget *widget ) +{ + switch ( element ) { + case CE_PopupMenuItem: + { + if ( (elementFlags & CEF_UseGenericParameters) || opt.isDefault()) + break; + + TQMenuItem *mi = opt.menuItem(); + if ( !mi ) + break; + + int tab = opt.tabWidth(); + int maxpmw = opt.maxIconWidth(); + bool dis = !(flags & Style_Enabled); + bool checkable = (elementFlags & CEF_IsCheckable); + bool act = flags & Style_Active; + int x, y, w, h; + r.rect( &x, &y, &w, &h ); + + TQColorGroup itemg = g; + + if ( checkable ) + maxpmw = TQMAX( maxpmw, 8 ); // space for the checkmarks + + int checkcol = maxpmw; + + if ( mi && mi->isSeparator() ) { // draw separator + p->setPen( g.dark() ); + p->drawLine( x, y, x+w, y ); + p->setPen( g.light() ); + p->drawLine( x, y+1, x+w, y+1 ); + return; + } + + TQBrush fill = act? g.brush( TQColorGroup::Highlight ) : + g.brush( TQColorGroup::Button ); + p->fillRect( x, y, w, h, fill); + + if ( !mi ) + return; + + if ( mi->isChecked() ) { + drawPrimitive( PE_MenuItemIndicatorFrame, p, ceData, elementFlags, r, itemg, flags, opt ); + } else if ( !act ) { + p->fillRect(x, y, checkcol , h, + g.brush( TQColorGroup::Button )); + } + + if ( mi->iconSet() ) { // draw iconset + TQIconSet::Mode mode = dis ? TQIconSet::Disabled : TQIconSet::Normal; + if (act && !dis ) + mode = TQIconSet::Active; + TQPixmap pixmap; + if ( checkable && mi->isChecked() ) + pixmap = mi->iconSet()->pixmap( TQIconSet::Small, mode, TQIconSet::On ); + else + pixmap = mi->iconSet()->pixmap( TQIconSet::Small, mode ); + int pixw = pixmap.width(); + int pixh = pixmap.height(); + if ( act && !dis ) { + if ( !mi->isChecked() ) + drawPrimitive( PE_MenuItemIndicatorIconFrame, p, ceData, elementFlags, r, itemg, flags, opt ); + } + TQRect cr( x, y, checkcol, h ); + TQRect pmr( 0, 0, pixw, pixh ); + pmr.moveCenter( cr.center() ); + p->setPen( itemg.text() ); + p->drawPixmap( pmr.topLeft(), pixmap ); + + TQBrush fill = act? g.brush( TQColorGroup::Highlight ) : + g.brush( TQColorGroup::Button ); + p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); + } else if ( checkable ) { // just "checking"... + if ( mi->isChecked() ) { + drawPrimitive( PE_MenuItemIndicatorCheck, p, ceData, elementFlags, r, itemg, flags, opt ); + } + } + + p->setPen( act ? g.highlightedText() : g.buttonText() ); + + TQColor discol; + if ( dis ) { + discol = itemg.text(); + p->setPen( discol ); + } + + int xm = motifItemFrame + checkcol + motifItemHMargin; + + if ( mi->custom() ) { + int m = motifItemVMargin; + p->save(); + if ( dis && !act ) { + p->setPen( g.light() ); + mi->custom()->paint( p, itemg, act, !dis, + x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); + p->setPen( discol ); + } + mi->custom()->paint( p, itemg, act, !dis, + x+xm, y+m, w-xm-tab+1, h-2*m ); + p->restore(); + } + TQString s = mi->text(); + if ( !s.isNull() ) { // draw text + int t = s.find( '\t' ); + int m = motifItemVMargin; + const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; + if ( t >= 0 ) { // draw tab text + if ( dis && !act ) { + p->setPen( g.light() ); + p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, + y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); + p->setPen( discol ); + } + p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, + y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); + s = s.left( t ); + } + if ( dis && !act ) { + p->setPen( g.light() ); + p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t ); + p->setPen( discol ); + } + p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); + } else if ( mi->pixmap() ) { // draw pixmap + TQPixmap *pixmap = mi->pixmap(); + if ( pixmap->depth() == 1 ) + p->setBackgroundMode( OpaqueMode ); + p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); + if ( pixmap->depth() == 1 ) + p->setBackgroundMode( TransparentMode ); + } + if ( mi->popup() ) { // draw sub menu arrow + int dim = (h-2*motifItemFrame) / 2; + if ( act ) { + if ( !dis ) + discol = white; + TQColorGroup g2( discol, g.highlight(), + white, white, + dis ? discol : white, + discol, white ); + drawPrimitive(PE_ArrowRight, p, ceData, elementFlags, TQRect(x+w - motifArrowHMargin - motifItemFrame - dim, y + h / 2 - dim / 2, dim, dim), + g2, Style_Enabled); + } else { + drawPrimitive(PE_ArrowRight, p, ceData, elementFlags, TQRect(x+w - motifArrowHMargin - motifItemFrame - dim, y + h / 2 - dim / 2, dim, dim), + g, !dis ? Style_Enabled : Style_Default); + } + } + } + break; + + default: + TQWindowsStyle::drawControl( element, p, ceData, elementFlags, r, g, flags, opt, widget ); + break; + } +} + +/*! \reimp */ +void TQCompactStyle::drawPrimitive( PrimitiveElement pe, + TQPainter *p, + const TQStyleControlElementData &ceData, + ControlElementFlags elementFlags, + const TQRect &r, + const TQColorGroup &cg, + SFlags flags, + const TQStyleOption& 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( TQColorGroup::Button ) ); + } else { + qDrawShadePanel( p, x, y, checkcol, h, cg, TRUE, 1, &cg.brush( TQColorGroup::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( TQColorGroup::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, TQRect(x + motifItemFrame + 2, y + motifItemFrame, mw, mh), cg, cflags, opt ); + } + break; + default: + break; + } +} + +/*! \reimp */ +int TQCompactStyle::styleHint(StyleHint sh, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, const TQStyleOption &opt, TQStyleHintReturn *returnData, const TQWidget *w) const +{ + int ret; + + switch (sh) { + case SH_MenuIndicatorColumnWidth: + { + int maxpmw = opt.maxIconWidth(); + bool checkable = (elementFlags & CEF_IsCheckable); + + if ( checkable ) + maxpmw = TQMAX( maxpmw, 8 ); // space for the checkmarks + + ret = maxpmw; + } + break; + default: + ret = TQWindowsStyle::styleHint(sh, ceData, elementFlags, opt, returnData, w); + break; + } + + return ret; +} + +#endif |