1/*
2 * This file Copyright (C) Mnemosyne LLC
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2
6 * as published by the Free Software Foundation.
7 *
8 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
9 *
10 * $Id: hig.cc 11092 2010-08-01 20:36:13Z charles $
11 */
12
13#include <iostream>
14
15#include <QCheckBox>
16#include <QGridLayout>
17#include <QHBoxLayout>
18#include <QLabel>
19
20#include "hig.h"
21
22
23HIG :: HIG( QWidget * parent ):
24    QWidget( parent ),
25    myRow( 0 ),
26    myHasTall( false ),
27    myGrid( new QGridLayout( this ) )
28{
29    myGrid->setContentsMargins( PAD_BIG, PAD_BIG, PAD_BIG, PAD_BIG );
30    myGrid->setHorizontalSpacing( PAD_BIG );
31    myGrid->setVerticalSpacing( PAD );
32    myGrid->setColumnStretch ( 1, 1 );
33}
34
35HIG :: ~HIG( )
36{
37    delete myGrid;
38}
39
40/***
41****
42***/
43
44void
45HIG :: addSectionDivider( )
46{
47    QWidget * w = new QWidget( this );
48    myGrid->addWidget( w, myRow, 0, 1, 2 );
49    ++myRow;
50}
51
52void
53HIG :: addSectionTitle( const QString& title )
54{
55    QLabel * label = new QLabel( this );
56    label->setText( title );
57    label->setStyleSheet( "font: bold" );
58    label->setAlignment( Qt::AlignLeft|Qt::AlignVCenter );
59    addSectionTitle( label );
60}
61
62void
63HIG :: addSectionTitle( QWidget * w )
64{
65    myGrid->addWidget( w, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter );
66    ++myRow;
67}
68
69void
70HIG :: addSectionTitle( QLayout * l )
71{
72    myGrid->addLayout( l, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter );
73    ++myRow;
74}
75
76
77QLayout *
78HIG :: addRow( QWidget * w )
79{
80    QHBoxLayout * h = new QHBoxLayout( );
81    h->addSpacing( 18 );
82    h->addWidget( w );
83
84    QLabel * l;
85    if( ( l = qobject_cast<QLabel*>(w) ) )
86      l->setAlignment( Qt::AlignLeft );
87
88    return h;
89}
90
91void
92HIG :: addWideControl( QLayout * l )
93{
94    QHBoxLayout * h = new QHBoxLayout( );
95    h->addSpacing( 18 );
96    h->addLayout( l );
97    myGrid->addLayout( h, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter );
98    ++myRow;
99}
100
101void
102HIG :: addWideControl( QWidget * w )
103{
104    QHBoxLayout * h = new QHBoxLayout( );
105    h->addSpacing( 18 );
106    h->addWidget( w );
107    myGrid->addLayout( h, myRow, 0, 1, 2, Qt::AlignLeft|Qt::AlignVCenter );
108    ++myRow;
109}
110
111QCheckBox*
112HIG :: addWideCheckBox( const QString& text, bool isChecked )
113{
114    QCheckBox * check = new QCheckBox( text, this );
115    check->setChecked( isChecked );
116    addWideControl( check );
117    return check;
118}
119
120void
121HIG :: addLabel( QWidget * w )
122{
123    QHBoxLayout * h = new QHBoxLayout( );
124    h->addSpacing( 18 );
125    h->addWidget( w );
126    myGrid->addLayout( h, myRow, 0, 1, 1, Qt::AlignLeft|Qt::AlignVCenter );
127}
128
129QLabel*
130HIG :: addLabel( const QString& text )
131{
132    QLabel * label = new QLabel( text, this );
133    addLabel( label );
134    return label;
135}
136
137void
138HIG :: addTallLabel( QWidget * w )
139{
140    QHBoxLayout * h = new QHBoxLayout( );
141    h->addSpacing( 18 );
142    h->addWidget( w );
143    myGrid->addLayout( h, myRow, 0, 1, 1, Qt::AlignLeft|Qt::AlignTop );
144}
145
146QLabel*
147HIG :: addTallLabel( const QString& text )
148{
149    QLabel * label = new QLabel( text, this );
150    addTallLabel( label );
151    return label;
152}
153
154void
155HIG :: addControl( QWidget * w )
156{
157    myGrid->addWidget( w, myRow, 1, 1, 1 );
158}
159
160void
161HIG :: addControl( QLayout * l )
162{
163    myGrid->addLayout( l, myRow, 1, 1, 1 );
164}
165
166QLabel *
167HIG :: addRow( const QString& text, QWidget * control, QWidget * buddy )
168{
169    QLabel * label = addLabel( text );
170    addControl( control );
171    label->setBuddy( buddy ? buddy : control );
172    ++myRow;
173    return label;
174}
175
176QLabel *
177HIG :: addTallRow( const QString& text, QWidget * control, QWidget * buddy )
178{
179    QLabel* label = addTallLabel( text );
180    label->setBuddy( buddy ? buddy : control );
181    addControl( control );
182    myHasTall = true;
183    myGrid->setRowStretch ( myRow, 1 );
184    ++myRow;
185    return label;
186}
187
188QLabel *
189HIG :: addRow( const QString& text, QLayout * control, QWidget * buddy )
190{
191    QLabel * label = addLabel( text );
192    addControl( control );
193    if( buddy != 0 )
194        label->setBuddy( buddy );
195    ++myRow;
196    return label;
197}
198
199void
200HIG :: addRow( QWidget * label, QWidget * control, QWidget * buddy )
201{
202    addLabel( label );
203    if( control ) {
204        addControl( control );
205        QLabel * l = qobject_cast<QLabel*>( label );
206        if( l != 0 )
207            l->setBuddy( buddy ? buddy : control );
208    }
209    ++myRow;
210}
211
212void
213HIG :: addRow( QWidget * label, QLayout * control, QWidget * buddy )
214{
215    addLabel( label );
216    if( control ) {
217        addControl( control );
218        QLabel * l = qobject_cast<QLabel*>( label );
219        if( l != 0 && buddy != 0 )
220            l->setBuddy( buddy );
221    }
222    ++myRow;
223}
224
225void
226HIG :: finish( )
227{
228    if( !myHasTall ) {
229        QWidget * w = new QWidget( this );
230        myGrid->addWidget( w, myRow, 0, 1, 2 );
231        myGrid->setRowStretch( myRow, 100 );
232        ++myRow;
233    }
234}
235