1021d7776a60e126c3893d4cf934725d15f5854a
[qtmeetings] / src / UserInterface / Views / SettingsView.cpp
1 #include "SettingsView.h"
2
3 #include <QTabWidget>
4 #include <QVBoxLayout>
5 #include <QHBoxLayout>
6 #include <QPushButton>
7 #include <QGroupBox>
8 #include <QLabel>
9 #include <QLineEdit>
10 #include <QRadioButton>
11 #include <QTimeEdit>
12 #include <QListView>
13 #include <QList>
14 #include <QTime>
15 #include <QIntValidator>
16 #include <QGridLayout>
17 #include <QCheckBox>
18 #include "Configuration.h"
19 #include "Room.h"
20 #include "DisplaySettings.h"
21 #include "ConnectionSettings.h"
22 #include "StartupSettings.h"
23
24 #include <QtDebug>
25
26 SettingsView::SettingsView( QWidget *aParent ) :
27                 ViewBase( ViewBase::NormalView, aParent )
28 {
29         qDebug() << "SettingsView::ctor invoked";
30         // Prepare the tabbed view
31         iTabWidget = new QTabWidget;
32
33         iSettingsTab = initSettingsTab();
34         iWeekViewTab = initWeekViewTab();
35         iResourcesTab = initResourcesTab();
36         iKioskModeTab = initKioskModeTab();
37
38         iTabWidget->addTab( iSettingsTab, tr( "Settings" ) );
39         iTabWidget->addTab( iWeekViewTab, tr( "Weekly View" ) );
40         iTabWidget->addTab( iResourcesTab, tr( "Resources" ) );
41         iTabWidget->addTab( iKioskModeTab, tr( "KIOSK Mode" ) );
42
43         // Prepare the buttons and button layout
44         QHBoxLayout *buttonLayout = new QHBoxLayout;
45         iOkButton = new QPushButton;
46         iOkButton->setText( tr( "OK" ) );
47         buttonLayout->addWidget( iOkButton );
48
49         // Handle the main layout
50         QVBoxLayout *mainLayout = new QVBoxLayout;
51         mainLayout->addWidget( iTabWidget );
52         mainLayout->addLayout( buttonLayout );
53
54         setLayout( mainLayout );
55
56         // Handle component connections
57         connect( iOkButton, SIGNAL( clicked() ), this, SLOT( handleOkClicked() ) );
58 }
59
60 SettingsView::~SettingsView()
61 {
62         if ( iTabWidget != 0 )
63         {
64                 delete iTabWidget;
65                 iTabWidget = 0;
66         }
67         if ( iOkButton != 0 )
68         {
69                 delete iOkButton;
70                 iOkButton = 0;
71         }
72         if ( iSettingsTab != 0 )
73         {
74                 delete iSettingsTab;
75                 iSettingsTab = 0;
76         }
77         if ( iWeekViewTab != 0 )
78         {
79                 delete iWeekViewTab;
80                 iWeekViewTab = 0;
81         }
82         if ( iResourcesTab != 0 )
83         {
84                 delete iResourcesTab;
85                 iResourcesTab = 0;
86         }
87         if ( iKioskModeTab != 0 )
88         {
89                 delete iKioskModeTab;
90                 iKioskModeTab = 0;
91         }
92         if ( iUserName != 0 )
93         {
94                 delete iUserName;
95                 iUserName = 0;
96         }
97         if ( iPassword != 0 )
98         {
99                 delete iPassword;
100                 iPassword = 0;
101         }
102         if ( iServerAddress != 0 )
103         {
104                 delete iServerAddress;
105                 iServerAddress = 0;
106         }
107         if ( iDayStartTime != 0 )
108         {
109                 delete iDayStartTime;
110                 iDayStartTime = 0;
111         }
112         if ( iDayEndTime != 0 )
113         {
114                 delete iDayEndTime;
115                 iDayEndTime = 0;
116         }
117         if ( iFiveDays != 0 )
118         {
119                 delete iFiveDays;
120                 iFiveDays = 0;
121         }
122         if ( iSevenDays != 0 )
123         {
124                 delete iSevenDays;
125                 iSevenDays = 0;
126         }
127         if ( iRefreshInterval != 0 )
128         {
129                 delete iRefreshInterval;
130                 iRefreshInterval = 0;
131         }
132         if ( iPowerSaveEnabled != 0 )
133         {
134                 delete iPowerSaveEnabled;
135                 iPowerSaveEnabled = 0;
136         }
137         if ( iPowerSaveStartTime != 0 )
138         {
139                 delete iPowerSaveStartTime;
140                 iPowerSaveStartTime = 0;
141         }
142         if ( iPowerSaveEndTime != 0 )
143         {
144                 delete iPowerSaveEndTime;
145                 iPowerSaveEndTime = 0;
146         }
147 }
148
149 QWidget *SettingsView::initSettingsTab()
150 {
151         QWidget *widget = new QWidget( iTabWidget );
152
153         // Prepare the widgets that are member variables
154         iUserName = new QLineEdit;
155         iPassword = new QLineEdit;
156         iPassword->setEchoMode( QLineEdit::Password );
157         iServerAddress = new QLineEdit;
158         iRefreshInterval = new QLineEdit;
159         QIntValidator *qiv = new QIntValidator( 0 );
160         iRefreshInterval->setValidator( qiv );
161
162         iUserName->setText( Configuration::instance()->connectionSettings()->username() );
163         iPassword->setText( Configuration::instance()->connectionSettings()->password() );
164         iServerAddress->setText( Configuration::instance()->connectionSettings()->serverUrl().toString() );
165         QString refreshIntervalStr;
166         refreshIntervalStr.setNum( Configuration::instance()->connectionSettings()->refreshInterval() );
167         iRefreshInterval->setText( refreshIntervalStr );
168
169         // Create the group boxes
170         QGroupBox *userInformationGroup = new QGroupBox( tr( "User Information" ) );
171         QGroupBox *serverInformationGroup = new QGroupBox( tr( "Server Information" ) );
172
173         // Prepare the user infromation group box
174         QGridLayout *ugl = new QGridLayout;
175         QLabel *userNameLabel = new QLabel( tr( "Username:" ) );
176         QLabel *passwordLabel = new QLabel( tr( "Password:" ) );
177
178         ugl->addWidget( userNameLabel, 0, 0 );
179         ugl->addWidget( iUserName, 0, 1 );
180         ugl->addWidget( passwordLabel, 1, 0 );
181         ugl->addWidget( iPassword, 1, 1 );
182
183         userInformationGroup->setLayout( ugl );
184
185         // Prepare the server information group box
186         QGridLayout *sgl = new QGridLayout;
187         QLabel *serverURLLabel = new QLabel( tr( "Server URL:" ) );
188         QLabel *refreshLabel = new QLabel( tr( "Refresh interval" ) );
189         QLabel *secondsLabel = new QLabel( tr( "seconds" ) );
190
191         sgl->addWidget( serverURLLabel, 0, 0, 1, 2 );
192         sgl->addWidget( iServerAddress, 0, 1 );
193         sgl->addWidget( refreshLabel, 1, 0 );
194         sgl->addWidget( iRefreshInterval, 1, 1 );
195         sgl->addWidget( secondsLabel, 1, 2 );
196
197         serverInformationGroup->setLayout( sgl );
198
199         // Prepare and set the main layout
200         QVBoxLayout *mainLayout = new QVBoxLayout;
201         mainLayout->addWidget( userInformationGroup );
202         mainLayout->addWidget( serverInformationGroup );
203
204         widget->setLayout( mainLayout );
205
206         return widget;
207 }
208
209 QWidget *SettingsView::initWeekViewTab()
210 {
211         QWidget *widget = new QWidget( iTabWidget );
212
213         // Prepare the member variable widgets
214         iFiveDays = new QRadioButton( tr( "5" ) );
215         iSevenDays = new QRadioButton( tr( "7" ) );
216         iDayStartTime = new QTimeEdit;
217         iDayEndTime = new QTimeEdit;
218
219         if ( Configuration::instance()->displaySettings()->daysInSchedule() == DisplaySettings::WeekdaysInSchedule )
220         {
221                 iFiveDays->setChecked( true );
222                 iSevenDays->setChecked( false );
223         }
224         else
225         {
226                 iFiveDays->setChecked( false );
227                 iSevenDays->setChecked( true );
228         }
229         iDayStartTime->setTime( Configuration::instance()->displaySettings()->dayStartsAt() );
230         iDayEndTime->setTime( Configuration::instance()->displaySettings()->dayEndsAt() );
231
232         // Create group box and the grid layout
233         QGroupBox *weeklyInformation = new QGroupBox( tr( "Weekly View" ) );
234         QGridLayout *wgl = new QGridLayout;
235
236         // Prepare the number of days row
237         QLabel *daysLabel = new QLabel( tr( "Days:" ) );
238
239         wgl->addWidget( daysLabel, 0, 0 );
240         wgl->addWidget( iFiveDays, 0, 1 );
241         wgl->addWidget( iSevenDays, 0, 2 );
242
243         // Preare the day starts row
244         QLabel *dayStartsLabel = new QLabel( tr( "Day starts:" ) );
245
246         wgl->addWidget( dayStartsLabel, 1, 0 );
247         wgl->addWidget( iDayStartTime, 1, 1, 1, 2 );
248
249         // Prepare the day ends row
250         QLabel *dayEndsLabel = new QLabel( tr( "Day ends:" ) );
251
252         wgl->addWidget( dayEndsLabel, 2, 0 );
253         wgl->addWidget( iDayEndTime, 2, 1, 1, 2 );
254
255         weeklyInformation->setLayout( wgl );
256
257         QVBoxLayout *mainLayout = new QVBoxLayout;
258         mainLayout->addWidget( weeklyInformation );
259
260         widget->setLayout( mainLayout );
261
262         return widget;
263 }
264
265 QWidget *SettingsView::initResourcesTab()
266 {
267         QWidget *widget = new QWidget( iTabWidget );
268
269         QHBoxLayout *mainLayout = new QHBoxLayout;
270
271         // Available resources
272         QVBoxLayout *availableResourcesLayout = new QVBoxLayout;
273         QLabel *availableResourcesLabel = new QLabel( tr( "Available Resources:" ) );
274         QListView *availableResourcesList = new QListView;
275
276         // Fill the list
277         QList<Room*> rooms = Configuration::instance()->rooms();
278         for ( int i = 0; i < rooms.count(); i++ )
279         {
280                 Room *tmp_room = ( Room * ) rooms.at( i );
281                 qDebug() << "Room: " << tmp_room->name();
282         }
283
284         availableResourcesLayout->addWidget( availableResourcesLabel );
285         availableResourcesLayout->addWidget( availableResourcesList );
286
287         // Selected resources
288         QVBoxLayout *selectedResourcesLayout = new QVBoxLayout;
289         QLabel *selectedResourcesLabel = new QLabel( tr( "Selected Resources:" ) );
290         QListView *selectedResourcesList = new QListView;
291
292         selectedResourcesLayout->addWidget( selectedResourcesLabel );
293         selectedResourcesLayout->addWidget( selectedResourcesList );
294
295         // Button lauout
296         QVBoxLayout *controlButtonsLayout = new QVBoxLayout;
297         QPushButton *addButton = new QPushButton( tr( "->" ) );
298         QPushButton *removeButton = new QPushButton( tr( "<-" ) );
299         controlButtonsLayout->addWidget( addButton );
300         controlButtonsLayout->addWidget( removeButton );
301
302         // Prepare main layout
303         mainLayout->addLayout( availableResourcesLayout );
304         mainLayout->addLayout( controlButtonsLayout );
305         mainLayout->addLayout( selectedResourcesLayout );
306
307         widget->setLayout( mainLayout );
308
309         return widget;
310 }
311
312 QWidget *SettingsView::initKioskModeTab()
313 {
314         QWidget *widget = new QWidget( iTabWidget );
315
316         // Prepare member variable widgets
317         iPowerSaveEnabled = new QCheckBox( tr( "Power save enabled" ) );
318         iPowerSaveStartTime = new QTimeEdit;
319         iPowerSaveEndTime = new QTimeEdit;
320
321         if ( Configuration::instance()->startupSettings()->isPowersavingEnabled() )
322         {
323                 iPowerSaveEnabled->setChecked( true );
324         }
325         else
326         {
327                 iPowerSaveEnabled->setChecked( false );
328         }
329         iPowerSaveStartTime->setTime( Configuration::instance()->startupSettings()->turnOnAt() );
330         iPowerSaveEndTime->setTime( Configuration::instance()->startupSettings()->turnOffAt() );
331
332         // Prepare the admin password box
333         QGroupBox *adminPasswordGroup = new QGroupBox( tr( "Admin Password" ) );
334         QLabel *oldPwdLabel = new QLabel( tr( "Old password:" ) );
335         QLabel *newPwdLabel = new QLabel( tr( "New password:" ) );
336         QLabel *confirmPwdLabel = new QLabel( tr( "Confirm password:" ) );
337         QPushButton *applyPwdButton = new QPushButton( tr( "Apply" ) );
338
339         QLineEdit *oldPwdEdit = new QLineEdit;
340         QLineEdit *newPwdEdit = new QLineEdit;
341         QLineEdit *confirmPwdEdit = new QLineEdit;
342
343         oldPwdEdit->setEchoMode( QLineEdit::Password );
344         newPwdEdit->setEchoMode( QLineEdit::Password );
345         confirmPwdEdit->setEchoMode( QLineEdit::Password );
346
347         QGridLayout *agl = new QGridLayout;
348
349         agl->addWidget( oldPwdLabel, 0, 0 );
350         agl->addWidget( oldPwdEdit, 0, 1 );
351         agl->addWidget( newPwdLabel, 1, 0 );
352         agl->addWidget( newPwdEdit, 1, 1 );
353         agl->addWidget( confirmPwdLabel, 2, 0 );
354         agl->addWidget( confirmPwdEdit, 2, 1 );
355         agl->addWidget( applyPwdButton, 3, 0, 1, 2, Qt::AlignRight );
356
357         adminPasswordGroup->setLayout( agl );
358
359         // Prepare the power save options
360         QGroupBox *powerSaveGroup = new QGroupBox( tr( "Power Save" ) );
361         QLabel *switchedOnLabel = new QLabel( tr( "Switched on from:" ) );
362         QLabel *toLabel = new QLabel( tr( "to" ) );
363         QGridLayout *psgl = new QGridLayout;
364
365         psgl->addWidget( iPowerSaveEnabled, 0, 0, 1, 4, Qt::AlignLeft );
366         psgl->addWidget( switchedOnLabel, 1, 0 );
367         psgl->addWidget( iPowerSaveStartTime, 1, 1 );
368         psgl->addWidget( toLabel, 1, 2 );
369         psgl->addWidget( iPowerSaveEndTime, 1, 3 );
370
371         powerSaveGroup->setLayout( psgl );
372
373         // Prepare the main layout
374         QVBoxLayout *mainLayout = new QVBoxLayout;
375         mainLayout->addWidget( adminPasswordGroup );
376         mainLayout->addWidget( powerSaveGroup );
377
378         widget->setLayout( mainLayout );
379
380         return widget;
381 }
382
383 void SettingsView::handleOkClicked()
384 {
385         qDebug() << "[SettingsView::okClicked] <Invoked>";
386
387         // Collect the configration data
388         QTime calendarStart = iDayStartTime->time();
389         QTime calendarEnd = iDayEndTime->time();
390         QTime powerSaveStart = iPowerSaveStartTime->time();
391         QTime powerSaveEnd = iPowerSaveEndTime->time();
392
393         QString userName = iUserName->text();
394         QString password = iPassword->text();
395         QString serverAddress = iServerAddress->text();
396         QString refreshInterval = iRefreshInterval->text();
397
398         bool fiveDays = iFiveDays->isChecked();
399         bool sevenDays = iSevenDays->isChecked();
400         bool powerSaveEnabled = iPowerSaveEnabled->isChecked();
401
402         // TODO : Set the values to configuration and save it
403         
404         // Emit the signal to notify that ok is pressed and data is saved.
405         emit okClicked();
406 }
407
408 void SettingsView::viewResized(const QSize &newSize, const QSize &oldSize)
409 {
410         if ( oldSize.height() > newSize.height() )
411         {
412                 // Get the button's height and add that to the new size so that
413                 // the ok button is hidden under the keyboard.
414                 size().rheight() += iOkButton->size().height();
415         }
416 }