Improve the layout of XineConfigDialog

Properly display the description of each of the settings.  Also,
reorganize the layout so that it uses layouts rather than VBox/HBox.

The TabWidget class has been removed in favour of the standard
TQTabWidget class, as the different behaviour doesn't make a notable
visual difference.

Signed-off-by: mio <stigma@disroot.org>
pull/18/head
mio 3 months ago committed by TDE Gitea
parent b62e6bc2b9
commit 11c0638baf

@ -38,22 +38,6 @@ namespace Codeine
}
}
class TabWidget : public TQTabWidget
{
public:
TabWidget( TQWidget *parent ) : TQTabWidget( parent ) {}
virtual TQSize sizeHint() const
{
// TQt gives a stupid default sizeHint for this widget
return TQSize(
reinterpret_cast<TQWidget*>(tabBar())->sizeHint().width() + 5,
TQTabWidget::sizeHint().height() );
}
};
///@class XineConfigDialog
XineConfigDialog::XineConfigDialog( xine_t *xine, TQWidget *parent )
@ -68,32 +52,26 @@ XineConfigDialog::XineConfigDialog( xine_t *xine, TQWidget *parent )
DEBUG_BLOCK
s_instance = this;
const int METRIC = fontMetrics().width( 'x' );
const int METRIC_3B2 = (3*METRIC)/2;
TQVBox *box = new TQVBox( this );
box->setSpacing( METRIC );
setMainWidget( box );
TQWidget *page = new TQWidget(this);
setMainWidget(page);
TQVBoxLayout *topLayout = new TQVBoxLayout(page, 0, spacingHint());
{
TQHBox *hbox = new TQHBox( box );
hbox->setSpacing( METRIC_3B2 );
hbox->setMargin( METRIC_3B2 );
TQPixmap info = kapp->iconLoader()->loadIcon( "messagebox_info", TDEIcon::NoGroup, TDEIcon::SizeMedium, TDEIcon::DefaultState, nullptr, true );
TQLabel *label = new TQLabel( hbox );
label->setPixmap( info );
label->setSizePolicy( TQSizePolicy::Maximum, TQSizePolicy::Maximum );
label = new TQLabel( i18n(
"xine's defaults are usually sensible and should not require modification. "
"However, full configurability is provided for your pleasure ;-)." ), hbox );
label->setAlignment( TQLabel::WordBreak | TQLabel::AlignVCenter );
TQHBoxLayout *infoLayout = new TQHBoxLayout(topLayout, spacingHint());
TQPixmap info = kapp->iconLoader()->loadIcon("messagebox_info", TDEIcon::NoGroup, TDEIcon::SizeMedium, TDEIcon::DefaultState, nullptr, true);
TQLabel *label = new TQLabel(page);
label->setPixmap(info);
label->setSizePolicy(TQSizePolicy::Maximum, TQSizePolicy::Maximum);
infoLayout->addWidget(label);
label = new TQLabel(i18n(
"Xine's defaults are usually sensible and should not require modification. "
"However, full configurability is provided for your pleasure ;-)"), page);
label->setAlignment(TQLabel::WordBreak | TQLabel::AlignVCenter);
infoLayout->addWidget(label);
}
//FIXME after many hours I have discovered that this
// widget somehow sets the minSize of this widget to 0,0
// whenever you resize the widget. WTF?
TabWidget *tabs = new TabWidget( box );
TQTabWidget *tabs = new TQTabWidget(page);
class XineConfigEntryIterator {
xine_t *m_xine;
@ -105,53 +83,51 @@ XineConfigDialog::XineConfigDialog( xine_t *xine, TQWidget *parent )
inline xine_cfg_entry_t *operator*() { return m_valid ? &m_entry : nullptr; }
};
TQGridLayout *grid = nullptr;
TQString currentPage;
TQString currentPageName;
TQScrollView *view = nullptr;
parent = nullptr;
TQWidget *scrollWidget = nullptr;
for( XineConfigEntryIterator it( m_xine ); *it; ++it )
for (XineConfigEntryIterator it(m_xine); *it; ++it)
{
const TQString pageName = TQString::fromUtf8( (*it)->key ).section( '.', 0, 0 );
const TQString pageName = TQString::fromUtf8((*it)->key).section('.', 0, 0);
if( (TQStringList() << "ui" << "effects" << "subtitles").contains( pageName ) )
if ((TQStringList() << "ui" << "effects" << "subtitles").contains(pageName)) {
continue;
}
if( pageName != currentPage ) {
if( view )
//NOTE won't be executed for last tab
view->viewport()->setMinimumWidth( grid->sizeHint().width() ); // seems necessary
TQString pageTitle = pageName;
pageTitle[0] = pageTitle[0].upper();
tabs->addTab( view = new TQScrollView, pageTitle );
view->setResizePolicy( TQScrollView::AutoOneFit );
view->setHScrollBarMode( TQScrollView::AlwaysOff );
view->setFrameShape( TQFrame::NoFrame );
view->addChild( parent = new TQWidget( view->viewport() ) );
TQBoxLayout *layout = new TQVBoxLayout( parent, /*margin*/METRIC_3B2, /*spacing*/0 );
parent = new TQFrame( parent );
static_cast<TQFrame*>(parent)->setFrameStyle( TQFrame::Panel | TQFrame::Raised );
static_cast<TQFrame*>(parent)->setLineWidth( 2 );
grid = new TQGridLayout( parent, /*rows*/0, /*cols*/2, /*margin*/20, /*spacing*/int(METRIC*2.5) );
grid->setColStretch( 0, 3 );
grid->setColStretch( 1, 2 );
layout->addWidget( parent, 0 );
layout->addStretch( 1 );
currentPage = pageName;
if (pageName != currentPageName) {
currentPageName = pageName;
TQString tabTitle = pageName;
tabTitle[0] = tabTitle[0].upper();
view = new TQScrollView(page);
view->setHScrollBarMode(TQScrollView::ScrollBarMode::AlwaysOff);
// TODO: It would be nice to leave VScrollBarMode on Auto, but
// there seems to be an issue when calculating the layout size.
// https://mirror.git.trinitydesktop.org/gitea/TDE/codeine/pulls/18
view->setVScrollBarMode(TQScrollView::ScrollBarMode::AlwaysOn);
view->setResizePolicy(TQScrollView::AutoOneFit);
view->setFrameShape(TQFrame::NoFrame);
tabs->addTab(view, tabTitle);
scrollWidget = new TQWidget(view->viewport());
view->addChild(scrollWidget);
grid = new TQGridLayout(scrollWidget, 0, 2, marginHint(), spacingHint());
grid->setColStretch(0, 3);
grid->setColStretch(1, 2);
grid->setAlignment(TQt::AlignTop | TQt::AlignAuto);
}
m_entrys.append( new XineConfigEntry( parent, grid, *it ) );
m_entrys.append(new XineConfigEntry(scrollWidget, grid, *it));
}
//finishing touches
m_entrys.setAutoDelete( true );
// finishing touches
m_entrys.setAutoDelete(true);
topLayout->addWidget(tabs, 1);
enableButton( Ok, false );
enableButton( User1, false );
@ -261,7 +237,7 @@ XineConfigEntry::XineConfigEntry( TQWidget *parent, TQGridLayout *grid, xine_cfg
TQToolTip::add( w, tip );
TQToolTip::add( description, tip );
// grid->addWidget( description, row, 0, TQt::AlignVCenter );
grid->addWidget( description, row, 0, TQt::AlignVCenter );
grid->addWidget( w, row, 1, TQt::AlignTop );
}

Loading…
Cancel
Save