1 #include "SettingsView.h"
10 #include <QRadioButton>
15 #include <QIntValidator>
16 #include <QGridLayout>
18 #include "Configuration.h"
20 #include "DisplaySettings.h"
21 #include "ConnectionSettings.h"
22 #include "StartupSettings.h"
26 SettingsView::SettingsView( QWidget *aParent ) :
27 ViewBase( ViewBase::NormalView, aParent )
29 qDebug() << "SettingsView::ctor invoked";
30 // Prepare the tabbed view
31 iTabWidget = new QTabWidget;
33 iSettingsTab = initSettingsTab();
34 iWeekViewTab = initWeekViewTab();
35 iResourcesTab = initResourcesTab();
36 iKioskModeTab = initKioskModeTab();
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" ) );
43 // Prepare the buttons and button layout
44 QHBoxLayout *buttonLayout = new QHBoxLayout;
45 iOkButton = new QPushButton;
46 iOkButton->setText( tr( "OK" ) );
47 iCancelButton = new QPushButton;
48 iCancelButton->setText( tr( "Cancel" ) );
49 buttonLayout->addWidget( iOkButton );
50 buttonLayout->addWidget( iCancelButton );
52 // Handle the main layout
53 QVBoxLayout *mainLayout = new QVBoxLayout;
54 mainLayout->addWidget( iTabWidget );
55 mainLayout->addLayout( buttonLayout );
57 setLayout( mainLayout );
59 // Handle component connections
60 connect( iOkButton, SIGNAL( clicked() ), this, SLOT( handleOkClicked() ) );
61 connect( iCancelButton, SIGNAL( clicked() ), this, SLOT( cancelClicked() ) );
64 SettingsView::~SettingsView()
66 if ( iTabWidget != 0 )
76 if ( iCancelButton != 0 )
81 if ( iSettingsTab != 0 )
86 if ( iWeekViewTab != 0 )
91 if ( iResourcesTab != 0 )
96 if ( iKioskModeTab != 0 )
101 if ( iUserName != 0 )
106 if ( iPassword != 0 )
111 if ( iServerAddress != 0 )
113 delete iServerAddress;
116 if ( iDayStartTime != 0 )
118 delete iDayStartTime;
121 if ( iDayEndTime != 0 )
126 if ( iFiveDays != 0 )
131 if ( iSevenDays != 0 )
136 if ( iRefreshInterval != 0 )
138 delete iRefreshInterval;
139 iRefreshInterval = 0;
141 if ( iPowerSaveEnabled != 0 )
143 delete iPowerSaveEnabled;
144 iPowerSaveEnabled = 0;
146 if ( iPowerSaveStartTime != 0 )
148 delete iPowerSaveStartTime;
149 iPowerSaveStartTime = 0;
151 if ( iPowerSaveEndTime != 0 )
153 delete iPowerSaveEndTime;
154 iPowerSaveEndTime = 0;
158 QWidget *SettingsView::initSettingsTab()
160 QWidget *widget = new QWidget( iTabWidget );
162 // Prepare the widgets that are member variables
163 iUserName = new QLineEdit;
164 iPassword = new QLineEdit;
165 iPassword->setEchoMode( QLineEdit::Password );
166 iServerAddress = new QLineEdit;
167 iRefreshInterval = new QLineEdit;
168 QIntValidator *qiv = new QIntValidator( 0 );
169 iRefreshInterval->setValidator( qiv );
171 iUserName->setText( Configuration::instance()->connectionSettings()->username() );
172 iPassword->setText( Configuration::instance()->connectionSettings()->password() );
173 iServerAddress->setText( Configuration::instance()->connectionSettings()->serverUrl().toString() );
174 QString refreshIntervalStr;
175 refreshIntervalStr.setNum( Configuration::instance()->connectionSettings()->refreshInterval() );
176 iRefreshInterval->setText( refreshIntervalStr );
178 // Create the group boxes
179 QGroupBox *userInformationGroup = new QGroupBox( tr( "User Information" ) );
180 QGroupBox *serverInformationGroup = new QGroupBox( tr( "Server Information" ) );
182 // Prepare the user infromation group box
183 QGridLayout *ugl = new QGridLayout;
184 QLabel *userNameLabel = new QLabel( tr( "Username:" ) );
185 QLabel *passwordLabel = new QLabel( tr( "Password:" ) );
187 ugl->addWidget( userNameLabel, 0, 0 );
188 ugl->addWidget( iUserName, 0, 1 );
189 ugl->addWidget( passwordLabel, 1, 0 );
190 ugl->addWidget( iPassword, 1, 1 );
192 userInformationGroup->setLayout( ugl );
194 // Prepare the server information group box
195 QGridLayout *sgl = new QGridLayout;
196 QLabel *serverURLLabel = new QLabel( tr( "Server URL:" ) );
197 QLabel *refreshLabel = new QLabel( tr( "Refresh interval" ) );
198 QLabel *secondsLabel = new QLabel( tr( "seconds" ) );
200 sgl->addWidget( serverURLLabel, 0, 0, 1, 2 );
201 sgl->addWidget( iServerAddress, 0, 1 );
202 sgl->addWidget( refreshLabel, 1, 0 );
203 sgl->addWidget( iRefreshInterval, 1, 1 );
204 sgl->addWidget( secondsLabel, 1, 2 );
206 serverInformationGroup->setLayout( sgl );
208 // Prepare and set the main layout
209 QVBoxLayout *mainLayout = new QVBoxLayout;
210 mainLayout->addWidget( userInformationGroup );
211 mainLayout->addWidget( serverInformationGroup );
213 widget->setLayout( mainLayout );
218 QWidget *SettingsView::initWeekViewTab()
220 QWidget *widget = new QWidget( iTabWidget );
222 // Prepare the member variable widgets
223 iFiveDays = new QRadioButton( tr( "5" ) );
224 iSevenDays = new QRadioButton( tr( "7" ) );
225 iDayStartTime = new QTimeEdit;
226 iDayEndTime = new QTimeEdit;
228 if ( Configuration::instance()->displaySettings()->daysInSchedule() == DisplaySettings::WeekdaysInSchedule )
230 iFiveDays->setChecked( true );
231 iSevenDays->setChecked( false );
235 iFiveDays->setChecked( false );
236 iSevenDays->setChecked( true );
238 iDayStartTime->setTime( Configuration::instance()->displaySettings()->dayStartsAt() );
239 iDayEndTime->setTime( Configuration::instance()->displaySettings()->dayEndsAt() );
241 // Create group box and the grid layout
242 QGroupBox *weeklyInformation = new QGroupBox( tr( "Weekly View" ) );
243 QGridLayout *wgl = new QGridLayout;
245 // Prepare the number of days row
246 QLabel *daysLabel = new QLabel( tr( "Days:" ) );
248 wgl->addWidget( daysLabel, 0, 0 );
249 wgl->addWidget( iFiveDays, 0, 1 );
250 wgl->addWidget( iSevenDays, 0, 2 );
252 // Preare the day starts row
253 QLabel *dayStartsLabel = new QLabel( tr( "Day starts:" ) );
255 wgl->addWidget( dayStartsLabel, 1, 0 );
256 wgl->addWidget( iDayStartTime, 1, 1, 1, 2 );
258 // Prepare the day ends row
259 QLabel *dayEndsLabel = new QLabel( tr( "Day ends:" ) );
261 wgl->addWidget( dayEndsLabel, 2, 0 );
262 wgl->addWidget( iDayEndTime, 2, 1, 1, 2 );
264 weeklyInformation->setLayout( wgl );
266 QVBoxLayout *mainLayout = new QVBoxLayout;
267 mainLayout->addWidget( weeklyInformation );
269 widget->setLayout( mainLayout );
274 QWidget *SettingsView::initResourcesTab()
276 QWidget *widget = new QWidget( iTabWidget );
278 QHBoxLayout *mainLayout = new QHBoxLayout;
280 // Available resources
281 QVBoxLayout *availableResourcesLayout = new QVBoxLayout;
282 QLabel *availableResourcesLabel = new QLabel( tr( "Available Resources:" ) );
283 QListView *availableResourcesList = new QListView;
286 QList<Room*> rooms = Configuration::instance()->rooms();
287 for ( int i = 0; i < rooms.count(); i++ )
289 Room *tmp_room = ( Room * ) rooms.at( i );
290 qDebug() << "Room: " << tmp_room->name();
293 availableResourcesLayout->addWidget( availableResourcesLabel );
294 availableResourcesLayout->addWidget( availableResourcesList );
296 // Selected resources
297 QVBoxLayout *selectedResourcesLayout = new QVBoxLayout;
298 QLabel *selectedResourcesLabel = new QLabel( tr( "Selected Resources:" ) );
299 QListView *selectedResourcesList = new QListView;
301 selectedResourcesLayout->addWidget( selectedResourcesLabel );
302 selectedResourcesLayout->addWidget( selectedResourcesList );
305 QVBoxLayout *controlButtonsLayout = new QVBoxLayout;
306 QPushButton *addButton = new QPushButton( tr( "->" ) );
307 QPushButton *removeButton = new QPushButton( tr( "<-" ) );
308 controlButtonsLayout->addWidget( addButton );
309 controlButtonsLayout->addWidget( removeButton );
311 // Prepare main layout
312 mainLayout->addLayout( availableResourcesLayout );
313 mainLayout->addLayout( controlButtonsLayout );
314 mainLayout->addLayout( selectedResourcesLayout );
316 widget->setLayout( mainLayout );
321 QWidget *SettingsView::initKioskModeTab()
323 QWidget *widget = new QWidget( iTabWidget );
325 // Prepare member variable widgets
326 iPowerSaveEnabled = new QCheckBox( tr( "Power save enabled" ) );
327 iPowerSaveStartTime = new QTimeEdit;
328 iPowerSaveEndTime = new QTimeEdit;
330 if ( Configuration::instance()->startupSettings()->isPowersavingEnabled() )
332 iPowerSaveEnabled->setChecked( true );
336 iPowerSaveEnabled->setChecked( false );
338 iPowerSaveStartTime->setTime( Configuration::instance()->startupSettings()->turnOnAt() );
339 iPowerSaveEndTime->setTime( Configuration::instance()->startupSettings()->turnOffAt() );
341 // Prepare the admin password box
342 QGroupBox *adminPasswordGroup = new QGroupBox( tr( "Admin Password" ) );
343 QLabel *oldPwdLabel = new QLabel( tr( "Old password:" ) );
344 QLabel *newPwdLabel = new QLabel( tr( "New password:" ) );
345 QLabel *confirmPwdLabel = new QLabel( tr( "Confirm password:" ) );
346 QPushButton *applyPwdButton = new QPushButton( tr( "Apply" ) );
348 QLineEdit *oldPwdEdit = new QLineEdit;
349 QLineEdit *newPwdEdit = new QLineEdit;
350 QLineEdit *confirmPwdEdit = new QLineEdit;
352 oldPwdEdit->setEchoMode( QLineEdit::Password );
353 newPwdEdit->setEchoMode( QLineEdit::Password );
354 confirmPwdEdit->setEchoMode( QLineEdit::Password );
356 QGridLayout *agl = new QGridLayout;
358 agl->addWidget( oldPwdLabel, 0, 0 );
359 agl->addWidget( oldPwdEdit, 0, 1 );
360 agl->addWidget( newPwdLabel, 1, 0 );
361 agl->addWidget( newPwdEdit, 1, 1 );
362 agl->addWidget( confirmPwdLabel, 2, 0 );
363 agl->addWidget( confirmPwdEdit, 2, 1 );
364 agl->addWidget( applyPwdButton, 3, 0, 1, 2, Qt::AlignRight );
366 adminPasswordGroup->setLayout( agl );
368 // Prepare the power save options
369 QGroupBox *powerSaveGroup = new QGroupBox( tr( "Power Save" ) );
370 QLabel *switchedOnLabel = new QLabel( tr( "Switched on from:" ) );
371 QLabel *toLabel = new QLabel( tr( "to" ) );
372 QGridLayout *psgl = new QGridLayout;
374 psgl->addWidget( iPowerSaveEnabled, 0, 0, 1, 4, Qt::AlignLeft );
375 psgl->addWidget( switchedOnLabel, 1, 0 );
376 psgl->addWidget( iPowerSaveStartTime, 1, 1 );
377 psgl->addWidget( toLabel, 1, 2 );
378 psgl->addWidget( iPowerSaveEndTime, 1, 3 );
380 powerSaveGroup->setLayout( psgl );
382 // Prepare the main layout
383 QVBoxLayout *mainLayout = new QVBoxLayout;
384 mainLayout->addWidget( adminPasswordGroup );
385 mainLayout->addWidget( powerSaveGroup );
387 widget->setLayout( mainLayout );
392 void SettingsView::handleOkClicked()
394 qDebug() << "[SettingsView::okClicked] <Invoked>";
396 // Collect the configration data
397 QTime calendarStart = iDayStartTime->time();
398 QTime calendarEnd = iDayEndTime->time();
399 QTime powerSaveStart = iPowerSaveStartTime->time();
400 QTime powerSaveEnd = iPowerSaveEndTime->time();
402 QString userName = iUserName->text();
403 QString password = iPassword->text();
404 QString serverAddress = iServerAddress->text();
405 QString refreshInterval = iRefreshInterval->text();
407 bool fiveDays = iFiveDays->isChecked();
408 bool sevenDays = iSevenDays->isChecked();
409 bool powerSaveEnabled = iPowerSaveEnabled->isChecked();
411 // TODO : Set the values to configuration and save it
413 // Emit the signal to notify that ok is pressed and data is saved.
419 void SettingsView::cancelClicked()
421 qDebug() << "[SettingsView::cancelClicked] <Invoked>";
425 void SettingsView::viewResized(const QSize &size)
427 qDebug() << "[SettingsView::viewResized] <Invoked>";
429 qDebug() << "[SettingsView::viewResized] <Finished>";