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 buttonLayout->addWidget( iOkButton );
48 iCancelButton = new QPushButton;
49 iCancelButton->setText( tr( "Cancel" ));
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 );
60 setAutoFillBackground( true );
62 // Handle component connections
63 connect( iOkButton, SIGNAL( clicked() ), this, SLOT( handleOkClicked() ) );
64 connect( iCancelButton, SIGNAL( clicked() ), this, SLOT( handleCancelClicked() ) );
67 SettingsView::~SettingsView()
69 if ( iTabWidget != 0 )
79 if ( iCancelButton != 0 )
84 if ( iSettingsTab != 0 )
89 if ( iWeekViewTab != 0 )
94 if ( iResourcesTab != 0 )
99 if ( iKioskModeTab != 0 )
101 delete iKioskModeTab;
104 if ( iUserName != 0 )
109 if ( iPassword != 0 )
114 if ( iServerAddress != 0 )
116 delete iServerAddress;
119 if ( iDayStartTime != 0 )
121 delete iDayStartTime;
124 if ( iDayEndTime != 0 )
129 if ( iFiveDays != 0 )
134 if ( iSevenDays != 0 )
139 if ( iRefreshInterval != 0 )
141 delete iRefreshInterval;
142 iRefreshInterval = 0;
144 if ( iPowerSaveEnabled != 0 )
146 delete iPowerSaveEnabled;
147 iPowerSaveEnabled = 0;
149 if ( iPowerSaveStartTime != 0 )
151 delete iPowerSaveStartTime;
152 iPowerSaveStartTime = 0;
154 if ( iPowerSaveEndTime != 0 )
156 delete iPowerSaveEndTime;
157 iPowerSaveEndTime = 0;
161 QWidget *SettingsView::initSettingsTab()
163 QWidget *widget = new QWidget( iTabWidget );
165 // Prepare the widgets that are member variables
166 iUserName = new QLineEdit;
167 iPassword = new QLineEdit;
168 iPassword->setEchoMode( QLineEdit::Password );
169 iServerAddress = new QLineEdit;
170 iRefreshInterval = new QLineEdit;
171 QIntValidator *qiv = new QIntValidator( 0 );
172 iRefreshInterval->setValidator( qiv );
174 // Create the group boxes
175 QGroupBox *userInformationGroup = new QGroupBox( tr( "User Information" ) );
176 QGroupBox *serverInformationGroup = new QGroupBox( tr( "Server Information" ) );
178 // Prepare the user infromation group box
179 QGridLayout *ugl = new QGridLayout;
180 QLabel *userNameLabel = new QLabel( tr( "Username:" ) );
181 QLabel *passwordLabel = new QLabel( tr( "Password:" ) );
183 ugl->addWidget( userNameLabel, 0, 0 );
184 ugl->addWidget( iUserName, 0, 1 );
185 ugl->addWidget( passwordLabel, 1, 0 );
186 ugl->addWidget( iPassword, 1, 1 );
188 userInformationGroup->setLayout( ugl );
190 // Prepare the server information group box
191 QGridLayout *sgl = new QGridLayout;
192 QLabel *serverURLLabel = new QLabel( tr( "Server URL:" ) );
193 QLabel *refreshLabel = new QLabel( tr( "Refresh interval" ) );
194 QLabel *secondsLabel = new QLabel( tr( "seconds" ) );
196 sgl->addWidget( serverURLLabel, 0, 0, 1, 2 );
197 sgl->addWidget( iServerAddress, 0, 1 );
198 sgl->addWidget( refreshLabel, 1, 0 );
199 sgl->addWidget( iRefreshInterval, 1, 1 );
200 sgl->addWidget( secondsLabel, 1, 2 );
202 serverInformationGroup->setLayout( sgl );
204 // Prepare and set the main layout
205 QVBoxLayout *mainLayout = new QVBoxLayout;
206 mainLayout->addWidget( userInformationGroup );
207 mainLayout->addWidget( serverInformationGroup );
209 widget->setLayout( mainLayout );
214 QWidget *SettingsView::initWeekViewTab()
216 QWidget *widget = new QWidget( iTabWidget );
218 // Prepare the member variable widgets
219 iFiveDays = new QRadioButton( tr( "5" ) );
220 iSevenDays = new QRadioButton( tr( "7" ) );
221 iDayStartTime = new QTimeEdit;
222 iDayEndTime = new QTimeEdit;
224 // Create group box and the grid layout
225 QGroupBox *weeklyInformation = new QGroupBox( tr( "Weekly View" ) );
226 QGridLayout *wgl = new QGridLayout;
228 // Prepare the number of days row
229 QLabel *daysLabel = new QLabel( tr( "Days:" ) );
231 wgl->addWidget( daysLabel, 0, 0 );
232 wgl->addWidget( iFiveDays, 0, 1 );
233 wgl->addWidget( iSevenDays, 0, 2 );
235 // Preare the day starts row
236 QLabel *dayStartsLabel = new QLabel( tr( "Day starts:" ) );
238 wgl->addWidget( dayStartsLabel, 1, 0 );
239 wgl->addWidget( iDayStartTime, 1, 1, 1, 2 );
241 // Prepare the day ends row
242 QLabel *dayEndsLabel = new QLabel( tr( "Day ends:" ) );
244 wgl->addWidget( dayEndsLabel, 2, 0 );
245 wgl->addWidget( iDayEndTime, 2, 1, 1, 2 );
247 weeklyInformation->setLayout( wgl );
249 QVBoxLayout *mainLayout = new QVBoxLayout;
250 mainLayout->addWidget( weeklyInformation );
252 widget->setLayout( mainLayout );
257 QWidget *SettingsView::initResourcesTab()
259 QWidget *widget = new QWidget( iTabWidget );
261 QHBoxLayout *mainLayout = new QHBoxLayout;
263 // Available resources
264 QVBoxLayout *availableResourcesLayout = new QVBoxLayout;
265 QLabel *availableResourcesLabel = new QLabel( tr( "Available Resources:" ) );
266 QListView *availableResourcesList = new QListView;
269 QList<Room*> rooms = Configuration::instance()->rooms();
270 for ( int i = 0; i < rooms.count(); i++ )
272 Room *tmp_room = ( Room * ) rooms.at( i );
273 qDebug() << "Room: " << tmp_room->name();
276 availableResourcesLayout->addWidget( availableResourcesLabel );
277 availableResourcesLayout->addWidget( availableResourcesList );
279 // Selected resources
280 QVBoxLayout *selectedResourcesLayout = new QVBoxLayout;
281 QLabel *selectedResourcesLabel = new QLabel( tr( "Selected Resources:" ) );
282 QListView *selectedResourcesList = new QListView;
284 selectedResourcesLayout->addWidget( selectedResourcesLabel );
285 selectedResourcesLayout->addWidget( selectedResourcesList );
288 QVBoxLayout *controlButtonsLayout = new QVBoxLayout;
289 QPushButton *addButton = new QPushButton( tr( "->" ) );
290 QPushButton *removeButton = new QPushButton( tr( "<-" ) );
291 controlButtonsLayout->addWidget( addButton );
292 controlButtonsLayout->addWidget( removeButton );
294 // Prepare main layout
295 mainLayout->addLayout( availableResourcesLayout );
296 mainLayout->addLayout( controlButtonsLayout );
297 mainLayout->addLayout( selectedResourcesLayout );
299 widget->setLayout( mainLayout );
304 QWidget *SettingsView::initKioskModeTab()
306 QWidget *widget = new QWidget( iTabWidget );
308 // Prepare member variable widgets
309 iPowerSaveEnabled = new QCheckBox( tr( "Power save enabled" ) );
310 iPowerSaveStartTime = new QTimeEdit;
311 iPowerSaveEndTime = new QTimeEdit;
313 if ( Configuration::instance()->startupSettings()->isPowersavingEnabled() )
315 iPowerSaveEnabled->setChecked( true );
319 iPowerSaveEnabled->setChecked( false );
321 iPowerSaveStartTime->setTime( Configuration::instance()->startupSettings()->turnOnAt() );
322 iPowerSaveEndTime->setTime( Configuration::instance()->startupSettings()->turnOffAt() );
324 // Prepare the admin password box
325 QGroupBox *adminPasswordGroup = new QGroupBox( tr( "Admin Password" ) );
326 QLabel *oldPwdLabel = new QLabel( tr( "Old password:" ) );
327 QLabel *newPwdLabel = new QLabel( tr( "New password:" ) );
328 QLabel *confirmPwdLabel = new QLabel( tr( "Confirm password:" ) );
329 QPushButton *applyPwdButton = new QPushButton( tr( "Apply" ) );
331 QLineEdit *oldPwdEdit = new QLineEdit;
332 QLineEdit *newPwdEdit = new QLineEdit;
333 QLineEdit *confirmPwdEdit = new QLineEdit;
335 oldPwdEdit->setEchoMode( QLineEdit::Password );
336 newPwdEdit->setEchoMode( QLineEdit::Password );
337 confirmPwdEdit->setEchoMode( QLineEdit::Password );
339 QGridLayout *agl = new QGridLayout;
341 agl->addWidget( oldPwdLabel, 0, 0 );
342 agl->addWidget( oldPwdEdit, 0, 1 );
343 agl->addWidget( newPwdLabel, 1, 0 );
344 agl->addWidget( newPwdEdit, 1, 1 );
345 agl->addWidget( confirmPwdLabel, 2, 0 );
346 agl->addWidget( confirmPwdEdit, 2, 1 );
347 agl->addWidget( applyPwdButton, 3, 0, 1, 2, Qt::AlignRight );
349 adminPasswordGroup->setLayout( agl );
351 // Prepare the power save options
352 QGroupBox *powerSaveGroup = new QGroupBox( tr( "Power Save" ) );
353 QLabel *switchedOnLabel = new QLabel( tr( "Switched on from:" ) );
354 QLabel *toLabel = new QLabel( tr( "to" ) );
355 QGridLayout *psgl = new QGridLayout;
357 psgl->addWidget( iPowerSaveEnabled, 0, 0, 1, 4, Qt::AlignLeft );
358 psgl->addWidget( switchedOnLabel, 1, 0 );
359 psgl->addWidget( iPowerSaveStartTime, 1, 1 );
360 psgl->addWidget( toLabel, 1, 2 );
361 psgl->addWidget( iPowerSaveEndTime, 1, 3 );
363 powerSaveGroup->setLayout( psgl );
365 // Prepare the main layout
366 QVBoxLayout *mainLayout = new QVBoxLayout;
367 mainLayout->addWidget( adminPasswordGroup );
368 mainLayout->addWidget( powerSaveGroup );
370 widget->setLayout( mainLayout );
375 void SettingsView::handleOkClicked()
377 qDebug() << "[SettingsView::okClicked] <Invoked>";
379 // Collect the configration data
380 QTime calendarStart = iDayStartTime->time();
381 QTime calendarEnd = iDayEndTime->time();
382 QTime powerSaveStart = iPowerSaveStartTime->time();
383 QTime powerSaveEnd = iPowerSaveEndTime->time();
385 QString userName = iUserName->text();
386 QString password = iPassword->text();
387 QString serverAddress = iServerAddress->text();
389 uint refreshInterval = iRefreshInterval->text().toUInt(&ok, 10);
391 bool fiveDays = iFiveDays->isChecked();
392 bool sevenDays = iSevenDays->isChecked();
393 bool powerSaveEnabled = iPowerSaveEnabled->isChecked();
395 // set values to Configuration
396 // set user information
397 Configuration::instance()->connectionSettings()->setUsername( userName );
398 Configuration::instance()->connectionSettings()->setPassword( password );
400 // set server information
401 Configuration::instance()->connectionSettings()->setServerUrl( serverAddress );
404 Configuration::instance()->connectionSettings()->setRefreshInterval( refreshInterval );
407 // set weekly view settings
410 Configuration::instance()->displaySettings()->setDaysInSchedule( DisplaySettings::WeekdaysInSchedule );
412 else if ( sevenDays )
414 Configuration::instance()->displaySettings()->setDaysInSchedule( DisplaySettings::WholeWeekInSchedule );
416 Configuration::instance()->displaySettings()->setDayStartsAt( calendarStart );
417 Configuration::instance()->displaySettings()->setDayEndsAt( calendarEnd );
419 // set power save settings
420 Configuration::instance()->startupSettings()->setPowersavingEnabled( powerSaveEnabled );
421 Configuration::instance()->startupSettings()->setTurnOnAt( powerSaveStart );
422 Configuration::instance()->startupSettings()->setTurnOffAt( powerSaveEnd );
424 // save configuration
425 Configuration::instance()->save();
427 // Emit the signal to notify that ok is pressed and data is saved.
432 void SettingsView::viewResized(const QSize &newSize, const QSize &oldSize)
434 if ( oldSize.height() > newSize.height() )
436 // Get the button's height and add that to the new size so that
437 // the ok button is hidden under the keyboard.
438 size().rheight() += iOkButton->size().height();
442 void SettingsView::handleCancelClicked()
445 emit cancelClicked();
448 void SettingsView::setValues()
450 // set user information
451 iUserName->setText( Configuration::instance()->connectionSettings()->username() );
452 iPassword->setText( Configuration::instance()->connectionSettings()->password() );
453 // set server information
454 iServerAddress->setText( Configuration::instance()->connectionSettings()->serverUrl().toString() );
455 QString refreshIntervalStr;
456 refreshIntervalStr.setNum( Configuration::instance()->connectionSettings()->refreshInterval() );
457 iRefreshInterval->setText( refreshIntervalStr );
458 // set weekly view display settings
459 if ( Configuration::instance()->displaySettings()->daysInSchedule() == DisplaySettings::WeekdaysInSchedule )
461 iFiveDays->setChecked( true );
462 iSevenDays->setChecked( false );
466 iFiveDays->setChecked( false );
467 iSevenDays->setChecked( true );
469 iDayStartTime->setTime( Configuration::instance()->displaySettings()->dayStartsAt() );
470 iDayEndTime->setTime( Configuration::instance()->displaySettings()->dayEndsAt() );
471 // set startup settings
472 if ( Configuration::instance()->startupSettings()->isPowersavingEnabled() )
474 iPowerSaveEnabled->setChecked( true );
478 iPowerSaveEnabled->setChecked( false );
480 iPowerSaveStartTime->setTime( Configuration::instance()->startupSettings()->turnOnAt() );
481 iPowerSaveEndTime->setTime( Configuration::instance()->startupSettings()->turnOffAt() );