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 );
49 // Handle the main layout
50 QVBoxLayout *mainLayout = new QVBoxLayout;
51 mainLayout->addWidget( iTabWidget );
52 mainLayout->addLayout( buttonLayout );
54 setLayout( mainLayout );
56 // Handle component connections
57 connect( iOkButton, SIGNAL( clicked() ), this, SLOT( handleOkClicked() ) );
60 SettingsView::~SettingsView()
62 if ( iTabWidget != 0 )
72 if ( iSettingsTab != 0 )
77 if ( iWeekViewTab != 0 )
82 if ( iResourcesTab != 0 )
87 if ( iKioskModeTab != 0 )
102 if ( iServerAddress != 0 )
104 delete iServerAddress;
107 if ( iDayStartTime != 0 )
109 delete iDayStartTime;
112 if ( iDayEndTime != 0 )
117 if ( iFiveDays != 0 )
122 if ( iSevenDays != 0 )
127 if ( iRefreshInterval != 0 )
129 delete iRefreshInterval;
130 iRefreshInterval = 0;
132 if ( iPowerSaveEnabled != 0 )
134 delete iPowerSaveEnabled;
135 iPowerSaveEnabled = 0;
137 if ( iPowerSaveStartTime != 0 )
139 delete iPowerSaveStartTime;
140 iPowerSaveStartTime = 0;
142 if ( iPowerSaveEndTime != 0 )
144 delete iPowerSaveEndTime;
145 iPowerSaveEndTime = 0;
149 QWidget *SettingsView::initSettingsTab()
151 QWidget *widget = new QWidget( iTabWidget );
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 );
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 );
169 // Create the group boxes
170 QGroupBox *userInformationGroup = new QGroupBox( tr( "User Information" ) );
171 QGroupBox *serverInformationGroup = new QGroupBox( tr( "Server Information" ) );
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:" ) );
178 ugl->addWidget( userNameLabel, 0, 0 );
179 ugl->addWidget( iUserName, 0, 1 );
180 ugl->addWidget( passwordLabel, 1, 0 );
181 ugl->addWidget( iPassword, 1, 1 );
183 userInformationGroup->setLayout( ugl );
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" ) );
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 );
197 serverInformationGroup->setLayout( sgl );
199 // Prepare and set the main layout
200 QVBoxLayout *mainLayout = new QVBoxLayout;
201 mainLayout->addWidget( userInformationGroup );
202 mainLayout->addWidget( serverInformationGroup );
204 widget->setLayout( mainLayout );
209 QWidget *SettingsView::initWeekViewTab()
211 QWidget *widget = new QWidget( iTabWidget );
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;
219 if ( Configuration::instance()->displaySettings()->daysInSchedule() == DisplaySettings::WeekdaysInSchedule )
221 iFiveDays->setChecked( true );
222 iSevenDays->setChecked( false );
226 iFiveDays->setChecked( false );
227 iSevenDays->setChecked( true );
229 iDayStartTime->setTime( Configuration::instance()->displaySettings()->dayStartsAt() );
230 iDayEndTime->setTime( Configuration::instance()->displaySettings()->dayEndsAt() );
232 // Create group box and the grid layout
233 QGroupBox *weeklyInformation = new QGroupBox( tr( "Weekly View" ) );
234 QGridLayout *wgl = new QGridLayout;
236 // Prepare the number of days row
237 QLabel *daysLabel = new QLabel( tr( "Days:" ) );
239 wgl->addWidget( daysLabel, 0, 0 );
240 wgl->addWidget( iFiveDays, 0, 1 );
241 wgl->addWidget( iSevenDays, 0, 2 );
243 // Preare the day starts row
244 QLabel *dayStartsLabel = new QLabel( tr( "Day starts:" ) );
246 wgl->addWidget( dayStartsLabel, 1, 0 );
247 wgl->addWidget( iDayStartTime, 1, 1, 1, 2 );
249 // Prepare the day ends row
250 QLabel *dayEndsLabel = new QLabel( tr( "Day ends:" ) );
252 wgl->addWidget( dayEndsLabel, 2, 0 );
253 wgl->addWidget( iDayEndTime, 2, 1, 1, 2 );
255 weeklyInformation->setLayout( wgl );
257 QVBoxLayout *mainLayout = new QVBoxLayout;
258 mainLayout->addWidget( weeklyInformation );
260 widget->setLayout( mainLayout );
265 QWidget *SettingsView::initResourcesTab()
267 QWidget *widget = new QWidget( iTabWidget );
269 QHBoxLayout *mainLayout = new QHBoxLayout;
271 // Available resources
272 QVBoxLayout *availableResourcesLayout = new QVBoxLayout;
273 QLabel *availableResourcesLabel = new QLabel( tr( "Available Resources:" ) );
274 QListView *availableResourcesList = new QListView;
277 QList<Room*> rooms = Configuration::instance()->rooms();
278 for ( int i = 0; i < rooms.count(); i++ )
280 Room *tmp_room = ( Room * ) rooms.at( i );
281 qDebug() << "Room: " << tmp_room->name();
284 availableResourcesLayout->addWidget( availableResourcesLabel );
285 availableResourcesLayout->addWidget( availableResourcesList );
287 // Selected resources
288 QVBoxLayout *selectedResourcesLayout = new QVBoxLayout;
289 QLabel *selectedResourcesLabel = new QLabel( tr( "Selected Resources:" ) );
290 QListView *selectedResourcesList = new QListView;
292 selectedResourcesLayout->addWidget( selectedResourcesLabel );
293 selectedResourcesLayout->addWidget( selectedResourcesList );
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 );
302 // Prepare main layout
303 mainLayout->addLayout( availableResourcesLayout );
304 mainLayout->addLayout( controlButtonsLayout );
305 mainLayout->addLayout( selectedResourcesLayout );
307 widget->setLayout( mainLayout );
312 QWidget *SettingsView::initKioskModeTab()
314 QWidget *widget = new QWidget( iTabWidget );
316 // Prepare member variable widgets
317 iPowerSaveEnabled = new QCheckBox( tr( "Power save enabled" ) );
318 iPowerSaveStartTime = new QTimeEdit;
319 iPowerSaveEndTime = new QTimeEdit;
321 if ( Configuration::instance()->startupSettings()->isPowersavingEnabled() )
323 iPowerSaveEnabled->setChecked( true );
327 iPowerSaveEnabled->setChecked( false );
329 iPowerSaveStartTime->setTime( Configuration::instance()->startupSettings()->turnOnAt() );
330 iPowerSaveEndTime->setTime( Configuration::instance()->startupSettings()->turnOffAt() );
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" ) );
339 QLineEdit *oldPwdEdit = new QLineEdit;
340 QLineEdit *newPwdEdit = new QLineEdit;
341 QLineEdit *confirmPwdEdit = new QLineEdit;
343 oldPwdEdit->setEchoMode( QLineEdit::Password );
344 newPwdEdit->setEchoMode( QLineEdit::Password );
345 confirmPwdEdit->setEchoMode( QLineEdit::Password );
347 QGridLayout *agl = new QGridLayout;
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 );
357 adminPasswordGroup->setLayout( agl );
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;
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 );
371 powerSaveGroup->setLayout( psgl );
373 // Prepare the main layout
374 QVBoxLayout *mainLayout = new QVBoxLayout;
375 mainLayout->addWidget( adminPasswordGroup );
376 mainLayout->addWidget( powerSaveGroup );
378 widget->setLayout( mainLayout );
383 void SettingsView::handleOkClicked()
385 qDebug() << "[SettingsView::okClicked] <Invoked>";
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();
393 QString userName = iUserName->text();
394 QString password = iPassword->text();
395 QString serverAddress = iServerAddress->text();
396 QString refreshInterval = iRefreshInterval->text();
398 bool fiveDays = iFiveDays->isChecked();
399 bool sevenDays = iSevenDays->isChecked();
400 bool powerSaveEnabled = iPowerSaveEnabled->isChecked();
402 // TODO : Set the values to configuration and save it
404 // Emit the signal to notify that ok is pressed and data is saved.
408 void SettingsView::viewResized(const QSize &newSize, const QSize &oldSize)
410 if ( oldSize.height() > newSize.height() )
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();