X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/blobdiff_plain/b431d47d9a2f508e37361c0eafd2b3407e591553..080dc7d603d45ba0662aa731418993ddd45b5fe8:/src/gui/conferenceeditor.cpp diff --git a/src/gui/conferenceeditor.cpp b/src/gui/conferenceeditor.cpp index 5f7459c..d93deee 100644 --- a/src/gui/conferenceeditor.cpp +++ b/src/gui/conferenceeditor.cpp @@ -1,25 +1,27 @@ /* * Copyright (C) 2010 Ixonos Plc. + * Copyright (C) 2011-2024 Philipp Spitzer, gregor herrmann, Stefan Stahl * - * This file is part of fosdem-schedule. + * This file is part of ConfClerk. * - * fosdem-schedule is free software: you can redistribute it and/or modify it + * ConfClerk is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your option) * any later version. * - * fosdem-schedule is distributed in the hope that it will be useful, but + * ConfClerk is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with - * fosdem-schedule. If not, see . + * ConfClerk. If not, see . */ #include "conferenceeditor.h" #include "conferencemodel.h" #include "urlinputdialog.h" +#include "errormessage.h" #include #include @@ -47,6 +49,9 @@ ConferenceEditor::ConferenceEditor(ConferenceModel* model, QWidget* parent) connect(removeBtn, SIGNAL(clicked()), SLOT(removeClicked())); connect(changeUrl, SIGNAL(clicked()), SLOT(changeUrlClicked())); connect(refreshBtn, SIGNAL(clicked()), SLOT(refreshClicked())); + connect(buttonBox, SIGNAL(rejected()), SLOT(close())); + connect(conferenceDtsHours, SIGNAL(valueChanged(int)), SLOT(dtsChanged())); + connect(conferenceDtsMinutes, SIGNAL(valueChanged(int)), SLOT(dtsChanged())); // it's OK to emit selection signals here // because they are not yet connected to anybody @@ -86,11 +91,22 @@ void ConferenceEditor::itemSelected(const QModelIndex& current, const QModelInde conferenceTitle->setText(conf.title()); conferenceSubtitle->setText(conf.subtitle()); - conferenceWhere->setText(conf.city() + ", " + conf.venue()); + QString where = conf.city(); + if (!conf.city().isEmpty() && !conf.venue().isEmpty()) where += ", "; + where += conf.venue(); + conferenceWhere->setText(where); conferenceWhen->setText( - conf.start().toString("dd-MM-yyyy") - + ", " + - conf.end().toString("dd-MM-yyyy")); + conf.start().toString("yyyy-MM-dd") + + " - " + + conf.end().toString("yyyy-MM-dd")); + if (conf.hasUtcOffset()) { + conferenceUtcOffset->setText(QString::number(conf.utcOffset()) + " min"); + } else { + conferenceUtcOffset->setText("N/A"); + } + int dts = conf.displayTimeShift(); + conferenceDtsHours->setValue(dts / 60); + conferenceDtsMinutes->setValue(abs(dts) % 60); conferenceInfo->setCurrentIndex(0); removeBtn->show(); } @@ -100,8 +116,8 @@ void ConferenceEditor::addClicked() { UrlInputDialog url_input(this); switch (url_input.exec()) { - case UrlInputDialog::HaveUrl: emit haveConferenceUrl(url_input.url()); break; - case UrlInputDialog::HaveFile: emit haveConferenceFile(url_input.url()); break; + case UrlInputDialog::HaveUrl: emit haveConferenceUrl(url_input.url(), 0); break; + case UrlInputDialog::HaveFile: emit haveConferenceFile(url_input.url(), 0); break; case UrlInputDialog::Cancel: return; } } @@ -127,13 +143,11 @@ void ConferenceEditor::removeClicked() void ConferenceEditor::changeUrlClicked() { - if (selected_id < 0) { - return; - } - const Conference& selected = Conference::getById(selected_id); + if (selected_id < 0) return; + const Conference& selectedConf = Conference::getById(selected_id); bool ok; - QString url = QInputDialog::getText(this, "URL Input", "Enter schedule URL", QLineEdit::Normal, selected.url(), &ok); + QString url = QInputDialog::getText(this, "URL Input", "Enter schedule URL", QLineEdit::Normal, selectedConf.url(), &ok); if (ok) { emit changeUrlRequested(selected_id, url); @@ -142,33 +156,36 @@ void ConferenceEditor::changeUrlClicked() void ConferenceEditor::refreshClicked() { - if (selected_id < 0) { - return; - } - const Conference& selected = Conference::getById(selected_id); - - QString url = selected.url(); + if (selected_id <= 0) return; + const Conference& selectedConf = Conference::getById(selected_id); + QString url = selectedConf.url(); - if (!url.isEmpty()) { - emit haveConferenceUrl(url); - } else { + if (url.isEmpty()) { static const QString format("Schedule URL for %1 is not set. Enter the schedule URL:"); bool ok; - QString url = QInputDialog::getText(this, "URL Input", format.arg(selected.title()), QLineEdit::Normal, QString(), &ok); - - if (ok) { - // first save it, to remain if fetch fails - emit changeUrlRequested(selected_id, url); - // then fetch - emit haveConferenceUrl(url); - } + url = QInputDialog::getText(this, "URL Input", format.arg(selectedConf.title()), QLineEdit::Normal, QString(), &ok); + if (!ok) return; + // first save it, to remain if fetch fails + emit changeUrlRequested(selected_id, url); } + // fetch + importStarted(); // just to show the progress bar + emit haveConferenceUrl(url, selected_id); +} + +void ConferenceEditor::dtsChanged() { + if (selected_id < 0) return; + Conference& conference = model->conferenceFromIndex(model->indexFromId(selected_id)); + int minutes = conferenceDtsMinutes->value(); + if (conferenceDtsHours->value() < 0) minutes *= -1; + conference.setDisplayTimeShift(conferenceDtsHours->value() * 60 + minutes); } void ConferenceEditor::importStarted() { addBtn->hide(); removeBtn->hide(); + buttons->layout()->removeItem(buttonsSpacer); progressBar->setValue(0); progressBar->show(); @@ -182,21 +199,21 @@ void ConferenceEditor::showParsingProgress(int progress) QApplication::processEvents(); } -void ConferenceEditor::importFinished(const QString& title) -{ - qDebug() << __PRETTY_FUNCTION__ << title; +void ConferenceEditor::importFinished(int conferenceId) { addBtn->show(); + // removeItem should be shown later, but it takes some time, + // and not looks good + // anyway it will be shown a bit later + removeBtn->show(); + buttons->layout()->addItem(buttonsSpacer); progressBar->hide(); QApplication::processEvents(); - int num = model->rowCount(); - for (int i = 0; i < num; i++) { - QModelIndex item = model->index(i, 0); - if (model->data(item) == title) { - emit wantCurrent(item, QItemSelectionModel::SelectCurrent); - return; - } - } - itemSelected(QModelIndex(), QModelIndex()); + QModelIndex item = model->indexFromId(conferenceId); + if (item.isValid()) + emit wantCurrent(item, QItemSelectionModel::SelectCurrent); + else + itemSelected(QModelIndex(), QModelIndex()); } +