diff options
Diffstat (limited to 'src/pmchart/saveviewdialog.cpp')
-rw-r--r-- | src/pmchart/saveviewdialog.cpp | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/src/pmchart/saveviewdialog.cpp b/src/pmchart/saveviewdialog.cpp new file mode 100644 index 0000000..0a03d27 --- /dev/null +++ b/src/pmchart/saveviewdialog.cpp @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2014 Red Hat. + * Copyright (c) 2007-2009, Aconex. All Rights Reserved. + * + * This program 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. + * + * This program 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. + */ +#include "saveviewdialog.h" +#include <QtCore/QDir> +#include <QtGui/QCompleter> +#include <QtGui/QMessageBox> +#include "main.h" + +SaveViewDialog::SaveViewDialog(QWidget* parent) : QDialog(parent) +{ + setupUi(this); + my.dirModel = new QDirModel; + my.dirModel->setIconProvider(fileIconProvider); + dirListView->setModel(my.dirModel); + + my.completer = new QCompleter; + my.completer->setModel(my.dirModel); + fileNameLineEdit->setCompleter(my.completer); + + connect(dirListView->selectionModel(), + SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), + this, SLOT(dirListView_selectionChanged())); + + QDir dir; + QChar sep(__pmPathSeparator()); + QString home = my.userDir = QDir::toNativeSeparators(QDir::homePath()); + my.userDir.append(sep); + my.userDir.append(".pcp"); + my.userDir.append(sep); + my.userDir.append("kmchart"); + if (!dir.exists(my.userDir)) { + my.userDir = home; + my.userDir.append(sep); + my.userDir.append(".pcp"); + my.userDir.append(sep); + my.userDir.append("pmchart"); + } + my.hostDynamic = true; + my.sizeDynamic = true; + + pathComboBox->addItem(fileIconProvider->icon(QFileIconProvider::Folder), + my.userDir); + pathComboBox->addItem(fileIconProvider->icon(QFileIconProvider::Folder), + home); +} + +SaveViewDialog::~SaveViewDialog() +{ + delete my.completer; + delete my.dirModel; +} + +void SaveViewDialog::reset(bool hostDynamic) +{ + QDir d; + if (!d.exists(my.userDir)) + d.mkpath(my.userDir); + setPath(my.userDir); + preserveHostCheckBox->setChecked(hostDynamic == false); +} + +void SaveViewDialog::setPathUi(const QString &path) +{ + if (path.isEmpty()) + return; + + int index = pathComboBox->findText(path); + if (index == -1) { + pathComboBox->addItem(fileIconProvider->icon(QFileIconProvider::Folder), + path); + index = pathComboBox->count() - 1; + } + pathComboBox->setCurrentIndex(index); + dirListView->selectionModel()->clear(); + + userToolButton->setChecked(path == my.userDir); + + fileNameLineEdit->setModified(false); + fileNameLineEdit->clear(); +} + +void SaveViewDialog::setPath(const QModelIndex &index) +{ + console->post("SaveViewDialog::setPath QModelIndex path=%s", + (const char *)my.dirModel->filePath(index).toAscii()); + my.dirIndex = index; + my.dirModel->refresh(index); + dirListView->setRootIndex(index); + setPathUi(my.dirModel->filePath(index)); +} + +void SaveViewDialog::setPath(const QString &path) +{ + console->post("SaveViewDialog::setPath QString path=%s", + (const char *)path.toAscii()); + my.dirIndex = my.dirModel->index(path); + my.dirModel->refresh(my.dirIndex); + dirListView->setRootIndex(my.dirIndex); + setPathUi(path); +} + +void SaveViewDialog::pathComboBox_currentIndexChanged(QString path) +{ + console->post("SaveViewDialog::pathComboBox_currentIndexChanged"); + setPath(path); +} + +void SaveViewDialog::parentToolButton_clicked() +{ + console->post("SaveViewDialog::parentToolButton_clicked"); + setPath(my.dirModel->parent(my.dirIndex)); +} + +void SaveViewDialog::userToolButton_clicked(bool enabled) +{ + if (enabled) { + QDir dir; + if (!dir.exists(my.userDir)) + dir.mkpath(my.userDir); + setPath(my.userDir); + } +} + +void SaveViewDialog::dirListView_selectionChanged() +{ + QItemSelectionModel *selections = dirListView->selectionModel(); + QModelIndexList selectedIndexes = selections->selectedIndexes(); + + console->post("SaveViewDialog::dirListView_clicked"); + + my.completer->setCompletionPrefix(my.dirModel->filePath(my.dirIndex)); + if (selectedIndexes.count() != 1) + fileNameLineEdit->setText(""); + else + fileNameLineEdit->setText(my.dirModel->fileName(selectedIndexes.at(0))); +} + +void SaveViewDialog::dirListView_activated(const QModelIndex &index) +{ + QFileInfo fi = my.dirModel->fileInfo(index); + + console->post("SaveViewDialog::dirListView_activated"); + + if (fi.isDir()) { + setPath(index); + } + else { + QString msg = fi.filePath(); + msg.prepend(tr("View file ")); + msg.append(tr(" exists. Overwrite?\n")); + if (QMessageBox::question(this, pmProgname, msg, + QMessageBox::Cancel|QMessageBox::Default|QMessageBox::Escape, + QMessageBox::Ok, QMessageBox::NoButton) == QMessageBox::Ok) + if (saveViewFile(fi.absoluteFilePath()) == true) + done(0); + } +} + +void SaveViewDialog::preserveHostCheckBox_toggled(bool hostPreserve) +{ + my.hostDynamic = (hostPreserve == false); +} + +void SaveViewDialog::preserveSizeCheckBox_toggled(bool sizePreserve) +{ + my.sizeDynamic = (sizePreserve == false); +} + +bool SaveViewDialog::saveViewFile(const QString &filename) +{ + if (my.sizeDynamic == false) + setGlobals(pmchart->size().width(), pmchart->size().height(), + activeGroup->visibleHistory(), + pmchart->pos().x(), pmchart->pos().y()); + return saveView(filename, my.hostDynamic, my.sizeDynamic, false, true); +} + +void SaveViewDialog::savePushButton_clicked() +{ + QString msg, filename; + QChar sep(__pmPathSeparator()); + + if (fileNameLineEdit->isModified()) { + filename = fileNameLineEdit->text().trimmed(); + filename.prepend(my.dirModel->filePath(my.dirIndex).append(sep)); + } else { + QItemSelectionModel *selections = dirListView->selectionModel(); + QModelIndexList selectedIndexes = selections->selectedIndexes(); + + if (selectedIndexes.count() == 1) + filename = my.dirModel->filePath(selectedIndexes.at(0)); + } + + if (filename.isEmpty()) + msg = tr("No View file specified"); + else { + QFileInfo fi(filename); + if (fi.isDir()) + setPath(filename); + else if (fi.exists()) { + msg = filename; + msg.prepend(tr("View file ")); + msg.append(tr(" exists. Overwrite?\n")); + if (QMessageBox::question(this, pmProgname, msg, + QMessageBox::Cancel|QMessageBox::Default|QMessageBox::Escape, + QMessageBox::Ok, QMessageBox::NoButton) == QMessageBox::Ok) + if (saveViewFile(fi.absoluteFilePath()) == true) + done(0); + msg = ""; + } + else if (saveViewFile(fi.absoluteFilePath()) == true) + done(0); + } + + if (msg.isEmpty() == false) { + QMessageBox::warning(this, pmProgname, msg, + QMessageBox::Ok|QMessageBox::Default|QMessageBox::Escape, + QMessageBox::NoButton, QMessageBox::NoButton); + } +} |