#include "mainwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MainWidget::MainWidget(QWidget *parent) : QWidget(parent) { setObjectName("MainWidget"); setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setWindowTitle(QString::fromWCharArray(L"¸¶ºñ ŸÀÌ¸Ó v%1").arg(SHORT_VERSION)); setWindowIcon(QIcon(":/icons/alarmBlue.png")); /* null vars */ weatherWidget = 0; timetableWidget = 0; generalWidget = 0; /* base layout */ mainLayout = new QHBoxLayout; viewButton = new PanelButton; quitButton = new PanelButton; optionButton = new PanelButton; httpInfo = new HttpInformation(this); viewButton->setText(QString::fromWCharArray(L"º¸±â")); optionButton->setText(QString::fromWCharArray(L"¿É¼Ç")); quitButton->setText(QString::fromWCharArray(L"Á¾·á")); viewButton->setIcon(QIcon(":/icons/projection.png")); optionButton->setIcon(QIcon(":/icons/equalizer.png")); quitButton->setIcon(QIcon(":/icons/doorOpen.png")); viewButton->setMinimumSize(100, 26); optionButton->setMinimumSize(100, 26); quitButton->setMinimumSize(100, 26); mainLayout->setMargin(0); mainLayout->setSpacing(0); mainLayout->addWidget(viewButton); mainLayout->addWidget(optionButton); mainLayout->addWidget(quitButton); setLayout(mainLayout); /* base menu */ viewMenu = new QMenu; viewMenu->setMinimumWidth(100); viewWeather = viewMenu->addAction(QIcon(), QString::fromWCharArray(L"³¯¾¾ Á¤º¸")); viewTimetable = viewMenu->addAction(QIcon(), QString::fromWCharArray(L"µîÀå ¹× ½Ã°£Ç¥")); viewGeneral = viewMenu->addAction(QIcon(), QString::fromWCharArray(L"¿¡¸° ±âº» Á¤º¸")); viewButton->setMenu(viewMenu); viewWeather->setCheckable(true); viewTimetable->setCheckable(true); viewGeneral->setCheckable(true); viewWeather->setIcon(QIcon(":/weather32/clearA.png")); viewTimetable->setIcon(QIcon(":/icons/table.png")); viewGeneral->setIcon(QIcon(":/icons/report.png")); optionMenu = new QMenu; optionMenu->setMinimumWidth(100); optionOption = optionMenu->addAction(QIcon(), QString::fromWCharArray(L"ȯ°æ¼³Á¤")); optionAbout = optionMenu->addAction(QIcon(), QString::fromWCharArray(L"ÇÁ·Î±×·¥ Á¤º¸")); optionOption->setIcon(QIcon(":/icons/gear.png")); optionAbout->setIcon(QIcon(":/icons/question.png")); optionButton->setMenu(optionMenu); /* view menu */ connect(viewWeather, SIGNAL(triggered()), this, SLOT(weatherActionClicked())); connect(viewTimetable, SIGNAL(triggered()), this, SLOT(timetableActionClicked())); connect(viewGeneral, SIGNAL(triggered()), this, SLOT(generalActionClicked())); /* option menu */ connect(optionOption, SIGNAL(triggered()), this, SLOT(optionActionClicked())); connect(optionAbout, SIGNAL(triggered()), this, SLOT(aboutActionClicked())); /* quit menu */ connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); connect(httpInfo, SIGNAL(done(bool)), this, SLOT(receivedDone(bool))); httpInfo->begin(); MabiTimer::connectTimer(this, SLOT(updateAlert())); } MainWidget::~MainWidget() { qDebug() << "destoryed: " << objectName(); if(httpInfo) { delete httpInfo; } } void MainWidget::updateAlert() { uint secs = MabiTimer::erinnTime()->toTime_t() * 2 / 3; QString message; if(secs == time2Sec(5, 30)) { message.append(QString::fromWCharArray(L"º¯½Å½Ã°£ 30ºÐ ÀüÀÔ´Ï´Ù.\n")); } if(secs == time2Sec(5, 50)) { message.append(QString::fromWCharArray(L"º¯½Å½Ã°£ 10ºÐ ÀüÀÔ´Ï´Ù.\n")); } Sequence *sequence = MabiTimer::sequence(); Settings *settings = MabiTimer::settings(); const int arbeitCount = sequence->arbeitSequence()->size(); const QList *arbeitSequence = sequence->arbeitSequence(); const QList arbeitSelected = settings->arbeitSelected(); foreach(int idx, arbeitSelected) { if(idx >= 0 && idx < arbeitCount) { const Arbeit &arbeit = arbeitSequence->at(idx); if(MabiTimer::erinnTime()->toTime_t() == (uint)arbeit.begin) { message.append(arbeit.name); message.append(QString::fromWCharArray(L" ¾Æ¸£¹ÙÀÌÆ®°¡ ½ÃÀ۵Ǿú½À´Ï´Ù.\n")); } } } if(message.length() > 0) { MabiTimer::alertWidget()->setMessage(message.trimmed()); } } void MainWidget::resizeEvent(QResizeEvent *event) { QRect rect = QApplication::desktop()->availableGeometry(); move(rect.width() / 2 - event->size().width() / 2, 0); } void MainWidget::closeEvent(QCloseEvent *event) { Q_UNUSED(event); qDebug() << "MainWidget closing"; if(weatherWidget) { delete weatherWidget; } if(timetableWidget) { delete timetableWidget; } if(generalWidget) { delete generalWidget; } } void MainWidget::childObjectDestroyed(QObject *object) { if(object == weatherWidget) { viewWeather->setChecked(false); weatherWidget = 0; } if(object == timetableWidget) { viewTimetable->setChecked(false); timetableWidget = 0; } if(object == generalWidget) { viewGeneral->setChecked(false); generalWidget = 0; } } void MainWidget::weatherActionClicked() { if(weatherWidget == 0) { weatherWidget = new WeatherWidget; weatherWidget->setWindowFlags(Qt::SubWindow | weatherWidget->windowFlags()); weatherWidget->setAttribute(Qt::WA_DeleteOnClose, true); connect(weatherWidget, SIGNAL(destroyed(QObject*)), this, SLOT(childObjectDestroyed(QObject*))); viewWeather->setChecked(true); Settings *settings = MabiTimer::settings(); weatherWidget->setWeatherAlignment(settings->weatherAlignment()); weatherWidget->show(); weatherWidget->activateWindow(); MabiTimer::addManageObject(weatherWidget); MabiTimer::setTransparentEx(weatherWidget->winId(), true); } else { weatherWidget->close(); } } void MainWidget::timetableActionClicked() { if(timetableWidget == 0) { timetableWidget = new TimetableWidget; timetableWidget->setWindowFlags(Qt::Window | timetableWidget->windowFlags()); timetableWidget->setAttribute(Qt::WA_DeleteOnClose, true); connect(timetableWidget, SIGNAL(destroyed(QObject*)), this, SLOT(childObjectDestroyed(QObject*))); viewTimetable->setChecked(true); timetableWidget->show(); timetableWidget->activateWindow(); MabiTimer::addManageObject(timetableWidget); } else { timetableWidget->close(); } } void MainWidget::generalActionClicked() { if(generalWidget == 0) { generalWidget = new GeneralWidget; generalWidget->setWindowFlags(Qt::Window | generalWidget->windowFlags()); generalWidget->setAttribute(Qt::WA_DeleteOnClose, true); connect(generalWidget, SIGNAL(destroyed(QObject*)), this, SLOT(childObjectDestroyed(QObject*))); viewGeneral->setChecked(true); generalWidget->show(); generalWidget->activateWindow(); MabiTimer::addManageObject(generalWidget); } else { generalWidget->close(); } } void MainWidget::optionActionClicked() { OptionWidget *option = new OptionWidget(this); Settings *settings = MabiTimer::settings(); option->setArbeitSelected(settings->arbeitSelected()); option->setWeatherAlignment(settings->weatherAlignment()); option->setModal(true); option->setAttribute(Qt::WA_DeleteOnClose, true); option->show(); option->raise(); option->activateWindow(); connect(option, SIGNAL(accepted()), this, SLOT(optionAccepted())); connect(option, SIGNAL(rejected()), this, SLOT(optionRejected())); MabiTimer::addManageObject(option); } void MainWidget::aboutActionClicked() { AboutWidget *about = new AboutWidget(this); about->setModal(true); about->setAttribute(Qt::WA_DeleteOnClose, true); about->show(); about->raise(); about->activateWindow(); MabiTimer::addManageObject(about); } void MainWidget::receivedDone(bool valid) { if(valid) { MabiTimer::setOffsetSeconds(httpInfo->offsetSeconds()); if(httpInfo->isUpdated()) { UpdateWindow *window = new UpdateWindow; window->setHtml(httpInfo->html()); window->setWindowTitle(QString::fromWCharArray(L"¾÷µ¥ÀÌÆ® È®ÀÎ")); window->show(); } } } void MainWidget::optionAccepted() { if(sender()->inherits(OptionWidget::staticMetaObject.className())) { OptionWidget *option = (OptionWidget*)sender(); Settings *settings = MabiTimer::settings(); QList selected; foreach(int i, option->arbeitSelected()) { selected.append(i); } settings->setArbeitSelected(selected); settings->setWeatherAlignment(option->weatherAlignment()); } } void MainWidget::optionRejected() { WeatherWidget *weatherWidget = (WeatherWidget*)MabiTimer::manageObject(WeatherWidget::staticMetaObject.className()); if(weatherWidget) { Settings *settings = MabiTimer::settings(); weatherWidget->setWeatherAlignment(settings->weatherAlignment()); } }