source: src/gui/conferenceeditor.cpp @ e6ab8a2

qt5
Last change on this file since e6ab8a2 was e6ab8a2, checked in by Philipp Spitzer <philipp@…>, 11 years ago

Removed the ability to show "pictures" (maps) of rooms and maps of conferences.
The XML file does not contain picture/map/image information of conferences or rooms.
We left the room.picture definition in the database SQL because there is no "drop column"
in sqlite.

  • Property mode set to 100644
File size: 6.4 KB
Line 
1/*
2 * Copyright (C) 2010 Ixonos Plc.
3 * Copyright (C) 2011 Philipp Spitzer, gregor herrmann
4 *
5 * This file is part of ConfClerk.
6 *
7 * ConfClerk is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 * ConfClerk is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * ConfClerk.  If not, see <http://www.gnu.org/licenses/>.
19 */
20#include "conferenceeditor.h"
21
22#include "conferencemodel.h"
23#include "urlinputdialog.h"
24#include "errormessage.h"
25
26#include <QInputDialog>
27#include <QItemSelectionModel>
28#include <QFileDialog>
29#include <QMessageBox>
30
31ConferenceEditor::ConferenceEditor(ConferenceModel* model, QWidget* parent)
32: QDialog(parent)
33, model(model)
34, selected_id(-1)
35{
36    setupUi(this);
37    progressBar->hide();
38
39    confView->setModel(model);
40
41    QItemSelectionModel* confViewSelection = new QItemSelectionModel(model, this);
42    confView->setSelectionModel(confViewSelection);
43
44    connect(confViewSelection, SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
45                                SLOT(itemSelected(const QModelIndex&, const QModelIndex&)));
46    connect(this, SIGNAL(wantCurrent(const QModelIndex&, QItemSelectionModel::SelectionFlags)),
47            confViewSelection, SLOT(setCurrentIndex(const QModelIndex&, QItemSelectionModel::SelectionFlags)));
48    connect(addBtn, SIGNAL(clicked()), SLOT(addClicked()));
49    connect(removeBtn, SIGNAL(clicked()), SLOT(removeClicked()));
50    connect(changeUrl, SIGNAL(clicked()), SLOT(changeUrlClicked()));
51    connect(refreshBtn, SIGNAL(clicked()), SLOT(refreshClicked()));
52    connect(buttonBox, SIGNAL(rejected()), SLOT(close()));
53
54    // it's OK to emit selection signals here
55    // because they are not yet connected to anybody
56    int active_id = Conference::activeConference();
57    if (active_id > 0) {
58        emit wantCurrent(model->indexFromId(active_id), QItemSelectionModel::SelectCurrent);
59    } else {
60        itemSelected(QModelIndex(), QModelIndex());
61    }
62}
63
64void ConferenceEditor::conferenceRemoved()
65{
66    if (model->rowCount() > 0) {
67        emit wantCurrent(model->index(0, 0), QItemSelectionModel::SelectCurrent);
68    } else {
69        itemSelected(QModelIndex(), QModelIndex());
70    }
71}
72
73void ConferenceEditor::itemSelected(const QModelIndex& current, const QModelIndex& previous)
74{
75    // TODO: fill all required fields
76    Q_UNUSED(previous);
77    if (!current.isValid()) {
78        selected_id = -1;
79
80        emit noneConferenceSelected();
81
82        conferenceInfo->setCurrentIndex(1);
83        removeBtn->hide();
84    } else {
85        const Conference& conf = model->conferenceFromIndex(current);
86        selected_id = conf.id();
87
88        emit haveConferenceSelected(selected_id);
89
90        conferenceTitle->setText(conf.title());
91        conferenceSubtitle->setText(conf.subtitle());
92        conferenceWhere->setText(conf.city() + ", " + conf.venue());
93        conferenceWhen->setText(
94                conf.start().toString("dd-MM-yyyy")
95                + ", " +
96                conf.end().toString("dd-MM-yyyy"));
97        conferenceInfo->setCurrentIndex(0);
98        removeBtn->show();
99    }
100}
101
102void ConferenceEditor::addClicked()
103{
104    UrlInputDialog url_input(this);
105    switch (url_input.exec()) {
106    case UrlInputDialog::HaveUrl: emit haveConferenceUrl(url_input.url()); break;
107    case UrlInputDialog::HaveFile: emit haveConferenceFile(url_input.url()); break;
108    case UrlInputDialog::Cancel: return;
109    }
110}
111
112void ConferenceEditor::removeClicked()
113{
114    if (selected_id < 0) {
115        // TODO: disable it when none is selected
116        return;
117    }
118
119    QMessageBox::StandardButton answer =
120        QMessageBox::question(0
121            , "Deletion confirmation"
122            , QString("Really delete the %1 conference").arg(Conference::getById(selected_id).title())
123            , QMessageBox::Yes | QMessageBox::No
124            , QMessageBox::No);
125
126    if (answer == QMessageBox::Yes) {
127        emit removeConferenceRequested(selected_id);
128    }
129}
130
131void ConferenceEditor::changeUrlClicked()
132{
133    if (selected_id < 0) {
134        return;
135    }
136    const Conference& selected = Conference::getById(selected_id);
137
138    bool ok;
139    QString url = QInputDialog::getText(this, "URL Input", "Enter schedule URL", QLineEdit::Normal, selected.url(), &ok);
140
141    if (ok) {
142        emit changeUrlRequested(selected_id, url);
143    }
144}
145
146void ConferenceEditor::refreshClicked()
147{
148    if (selected_id < 0) {
149        return;
150    }
151    const Conference& selected = Conference::getById(selected_id);
152
153    QString url = selected.url();
154
155    if (!url.isEmpty()) {
156        emit haveConferenceUrl(url);
157    } else {
158        static const QString format("Schedule URL for %1 is not set. Enter the schedule URL:");
159        bool ok;
160        QString url = QInputDialog::getText(this, "URL Input", format.arg(selected.title()), QLineEdit::Normal, QString(), &ok);
161
162        if (ok) {
163            // first save it, to remain if fetch fails
164            emit changeUrlRequested(selected_id, url);
165            // then fetch
166            emit haveConferenceUrl(url);
167        }
168    }
169}
170
171void ConferenceEditor::importStarted()
172{
173    addBtn->hide();
174    removeBtn->hide();
175    buttons->layout()->removeItem(buttonsSpacer);
176    progressBar->setValue(0);
177    progressBar->show();
178
179    QApplication::processEvents();
180}
181
182void ConferenceEditor::showParsingProgress(int progress)
183{
184    progressBar->setValue(progress);
185
186    QApplication::processEvents();
187}
188
189void ConferenceEditor::importFinished(const QString& title)
190{
191    addBtn->show();
192    // removeItem should be shown later, but it takes some time,
193    // and not looks good
194    // anyway it will be shown a bit later
195    removeBtn->show();
196    buttons->layout()->addItem(buttonsSpacer);
197    progressBar->hide();
198
199    QApplication::processEvents();
200
201    int num = model->rowCount();
202    for (int i = 0; i < num; i++) {
203        QModelIndex item = model->index(i, 0);
204        if (model->data(item) == title) {
205            emit wantCurrent(item, QItemSelectionModel::SelectCurrent);
206            return;
207        }
208    }
209    itemSelected(QModelIndex(), QModelIndex());
210}
211
Note: See TracBrowser for help on using the repository browser.