From 67ac77b2aa4ea874332ac2deae18fdd799083840 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Mon, 26 Dec 2022 19:26:23 -0500 Subject: [PATCH 01/17] New feature to to backup daily/overview graph settings --- oscar/Resources.qrc | 7 + oscar/backupFiles.cpp | 612 +++++++++++++++++++++++++++++++++++++ oscar/backupFiles.h | 121 ++++++++ oscar/daily.cpp | 12 + oscar/daily.h | 4 + oscar/daily.ui | 7 + oscar/icons/brick-wall.png | Bin 0 -> 117847 bytes oscar/icons/exit.png | Bin 0 -> 5504 bytes oscar/icons/plus.png | Bin 0 -> 2204 bytes oscar/icons/rename.png | Bin 0 -> 5417 bytes oscar/icons/restore.png | Bin 0 -> 3495 bytes oscar/icons/trash_can.png | Bin 0 -> 5870 bytes oscar/icons/update.png | Bin 0 -> 3455 bytes oscar/oscar.pro | 6 +- oscar/overview.cpp | 11 + oscar/overview.h | 8 + oscar/overview.ui | 7 + 17 files changed, 793 insertions(+), 2 deletions(-) create mode 100644 oscar/backupFiles.cpp create mode 100644 oscar/backupFiles.h create mode 100644 oscar/icons/brick-wall.png create mode 100644 oscar/icons/exit.png create mode 100644 oscar/icons/plus.png create mode 100644 oscar/icons/rename.png create mode 100644 oscar/icons/restore.png create mode 100644 oscar/icons/trash_can.png create mode 100644 oscar/icons/update.png diff --git a/oscar/Resources.qrc b/oscar/Resources.qrc index 95050bd4..816db239 100644 --- a/oscar/Resources.qrc +++ b/oscar/Resources.qrc @@ -58,5 +58,12 @@ icons/fp_icon.png icons/up-down.png icons/warning.png + icons/exit.png + icons/brick-wall.png + icons/plus.png + icons/rename.png + icons/restore.png + icons/trash_can.png + icons/update.png diff --git a/oscar/backupFiles.cpp b/oscar/backupFiles.cpp new file mode 100644 index 00000000..7d708c3f --- /dev/null +++ b/oscar/backupFiles.cpp @@ -0,0 +1,612 @@ +/* backup graph settiongs Implementation + * + * Copyright (c) 2019-2022 The OSCAR Team + * Copyright (c) 2011-2018 Mark Watkins + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of the source code + * for more details. */ + +#define BACKUPMENUHEADER_OFF +#define MESSAGEBOXHEADER_OFF + +#define TEST_MACROS_ENABLED_OFF +#include + +#include +#include +#include +#include +#include "SleepLib/profiles.h" +#include "backupFiles.h" + + +BackupFiles::BackupFiles(QString title,QWidget* parent) : parent(parent),title(title) +{ + // Initialize directory accesses to profile files. + QString dirname = p_profile->Get("{DataFolder}/"); + dir = new QDir(dirname); + if (!dir->exists()) { + //qWarning (QString("Cannot find the directory %1").arg(dirname)); + return ; + } + dir->setFilter(QDir::Files | QDir::Readable | QDir::Writable | QDir::NoSymLinks); + + createMenu() ; + QString descFileName = QString("%1.%2").arg(title).arg("descriptions.txt"); + backupDescriptions = new BackupDescriptions (dir,descFileName); + + backupDialog->connect(backupaddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); + backupDialog->connect(backupAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); + backupDialog->connect(backupRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); + backupDialog->connect(backupUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); + backupDialog->connect(backupRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); + backupDialog->connect(backupDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); +#ifndef BACKUPMENUHEADER + backupDialog->connect(backupExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); +#endif + + backupDialog->connect(backuplist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); + backupDialog->connect(backuplist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + + singleLineRe = new QRegularExpression( QString("^\\s*([^\\r\\n]{0,%1})").arg(1+maxDescriptionLen) ); + backupFileNumRe = new QRegularExpression( QString("backup(\\d+)(.shg)?$") ); + parseFilenameRe = new QRegularExpression(QString("^(%1[.](backup(\\d*)))[.]shg$").arg(title)); +} + +BackupFiles::~BackupFiles() +{ + backupDialog->disconnect(backupaddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); + backupDialog->disconnect(backupAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); + backupDialog->disconnect(backupRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); + backupDialog->disconnect(backupUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); + backupDialog->disconnect(backupDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); + backupDialog->disconnect(backupRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); +#ifndef BACKUPMENUHEADER + backupDialog->disconnect(backupExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); +#endif + + backupDialog->disconnect(backuplist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); + backupDialog->disconnect(backuplist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + + delete backupDescriptions; + + delete singleLineRe; + delete backupFileNumRe; + delete parseFilenameRe; +} + +void BackupFiles::createMenu() { + styleOn= calculateStyle(true,false); + styleOff= calculateStyle(false,false); + styleExitBtn=calculateStyle(true,true); + //"background:transparent;" + //"background-color:yellow;" + styleMessageBox= + "QMessageBox { " + "background-color:yellow;" + "color:black;" + //"font: 24px ;" + //"padding: 4px;" + "border: 2px solid black;" + "text-align: center;" + "}" + "QPushButton { " + //"font: 24px ;" + "color:black;" + "}" + ; + styleDialog= + "QDialog { " + "border: 3px solid black;" + "min-width:30em;" // make large fonts in message box + "}"; + + + backupDialog= new QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint|Qt::WindowSystemMenuHint); +#ifndef BACKUPMENUHEADER + backupDialog->setWindowFlag(Qt::FramelessWindowHint); +#else + backupDialog->setWindowTitle(tr("Backup Files Management")); +#endif + + backupaddFullBtn =new QPushButton("Add", parent); + backupAddBtn =new QPushButton(tr("Add"), parent); + backupRestoreBtn = new QPushButton(tr("Restore"), parent); + backupUpdateBtn = new QPushButton(tr("Update"), parent); + backupRenameBtn = new QPushButton(tr("Rename"), parent); + backupDeleteBtn = new QPushButton(tr("Delete"), parent); +#ifndef BACKUPMENUHEADER + backupExitBtn = new QPushButton(*m_icon_exit,tr(""),parent); +#endif + + backuplist=new QListWidget(); + backuplist->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + + backupLayout = new QVBoxLayout(backupDialog); + layout1 = new QHBoxLayout(); + layout2 = new QVBoxLayout(); + layout2->setMargin(6); + backupLayout->addLayout(layout1); + backupLayout->addLayout(layout2); + + layout1->addWidget(backupaddFullBtn); + layout1->addWidget(backupAddBtn); + layout1->addWidget(backupRestoreBtn); + layout1->addWidget(backupRenameBtn); + layout1->addWidget(backupUpdateBtn); + layout1->addWidget(backupDeleteBtn); +#ifndef BACKUPMENUHEADER + layout1->addWidget(backupExitBtn); +#endif + layout2->addWidget(backuplist, 1); +/*TRANSLATION*/ + backupaddFullBtn-> setToolTip(tr("Add has been inhibited. The maximum number of backups have been exceeded. ")); + backupAddBtn-> setToolTip(tr("Adds new Backup with current settings.")); + backupRestoreBtn-> setToolTip(tr("Restores settings from the selected Backup.")); + backupRenameBtn-> setToolTip(tr("Rename the selected Backup. Must edit existing name then press enter.")); + backupUpdateBtn-> setToolTip(tr("Update the selected Backup with current settings.")); + backupDeleteBtn-> setToolTip(tr("Delete the selected Backup.")); +#ifndef BACKUPMENUHEADER + backupExitBtn-> setToolTip(tr("Closes the dialog menu. Returns to previous menu.")); +#endif + + backupDialog->setStyleSheet(styleDialog); + backupaddFullBtn->setStyleSheet(styleOff); + backupAddBtn->setStyleSheet(styleOn); + backupRestoreBtn->setStyleSheet(styleOn); + backupUpdateBtn->setStyleSheet(styleOn); + backupRenameBtn->setStyleSheet(styleOn); + backupDeleteBtn->setStyleSheet(styleOn); +#ifndef BACKUPMENUHEADER + backupExitBtn->setStyleSheet( styleExitBtn ); +#endif + + + backupaddFullBtn->setIcon(*m_icon_add ); + backupAddBtn->setIcon(*m_icon_add ); + backupRestoreBtn->setIcon(*m_icon_restore ); + backupRenameBtn->setIcon(*m_icon_rename ); + backupUpdateBtn->setIcon(*m_icon_update ); + backupDeleteBtn->setIcon(*m_icon_delete ); + backupDeleteBtn->setIcon(*m_icon_delete ); + + + int timeout = AppSetting->tooltipTimeout(); + backupaddFullBtn->setToolTipDuration(timeout); + backupAddBtn->setToolTipDuration(timeout); + backupRestoreBtn->setToolTipDuration(timeout); + backupUpdateBtn->setToolTipDuration(timeout); + backupRenameBtn->setToolTipDuration(timeout); + backupDeleteBtn->setToolTipDuration(timeout); +#ifndef BACKUPMENUHEADER + backupExitBtn->setToolTipDuration(timeout); +#endif + +}; + +bool BackupFiles::confirmAction(QString name,QString question,QIcon* icon) { + QMessageBox msgBox; + msgBox.setText(question); + if (icon!=nullptr) { + msgBox.setIconPixmap(icon->pixmap(QSize(50,50))); + } + + msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Yes ); + msgBox.setDefaultButton(QMessageBox::Cancel); + msgBox.setStyleSheet(styleMessageBox); + + #ifdef MESSAGEBOXHEADER + msgBox.setWindowTitle(name); + #else + Q_UNUSED(name); + msgBox.setWindowFlag(Qt::FramelessWindowHint,true); + #endif + + return (msgBox.exec()==QMessageBox::Yes); + +} + +QString BackupFiles::calculateStyle(bool on,bool exitBtn){ + QString btnStyle=QString("QPushButton{%1%2}").arg(on + ?"color: black;background-color:white;" + :"color: darkgray;background-color:#e8e8e8 ;" + ).arg(!exitBtn ? + "" + : + "background: transparent;" + "border-radius: 8px;" + "border: 2px solid transparent;" + "max-width:1em;" + "border:none;" + ); + + QString toolTipStyle=" QToolTip { " + "border: 1px solid black;" + "border-width: 1px;" + "padding: 4px;" + "font: 14px ; color:black; background-color:yellow;" + "}"; + btnStyle.append(toolTipStyle); + return btnStyle; +} + +void BackupFiles::looksOn(QPushButton* button,bool on){ + button->setEnabled(on); + button->setStyleSheet(on?styleOn:styleOff); +} + +void BackupFiles::enableButtons(bool enable) { + looksOn(backupUpdateBtn,enable); + looksOn(backupRestoreBtn,enable); + looksOn(backupDeleteBtn,enable); + looksOn(backupRenameBtn,enable); + if (unusedBackupNum<0) { // check if at Maximum limit + backupAddBtn->hide(); + backupaddFullBtn->show(); + } else { + backupaddFullBtn->hide(); + backupAddBtn->show(); + } +} + +void BackupFiles::update_feature() { + if(!graphView) return; + QListWidgetItem * item=backuplist->currentItem(); + if (!item) return; + if(!confirmAction( item->text(), tr("Ok to Update?") , m_icon_update) ) return; + QString backupName = item->data(backupFileName).toString(); + QString name = QString("%1.%2").arg(title).arg(backupName); + graphView->SaveSettings(name); +}; + +void BackupFiles::restore_feature() { + if(!graphView) return; + QListWidgetItem * item=backuplist->currentItem(); + if (!item) return; + QString backupName = item->data(backupFileName).toString(); + QString name = QString("%1.%2").arg(title).arg(backupName); + graphView->LoadSettings(name); + exit(); +}; + +void BackupFiles::rename_feature() { + if(!graphView) return; + QListWidgetItem * item=backuplist->currentItem(); + if (!item) return; + backuplist->editItem(item); + // BackupFiles::itemChanged(QListWidgetItem *item) is called when edit changes the entry. + // itemChanged will update the description map +} + +void BackupFiles::delete_feature() { + if(!graphView) return; + QListWidgetItem * item=backuplist->currentItem(); + if (!item) return; + + if(!confirmAction(item->text(), tr("Ok To Delete?") ,m_icon_delete) ) return; + + QString backupName = item->data(backupFileName).toString(); + backupDescriptions->remove(backupName); + backupDescriptions->save(); + QString relFileName=QString("%1.%2.shg").arg(title).arg(backupName); + dir->remove(relFileName); + delete item; + unusedBackupNum=backupNum(backupName); + enableButtons(true); +} + +void BackupFiles::addFull_feature() { + QMessageBox msgBox; + msgBox.setText(tr("Maximum number of Backups exceeded.")); + msgBox.setStandardButtons(QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); +#ifdef MESSAGEBOXHEADER + msgBox.setWindowTitle(tr("Maximum Files Exceeded")); +#else + msgBox.setWindowFlag(Qt::FramelessWindowHint,true); +#endif + msgBox.setStyleSheet(styleMessageBox); + msgBox.setIconPixmap(m_icon_addFull->pixmap(QSize(50,50))); + msgBox.exec(); +} + +void BackupFiles::add_feature() { + if(!graphView) return; + + QString backupName = QString("%2%3").arg("backup").arg(unusedBackupNum,backupNumMaxLength,10,QLatin1Char('0')); + QString name = QString("%1.%2").arg(title).arg(backupName); + graphView->SaveSettings(name); + // create a default description - use formatted datetime. + QString desc=QDateTime::currentDateTime().toString(); + backupDescriptions->add(backupName,desc); + backupDescriptions->save(); + QListWidgetItem* item = updateFileList( backupName); + if (item!=nullptr) { + backuplist->setCurrentItem(item,QItemSelectionModel::ClearAndSelect); + backuplist->editItem(item); + } +} + +void BackupFiles::itemChanged(QListWidgetItem *item) +{ + QString backupName=item->data(backupFileName).toString(); + QString desc= item->text(); + + // use only the first line in a multiline string. Can be set using cut and paste + QRegularExpressionMatch match = singleLineRe->match(desc); + if (match.hasMatch()) { + // captured match is the first line and has been truncated + desc=match.captured(1).trimmed(); // reoves spaces at end. + } else { + // no match. + // an invalid name was entered. too much white space or empty + desc=""; + } + if (desc.length()>maxDescriptionLen) { + desc.append("..."); + } + if (desc.length() <=0) { + // returns name back to previous saved name + desc=backupDescriptions->get(backupName); + } else { + backupDescriptions->add(backupName,desc); + backupDescriptions->save(); + } + item->setText(desc); +} + +void BackupFiles::itemSelectionChanged() +{ + enableButtons(true); +} + +int BackupFiles::backupNum(QString backupName) { + QRegularExpressionMatch match = backupFileNumRe->match(backupName); + int value=-1; + if (match.hasMatch()) { + value=match.captured(1).toInt(); + } + return value; +} + +QListWidgetItem* BackupFiles::updateFileList(QString find) { + Q_UNUSED(find); + QListWidgetItem* ret=nullptr; + enableButtons(false); + dir->refresh(); + QFileInfoList filelist = dir->entryInfoList( QDir::Files | QDir::Readable | QDir::Writable | QDir::NoSymLinks,QDir::Name); + + // Restrict number of files. easy to find availble unused entry for add function. + + int row=0; + int count=0; + backuplist->clear(); + unusedBackupNum=-1; + backupDescriptions->load(); + for (int i = 0; i < filelist.size(); ++i) { + QFileInfo fileInfo = filelist.at(i); + QString fileName = fileInfo.fileName(); + QRegularExpressionMatch match = parseFilenameRe->match(fileName); + if (match.hasMatch()) { + if (match.lastCapturedIndex()==3) { + QString backupName=match.captured(2); + int backupNum=match.captured(3).toInt(); + // find an available backup name(number); + if (backupNum!=count) { + if (unusedBackupNum<0) unusedBackupNum=count; + } + count++; + + QListWidgetItem *item = new QListWidgetItem(backupDescriptions->get(backupName)); + item->setData(backupFileName,backupName); + item->setFlags(item->flags() | Qt::ItemIsEditable); + backuplist->insertItem(row,item); + //DEBUGF Q(count) Q(backupName) Q(item->text()); + row++; + if (find!=nullptr && backupName==find) { + ret=item; + } + } + } + } + if (unusedBackupNum<0) { // check if there is an existing empty slot + // if not then the next available slot is at the end. CHeck if at max files. + if (countsortItems(); + return ret; +} + + +void BackupFiles::exit() { + backupDialog->close(); +} + +void BackupFiles::backupMenu(gGraphView* graphView) { + this->graphView=graphView; + updateFileList(); + backupDialog->raise(); + backupDialog->exec(); + exit(); +} + +//==================================================================================================== +//==================================================================================================== +// Backup Descriptions map class with file backup + +BackupDescriptions::BackupDescriptions(QDir* dir, QString _filename) +{ + filename = dir->absoluteFilePath(_filename); + parseDescriptionsRe = new QRegularExpression("^\\s*(\\w+):(.*)$"); +}; + +BackupDescriptions::~BackupDescriptions() { + delete parseDescriptionsRe; +}; + +void BackupDescriptions::add(QString key,QString desc) { + descriptions.insert(key,desc); +}; + +void BackupDescriptions::remove(QString key) { + descriptions.remove(key); +} +QString BackupDescriptions::get(QString key) { + QString ret =descriptions.value(key,key); + return ret; +} + +void BackupDescriptions::save() { + QFile file(filename); + file.open(QFile::WriteOnly); + QTextStream out(&file); + + QMapIteratorit(descriptions); + while (it.hasNext()) { + it.next(); + QString line=QString("%1:%2\n").arg(it.key()).arg(it.value()); + out <match(line); + if (match.hasMatch()) { + QString backupName = match.captured(1); + QString desc = match.captured(2); + add(backupName,desc); + } else { + DEBUGF QQ("MATCH ERROR",line); + } + } +} + + +//==================================================================================================== +//==================================================================================================== + + +#if 0 +Are you <b>absolutely sure</b> you want to proceed? + +QMessageBox msgBox; msgBox.setText(tr("Confirm?")); +QAbstractButton* pButtonYes = msgBox.addButton(tr("Yeah!"), QMessageBox::YesRole); +pButtonNo=msgBox.addButton(tr("Nope"), QMessageBox::NoRole); +btn.setIcon(const QIcon &icon); + +msgBox.exec(); + +if (msgBox.clickedButton()==pButtonYes) { + + +QIcon groupIcon( style()->standardIcon( QStyle::SP_DirClosedIcon ) ) +https://www.pythonguis.com/faq/built-in-qicons-pyqt/ + +QMessageBox msgBox; +msgBox.setText("The document has been modified."); +msgBox.setInformativeText("Do you want to save your changes?"); +msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); +msgBox.setDefaultButton(QMessageBox::Save); +int ret = msgBox.exec(); +switch (ret) { + case QMessageBox::Save: + // Save was clicked + break; + case QMessageBox::Discard: + // Don't Save was clicked + break; + case QMessageBox::Cancel: + // Cancel was clicked + break; + default: + // should never be reached + break; +} + + + +// Reminders For testing + + Different languages unicodes to test. optained from translation files + + 도움주신분들 + 已成功删除 + 删除 + הצג את מחיצת הנתונים + + הצג את מחיצת הנתונים 已成功删除 عذرا ، لا يمكن تحديد موقع ملف. + 已成功删除 عذرا ، لا يمكن تحديد موقع ملف. 删除 + Toon gegevensmap + عذرا ، لا يمكن تحديد موقع ملف. + + + backupDialog->connect(backuplist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); + backupDialog->connect(backuplist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); + backupDialog->connect(backuplist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); + backupDialog->connect(backuplist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + backupDialog->connect(backuplist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + + + + backupDialog->disconnect(backuplist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); + backupDialog->disconnect(backuplist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); + backupDialog->disconnect(backuplist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); + backupDialog->disconnect(backuplist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + backupDialog->disconnect(backuplist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + + +void BackupFiles::itemActivated(QListWidgetItem *item) +{ + Q_UNUSED( item ); + DEBUGF Q( item->text() ); +} + +void BackupFiles::itemDoubleClicked(QListWidgetItem *item) +{ + Q_UNUSED( item ); + DEBUGF Q( item->text() ); +} + +void BackupFiles::itemClicked(QListWidgetItem *item) +{ + Q_UNUSED( item ); + DEBUGF Q( item->text() ); +} + +void BackupFiles::itemEntered(QListWidgetItem *item) +{ + Q_UNUSED( item ); + DEBUGF Q( item->text() ); +} + +void BackupFiles::itemPressed(QListWidgetItem *item) +{ + Q_UNUSED( item ); + DEBUGF Q( item->text() ); +} + +//private_slots: + void itemActivated(QListWidgetItem *item); + void itemDoubleClicked(QListWidgetItem *item); + void itemClicked(QListWidgetItem *item); + void itemEntered(QListWidgetItem *item); + void itemPressed(QListWidgetItem *item); + + + + + +#endif + diff --git a/oscar/backupFiles.h b/oscar/backupFiles.h new file mode 100644 index 00000000..31f4bd11 --- /dev/null +++ b/oscar/backupFiles.h @@ -0,0 +1,121 @@ +/* Overview GUI Headers + * + * Copyright (c) 2019-2022 The OSCAR Team + * Copyright (C) 2011-2018 Mark Watkins + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of the source code + * for more details. */ + +#ifndef BACKUPFILES_H +#define BACKUPFILES_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include "Graphs/gGraphView.h" + +class BackupDescriptions +{ +public: + BackupDescriptions(QDir* dir, QString filename) ; + virtual ~BackupDescriptions(); + void add(QString key,QString desc); + void remove(QString key); + QString get(QString key); + void load(); + void save(); +private: + QString filename; + QMap descriptions; + const QRegularExpression* parseDescriptionsRe; +}; + +class BackupFiles : public QWidget +{ + Q_OBJECT +public: + explicit BackupFiles(QString title , QWidget* parent) ; + ~BackupFiles(); + void backupMenu(gGraphView* graphView); +protected: + QIcon* m_icon_exit = new QIcon(":/icons/exit.png"); + QIcon* m_icon_delete = new QIcon(":/icons/trash_can.png"); + QIcon* m_icon_update = new QIcon(":/icons/update.png"); + QIcon* m_icon_restore = new QIcon(":/icons/restore.png"); + QIcon* m_icon_rename = new QIcon(":/icons/rename.png"); + QIcon* m_icon_add = new QIcon(":/icons/plus.png"); + QIcon* m_icon_addFull = new QIcon(":/icons/brick-wall.png"); + +private: + const static int backupNumMaxLength=3; + const static int maxFiles=10; // Max supported design limited is 1000 - based on backupName has has 3 numeric digits backupNumMaxLength=3. + const static int maxDescriptionLen=60; + + const QRegularExpression* singleLineRe; + const QRegularExpression* backupFileNumRe; + const QRegularExpression* parseFilenameRe; + + + QWidget* parent; + const QString title; + gGraphView* graphView=nullptr; + + // backup widget + QDialog* backupDialog; + QListWidget* backuplist; + + QPushButton* backupaddFullBtn; // Must be first item for workaround. + QPushButton* backupAddBtn; + QPushButton* backupDeleteBtn; + QPushButton* backupRestoreBtn; + QPushButton* backupUpdateBtn; + QPushButton* backupRenameBtn; + QPushButton* backupExitBtn; + + QVBoxLayout* backupLayout; + QHBoxLayout* layout1; + QVBoxLayout* layout2; + + QDir* dir; + int unusedBackupNum; + QListWidgetItem* updateFileList(QString findi=QString()); + QString styleOn; + QString styleOff; + QString styleExitBtn; + QString styleMessageBox; + QString styleDialog; + QString calculateStyle(bool on,bool border); + void looksOn(QPushButton* button,bool on); + BackupDescriptions* backupDescriptions; + bool confirmAction(QString name,QString question,QIcon* icon); + + void createMenu(); + void enableButtons(bool enable); + void add_featurertn(); + + const int backupFileName = Qt::UserRole; + int backupNum(QString backupName); + +public slots: +private slots: + void add_feature(); + void addFull_feature(); + void update_feature(); + void restore_feature(); + void delete_feature(); + void rename_feature(); + void exit(); + + void itemChanged(QListWidgetItem *item); + void itemSelectionChanged(); +}; + + +#endif // BACKUPFILES_H diff --git a/oscar/daily.cpp b/oscar/daily.cpp index 488727fe..4909c7eb 100644 --- a/oscar/daily.cpp +++ b/oscar/daily.cpp @@ -541,6 +541,7 @@ Daily::Daily(QWidget *parent,gGraphView * shared) ui->JournalNotes->installEventFilter(this); // qDebug() << "Finished making new Daily object"; // sleep(3); + backupFiles=nullptr; } Daily::~Daily() @@ -563,6 +564,7 @@ Daily::~Daily() delete ui; delete icon_on; delete icon_off; + if (backupFiles!=nullptr) delete backupFiles; } void Daily::showEvent(QShowEvent *) @@ -2849,3 +2851,13 @@ void Daily::on_splitter_2_splitterMoved(int, int) // qDebug() << "Left Panel width set to " << size; AppSetting->setDailyPanelWidth(size); } + +void Daily::on_backup_clicked() { + if (!backupFiles) { + backupFiles= new BackupFiles("daily",this); + } + if (backupFiles) { + backupFiles->backupMenu(GraphView); + } +} + diff --git a/oscar/daily.h b/oscar/daily.h index 71198971..9d8edaf6 100644 --- a/oscar/daily.h +++ b/oscar/daily.h @@ -28,6 +28,7 @@ #include "Graphs/gLineChart.h" #include "sessionbar.h" #include "mytextbrowser.h" +#include "backupFiles.h" namespace Ui { @@ -272,6 +273,8 @@ private slots: void on_splitter_2_splitterMoved(int pos, int index); + void on_backup_clicked(); + protected: virtual void showEvent(QShowEvent *); @@ -360,6 +363,7 @@ private: #endif bool BookmarksChanged; + BackupFiles* backupFiles=nullptr; }; #endif // DAILY_H diff --git a/oscar/daily.ui b/oscar/daily.ui index 6199b948..294abed7 100644 --- a/oscar/daily.ui +++ b/oscar/daily.ui @@ -1557,6 +1557,13 @@ QToolButton:pressed { + + + + Backup + + + diff --git a/oscar/icons/brick-wall.png b/oscar/icons/brick-wall.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2c3536e11a0236199a8325e1426a75b864d241 GIT binary patch literal 117847 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 z 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 a?g1szN98gjTQBYZaf&==tXrb(9PvLkcd}jp literal 0 HcmV?d00001 diff --git a/oscar/icons/plus.png b/oscar/icons/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8e6287e156776f8416b9c377b5260df728a5f2 GIT binary patch literal 2204 zcmai0c~BEq9A2QHAYwrj@FFf17?f-hA(%`81OfsQ8X=ZLfiBrivL(sJWPuRzzVOx= zkEuf$py(jtg(5nDmce5H1sRLOc+}F`T0w?VM5S8jOM)Cm+CMhQd*Ao_-tT?C-+P-~ z;<)A09p*Sd5HvkHN*E8mWyWW!9r)xteU<@1pIss(NmP<3mMbMybQB{qaJpWl0XPKl zLi8F`nu$}i3|vmA`EYN|b(ltAd^j;s#1Lu1aRm`&(BcV(IEmDdDdk{rNU#G>&jkW1 zoI+`Ol~S$a>iMuqmkWLyrxBQDqEMN9I7uX?g_ByG7Dx}IGvHtc8c&PKxbecskzg?5 z!wQPha1kUYCx@Q1lul~p2$RF%APg45V)+Axzb;ozp?ZI{&dVra))3-4sg}@C1gWMO zHPH+*i{isDz-c4mxSkkOSL;T$4~#&J2*RW@knwbikWE52A{KOwf}}{Dg4B#|V8Rlk zutgxS@6#cARP!maNc7)ym1@E^bW}t(Fk-~i2|0aOKqtx7;7B~KBeS$pJR%!cQ(h(~ zjJ|NigdSHW2?-Uh)&Y0R7c9F98`-7-PqwUHs}F-Ehik_|)Qi_h4RmS;|U%nEsopvg5V> zk56D3_MHjn0dF_gYk>p$?dh>`iEo=Re;21MCsI3(4BhNYufQ%9oUfgiL$4{3^h&SY zIC`h`Zp=&P-bkO=e2DJt;gx?t5Q)9+#Pc^Kuk_jYv(LsITb}u`PFECPh&}EY!7Di% zHBfrv@E_40$q()f4fmWboU@=@Qf*uGqLJ~Fp*VM1)1rpAynwxbIVX8`!s*S(yiLQY zui{0z-mOxb7J6n%-jtT0`oW@GmpTq$v#Lwu|1?;?_NCIoyE9J6+t=^!U06v^&$6vq zchBef{1s1&)+wNNuZrp5jbX2eO4dP;(+%Teb!4&ATnMtZiWUka`huRv%-vmL_t4G| zZ`dX#Gzk68Y0b8|RaF}M%QIFl-jkS=-`0Y4p}z~@9qU-Vc>{~yKMS>P6jh!ij=LYc zE1S8qp}75FpMGA=6Z+9+yfvXNHMO*`==A*;uFw0gwm)oBxW0K;_k7pi%ozTr4KjD% zhENZ?CWd&&W|re&w8+s0cP~qy@7-MaqgUU(a{%GxwL5|1y|&Ik<)5?&GyS4SW!^zTjL>_G-84M?F1Lyib+;4NU!x zzhDM}OUC8r+W_IoGIzg*&{=zK!UK-ZZ5z6~2Mj&0qE0SpPV;Phg|faCW?x-nSLLCv zOS|2tS5~oG`#XByTu3=%DD0|hs;t;Em{(}nAGf>YQAllbrDM~o;%U81@z!a-%H3lo znqiSY{wd2oV%fRfdNMSLP=xSh!i=_v`vLv=ZxuDQXS=UEw+)>Ob=(+ib@joQ%q}dw R%=o7wIwDSZHtg#y{{pA;9sU3S literal 0 HcmV?d00001 diff --git a/oscar/icons/rename.png b/oscar/icons/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..9acf567f4a684a324b2a9df07354345acf13adcc GIT binary patch literal 5417 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 literal 0 HcmV?d00001 diff --git a/oscar/oscar.pro b/oscar/oscar.pro index 2f908712..aef6e320 100644 --- a/oscar/oscar.pro +++ b/oscar/oscar.pro @@ -255,6 +255,8 @@ lessThan(QT_MAJOR_VERSION,5)|lessThan(QT_MINOR_VERSION,12) { SOURCES += \ checkupdates.cpp \ + overview.cpp \ + backupFiles.cpp \ common_gui.cpp \ cprogressbar.cpp \ daily.cpp \ @@ -262,7 +264,6 @@ SOURCES += \ main.cpp \ mainwindow.cpp \ newprofile.cpp \ - overview.cpp \ preferencesdialog.cpp \ # psettings.cpp \ reports.cpp \ @@ -361,13 +362,14 @@ QMAKE_EXTRA_COMPILERS += optimize HEADERS += \ checkupdates.h \ + overview.h \ + backupFiles.h \ common_gui.h \ cprogressbar.h \ daily.h \ exportcsv.h \ mainwindow.h \ newprofile.h \ - overview.h \ preferencesdialog.h \ # psettings.h \ reports.h \ diff --git a/oscar/overview.cpp b/oscar/overview.cpp index a2e6907a..5edc37c8 100644 --- a/oscar/overview.cpp +++ b/oscar/overview.cpp @@ -171,6 +171,7 @@ Overview::Overview(QWidget *parent, gGraphView *shared) : connect(GraphView, SIGNAL(updateRange(double,double)), this, SLOT(on_RangeUpdate(double,double))); connect(GraphView, SIGNAL(GraphsChanged()), this, SLOT(updateGraphCombo())); connect(GraphView, SIGNAL(XBoundsChanged(qint64 ,qint64)), this, SLOT(on_XBoundsChanged(qint64 ,qint64))); + backupFiles=nullptr; } Overview::~Overview() @@ -192,6 +193,7 @@ Overview::~Overview() delete icon_off ; delete icon_up_down ; delete icon_warning ; + if (backupFiles!=nullptr) delete backupFiles; } void Overview::ResetFont() @@ -933,3 +935,12 @@ void Overview::on_toggleVisibility_clicked(bool checked) GraphView->redraw(); } +void Overview::on_backup_clicked() { + if (!backupFiles) { + backupFiles= new BackupFiles("overview",this); + } + if (backupFiles) { + backupFiles->backupMenu(GraphView); + } +} + diff --git a/oscar/overview.h b/oscar/overview.h index a5497b4a..2260b41a 100644 --- a/oscar/overview.h +++ b/oscar/overview.h @@ -23,6 +23,11 @@ #include "Graphs/gOverviewGraph.h" #endif #include "Graphs/gSummaryChart.h" +#include "backupFiles.h" + +#include +#include +#include namespace Ui { class Overview; @@ -140,6 +145,8 @@ class Overview : public QWidget void on_RangeUpdate(double minx, double maxx); void setGraphText (); + void on_backup_clicked(); + private: void CreateAllGraphs(); void timedUpdateOverview(int ms=0); @@ -193,6 +200,7 @@ class Overview : public QWidget // Are start and end widgets displaying the same month. bool samePage; + BackupFiles* backupFiles=nullptr; }; diff --git a/oscar/overview.ui b/oscar/overview.ui index 267cd9b8..90ab0d87 100644 --- a/oscar/overview.ui +++ b/oscar/overview.ui @@ -259,6 +259,13 @@ QToolButton:pressed { + + + + Backup + + + From da7e0235fc14f1b2121e35426c2f9077dc20cc5f Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Tue, 27 Dec 2022 14:31:08 -0500 Subject: [PATCH 02/17] update icon --- oscar/icons/trash_can.png | Bin 5870 -> 5205 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/oscar/icons/trash_can.png b/oscar/icons/trash_can.png index d0c180e32723c073f54b43b21e55155639f5b8bb..e4352e71b71473f807ebd5a7be78776243e9ea23 100644 GIT binary patch delta 4099 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 Br(gg8 diff --git a/oscar/icons/exit.png b/oscar/icons/exit.png index 47491db712a1bc8c68202e6451f70d260e9ef9c6..d4ba925396cf9ddd0bc6c6c635cb2adfa6158f23 100644 GIT binary patch delta 2922 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 UUWrHY01E&B07*qoM6N<$g3chR0ssI2 delta 4366 zcmV+p5%KQ&AAl<%iBL{Q4GJ0x0000DNk~Le0001G0001F2nGNE0G}ZKYOx_n0s%3T zYXVIHF_XCh&kHg#R5CC+H8MIhF_V)6B?~e#R5CC+H8MIhF_Xgsp$jrHR5CC+H8MIh zF_UiuZU`^~s0;uA0fCd{1R{SkL&S)pSV)tGl@X&RHWoAaRanf7GT6+#`K9K^>%EyY z*(zH_iH%kw9k8q6uWhqwQ9%xYt7M^u7IUccwB!`wVd#@@a$Sn zHF-z4LrI3C!e_z*np{x$&eS7iel5%Pa(B?UmV$j-M&KIGAAqA0CDo6Ys%=n?c!8BY&urKTlS274a$sG*(HFB*%cL zd8rYokcy$>3;p}1ujUq^;fJOlkqaA00009a7bBm000ie000ie0hKEb8vuU*4&_NiK~#90?VWpY zR^^??Kku725Fmiz7H$a%qCzO3P^9iMmJUv<-43nNt*zE=tAet#LObHFLZ@3;SLxD= zQ=p?;DkFGdq+&}cqplY0*lv}PYgHhC0V5%VTe#-t#7qwZPPy$>Dlmh)-=?QcNa)Ab*4mb_e07rldV4wT-BUh>c zWzB;O5ewUZix3BTVF>sJa0f6f`JXvJ7grLlNKyM5|Tm#$!Oa;n-ZtgGVx{`k+B@Q^GNNK>3Q3qTA-UHqM zUIBLFH4_J@#k8KE11sF0ePWRd+y<-#jsuE=J`4I0XcMR!BnxsFw9(b`Sx|1Ok<|h( zyLKhQ3QQOn2+RQX0LlaXJ?L>aST;yVCzYT@t{q)c1nmXBjTyHtTXYBR1I_}<2i;|{ zHFQ*tf$o0<^+=J^2+VTrzpO9=r~=d-^b63D2oTVo90C2e`{BWiGnK&IL}wiCFeU+S z0Zw1gVo*&40-lLfW4gA2RLgk_m>gj}IHXd-`m19@j9NOrJ?Av&Mng;kW?>yDN`TrSnGjN3 zEFC)3wqr>wSz@}0u!%@YX{mJJKzh3$e_To=(mrnw=nA~9?9)LJl8>8cu)(im1qFXC z$B=Y*?z!;E0BOJg>DV!UHam{AXpyhyZUZF@DSsuPt^XeZ&V0X)_36`gm(>=Unxq$B zl)7{YkC1WWq^hdS?3Sb-|2XZln`p6yS=L!XZUj^cI_}4@k`jMSzco0Hw0ybLqeu1$ z89!dCsOXs8lJwJ``Xc5!L&|AjR7ZaaNdRx<;dA@Fw6tTNw2SepUuAb4Q&Qq@?DIoR zZf?7}{s*rcJA_Hh$r#@Sv!~^xbF6RQ%*K%R;5gE6f14dbh7XrcpAN=uNqXXmv^r^Ql4b+BVhX{mJds2y969Wx)&G&a=Xy&S8=ydX@AZvlET6G!85Y5sgWjyjI?`s=_ua743wGMu94CKHNFzsfI8J{` zbzyJO#`a4BsGZPRLcokMbLQ9ygyTqm{-+;!-3<(H*iy)M=Jna@ZyHFk9F-D|qUfMT>4?|jVKi%H1`j{IGa zgfy3j9gxFgA6VH6bQHxy63i2%zZ)wn&M`rF-wS6DY?q ztLXfEY3fwz%o#g+KK|IeNwpB4Ie1;zwC1GD2ejT6DPYE!`|f|U_bJ}E(O#GJ{`=C1 z5!Pa}D@DqGH7Df*KnHD-l9UG@v^U1sKzX@IqOcs7euk7+lY|t2N$cKE^<;ONn;sdV>Q62PQ5Ffc}%%@-SR99X^_ z=FW{4G3DiO>#eYVe^%9&rM?}X0EQvSo1cB&=Ks@pxEP7*too_17DFvW%-! z-(D97h9v0VTl}E#!VB=#uR=pZcsA_Z31h~DLI^Y~Km&gx;z0joA)3(OIPja_z|5I& z?p*fuzxyssn+7#C+1Kr&FJ9e|LV!Q@#%EqvHstQRrSs>rH|^cC#~jlL+was`k8SxFKR2kJz`Dv#ZE8?0FaJ$l&FF=-NP+z5TF zpMLX=dhCl1s!;jt7h?zzY8i)FK0DJXzV zn_%F;?CER;O_+iNKwUIQiN#C{S-RA2m(>==j4^+ci^9U}>vnMzueYj-1CBQi#ROc8aY` z{UCqv-g{DEVb)^u4`!Ki0XMI>7vK!QWb9?d2wRygLF4#wsi-I`F}c=|vZs0L*#c-^ zHVBzBC)zFKVjMm!4IXSgF78?T^^n@~S_QDfW~Uj8!R*-=z`lLb(4ki1 z^Bugrug^Cpr3X+o-WDmdXWI#sWYSif>zX*xUY6wP(}Ab0p2w>eeuj(QHO7Gdje|Z6 znvjPdwl{`s*l_8Qh*(S-HA*^l%8t&esz3+--FRo~pKGma`#NM;$E!Vw#msR#TWNo) z>(-eXFm36dGR4fEY@oc{6a)$&PCv)%y1vpHDLKHAu|W~?z3NG( zV-6kabbfI?Xhe#XHdm{w5}>0&bXm6W$}5@KGIFFzKed4~XF5g9>nTDuv_%NO&49kx z8A28;uvhHhrI$KZg`%v?9EY=kLx+DlJow*>cM!F>JyLQp+c4VSkuGcAJbQ; zI9)oKJlTIOuS`)P+(M|=Uq)eJ*r*KZ1(o(zduJ|~B*`dz}cLC1Lm^$w5I(X%kWNv*kG-cPu zm3|#8DUo*X&Ww<-$Y?IZhx@O*+Sn*9UFz$mh~MGu1aBh1T>5Un@m^$bj%Cmwf7|Cz zKOH_9&82VO^erY?Lpc^p`@9{g7ScqEQ*^;#I-rtFh#5S%{o>J4y?|ik$o8w~Ene)a zh17yZ;a#M5Q_zGY@$Y|tKJO~@<>1hv(zb1vI<|ayFm)kq$>`Cox0uHs^F@dQnu<65 z{ZA|&0ZL#>AUStqD)9Jnu&AhI{rg}3GW?+XkpTlzExn<^6od9b$a&B|;&ofk+9IPl zaxpiw>Gn(!ye&Bl z`gDqrSLwtSN>GRcF99n21QN3c@BF)f6-4OtdjeA)Ts=X{BM>ax(ga!tD!^NZe3y_5 zceI5s0X1N@s4sulR#S-?N8R@#2Z39|4SRa@1l|Oi@TqlYw1;axnA!`w4H{`N-8@fH!8ywQmAmaiLEJ62L^v zjjJ`d1eJmA0IdQYvP429<}K`E<;s$5-R_-B-Ck z7zYf;WE_9=2YO@X-rX?Ki-DIdeI9e|Xf1~ABbfA&?U+OA6lmVjBQrbcc(~7!d&Sj1Q#sgz8 z#|MfrxzF7&Ez7|)lw+9d`YJFtTWFPVeJRR91007*qo IM6N<$f`9p2g8%>k diff --git a/oscar/icons/plus.png b/oscar/icons/plus.png index ab8e6287e156776f8416b9c377b5260df728a5f2..e1a4dd2f8fd6e9643685b02ea34f628a5d7439ff 100644 GIT binary patch delta 1009 zcmbOuctJq5Gr-TCmrII^fq{Y7)59eQNT&dCG6x%w%zeJ}4Fdzqrj4quOpFGTvzers zEG;K@GU-bhC~+w$D3oNTrCE9ACZ?zQq~@iUWY{VJr7tsWnD>p{1Fbu92Q01B1rI(uwD_T>?dp z+oyF%^d==L`W`x!5s;K@n53a|Or!bi8RLAnv(oFoyG>fVDRjz>A6p;jC#+sGRVirG z6w{54=XZX-;_>XxIotWa_kN%A&Q{!J> zZJGHpeSw$m=&_il0ABk!ln)Ks^1 zm?sLWI?Z5M%wy=GAN%F>9q;-Hc~+^eoqqxp>ziCpUQIEJJebsIBKfJLW0%U+V4>2B z!A6_btoZl;?drAPOLkwaOWC$H#r{wo@CewXd*Zc{Q{(q*nH!%Ens8U|JS;imQM%ZVxs3DK&;DYY z!*ts5bJ->R1k)G0n3jEy{a2_jNY?%?@sX(`?-{Y1!gv#5OGTr?wZ z&l!Ie{ZP%6H&1W%?#9jkn8XkKJuuVxE8j%oeGp8F-!tE_#yzn9ka(f|nSJBa8G-qa Z1BQaM%#H%> z_QI|gTQs7UY~T=DEA)|3(M*g}igjy;V9za;>C-11FBBKtD4N5}wWxQ!(|@L1)@;WB z5l5Y)Q5W3~Tc$G!8g4#wZu|bbl4a=!g-&W&?k!{}`ngDqkF`GL^F`M1&&FnRZoE7o zA6!yeRc7N9`+LXYgFWVPo5TJV|Bs4RTB&{Ef|AXu6;Xi|P8C^OSIpX@duM4%66eF< z#C|n#k$t9LD_Y}y{K9{nPSF+OYg!t6W9q-7ALG}gY?-rRk4(AV?nNQ*llL8&cINz9 zuQ!74-PC)lemJxuMWiwsn+f1qC9*7QWnX!V+f8+~T+xY{gQ=kayP zktr`cB_pq$`S<_r>UmOft3tN3E_iv;;9k|jO72sthkw|Z^n4PGkbkHYe_CIr;eYIx zAm8Hm&B@H?^s=LB*w2|C{JG%RmK*&kqT81QeW+skrcn~-{5olA`qkRL_lle9_2Nre zcUNCfe=h5Ne?fHy!&T)qyuj$^EbxddW?X?_wfUqO7?>D6T^vIy=DfXQ*!3zv z!r`I4ni8{@gL&dpzL*y2ty>E?xA8}7cZWxGTs)WZD)E`4Qd_mr`OxQe%5TWJ6B@WYjgg-={57(IqTn+ zMT>90{q`-p+R9a0UpeO5%JJ)`h9Egm<1j;NWSWH5VF%Ifqe@?S1TWUTe*LxT?H7+_ zI;Z30Pku=>n(0!uGp3$xt7OIAxZ@uya<-bC|9s>9_l;3&tLDAhdur2~?w>XDs`~u8 z7Tvbrb9xicsnCVo?+pW*xgV!Xc%cRdh6k|t2}6iY{Mg-pZa7SGb$Juaf6?`_$>)wA o8N2tad%a)q;=lC{JoR>rJFod0zDkK-0Zb(fp00i_>zopr0C#oEx&QzG diff --git a/oscar/icons/rename.png b/oscar/icons/rename.png index 9acf567f4a684a324b2a9df07354345acf13adcc..b4976f4631e3641009aad9a55cd636a317f9c943 100644 GIT binary patch delta 3171 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 JPDHLkV1hk|{W|~v delta 4310 zcmY*cbyO7JA6>eZMnFK?6_D5Y7?F@AMPfk^MY;tU zAyGyMqzqC@MnWPvndtWa_1lSZ{;%&r>`v}EIiCQ55WGsp5%U75=yc2{(|()b&uliM z5s{rb(8$hyfmTVBM`-ccexL_T_iL}Qfz9&xtJat0)y6RzJ%(c)r1EPS#Tj-3+cSp^ z^Ff0fbKY%idUtQOghG&$&CJl#tV62Ufi6c^9~(y|b(Nt%8NXH1-<^29?u?TPaVVc! zyQ)nyePZ%`m|qSkD0*z^Z|EN=QTeV}WF{w%7qR%zx(>#|^iAT}31g+Bmv-7`C&FXLp4F`InhnEbF)3lJgE8y{ z5}uGawMMPx8xHoKbIdFI>wep$^u>QP8K@JzhBPrcK~qL8)xhng@YFE#hCpaK{%ZuO zcWKxG@Gf3cMbXGVYx_N*&xGUZo^SH&Cg@J2D<&5qWgAxHlm0>=|9x-V2^G;*WT8kc z9WH4&h7+fLc;6)rr9Z)L`TR|elv=o9d46(q@lvH zx?MLPWn7xST5eiJDC@gLH=U>cBYHCBg|9EKurQQ4Hu9ZVa*yZn=A($Hs2Ka-9X__l-}#Vb13j<7l(tL;u}@bV=1+@wbo;0X7CK1Or*A&;UK>!X9FMi0vZYr|FDQV0`SN9Nc)Y?Qmc=SK2^;!%Oe7^W6=OZ+&ExyS zi$haWlLyk}N*VboT?h6Yzhkk4!vURrv`{F2V9T84VRlUCPISX_9OZEo5(XnREM`(v zRMgPWSis>=PChj@PFWsu#?JmQdi2OZY-N9cKNnCq->Mn4Z9QG03i=f!>f4#wsgxc1 z&)E`1^3urIIALdeW=6*}4Y$pQ?d$oKDYZ=<^q|8A3wIpMz71{HujEq81-yI|5|)3W z2IZ7*=;sbigfMePhm5BW-aC(*igTN(r$=VE9syC-pI`hn{wzE{lc;dzf1Mo_RsQxl zhdM7GUjRLKs+OjO#VwEPfdM@RCZ>+*5B6q;R#qPBxC0H>MAmZS*gmY-;qVPg5{F;! zI<(L)5GR(FmgZU}L*6J{UyO`R z;V=`v`yTG@Fl0s?ewmb*nC`uv)J_!wfiSZE>Nf2#a?@YntAu@OYU*g=PY{>AtgIS=fq}3`YKDdkwQ-%XEaoAkoH56`X3oxn67nb%V^~;NvXFA_kiKKz z=;-Lj%F4mVSUHB$h($C_q2BwYd=xbN=;%ljn` zfWDT3lAN47BqRh#7Ja>pu6Fq& zZ~LxoB9!{34`(cu^L?*hhYh&cCo3r_aTOY|O^*w{yu1Wda`g3|`571_{rdB%xEM2) zMZlerks*owOJE9<@M~yp=8$=xfUVFM_zbRbrop?rKnoG_&qw(27xKafA69XXjEr6` zqc`>2Smk#WE&kC@1{{W+MFC6J?)CSIU4OHo|BW~9+uyd>d4lAnTi(O3$8^YP&YQ^NJkW@IgOciLMD=w3f`Q@?O)!PWs(mmb9m) zrjCw{4IgsiNES`fpkrX*-JG_bot)sb{&4i-T^eO3TQ+ zgHlt|*GvjerDbN`ouK$RIOx|!GX9?K+hMEkHXHCFg#i-qx4cdTpO>2(E|ba($v`w=tYg zQwr-&xW(u?U}I~G>9p}mcasX|M2Lupj5c{ejN_Y3wUv|z^9=vBN2jGR&ol>&Sbv?R z&IaHSbiqeM>Z1;E)~tDXdFcL(j~}_4&sH->o5R8gQc_aT{a>f|=UIn0d{(NuIddiN zXr~E#`9tx?$MjZKRwW@~Vq&GFD+Tb2g0h?(g7HeLHHx3r!e2e+cfJcD<0>n~KIP^X z2dL%J&jZ&j?IE6IUF6E-ZDZx;#k-rYqkt%zldVY_KMmfb1sv9jx&Qj0PwduCxcT1h zsk4gZ7Z4Cozn7h)II+vwpW8q6GW{0u;-Q zA0DC;l-=DcMuNR=@-cXE+(DCaF)}V633+dh3bw6NQ&I7Oq|?LqU@jDFTwGi{fyEyr zCH{l*_$=FJWF)CtksBk04-aKzWQccb02K;gctF?xX3y9I&T2 z;;8Nm5oW53%gf>#<5%I~#bO-NpyqsxjEwYO6G1+TCXzScnZHiY zcUvvCNmCaV7Lv~9m&97ucb>EYp%#0jV}G`$YN;}%JV+N_=CjP+Qi^^$vhH#fVym!| z4*2;=A(2RU(1|OD^z)S~sxmzlxD7g?eK=p+z{G?M;(z?dBq=K^?lo8Fg!8~`AGuop z)#bUmDnXQEzw1o>kf7eII=4-n8XqMURlvr42>w=MV&o`bNj(%nX1?Ag7kgR5T}6VKX?!fw+ebbCvmp^bOaFz3CRL_VCO)NJ{#^(lhGK*3zsuJ`A$ST z;pTI8fCELNWNFC>ynXw24+Lg@cmI+s8xBjR0QYC~eS3TRA`WL?H+18!@yCh^8Xg{= zqKb;Hi?c%mQ`7aYc$SKncc9%~&4N{Y0;yUq#nKO*b>_dhvF z79fqRBbaNM&#fK6M_(R`7zy1V=P9bJ>;_9o(uWU;z}%drft#*G(Fis|^r!b~KmBaj z=g;s9kcAq$x+Lvz(4~L&^(lked2DXJJ2^n`fHlpY*i^rRMH~4w3GD=Fxf?h3muGPJeY<-`MafqTL~Uz*=mi z6|!c)n}ps*8N1Z7-OOP)$iZG zzh~M_%+1k&4A08qm}vxRmzV#+V}MIG=FJpQ^X!65E2r49;|5Q<>&7oh*~yBudLWL9}R1d;*9=7 zoPm)s;I1Jklq~t6F+sgcmWC$@!^4KnhXb-ktu$Qsp!tRyW{d-o*|LMcds!^rR2G34 z!g)8`yE?U9+TPX;*%D3F>PZtZ*Kl+!Y~PaoTh;mzUfFsj^T+?ii(1nzH?`6~l;7&9 zUY?$vC0PNNe|WxH$Z!%tz<@J)R8}S|E+H|=kz?})RK@0|OMjMh@;e1M{H1+g8dxH7 zo0_J3<}eX&>_GeD2hiyB$0#OBlF853L}#0&l^P)-@@H!wfF}n_F3QS80S7&INS?tV z44j;Ly?uSE>>@7$9;%V^oS$s7p9Mi4d&N4kvMjxH)TF7R60tCR#Aoi}QX=3% zj@C~1D*U;599U-6I#)55paTnkBFZ(}+}sRC9iHSKZtzIeQoqJ(@IN*4^-0poiIq}`ZQWAX3%d?xQTP%Beaa&tW zKuip{^LMPA4-Au|Vs~`&AtqMwJQi$j>13Z1}yh$n}(e*|Z5XlP&*Rp8>}OrTY` zpaVavW+V7LM%&>W1tqewnx{~3M&4v&XHQB>LhJ}dATyvKT~2|MX%E#5mNjU>5kvW- zM~^`AFUKq`FNarGBRLd8gL|V1bquV@dC-AJ0>dLCB;9tVX{v#NGXG7KmIgy7wpnC6 zp0hc{WrG9k92_V^a|HSMiNWIcb6~)?+HVPgix@~*wmSem`gz1MyITm0#%e~ADFgDEO4Ro2r> z=*AG%dv$=iu*UVK)<4JfrXPVe?>hAbpa=*EcvwN@O6?xtfEBY+3l5g^=(<*>m5)F< z4v^pT#q-Zp2$q(VEMY)p#&1v8ErZ5`j}Um7sj36U(NULUr@>fj*8WT>+Q`UA4ILey zD!+kFH{R9c2lv{j#G2tkF-Ah2QPk}E=H@|z;4&0Dz`_7}1k;Th@dc`Ys_NoGTe#^L zrz9$QZxPXW*7tg^Ma;iG-JNTJvqJaw_Z5A8B?sQi`aOsxtcTlxS^}vEDva%kr3P?aMZ!!A<6i6pF0J*nNeUMe0aFDwA6v(AKMD+ z8J?cjW)?QR4^etkR3vZ!CMwzK$m07f%H(FS?0&}FKQ1ALhK47EPI90nd;`I}s$R!C b|KswG2r7B^j&c_KmxXAm>Zw#HJ$>~*aIQB2 diff --git a/oscar/icons/restore.png b/oscar/icons/restore.png index 65f2e76cf4bf8b99a109dfe3309f38b628b485a7..0f6922fe82d3802b982014ae7a8e9467e0abca8c 100644 GIT binary patch delta 2267 zcmcgt`8ONd77of)LzQYNs+va8h9u^uiPk)|N|Lt14MieUBpRWqAk6_Eb~Q;E!BF2ny;(kqMr7?`__B^!24nEbH07{x6k?Z+H0Lc#W)4kSbIB5NihX6 z001CqZDoc!Sn=OYRPey>hY1P+0K(UkRd-m|1t1{22NLK-qxr!h5WfH_NsB@yLhv3C z0*T;DAk+LIFfAB_B`a`=6)N!VIL+JB6K?J6MkHJ%kcl)eBoGFLvVIYi7l5*c1hr2a zXhUE?F%=b+ABk8L!Jk43pm|fsNZ|J))-}OX2bn%Ue5{}nOGC(2TnCDQ8Njt+a9w>C zOGuUZUsw~W2Zus|M&BzU@E&lQH;qL2fm9GwyeHh4MEeW<1xem2bYBvjxV?hTJYKV*^n&se0AM z{jWCOSZE;qRa)|0O&#~DvQ0n~)3Wt9xn9&LEQVZ49ND$ z6h#BQ4llaHHrlEj?kOZmc9lf_q&w8b6i*aQ)Z|@jb8eM%ItPOU13$QR3P({=pVGFm zcPD1Ax7`H8MW4byUHMZ^jai*mE%7NS=vgvuFmxr~<+JTm{pHef<`%7C zIK-`pPUDQ~7k!AVl;Z1;&dtr`GI%6;1>MGjLblD?eA zmo5Pc&)QI=V?^%82H9MXEl~>khE-WgRUJi8w*N7-z_bEU>GXM;iU=mV z%wGN7$VlMgh-RS>%mgD@j5#kaaVI?LSGU5mU4>5gHuviA@bE@8ZKWfHD2+nXOS$L2 z$C8t!dy~1k@sA&K8C!h|fXma3Wq9r4(`YS|pHJ^7C@b56Wb9%zB9CGWkpZG25sHe6 zU+NcUVp3-k?A4jIwY7L6Cfe}6KITFY4E-m=g&TZQEQ%yvrfw&>(D-QOJayo51`dZ~ zFc@~iU``3P+L1)3^D*csZV-cUFECIk7HbIXuFA{W8Xg)tme{c@hjVpe46X)N5;oHFTQ~4qsR1_(FE+u>gp)bWy<`lyhOV@?EPoC z`e86OEhaj;k9@xWmZfD!>8;8oYvZxA7c#CoX%|R@;F?1x>o@XG33Kb}0{s2aI)vj+ zO;U#h2fW_RtUHdrfUz~#iZNd%>U`MHXRE#pMnh8*lGW)r(Im}QtgQiWZEi03U*I4e zOp2JX)@c**>|mtJYudu*;wanJ5>w&XS%WY%^zyQ~=8~8zyqq%n^0&iQ|r=hi-J!fZUwv`RWYGk2N?lw*(w`1|%AXaBb;^~jvkcNs1t<`y>oc;-B5GA8* zZ!g5xX>4qazA@Ju6%{qu;0Uxebx6&~$XHn+?>S~YeOiCs*loGnk4z?$NTj=W2k;CZ zg16GCQ@uSsFDJ=13md%t?%sBQT62{n4!69t1nOXgx%-(MI+Fq-JjZTi^Qf;#`Ug#7 z%t5awftN~4l0eoe;J%74%x@#PnZ{Uv{Ru#-Fn}O%<^Q~8{^#bRN3JzuCN|)jn@HQL zOB!*5EH>Is&wXEv8D*%^y}DIuo0#cc_U(@kSdOa}|5)pG_1@v|8o)1LfVy~CInmVI z!IMbLLEHy+Q^&KR?II!~1qB68&d!?gy|O1Ne9)N@5fKFi=So{WaYIL>UQPbN+yxL7576IUi1I-Y0v%VqWt9w)>f zrEaa@;!JeJuZ;Bd*&&qGIw)wHpM6$6YJE3f=jTTpmBI44ysVE1UdXI@Fm3JY^6$aE zzUAGskIaCd>8NtD{1iBl*A^!y6dtzCG!^n(`{c(Te@>ih&@%2NYP#;N6*PwI^Q$k{ z?WL=_(VM2sfNosmZM?=K)JJ|>LM8JAM?CjvOVo6vzwygyj;K~--c-I3=ZY$5V6}|H&VLb;$NmD08qHN@IQ&9y|pbo`UZ4>na4HhR=Bc;3Mt?vn0Xy7vT zzRvr}(YzdcQ|@T#)+UArRx7QtjaS(%L+`VrX)D1Mc{Ps*8T-52;$G<`sti7*x-KBj zJv1$MU+TubRAyF|@do%xIFFOHyR?9AS=@X*N#0mq-v9&n77A~e`_nwXVluAk;1d8? Mo776Ml#}S?_WQ^=-Et6wTA#KXpa#$D&jZ`x^Ws&2YIyg)y z^@L0`Rw<=fSPqpUIpy^3d9UleuJ`@({pbDTbKlo}eZKeizCWMu{k`r?^(yE-nj`+` z4v;zs0Dv7>2aJbh7zyHPBKp3#@gAg^Ap#D9!C?Q2^Kc4`3JbnK z4hjpkgo`M~Nr^yNV-shDG0M~&g)m`sO6*hokF~y$DayzQ&Ipt&{I4*ORH)3pNl7drBuH@57-TVDt-BR;L$A}@E@{iDg6e`Z+}V!{t%8dKGow*|spECk9w!3E?;okitrRWDW^$hsgUS9x z@KFqJs9+G2U$_*J-hI_P;cWefsm3_Ua4o8fg z^lQ;p1$US(l4!m-eC|r$8U5YAE;Sz?E~pzPDeE54*U~fWxrtTH`I*q4H$48n^+s1{ z#5NRKd?nnt`;Wv&a>nq+JS&S|eHrSj5>Hkeg?ruT9u-%fgRoA*h|E(rzC_Tr^Cpa6 zfnRQJQDc|4nC9;+)A5|BS8d59hYTP-~XBT9Y_<{3F=696G-0a zjeQv^{N#ll(-cRoQ$n{Ir50_)Ig0p_6zNIYWQEhfi?!VX+t}kBUqI2zC2rgngDs$4 zi6ocv#>ZatG`5F3c!;du+4VQXZtCuYQUPF_EEa=yjxCyH9><;Z0QYPyHz&N!J(uJx ziQaKd1Ex9Ag(yfxX%%32vKd+_j1%diu8BQ$a=&b{{4U-~j8(BQ0SQ9J*FMlWD5WiAPYr zP1=No86uh7mHPgivz_bFU)~(Zz`*U(nfknJ#>Dbk5Wnq$WKz!cD_C&34oCwu8#m%O4c{9gQ8MD5xu7&q{GXkA#T#>8vq zq!l^rwee&J_j=$;VU6!`Qv=23s0!RC!~OCygG;j`3n~GH#bv;ap>q|wZg(Nf4^DHr zCI|%jaLjkTEBR;80B1HD${g?cq)!xdBuFVU^c-AV+M;I*c|nzzs)`B<)KKA{tO;Fv zWe@7=mU*^NL)Dm(2UmIv3JXiij$T)B!PR(rxw+->s`q!E;64cGAuBNSIH4`C`Ry@T z_#+Bdk)j$fkx^-v<=bdj6=wng&FAy&^Wf6Ekd2LvI`k)#$yB3Zy<9#wxI2Uv_u2tT!Di6Kr6qM&c&G5=!-z|ID#t$fA8=oJ zfn>Y5xX_2rz4XA_+S)!EsK9i8sPk^mO-oC=szcw5JaoM5mU&oq=h%vGM0To-CaaoS zO~V&k9T#a3E>fy1E47Kp(3V?i>FG0HhH9J6zcXlfADn3)(7l5ApQOJF!_?(xA&kT#xd)87PM0T2s3kY z#=w+rbbFDe0yHb*I1y&loa42VfKH}>2>qI`+|3OJd#~y7)wG2U7s$M9JwQp7Qw6x|ZkEwQtpOosb>g(;|;^KI}IosHg6bj{jK+jIxi4&^zyEG-$q0sqH ze@P6_E|o4abb~)XqVAD^(>c#*lbN?>Hl2RRN?(#mwK1xW4&I!Jac)cGnDsZ^Q0W%9b@X(7 z@`dTADC@df6DEaK2ao=I5L|5N$(GyL*kG|(9BrI_6@6iIw+T+zv2|+q#JKC1VxQCafTi1^Lg=jKN%aH;fHHP@86X5uPym9lkD-F z;wT8?HHY?cm)3P^XFGLMhh$x>{(3aIXrxd~j))jxvDqp+(`_X$St%4Oeg3#QWfK?I fnmZdWQS##m*Br^#Y05PaeVqW-4v)EOb2{ap+}C>G diff --git a/oscar/icons/trash_can.png b/oscar/icons/trash_can.png index e4352e71b71473f807ebd5a7be78776243e9ea23..575c7f03180f4085624e99ea7267a72043fb8225 100644 GIT binary patch delta 2434 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 diff --git a/oscar/icons/update.png b/oscar/icons/update.png index b16a4aa7befe3e7a5fa80a5ed8581d575d34b617..bb465ba78e88e18f1758b27607c375d1583cf2e7 100644 GIT binary patch delta 2218 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 HolE`)f?Poy diff --git a/oscar/overview.cpp b/oscar/overview.cpp index 438c3922..e376b5ec 100644 --- a/oscar/overview.cpp +++ b/oscar/overview.cpp @@ -944,3 +944,5 @@ void Overview::on_layout_clicked() { } } + + diff --git a/oscar/saveGraphLayoutSettings.cpp b/oscar/saveGraphLayoutSettings.cpp index c1d95797..a754503b 100644 --- a/oscar/saveGraphLayoutSettings.cpp +++ b/oscar/saveGraphLayoutSettings.cpp @@ -1,4 +1,4 @@ -/* backup graph settiongs Implementation +/* user graph settings Implementation * * Copyright (c) 2019-2022 The OSCAR Team * Copyright (c) 2011-2018 Mark Watkins @@ -7,93 +7,118 @@ * License. See the file COPYING in the main directory of the source code * for more details. */ -#define BACKUPMENUHEADER_OFF -#define MESSAGEBOXHEADER_OFF - -#define TEST_MACROS_ENABLED_OFF +#define TEST_MACROS_ENABLED #include #include #include #include #include +#include #include "SleepLib/profiles.h" #include "saveGraphLayoutSettings.h" - SaveGraphLayoutSettings::SaveGraphLayoutSettings(QString title,QWidget* parent) : parent(parent),title(title) { - // Initialize directory accesses to profile files. - QString dirname = p_profile->Get("{DataFolder}/"); - dir = new QDir(dirname); - if (!dir->exists()) { - //qWarning (QString("Cannot find the directory %1").arg(dirname)); - return ; - } + createSaveFolder(); + if (dir==nullptr) return; dir->setFilter(QDir::Files | QDir::Readable | QDir::Writable | QDir::NoSymLinks); + QString descFileName = dirName+title.toLower()+".descriptions.txt"; + descriptionMap = new DescriptionMap (dir,descFileName); + createMenu() ; - QString descFileName = QString("%1.%2").arg(title).arg("descriptions.txt"); - backupDescriptions = new BackupDescriptions (dir,descFileName); - backupDialog->connect(backupaddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); - backupDialog->connect(backupAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); - backupDialog->connect(backupRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); - backupDialog->connect(backupUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); - backupDialog->connect(backupRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); - backupDialog->connect(backupDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); -#ifndef BACKUPMENUHEADER - backupDialog->connect(backupExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); -#endif + menuDialog->connect(menuAddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); + menuDialog->connect(menuAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); + menuDialog->connect(menuRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); + menuDialog->connect(menuUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); + menuDialog->connect(menuRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); + menuDialog->connect(menuDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); + menuDialog->connect(menuExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); - backupDialog->connect(backuplist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); - backupDialog->connect(backuplist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + menuDialog->connect(menulist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); + menuDialog->connect(menulist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); singleLineRe = new QRegularExpression( QString("^\\s*([^\\r\\n]{0,%1})").arg(1+maxDescriptionLen) ); - backupFileNumRe = new QRegularExpression( QString("backup(\\d+)(.shg)?$") ); - parseFilenameRe = new QRegularExpression(QString("^(%1[.](backup(\\d*)))[.]shg$").arg(title)); + fileNumRe = new QRegularExpression( QString("%1(\\d+)(.shg)?$").arg(baseName) ); + parseFilenameRe = new QRegularExpression(QString("^(%1[.](%2(\\d*)))[.]shg$").arg(title).arg(baseName)); } SaveGraphLayoutSettings::~SaveGraphLayoutSettings() { - backupDialog->disconnect(backupaddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); - backupDialog->disconnect(backupAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); - backupDialog->disconnect(backupRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); - backupDialog->disconnect(backupUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); - backupDialog->disconnect(backupDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); - backupDialog->disconnect(backupRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); -#ifndef BACKUPMENUHEADER - backupDialog->disconnect(backupExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); -#endif - backupDialog->disconnect(backuplist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); - backupDialog->disconnect(backuplist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + if (dir==nullptr) {return;} + menuDialog->disconnect(menuAddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); + menuDialog->disconnect(menuAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); + menuDialog->disconnect(menuRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); + menuDialog->disconnect(menuUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); + menuDialog->disconnect(menuDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); + menuDialog->disconnect(menuRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); + menuDialog->disconnect(menuExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); - delete backupDescriptions; + menuDialog->disconnect(menulist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); + menuDialog->disconnect(menulist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + delete descriptionMap; delete singleLineRe; - delete backupFileNumRe; + delete fileNumRe; delete parseFilenameRe; } +void SaveGraphLayoutSettings::createSaveFolder() { + // Insure that the save folder exists + // Get the directory name for the save files + QString layoutFileFolder = "savedGraphLayoutSettings/"; + + #if 0 + // home directory for the current profile. + QString baseName = p_profile->Get("{DataFolder}/"); + + #else + // home directory for all profiles. + // allows settings to be shared accross profiles. + QString baseName = p_pref->Get("{home}/"); + + #endif + + dirName = baseName+layoutFileFolder; + + // Check if the save folder exists + QDir* tmpDir = new QDir(dirName); + if (!tmpDir->exists()) { + QDir* baseDir=new QDir(baseName); + if (!baseDir->exists()) { + // Base folder does not exist - terminate + return ; + } + // saved Setting folder does not exist. make it + if (!baseDir->mkdir(dirName)) { + // Did not create the folder. + return ; + } + tmpDir = new QDir(dirName); + // double check if save folder exists or not. + if (!tmpDir->exists()) { + return ; + } + } + dir=tmpDir; +} + void SaveGraphLayoutSettings::createMenu() { styleOn= calculateStyle(true,false); styleOff= calculateStyle(false,false); styleExitBtn=calculateStyle(true,true); - //"background:transparent;" - //"background-color:yellow;" styleMessageBox= "QMessageBox { " "background-color:yellow;" "color:black;" - //"font: 24px ;" - //"padding: 4px;" "border: 2px solid black;" "text-align: center;" "}" "QPushButton { " - //"font: 24px ;" "color:black;" "}" ; @@ -104,90 +129,76 @@ void SaveGraphLayoutSettings::createMenu() { "}"; - backupDialog= new QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint|Qt::WindowSystemMenuHint); -#ifndef BACKUPMENUHEADER - backupDialog->setWindowFlag(Qt::FramelessWindowHint); -#else - backupDialog->setWindowTitle(tr("Backup Files Management")); -#endif + menuDialog= new QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint|Qt::WindowSystemMenuHint); + menuDialog->setWindowFlag(Qt::FramelessWindowHint); - backupaddFullBtn =new QPushButton("Add", parent); - backupAddBtn =new QPushButton(tr("Add"), parent); - backupRestoreBtn = new QPushButton(tr("Restore"), parent); - backupUpdateBtn = new QPushButton(tr("Update"), parent); - backupRenameBtn = new QPushButton(tr("Rename"), parent); - backupDeleteBtn = new QPushButton(tr("Delete"), parent); -#ifndef BACKUPMENUHEADER - backupExitBtn = new QPushButton(*m_icon_exit,tr(""),parent); -#endif + menuAddFullBtn =new QPushButton("Add", parent); + menuAddBtn =new QPushButton(tr("Add"), parent); + menuRestoreBtn = new QPushButton(tr("Restore"), parent); + menuUpdateBtn = new QPushButton(tr("Update"), parent); + menuRenameBtn = new QPushButton(tr("Rename"), parent); + menuDeleteBtn = new QPushButton(tr("Delete"), parent); + menuExitBtn = new QPushButton(*m_icon_exit,tr(""),parent); - backuplist=new QListWidget(); - backuplist->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + menulist=new QListWidget(menuDialog); + menulist->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - backupLayout = new QVBoxLayout(backupDialog); - layout1 = new QHBoxLayout(); - layout2 = new QVBoxLayout(); - layout2->setMargin(6); - backupLayout->addLayout(layout1); - backupLayout->addLayout(layout2); + menuLayout = new QVBoxLayout(menuDialog); + menuLayout1 = new QHBoxLayout(); + menuLayout2 = new QVBoxLayout(); + menuLayout2->setMargin(6); + menuLayout->addLayout(menuLayout1); + menuLayout->addLayout(menuLayout2); - layout1->addWidget(backupaddFullBtn); - layout1->addWidget(backupAddBtn); - layout1->addWidget(backupRestoreBtn); - layout1->addWidget(backupRenameBtn); - layout1->addWidget(backupUpdateBtn); - layout1->addWidget(backupDeleteBtn); -#ifndef BACKUPMENUHEADER - layout1->addWidget(backupExitBtn); -#endif - layout2->addWidget(backuplist, 1); + menuLayout1->addWidget(menuAddFullBtn); + menuLayout1->addWidget(menuAddBtn); + menuLayout1->addWidget(menuRestoreBtn); + menuLayout1->addWidget(menuRenameBtn); + menuLayout1->addWidget(menuUpdateBtn); + menuLayout1->addWidget(menuDeleteBtn); + menuLayout1->addWidget(menuExitBtn); + menuLayout2->addWidget(menulist, 1); /*TRANSLATION*/ - backupaddFullBtn-> setToolTip(tr("Add has been inhibited. The maximum number of backups have been exceeded. ")); - backupAddBtn-> setToolTip(tr("Adds new Backup with current settings.")); - backupRestoreBtn-> setToolTip(tr("Restores settings from the selected Backup.")); - backupRenameBtn-> setToolTip(tr("Rename the selected Backup. Must edit existing name then press enter.")); - backupUpdateBtn-> setToolTip(tr("Update the selected Backup with current settings.")); - backupDeleteBtn-> setToolTip(tr("Delete the selected Backup.")); -#ifndef BACKUPMENUHEADER - backupExitBtn-> setToolTip(tr("Closes the dialog menu. Returns to previous menu.")); -#endif + menuAddFullBtn-> setToolTip(tr("Add Feature inhibited. The maximum number has been exceeded.")); + menuAddBtn-> setToolTip(tr("Save current settings.")); + menuRestoreBtn-> setToolTip(tr("Restores saved settings.")); + menuRenameBtn-> setToolTip(tr("Renames the selection. Must edit existing name then press enter.")); + menuUpdateBtn-> setToolTip(tr("Updates the selection with current settings.")); + menuDeleteBtn-> setToolTip(tr("Delete the selection.")); + menuExitBtn-> setToolTip(tr("Closes the dialog menu. Returns to previous menu.")); - backupDialog->setStyleSheet(styleDialog); - backupaddFullBtn->setStyleSheet(styleOff); - backupAddBtn->setStyleSheet(styleOn); - backupRestoreBtn->setStyleSheet(styleOn); - backupUpdateBtn->setStyleSheet(styleOn); - backupRenameBtn->setStyleSheet(styleOn); - backupDeleteBtn->setStyleSheet(styleOn); -#ifndef BACKUPMENUHEADER - backupExitBtn->setStyleSheet( styleExitBtn ); -#endif + menuDialog->setStyleSheet(styleDialog); + menuAddFullBtn->setStyleSheet(styleOff); + menuAddBtn->setStyleSheet(styleOn); + menuRestoreBtn->setStyleSheet(styleOn); + menuUpdateBtn->setStyleSheet(styleOn); + menuRenameBtn->setStyleSheet(styleOn); + menuDeleteBtn->setStyleSheet(styleOn); + menuExitBtn->setStyleSheet( styleExitBtn ); - backupaddFullBtn->setIcon(*m_icon_add ); - backupAddBtn->setIcon(*m_icon_add ); - backupRestoreBtn->setIcon(*m_icon_restore ); - backupRenameBtn->setIcon(*m_icon_rename ); - backupUpdateBtn->setIcon(*m_icon_update ); - backupDeleteBtn->setIcon(*m_icon_delete ); - backupDeleteBtn->setIcon(*m_icon_delete ); + menuAddFullBtn->setIcon(*m_icon_add ); + menuAddBtn->setIcon(*m_icon_add ); + menuRestoreBtn->setIcon(*m_icon_restore ); + menuRenameBtn->setIcon(*m_icon_rename ); + menuUpdateBtn->setIcon(*m_icon_update ); + menuDeleteBtn->setIcon(*m_icon_delete ); + menuDeleteBtn->setIcon(*m_icon_delete ); int timeout = AppSetting->tooltipTimeout(); - backupaddFullBtn->setToolTipDuration(timeout); - backupAddBtn->setToolTipDuration(timeout); - backupRestoreBtn->setToolTipDuration(timeout); - backupUpdateBtn->setToolTipDuration(timeout); - backupRenameBtn->setToolTipDuration(timeout); - backupDeleteBtn->setToolTipDuration(timeout); -#ifndef BACKUPMENUHEADER - backupExitBtn->setToolTipDuration(timeout); -#endif + menuAddFullBtn->setToolTipDuration(timeout); + menuAddBtn->setToolTipDuration(timeout); + menuRestoreBtn->setToolTipDuration(timeout); + menuUpdateBtn->setToolTipDuration(timeout); + menuRenameBtn->setToolTipDuration(timeout); + menuDeleteBtn->setToolTipDuration(timeout); + menuExitBtn->setToolTipDuration(timeout); }; bool SaveGraphLayoutSettings::confirmAction(QString name,QString question,QIcon* icon) { - QMessageBox msgBox; + QMessageBox msgBox(menuDialog); msgBox.setText(question); if (icon!=nullptr) { msgBox.setIconPixmap(icon->pixmap(QSize(50,50))); @@ -196,15 +207,10 @@ bool SaveGraphLayoutSettings::confirmAction(QString name,QString question,QIcon* msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Yes ); msgBox.setDefaultButton(QMessageBox::Cancel); msgBox.setStyleSheet(styleMessageBox); - - #ifdef MESSAGEBOXHEADER - msgBox.setWindowTitle(name); - #else - Q_UNUSED(name); - msgBox.setWindowFlag(Qt::FramelessWindowHint,true); - #endif + msgBox.setWindowFlag(Qt::FramelessWindowHint,true); return (msgBox.exec()==QMessageBox::Yes); + Q_UNUSED(name); } @@ -238,100 +244,91 @@ void SaveGraphLayoutSettings::looksOn(QPushButton* button,bool on){ } void SaveGraphLayoutSettings::enableButtons(bool enable) { - looksOn(backupUpdateBtn,enable); - looksOn(backupRestoreBtn,enable); - looksOn(backupDeleteBtn,enable); - looksOn(backupRenameBtn,enable); - if (unusedBackupNum<0) { // check if at Maximum limit - backupAddBtn->hide(); - backupaddFullBtn->show(); + looksOn(menuUpdateBtn,enable); + looksOn(menuRestoreBtn,enable); + looksOn(menuDeleteBtn,enable); + looksOn(menuRenameBtn,enable); + if (nextNumToUse<0) { // check if at Maximum limit + menuAddBtn->hide(); + menuAddFullBtn->show(); } else { - backupaddFullBtn->hide(); - backupAddBtn->show(); + menuAddFullBtn->hide(); + menuAddBtn->show(); } } +void SaveGraphLayoutSettings::add_feature() { + if(!graphView) return; + QString fileName = QString("%1%2").arg(baseName).arg(nextNumToUse,fileNumMaxLength,10,QLatin1Char('0')); + writeSettings(fileName); + // create a default description - use formatted datetime. + QString desc=QDateTime::currentDateTime().toString(); + descriptionMap->add(fileName,desc); + descriptionMap->save(); + QListWidgetItem* item = updateFileList( fileName); + if (item!=nullptr) { + menulist->setCurrentItem(item,QItemSelectionModel::ClearAndSelect); + menulist->editItem(item); + } +} + +void SaveGraphLayoutSettings::addFull_feature() { + QMessageBox msgBox(menuDialog); + msgBox.setText(tr("Maximum number exceeded.")); + msgBox.setStandardButtons(QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + msgBox.setWindowFlag(Qt::FramelessWindowHint,true); + msgBox.setStyleSheet(styleMessageBox); + msgBox.setIconPixmap(m_icon_addFull->pixmap(QSize(50,50))); + msgBox.exec(); +} + void SaveGraphLayoutSettings::update_feature() { if(!graphView) return; - QListWidgetItem * item=backuplist->currentItem(); - if (!item) return; + QListWidgetItem * item=menulist->currentItem(); if(!confirmAction( item->text(), tr("Ok to Update?") , m_icon_update) ) return; - QString backupName = item->data(backupFileName).toString(); - QString name = QString("%1.%2").arg(title).arg(backupName); - graphView->SaveSettings(name); + QString fileName = item->data(fileNameRole).toString(); + writeSettings(fileName); }; void SaveGraphLayoutSettings::restore_feature() { if(!graphView) return; - QListWidgetItem * item=backuplist->currentItem(); + QListWidgetItem * item=menulist->currentItem(); if (!item) return; - QString backupName = item->data(backupFileName).toString(); - QString name = QString("%1.%2").arg(title).arg(backupName); - graphView->LoadSettings(name); + QString fileName = item->data(fileNameRole).toString(); + loadSettings(fileName); exit(); }; void SaveGraphLayoutSettings::rename_feature() { if(!graphView) return; - QListWidgetItem * item=backuplist->currentItem(); + QListWidgetItem * item=menulist->currentItem(); if (!item) return; - backuplist->editItem(item); + menulist->editItem(item); // SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) is called when edit changes the entry. // itemChanged will update the description map } void SaveGraphLayoutSettings::delete_feature() { if(!graphView) return; - QListWidgetItem * item=backuplist->currentItem(); + QListWidgetItem * item=menulist->currentItem(); if (!item) return; - if(!confirmAction(item->text(), tr("Ok To Delete?") ,m_icon_delete) ) return; - QString backupName = item->data(backupFileName).toString(); - backupDescriptions->remove(backupName); - backupDescriptions->save(); - QString relFileName=QString("%1.%2.shg").arg(title).arg(backupName); - dir->remove(relFileName); + QString fileName = item->data(fileNameRole).toString(); + descriptionMap->remove(fileName); + descriptionMap->save(); + deleteSettings(fileName); delete item; - unusedBackupNum=backupNum(backupName); - enableButtons(true); -} - -void SaveGraphLayoutSettings::addFull_feature() { - QMessageBox msgBox; - msgBox.setText(tr("Maximum number of Backups exceeded.")); - msgBox.setStandardButtons(QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Cancel); -#ifdef MESSAGEBOXHEADER - msgBox.setWindowTitle(tr("Maximum Files Exceeded")); -#else - msgBox.setWindowFlag(Qt::FramelessWindowHint,true); -#endif - msgBox.setStyleSheet(styleMessageBox); - msgBox.setIconPixmap(m_icon_addFull->pixmap(QSize(50,50))); - msgBox.exec(); -} - -void SaveGraphLayoutSettings::add_feature() { - if(!graphView) return; - - QString backupName = QString("%2%3").arg("backup").arg(unusedBackupNum,backupNumMaxLength,10,QLatin1Char('0')); - QString name = QString("%1.%2").arg(title).arg(backupName); - graphView->SaveSettings(name); - // create a default description - use formatted datetime. - QString desc=QDateTime::currentDateTime().toString(); - backupDescriptions->add(backupName,desc); - backupDescriptions->save(); - QListWidgetItem* item = updateFileList( backupName); - if (item!=nullptr) { - backuplist->setCurrentItem(item,QItemSelectionModel::ClearAndSelect); - backuplist->editItem(item); + if (nextNumToUse<0) { + nextNumToUse=fileNum(fileName); } + enableButtons(true); } void SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) { - QString backupName=item->data(backupFileName).toString(); + QString fileName=item->data(fileNameRole).toString(); QString desc= item->text(); // use only the first line in a multiline string. Can be set using cut and paste @@ -349,10 +346,10 @@ void SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) } if (desc.length() <=0) { // returns name back to previous saved name - desc=backupDescriptions->get(backupName); + desc=descriptionMap->get(fileName); } else { - backupDescriptions->add(backupName,desc); - backupDescriptions->save(); + descriptionMap->add(fileName,desc); + descriptionMap->save(); } item->setText(desc); } @@ -362,8 +359,21 @@ void SaveGraphLayoutSettings::itemSelectionChanged() enableButtons(true); } -int SaveGraphLayoutSettings::backupNum(QString backupName) { - QRegularExpressionMatch match = backupFileNumRe->match(backupName); +void SaveGraphLayoutSettings::writeSettings(QString filename) { + graphView->SaveSettings(title+"."+filename,dirName); +}; + +void SaveGraphLayoutSettings::loadSettings(QString filename) { + graphView->LoadSettings(title+"."+filename,dirName); +}; + +void SaveGraphLayoutSettings::deleteSettings(QString filename) { + QString fileName=graphView->settingsFilename (title+"."+filename,dirName) ; + dir->remove(fileName); +}; + +int SaveGraphLayoutSettings::fileNum(QString fileName) { + QRegularExpressionMatch match = fileNumRe->match(fileName); int value=-1; if (match.hasMatch()) { value=match.captured(1).toInt(); @@ -372,7 +382,6 @@ int SaveGraphLayoutSettings::backupNum(QString backupName) { } QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { - Q_UNUSED(find); QListWidgetItem* ret=nullptr; enableButtons(false); dir->refresh(); @@ -382,112 +391,119 @@ QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { int row=0; int count=0; - backuplist->clear(); - unusedBackupNum=-1; - backupDescriptions->load(); + menulist->clear(); + nextNumToUse=-1; + descriptionMap->load(); for (int i = 0; i < filelist.size(); ++i) { QFileInfo fileInfo = filelist.at(i); QString fileName = fileInfo.fileName(); QRegularExpressionMatch match = parseFilenameRe->match(fileName); if (match.hasMatch()) { if (match.lastCapturedIndex()==3) { - QString backupName=match.captured(2); - int backupNum=match.captured(3).toInt(); - // find an available backup name(number); - if (backupNum!=count) { - if (unusedBackupNum<0) unusedBackupNum=count; + QString fileName=match.captured(2); + if (nextNumToUse<0) { + // check if an entry is availavle to use + int fileNum=match.captured(3).toInt(); + // find an available file name(number); + if (fileNum!=count) { + nextNumToUse=count; + } } count++; - QListWidgetItem *item = new QListWidgetItem(backupDescriptions->get(backupName)); - item->setData(backupFileName,backupName); + QListWidgetItem *item = new QListWidgetItem(descriptionMap->get(fileName)); + item->setData(fileNameRole,fileName); item->setFlags(item->flags() | Qt::ItemIsEditable); - backuplist->insertItem(row,item); - //DEBUGF Q(count) Q(backupName) Q(item->text()); + menulist->insertItem(row,item); row++; - if (find!=nullptr && backupName==find) { + if (find!=nullptr && fileName==find) { ret=item; } } } } - if (unusedBackupNum<0) { // check if there is an existing empty slot + if (nextNumToUse<0) { // check if there is an existing empty slot // if not then the next available slot is at the end. CHeck if at max files. if (countsortItems(); + menulist->sortItems(); return ret; } void SaveGraphLayoutSettings::exit() { - backupDialog->close(); + menuDialog->close(); } void SaveGraphLayoutSettings::menu(gGraphView* graphView) { + if (dir==nullptr) { + //const char* err=qPrintable(QString("Cannot find directory %1").arg(dirName)); + //qWarning(err); + return; + } this->graphView=graphView; updateFileList(); - backupDialog->raise(); - backupDialog->exec(); + menuDialog->raise(); + menuDialog->exec(); exit(); } //==================================================================================================== //==================================================================================================== -// Backup Descriptions map class with file backup +// Descriptions map class with file storage -BackupDescriptions::BackupDescriptions(QDir* dir, QString _filename) +DescriptionMap::DescriptionMap(QDir* dir, QString _filename) { filename = dir->absoluteFilePath(_filename); - parseDescriptionsRe = new QRegularExpression("^\\s*(\\w+):(.*)$"); + parseDescriptionsRe = new QRegularExpression(QString("^\\s*(\\w+)%1(.*)$").arg(delimiter) ); }; -BackupDescriptions::~BackupDescriptions() { +DescriptionMap::~DescriptionMap() { delete parseDescriptionsRe; }; -void BackupDescriptions::add(QString key,QString desc) { +void DescriptionMap::add(QString key,QString desc) { descriptions.insert(key,desc); }; -void BackupDescriptions::remove(QString key) { +void DescriptionMap::remove(QString key) { descriptions.remove(key); } -QString BackupDescriptions::get(QString key) { +QString DescriptionMap::get(QString key) { QString ret =descriptions.value(key,key); return ret; } -void BackupDescriptions::save() { +void DescriptionMap::save() { QFile file(filename); file.open(QFile::WriteOnly); QTextStream out(&file); - QMapIteratorit(descriptions); while (it.hasNext()) { it.next(); - QString line=QString("%1:%2\n").arg(it.key()).arg(it.value()); + QString line=QString("%1%2%3\n").arg(it.key()).arg(delimiter).arg(it.value()); out <match(line); if (match.hasMatch()) { - QString backupName = match.captured(1); + QString fileName = match.captured(1); QString desc = match.captured(2); - add(backupName,desc); + add(fileName,desc); } else { DEBUGF QQ("MATCH ERROR",line); } @@ -553,19 +569,19 @@ switch (ret) { عذرا ، لا يمكن تحديد موقع ملف. - backupDialog->connect(backuplist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); - backupDialog->connect(backuplist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); - backupDialog->connect(backuplist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); - backupDialog->connect(backuplist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); - backupDialog->connect(backuplist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->connect(menulist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); + menuDialog->connect(menulist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); + menuDialog->connect(menulist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); + menuDialog->connect(menulist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->connect(menulist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); - backupDialog->disconnect(backuplist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); - backupDialog->disconnect(backuplist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); - backupDialog->disconnect(backuplist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); - backupDialog->disconnect(backuplist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); - backupDialog->disconnect(backuplist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->disconnect(menulist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); + menuDialog->disconnect(menulist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); + menuDialog->disconnect(menulist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); + menuDialog->disconnect(menulist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->disconnect(menulist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); void SaveGraphLayoutSettings::itemActivated(QListWidgetItem *item) diff --git a/oscar/saveGraphLayoutSettings.h b/oscar/saveGraphLayoutSettings.h index b3efffc8..c75f2b62 100644 --- a/oscar/saveGraphLayoutSettings.h +++ b/oscar/saveGraphLayoutSettings.h @@ -7,8 +7,8 @@ * License. See the file COPYING in the main directory of the source code * for more details. */ -#ifndef BACKUPFILES_H -#define BACKUPFILES_H +#ifndef SAVEGRAPHLAYOUTSETTINGS_H +#define SAVEGRAPHLAYOUTSETTINGS_H #include #include @@ -21,11 +21,11 @@ #include #include "Graphs/gGraphView.h" -class BackupDescriptions +class DescriptionMap { public: - BackupDescriptions(QDir* dir, QString filename) ; - virtual ~BackupDescriptions(); + DescriptionMap(QDir* dir, QString filename) ; + virtual ~DescriptionMap(); void add(QString key,QString desc); void remove(QString key); QString get(QString key); @@ -35,13 +35,14 @@ private: QString filename; QMap descriptions; const QRegularExpression* parseDescriptionsRe; + QChar delimiter = QChar(177); }; class SaveGraphLayoutSettings : public QWidget { Q_OBJECT public: - explicit SaveGraphLayoutSettings(QString title , QWidget* parent) ; + SaveGraphLayoutSettings(QString title, QWidget* parent) ; ~SaveGraphLayoutSettings(); void menu(gGraphView* graphView); protected: @@ -54,12 +55,13 @@ protected: QIcon* m_icon_addFull = new QIcon(":/icons/brick-wall.png"); private: - const static int backupNumMaxLength=3; - const static int maxFiles=10; // Max supported design limited is 1000 - based on backupName has has 3 numeric digits backupNumMaxLength=3. - const static int maxDescriptionLen=60; + const static int fileNumMaxLength=3; + const static int maxFiles=20; // Max supported design limited is 1000 - based on layoutName has has 3 numeric digits fileNumMaxLength=3. + const static int maxDescriptionLen=80; + const QString baseName=QString("layout"); const QRegularExpression* singleLineRe; - const QRegularExpression* backupFileNumRe; + const QRegularExpression* fileNumRe; const QRegularExpression* parseFilenameRe; @@ -67,25 +69,25 @@ private: const QString title; gGraphView* graphView=nullptr; - // backup widget - QDialog* backupDialog; - QListWidget* backuplist; + QDialog* menuDialog; + QListWidget* menulist; - QPushButton* backupaddFullBtn; // Must be first item for workaround. - QPushButton* backupAddBtn; - QPushButton* backupDeleteBtn; - QPushButton* backupRestoreBtn; - QPushButton* backupUpdateBtn; - QPushButton* backupRenameBtn; - QPushButton* backupExitBtn; + QPushButton* menuAddFullBtn; // Must be first item for workaround. + QPushButton* menuAddBtn; + QPushButton* menuDeleteBtn; + QPushButton* menuRestoreBtn; + QPushButton* menuUpdateBtn; + QPushButton* menuRenameBtn; + QPushButton* menuExitBtn; - QVBoxLayout* backupLayout; - QHBoxLayout* layout1; - QVBoxLayout* layout2; + QVBoxLayout* menuLayout; + QHBoxLayout* menuLayout1; + QVBoxLayout* menuLayout2; - QDir* dir; - int unusedBackupNum; - QListWidgetItem* updateFileList(QString findi=QString()); + QDir* dir=nullptr; + QString dirName; + int nextNumToUse; + QListWidgetItem* updateFileList(QString find=QString()); QString styleOn; QString styleOff; QString styleExitBtn; @@ -93,15 +95,19 @@ private: QString styleDialog; QString calculateStyle(bool on,bool border); void looksOn(QPushButton* button,bool on); - BackupDescriptions* backupDescriptions; + DescriptionMap* descriptionMap; bool confirmAction(QString name,QString question,QIcon* icon); void createMenu(); + void createSaveFolder(); void enableButtons(bool enable); void add_featurertn(); - const int backupFileName = Qt::UserRole; - int backupNum(QString backupName); + const int fileNameRole = Qt::UserRole; + int fileNum(QString fileName); + void writeSettings(QString filename); + void loadSettings(QString filename); + void deleteSettings(QString filename); public slots: private slots: @@ -118,4 +124,5 @@ private slots: }; -#endif // BACKUPFILES_H +#endif // SAVEGRAPHLAYOUTSETTINGS_H + From 5f6988eaa9485747c258edd56d6c4f3b65679270 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Mon, 9 Jan 2023 20:10:53 -0500 Subject: [PATCH 06/17] Added Help menu , improved Icons , fixed minor display issues --- oscar/Resources.qrc | 3 +- oscar/daily.cpp | 2 +- oscar/daily.ui | 2 +- oscar/icons/brick-wall.png | Bin 12788 -> 0 bytes oscar/icons/cog.png | Bin 4902 -> 3949 bytes oscar/icons/exit.png | Bin 4090 -> 4114 bytes oscar/icons/plus.png | Bin 2128 -> 2337 bytes oscar/icons/question_mark.png | Bin 0 -> 3148 bytes oscar/icons/rename.png | Bin 4306 -> 3647 bytes oscar/icons/restore.png | Bin 3339 -> 3047 bytes oscar/icons/return.png | Bin 0 -> 3238 bytes oscar/icons/trash_can.png | Bin 3485 -> 3238 bytes oscar/icons/update.png | Bin 3345 -> 3128 bytes oscar/oscar.pro | 4 +- oscar/overview.ui | 2 +- oscar/saveGraphLayoutSettings.cpp | 496 +++++++++++++++++++++++------- oscar/saveGraphLayoutSettings.h | 92 ++++-- 17 files changed, 458 insertions(+), 143 deletions(-) delete mode 100644 oscar/icons/brick-wall.png create mode 100644 oscar/icons/question_mark.png create mode 100644 oscar/icons/return.png diff --git a/oscar/Resources.qrc b/oscar/Resources.qrc index 23f9ba55..9b3ab92a 100644 --- a/oscar/Resources.qrc +++ b/oscar/Resources.qrc @@ -59,12 +59,13 @@ icons/up-down.png icons/warning.png icons/exit.png - icons/brick-wall.png icons/plus.png icons/rename.png icons/restore.png icons/trash_can.png icons/update.png icons/cog.png + icons/question_mark.png + icons/return.png diff --git a/oscar/daily.cpp b/oscar/daily.cpp index db836edc..8a1e4757 100644 --- a/oscar/daily.cpp +++ b/oscar/daily.cpp @@ -7,7 +7,7 @@ * License. See the file COPYING in the main directory of the source code * for more details. */ -#define TEST_MACROS_ENABLEDoff +#define TEST_MACROS_ENABLED #include #include diff --git a/oscar/daily.ui b/oscar/daily.ui index 502fbb5b..9dd0ad79 100644 --- a/oscar/daily.ui +++ b/oscar/daily.ui @@ -1567,7 +1567,7 @@ QToolButton:pressed { :/icons/cog.png:/icons/cog.png - Save and Restore graph layout settings + Save and Restore Graph Layout Settings diff --git a/oscar/icons/brick-wall.png b/oscar/icons/brick-wall.png deleted file mode 100644 index b82d5ac4b5852d5fce0acba2d4962acc9190d89c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12788 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 delta 3028 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 Ib4q9e07&qE0RR91 diff --git a/oscar/icons/question_mark.png b/oscar/icons/question_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd4b9d1c7b4bd0575e50bf2a3c75aff1690a3b7 GIT binary patch literal 3148 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 P{{+yz18LQs>(l-Nbc@yp literal 0 HcmV?d00001 diff --git a/oscar/icons/rename.png b/oscar/icons/rename.png index b4976f4631e3641009aad9a55cd636a317f9c943..0adf88d063aab484e5f7618d701c1c768ba26eee 100644 GIT binary patch delta 2593 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 W>ZMtGA8+8j2{O_%N7U=wiT)3r^%7|S diff --git a/oscar/icons/restore.png b/oscar/icons/restore.png index 0f6922fe82d3802b982014ae7a8e9467e0abca8c..d0cdac5feec7ead040e7cc98b5992b6051993fc2 100644 GIT binary patch delta 1748 zcmchXSyU1T1BF3Q!LgFX+@={NH%vfq%ZpNpsZ9EejWvaV*7sInv~4 ze=dPIxt(N`aZq!aG@UdP6DXq6)PBsVLG$l@lhWxmsha@E9w*K)k)94Z+dY0b^zBXk~@cFf=sGzL@HGCO#uNE;=LHJvt-a z1x2tT{FA?@0I37D{+U*5sHQ-Uh#Z&z0I;AsU)6v<;1A0$0*g92)|j47OR)Bk$%!w0noC8=A&b~X_A7?2S$>(9CscZ;BKqAm{?5V)rwcEX z!-|9lK3r79ZN@kOJ&)Y}fm-thN~!*tZWb43-nf6T671qI7um6?>AK$<&Ce{likLDe zd6yQYEBl7$BFN!3{j|nxv43RW*>vRyby2+YbLZHAB>9-*=HrH=%DQ9%XVRGep=N^eq4GZ8D7p^YF8H<@H;kM(!I*MWM9g z78y5oilbAEim;$|wrhh)$mPG)G3L2`Xl-=Ac~^?h`h6#bRPsm0!pyg()p1q0#x3;< z&5w%z{`%KSJ#Nxc;p(6MA3E?Z#t9N%Jev>5?%Z%SWhdo32&4>4;B1}#Be3-$J`(}M zP78>F6S&^VSpAdUWX5Z4g$;JVJa*iSK+tDP-+Sk%9Ye<^loJUtZ5ufJBK0}QEW}If zLQo^qfVf(nOc$EU7Q&hUCp+Z7tO-kmdx?LK6NU}n1aYw(x{0kIL0DPoI;9YtyWQ6= z%_FJl;m<~(d(PAfCnj~91OeVO5OX>yqAyY9Yu4`%$cD0WHg|;c;Bx$Du)bR-bxT+S zA;#+KLEHG6cP%(Fw~tjSaYAxVtFXUpbYk)Wrl8_%2>NJt7e9qXLY(}ruu>v<_Nocy z#J_UAo}SzmB8DKE0!mD`xnNYhpM19(MoeKf5bL{_@;jtMZO(Zyo}Q0Na+reZTs-O-AH%Gwj5)1}EyL4nMg;)-fK?-EL8yba+22U~}T#Vl3P z#kZE5>#HO1n`_dPu_Q0V2bP4Ls*wc@RLh=~pkXFSrMa(M-*XTtKhj$~j@ngC=5RD&$E6uRIM3T>yMF zdSm`tecx%sVgQslT6z*Z({^$gV&wl7;9BhMo2%$`Sn270buNLC@%$MiSvu8Bx3l~4 z@7)=d1MLj1bB~}A<=cKRV63T)`ag;O@0zYp{W0<9{_3!?@?2#n1e#0yv!)Z`puSh6 zB)#;9z-hUq_si$ zm8KK0ZYRH1NSFH-8JK)8kH|S32O|^>2{YEt?}UzDH0X7PY<%2bIWEeZtLAOngKF&2fEb#bv;lzdFPx?k$VcHkDb47_5k8GXAYY zTh2lVC;7_8d&_gksf~T*1odET(}**s@CZ|}C<@1B!CL~ZZ&6yNWK2tT rQ#`}@u&7b?!d8~O3^ez?`tfUv%a_UR8LQmS-v;pV_|Bc{7FGB^{C@6t delta 2042 zcmchY`#Td18^>23l0%M#NN7Sf*&LH4=Tiw=wegI$424aMcNu1}Nyu@8$&0r+ALi5n z6Hn}Nevo64@-lMHvo;U%_War(@cwXL*L{7i?{(eR_xt_f<|!qgPFE2>3IG5Obt0BE}Cx#MohoIG7gH5c;dW zaYy9X5!qj9mV_u?+~UPSApmeBHY-k4l`^bv=b^~8@_($Hip6MN@9GP5$KHitbwNG4 z@q+_K1cyP@I)OuGO~cLXDPi;c#XD8i3@y)wY!kNi@avuTPD>w$U`2cF0_Fxx$&y{| zKeec781_*A^zmb?1tV&oPPDN|&3kR*4{AkfPd!HG2zu~si}L%7D}uW5fwEv}N?&Ed zG2^j5$u#jaFzDU}o_~_brfx_;ZWTSN~Shp|Eq< zQlHbKUSyz0V>e2DzPK*3&TF?kHp3`r+dKo5N*`jDz!uxT?lfCVh@s{Ty7*)szrT9 zdhnllUxa1b&c7}8tYtVA$X3K9NIyIGg?KLMHPX9LWYMp zf`|K&!3$IgO>yiA$`TQ<`=7BDCtw(fv`o|xLljoK>%O0uh+Lfjmx(}Z5YiQh3(8XW zskA>ZW#{_Jy!^VcY$}!7rUO+wQRb;vW_!8#!apn{LvApGW1RBzDTgc=S^-$iw^jQ= zE6&0VY<@qxcUoQD4JhxHsFxs%Fo#8mi^Z#|s(x)*r7R?7FQmHbHZ?W*1t93=4^0vJ zQ4sjwWFJnniUciKvRcr!HhoFv@mWk=< zUdpAHhNkc-Q#uZ{vAH=J;4^1`PFbo43;FOxsbw65%1NZthwvAMZ#z12t8Uk=Ia^Pi z)6cu+1!YOapgUq`TXss%h;o{nBf`VsM!1t+?J~a|9SMBDu#KF231NV@DiB|1nu8dI zFE&HSWE5=eu}pUh-90VTMI;&U-SmT)RwV_SO%-rn8} zCl`d%#CX+hK1*twWVx`gu!Mv3oY&Do8^r%u<~nZgMsI%VsI&7q)$an7kD|coPt`3+ z^=)lTx3b%}ZVmKj0-eR#9UX^Xx|1s^^lXDpgTY{i&~nBF)!O>gKs$ZJ%*152gL1es zR+e|oA;^~wO7(+YGBY!SKsq)#s^*BNCgoR5;tNHLA(591Z={3Psw&edK<7-*Q0>sNojOwf?eR@@N(V?q-5Ll%UYe_4+pjRjz6I_o{#V z^%2GNH4rLv?XnM!QyT#P1_5*><7xtI?LGVh0*WjjYW0Ur7aI16iHWgTEH7_waLS%L%RdDcE&P+xGJkVT6@`E4U5Gpp`x3dp&z()1x8!`^`_$pK6n1H~ z#E2HtV5vS_>X^1M+sbXs3s=e?9zBUmkqr}Upp$KkB(F{k4Y^sW>u?Ehm*0an?>2?- z-;|cd%gUpK9A3dEOJ2;PeKc|F`}()&kdT`G#V2-JUr3%cc;z`zB#+XatRzB>+qD(( z-})RXoNf$QYBjJP3;_EcY_Zy64ux#1=7U^q45@w2P7A|<-SN|V;`vF~omxjZ#gr_T z?WD~ogj>IwXNnsnl+2Z00lwQ7#o3;$ zIUrXx8)~Eb(}P2-igtor-?FoagC08X;QMl@5-|`tn0ep8xG9Yq$yVEBSZ^{q$37I& zi5td;$PxdpEmUn>&yG2U{7w8~^|S diff --git a/oscar/icons/return.png b/oscar/icons/return.png new file mode 100644 index 0000000000000000000000000000000000000000..ca57b8205abd6a37eb327ee71fa185256004c948 GIT binary patch literal 3238 zcmai1d0bQ15)KH+Dj%zMMt5Vzd{*5eP*;W^kAwjN*f*aoH#;of`$Bglq`L5eR~-5Tepz zK>-j2Ml(4?|s!;=S0^XwV1bLJIB7a344zbkq%h2?RzNvA0b(?@%~I9$O?03!j++#)dsgxUT*jpz@T@>ggC^hd!jt^9)t z0^2QpgC`R_;?VDA94x$>k{|~jjXZb;Ui3(tMj+(UneYzysPYJeRc?Il#qDI0*5Ow7 z^`jXgq`tmpW@rEbh@s_5758YH3vpM9$h}X6GnryZq_MviyIJ+MTBBZ#A}K(j?$(Y0 z&tIMT6;^ltP~UL>O#)-6L^09v>`ex!S!Q=a+ejm(f&aW{+;ENAj*52UfN~cn;_C96 zeRsVYhbRR>)qC%@hBoQi>0PKgc=$Lctew`bQ+;Ck$#+nLx95oieh2p*`qY2^r-3s` zsd0|EZHF_JP%*UgkEN(LKe!l8W|yrwRtUuy#Mze|L@5VbN(Nx24V+}Uv0htH=2K6e<@^GkRAI~h@*9&Pc_jJE} z`RvxDy#E}1m}@G%BbqtIPBZ)Y_ZQm1gm#be!Y_&G8HodYkLyjE8pcpU_+Y6sbV)^` zncOLU<*kPudFt5w#eZI#Y>6OWce@mQkbiV$T{CKTykb+zjg3z=j<{k;(S3K?`+kAX zG8JfBI3Iyf(~(_rh@w*l@YxsV zJ^EQzDKf-eK@#{V@2uWlZIaen-HmRSSLRxWRE?eu2{`UzrQNxm&8)kza_UUze$Ph9 zj^V74&ch94`;NZ8zB%Uxek#<mD{USGcmhf$6~iq#_fzbg;Oay7HNN`ugQoftu^8ZRW9@|l&g#$ zb&1>ron4@GnC@@W-%-?QDNYHM_e)+V1n|Pn6sqV^)STJvVwAlK&evMaa)q^Q+rFXHOEqs zRD<yZbHBl-avb^8&0(uoyo z5h>?pGx#S~yiC8Jq1{twL0wPGxrR3$8dj%QKM4CgP)O>FsudS0hF(;+R8+O;HF!eV zu9cFr>jE+_3qV=V*-FWgrN6eAT3NYX>$Q4Hw%KX9n$O)GyZ+AQZX)&A5p+%Zw?P0}~7etp1c#BV0}q1j{WIZ~wa2#zMf z_7{4z`F`J|`o=SGy5&$2a#A3DpuFn7cSogLuyVcDyj5w(Ew2*mu8V+LZVg*EdgYBD z*{AG%H_gdODbiZ;aEsaxowJoCwQH=l7t2Zal~ylkLbdya&qo7Hbi-fwhM4sX{O-6l zT_G>v>?2_3Kah%OaU%>C(wc(66;kPP@c|?s@C*q{qZpwvYgv!zK zTY{RPhVx3z@`Riqj1oa}>h_dmU03iP@Jx6`Nomqf>6$X7<|?4A{*LB#zN=r3b)e71 zRkhg(l^aAGw&@AONs(aVNFyf8;?;Ln$~D;u>R|)cy$1C+>nGc;?(vg8U@DUGZzcTM zRe?PAD4fLIygAgOJY$lXr)}WzJ@rA^;PufvTd?!ZHoG>(%007EynXri@28OT$LAMZ z#uODvFG_Ja!&x^>PA>Si$P=oih~z8f;u|BTv+7knxv#P&_iwDfjwsG7oS2^VKX*7I zPjyvIjJ*cS;$d*hxvv`~q-o2DwPg(F>}+PL`h``7DOyLo`47^_m(CkaR2XGVj04YC z4qm_U2cqRGH_83Ed&SH;&ujM&&DgcBU5Mo_#1(p&wIu7#YtQ2@Uy5qTnm6Bc)cke7 z=T#pd>7`>S>#FNr9%T4TFjgTlar3-lYzVExPFPl1O-3l})bGytMr_%OO6ER1ZhdHi z<3g<-d1!HSb)9m!M(s}0y*M4l#YbDqof6G^Risf4)W;hn0|zw5y156QL?61X6<`_k zj4e1Vy30NA+B>zosEvIks(H%drcIL08V6gG8LR`Z^-`R8sgrBy~zstfF1Wq$Euz>1By}(uF+S%!0~8TOdy#7u@g+i nv5hqm@v0MCSJIW@wuKd*-Lt~{p@;dh-wQ7fU-w$KNYQ@*_h$lL literal 0 HcmV?d00001 diff --git a/oscar/icons/trash_can.png b/oscar/icons/trash_can.png index 575c7f03180f4085624e99ea7267a72043fb8225..5e745bcdc7044c657eb375964f18385881d9a71b 100644 GIT binary patch delta 2154 zcmZXUdpHx08pk&y_xmNc)eKRMxegmLv#}&}!OGZd!!-A~6q@Uh1-#_R4@jmbKdEe*zectzZ-sdgTxUQC`Cbb6u0EE5GKLr4Y zxN>v_Tvs4mhf1-51~QppNH{z!DuQ7c8W8}eQs6WOEtnRTV-4@qH$cuXzbVkn9z{uFZ z2yx2T0%>NBG)HjrK@ise77dKdkw!*P+g(3vDh0`;Ga0l$1hI~w`XkW{=3n#|GU$-l zU4c}ET=>L`fp}+OkJGLI@D!|RjV@D*OC_XuPSY%}0U@lr0d{)6$elsuvJ*ROp*K=!p{#4o#m)Fn= zh}YRP;!R)8-bJC|loF}z+I7L|QSRn<$(!sEo>*5`)V%?sMU20V9efcn&=c9|R;RQi;0=JK*Qfm^9ZrRo=L|DN=;u^RBbxh7?|T}5t- zPDxPg(O`cLC#f!AcsBg=4aMa%=@k~QEb5BmWY4^w-KebVY?@<$k!vG`DuM!rNqx6Y zn1vsChBsEpu7Bf&jt%9fLscIXsEGeLt6vEfE&^slg535RI$((( zdJ-=+%Z0x?bO_ zhM60wJS@Q2D{m#f1;09oqIfb@y+HA}3jr{YGv9k^`F;PsK~&}GApT4Db1c@Pl`$e)X>UAN*7@i7 z(uFwb$Lh20vrV>(Z{$D3V>;?LLh|-%m$Q_4O}WyFoZ#ndiR&wk=1(;{rO>047ON6) zi6rmwQ4Zx3x6!pLM<^FqWfrWyq_y3?etHjSZ&-OJtKgPV&gWMsds9z5D^6_8wfD+o zQmv>F|6lHxqkRA&LGh{}4^XY1sUy8AS=?0@oZlzAoOkbD)Vu8i&PU^aEy`u*-3v^m zvft;Gz7oT`mdJKFDQZoJ5XN$xd+oj+4|dv4nHX7#OH8PjHcc*4y{a@jpS@?v6W8j5 zb+=ZNX5Bbfn%_9#0qg@I$SOlBL&ZaVB84Ll&llfHXibVdsji$EJ}W;PP;B)%bXJ#i zsDk+0Sn?ylKD62M0 zm6rGL`SGc@+gJA3aMl&p{=u6{D-?a}UC6hVVi}9HiMGAl5_ohatt2f`qCa-Q#qTH= zp!WS!=d5LG9?>`kwOm$VLpKD4lCP?S(>sebmSJ5gxQ<62viz!+x&3;hV+V~Rfnv!Mk4E}jQH@G&5 zwMcFRo2*^?+PrV(-}5bX3tK_5#KCCwEn6ZZ{qh0}UfnVNQM(!@)7{=%C*J#jNwCt+ zmRr3mQE4V4e%``LwS(CgVW02pQTN zy?%TbP}MN`6RO3-9hF26w35nF@vtdor#`Gj?zT;5U9Rcvu}#nCK1_CkzTRhL8K5a$#G zYuCy)CI-3!R;(vO6bFOR>Qih+e*rS=se6oDJMR9K)lxTKWx@Mjan>IN1C=WYqTnii zt_sVh>|Bf7?Ci_@% delta 2418 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 diff --git a/oscar/icons/update.png b/oscar/icons/update.png index bb465ba78e88e18f1758b27607c375d1583cf2e7..8f4d0e9caba663784afcee0e0e122007bc940698 100644 GIT binary patch delta 1830 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 diff --git a/oscar/oscar.pro b/oscar/oscar.pro index 9ebec841..12ce9a97 100644 --- a/oscar/oscar.pro +++ b/oscar/oscar.pro @@ -255,8 +255,8 @@ lessThan(QT_MAJOR_VERSION,5)|lessThan(QT_MINOR_VERSION,12) { SOURCES += \ checkupdates.cpp \ - overview.cpp \ saveGraphLayoutSettings.cpp \ + overview.cpp \ common_gui.cpp \ cprogressbar.cpp \ daily.cpp \ @@ -362,8 +362,8 @@ QMAKE_EXTRA_COMPILERS += optimize HEADERS += \ checkupdates.h \ - overview.h \ saveGraphLayoutSettings.h \ + overview.h \ common_gui.h \ cprogressbar.h \ daily.h \ diff --git a/oscar/overview.ui b/oscar/overview.ui index e7281f70..65483855 100644 --- a/oscar/overview.ui +++ b/oscar/overview.ui @@ -269,7 +269,7 @@ QToolButton:pressed { :/icons/cog.png:/icons/cog.png - Save and Restore graph layout settings + Save and Restore Graph Layout Settings diff --git a/oscar/saveGraphLayoutSettings.cpp b/oscar/saveGraphLayoutSettings.cpp index a754503b..0c3cf1d5 100644 --- a/oscar/saveGraphLayoutSettings.cpp +++ b/oscar/saveGraphLayoutSettings.cpp @@ -18,9 +18,13 @@ #include "SleepLib/profiles.h" #include "saveGraphLayoutSettings.h" +#define USE_FRAMELESS_WINDOW +#define USE_PROFILE_SPECIFIC_FOLDERoff // off implies saved layouts worked for all profiles. SaveGraphLayoutSettings::SaveGraphLayoutSettings(QString title,QWidget* parent) : parent(parent),title(title) { + fontSizeIncrease = 1; + helpFontSizeIncrease = 1; createSaveFolder(); if (dir==nullptr) return; dir->setFilter(QDir::Files | QDir::Readable | QDir::Writable | QDir::NoSymLinks); @@ -30,36 +34,40 @@ SaveGraphLayoutSettings::SaveGraphLayoutSettings(QString title,QWidget* parent) createMenu() ; - menuDialog->connect(menuAddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); - menuDialog->connect(menuAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); + menuDialog->connect(menuAddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); + menuDialog->connect(menuAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); menuDialog->connect(menuRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); menuDialog->connect(menuUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); menuDialog->connect(menuRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); menuDialog->connect(menuDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); + menuDialog->connect(menuHelpBtn, SIGNAL(clicked()), this, SLOT (help_feature() )); menuDialog->connect(menuExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); + menuDialog->connect(menuList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); + menuDialog->connect(menuList, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + - menuDialog->connect(menulist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); - menuDialog->connect(menulist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); singleLineRe = new QRegularExpression( QString("^\\s*([^\\r\\n]{0,%1})").arg(1+maxDescriptionLen) ); - fileNumRe = new QRegularExpression( QString("%1(\\d+)(.shg)?$").arg(baseName) ); - parseFilenameRe = new QRegularExpression(QString("^(%1[.](%2(\\d*)))[.]shg$").arg(title).arg(baseName)); + fileNumRe = new QRegularExpression( QString("%1(\\d+)(.shg)?$").arg(fileBaseName) ); + parseFilenameRe = new QRegularExpression(QString("^(%1[.](%2(\\d*)))[.]shg$").arg(title).arg(fileBaseName)); } SaveGraphLayoutSettings::~SaveGraphLayoutSettings() { if (dir==nullptr) {return;} - menuDialog->disconnect(menuAddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); - menuDialog->disconnect(menuAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); + menuDialog->disconnect(menuAddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); + menuDialog->disconnect(menuAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); menuDialog->disconnect(menuRestoreBtn, SIGNAL(clicked()), this, SLOT (restore_feature() )); menuDialog->disconnect(menuUpdateBtn, SIGNAL(clicked()), this, SLOT (update_feature() )); - menuDialog->disconnect(menuDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); menuDialog->disconnect(menuRenameBtn, SIGNAL(clicked()), this, SLOT (rename_feature() )); + menuDialog->disconnect(menuDeleteBtn, SIGNAL(clicked()), this, SLOT (delete_feature() )); menuDialog->disconnect(menuExitBtn, SIGNAL(clicked()), this, SLOT (exit() )); + menuDialog->disconnect(menuHelpBtn, SIGNAL(clicked()), this, SLOT (help_feature() )); + menuDialog->disconnect(menuList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); + menuDialog->disconnect(menuList, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); + helpDestructor(); - menuDialog->disconnect(menulist, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*) )); - menuDialog->disconnect(menulist, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged() )); delete descriptionMap; delete singleLineRe; @@ -107,97 +115,239 @@ void SaveGraphLayoutSettings::createSaveFolder() { dir=tmpDir; } -void SaveGraphLayoutSettings::createMenu() { - styleOn= calculateStyle(true,false); - styleOff= calculateStyle(false,false); - styleExitBtn=calculateStyle(true,true); +QPushButton* SaveGraphLayoutSettings::menuBtn(QString name, QIcon* icon, QString style,QSizePolicy::Policy hPolicy,QString tooltip) { + return newBtnRtn(menuLayoutButtons, name, icon, style, hPolicy,tooltip) ; +} +QPushButton* SaveGraphLayoutSettings::helpBtn(QString name, QIcon* icon, QString style,QSizePolicy::Policy hPolicy,QString tooltip) { + return newBtnRtn(helpLayoutButtons, name, icon, style, hPolicy,tooltip) ; +} +QPushButton* SaveGraphLayoutSettings::newBtnRtn(QHBoxLayout* layout,QString name, QIcon* icon, QString style,QSizePolicy::Policy hPolicy,QString tooltip) { + QPushButton* button = new QPushButton(name, menuDialog); + button->setIcon(*icon); + button->setStyleSheet(style); + button->setSizePolicy(hPolicy,QSizePolicy::Fixed); + button->setToolTip(tooltip); + button->setToolTipDuration(AppSetting->tooltipTimeout()); + button->setFont(*mediumfont); + layout->addWidget(button); + return button; +} + +void SaveGraphLayoutSettings::createStyleSheets() { + styleOn= calculateButtonStyle(true,false); + styleOff= calculateButtonStyle(false,false); + styleExit= calculateButtonStyle(true,true); styleMessageBox= "QMessageBox { " "background-color:yellow;" - "color:black;" + //"color:black;" + "color:red;" "border: 2px solid black;" - "text-align: center;" + "text-align: right;" + "font-size: 16px;" "}" - "QPushButton { " - "color:black;" + "QTextEdit {" + "background-color:lightblue;" + //"color:black;" + "color:red;" + "border: 9px solid black;" + "text-align: center;" + "vertical-align:top;" "}" ; styleDialog= "QDialog { " "border: 3px solid black;" - "min-width:30em;" // make large fonts in message box "}"; +} - menuDialog= new QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint|Qt::WindowSystemMenuHint); - menuDialog->setWindowFlag(Qt::FramelessWindowHint); +void SaveGraphLayoutSettings::createMenu() { - menuAddFullBtn =new QPushButton("Add", parent); - menuAddBtn =new QPushButton(tr("Add"), parent); - menuRestoreBtn = new QPushButton(tr("Restore"), parent); - menuUpdateBtn = new QPushButton(tr("Update"), parent); - menuRenameBtn = new QPushButton(tr("Rename"), parent); - menuDeleteBtn = new QPushButton(tr("Delete"), parent); - menuExitBtn = new QPushButton(*m_icon_exit,tr(""),parent); + menuListFont =*defaultfont; + menuListFont.setPointSize(fontSizeIncrease+menuListFont.pointSize()); - menulist=new QListWidget(menuDialog); - menulist->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - menuLayout = new QVBoxLayout(menuDialog); - menuLayout1 = new QHBoxLayout(); - menuLayout2 = new QVBoxLayout(); - menuLayout2->setMargin(6); - menuLayout->addLayout(menuLayout1); - menuLayout->addLayout(menuLayout2); - - menuLayout1->addWidget(menuAddFullBtn); - menuLayout1->addWidget(menuAddBtn); - menuLayout1->addWidget(menuRestoreBtn); - menuLayout1->addWidget(menuRenameBtn); - menuLayout1->addWidget(menuUpdateBtn); - menuLayout1->addWidget(menuDeleteBtn); - menuLayout1->addWidget(menuExitBtn); - menuLayout2->addWidget(menulist, 1); -/*TRANSLATION*/ - menuAddFullBtn-> setToolTip(tr("Add Feature inhibited. The maximum number has been exceeded.")); - menuAddBtn-> setToolTip(tr("Save current settings.")); - menuRestoreBtn-> setToolTip(tr("Restores saved settings.")); - menuRenameBtn-> setToolTip(tr("Renames the selection. Must edit existing name then press enter.")); - menuUpdateBtn-> setToolTip(tr("Updates the selection with current settings.")); - menuDeleteBtn-> setToolTip(tr("Delete the selection.")); - menuExitBtn-> setToolTip(tr("Closes the dialog menu. Returns to previous menu.")); + createStyleSheets(); + #ifdef USE_FRAMELESS_WINDOW + menuDialog= new QDialog(parent, Qt::FramelessWindowHint); + menuDialog->setSizeGripEnabled(true); // allows lower right hand corner to resize dialog + #else + menuDialog= new QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint|Qt::WindowSystemMenuHint); + menuDialog->setWindowTitle(tr("Manage Save Layout Settings")) ; + #endif menuDialog->setStyleSheet(styleDialog); - menuAddFullBtn->setStyleSheet(styleOff); - menuAddBtn->setStyleSheet(styleOn); - menuRestoreBtn->setStyleSheet(styleOn); - menuUpdateBtn->setStyleSheet(styleOn); - menuRenameBtn->setStyleSheet(styleOn); - menuDeleteBtn->setStyleSheet(styleOn); - menuExitBtn->setStyleSheet( styleExitBtn ); + + menuLayout = new QVBoxLayout(menuDialog); + menuLayoutButtons = new QHBoxLayout(); + + menuAddFullBtn = menuBtn(tr("Add" ),m_icon_add , styleOff ,QSizePolicy::Minimum, tr("Add Feature inhibited. The maximum number of Items has been exceeded.") ); + menuAddBtn = menuBtn(tr("Add" ),m_icon_add , styleOn ,QSizePolicy::Minimum, tr("creates new copy of current settings.")); + menuRestoreBtn = menuBtn(tr("Restore"),m_icon_restore , styleOn ,QSizePolicy::Minimum, tr("Restores saved settings from selection.")); + menuRenameBtn = menuBtn(tr("Rename" ),m_icon_rename , styleOn ,QSizePolicy::Minimum, tr("Renames the selection. Must edit existing name then press enter.")); + menuUpdateBtn = menuBtn(tr("Update" ),m_icon_update , styleOn ,QSizePolicy::Minimum, tr("Updates the selection with current settings.")); + menuDeleteBtn = menuBtn(tr("Delete" ),m_icon_delete , styleOn ,QSizePolicy::Minimum, tr("Deletes the selection.")); + menuHelpBtn = menuBtn("" ,m_icon_help , styleOn ,QSizePolicy::Fixed , tr("Expanded Help menu.")); + menuExitBtn = menuBtn("" ,m_icon_exit , styleExit,QSizePolicy::Fixed , tr("Exits the Layout menu.")); + + #ifndef USE_FRAMELESS_WINDOW + menuExitBtn->hide(); + #endif + + menuList = new QListWidget(menuDialog); + menuList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + menuList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + menuList->setFont(menuListFont); - menuAddFullBtn->setIcon(*m_icon_add ); - menuAddBtn->setIcon(*m_icon_add ); - menuRestoreBtn->setIcon(*m_icon_restore ); - menuRenameBtn->setIcon(*m_icon_rename ); - menuUpdateBtn->setIcon(*m_icon_update ); - menuDeleteBtn->setIcon(*m_icon_delete ); - menuDeleteBtn->setIcon(*m_icon_delete ); + menuLayout->addLayout(menuLayoutButtons); + menuLayout->addWidget(menuList, 1); + //menuList->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred); + menuList->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum); - int timeout = AppSetting->tooltipTimeout(); - menuAddFullBtn->setToolTipDuration(timeout); - menuAddBtn->setToolTipDuration(timeout); - menuRestoreBtn->setToolTipDuration(timeout); - menuUpdateBtn->setToolTipDuration(timeout); - menuRenameBtn->setToolTipDuration(timeout); - menuDeleteBtn->setToolTipDuration(timeout); - menuExitBtn->setToolTipDuration(timeout); }; -bool SaveGraphLayoutSettings::confirmAction(QString name,QString question,QIcon* icon) { +void SaveGraphLayoutSettings::createHelp() { + if(helpDialog) return; + + helpDialog= new QDialog(parent, Qt::FramelessWindowHint); + helpDialog->setStyleSheet(styleDialog); + menuDialog->setSizeGripEnabled(true); // allows lower right hand corner to resize dialog + + QFont helpInfoFont = menuListFont; + helpInfoFont.setPointSize(helpFontSizeIncrease+helpInfoFont.pointSize()); + + QFont helpInfoLabelFont = helpInfoFont; + helpInfoLabelFont.setPointSize(fontSizeIncrease+ helpInfoFont.pointSize()); + + + //QHBoxLayout* helpLayoutButtons; + //QLabel* helpInfoHeaderLabel; + //QFont helpInfoFont; + //QVBoxLayout* helpLayout; + + + QLabel* helpInfoHeaderLabel = new QLabel("helpInfoHeaderLabel",parent); + helpInfoHeaderLabel->setText(QString( tr("

Help Menu - Manage Graph Layout Settings

"))); + helpInfoHeaderLabel->setFont(helpInfoLabelFont); + + QLabel* helpInfoLabel = new QLabel("helpInfo",parent); + helpInfoLabel->setFont(helpInfoFont); + helpInfoLabel->setText(helpInfo()) ; + + + helpLayoutButtons = new QHBoxLayout(); + helpLayoutButtons->addWidget(helpInfoHeaderLabel); + helpInfoExitBtn= helpBtn("" ,m_icon_return , styleOn ,QSizePolicy::Fixed , tr("Exits the help menu.")); + helpExitBtn = helpBtn("" ,m_icon_exit , styleExit,QSizePolicy::Fixed , tr("Exits the dialog menu.")); + + QVBoxLayout* helpLayout = new QVBoxLayout(helpDialog); + helpLayout->addLayout(helpLayoutButtons); + helpLayout->addWidget(helpInfoLabel, 1); + + helpDialog->connect(helpInfoExitBtn,SIGNAL(clicked()), this, SLOT (help_off_feature() )); + helpDialog->connect(helpExitBtn, SIGNAL(clicked()), this, SLOT (help_exit_feature() )); + +} + +void SaveGraphLayoutSettings::helpDestructor() { + if(!helpDialog) return; + helpDialog->disconnect(helpInfoExitBtn,SIGNAL(clicked()), this, SLOT (help_off_feature() )); + helpDialog->disconnect(helpExitBtn, SIGNAL(clicked()), this, SLOT (help_exit_feature() )); +} + +QString SaveGraphLayoutSettings::helpInfo() { + +return QString( tr("\ +
Button Description
\ +

\ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
Add Creates a new saved Setting item. The default descripton is the currenti date.
\ + The description may be changed by the User.
\ + The Add button will be greyed out when maximum number of saved layouts is reached.
Other Buttons These buttons will be greyed out when no items are selected
Restore Loads the current graph layout setting with the swlected saved settings then returns.
Rename Allows the user to modify the description of the selected saved session.\ + Same as a double click on the item.
Update Saves the current graph layout setting to the selected saved settings.
Prompts for confirmation.
Delete Deletes the selected graph layout setting.
Prompts for confirmation.
Exit (Red circle with a white \"X.\") Returns to OSCAR menu.
\ +

Graph Layout Settings
\ + \ + \ + \ +
* Name * Order * Pinning * Height
* Height Options * Event Flags * Plots Enabled * Dotted Lines
\ +
General Information
\ + \ + * Maximum description size = 80 characters.\ + * Maximum Saved Graph Layout Settings = 30 \ + * Saved Graprhg Layout Setting are available for all user profiles\ + * Graph Layout Settings only impact how graphs are displayed.
\ + They do not contains any other data.\ + * The Escape key \"esc\" will always exit a dialog menu - like this help or the layout menu\ + \ +

\ +")); + +} + +const QString SaveGraphLayoutSettings::calculateStyleMessageBox(QFont* font , QString& s1, QString& s2) { + QFontMetrics fm = QFontMetrics(*font); + int width = fm.boundingRect(s1).size().width(); + int width2 = fm.boundingRect(s2).size().width(); + width = qMax(width,width2) + iconWidthMessageBox; + + QString style = QString("%1 QLabel{%2 min-width: %3px;}" ). + arg(styleMessageBox). + arg("text-align: center;" "color:black;"). + arg(width); + + return style; +} + +bool SaveGraphLayoutSettings::verifyItem(QListWidgetItem* item,QString text,QIcon* icon) { + //if (verifyhelp() ) return false; + if (item) return true; + initminMenuListSize(); + confirmAction( text ,"" , icon); + return false; +} + +#if 1 +bool SaveGraphLayoutSettings::confirmAction(QString top ,QString bottom,QIcon* icon,QMessageBox::StandardButtons flags , QMessageBox::StandardButton adefault, QMessageBox::StandardButton success) { + //QString topText=QString("
%1
").arg(top); + //QString bottomText=QString("
%1
").arg(bottom); + QString topText=QString("

%1

").arg(top); + QString bottomText=QString("

%1

").arg(bottom); + + QMessageBox msgBox(menuDialog); + msgBox.setText(topText); + msgBox.setInformativeText(bottomText); + if (icon!=nullptr) { + msgBox.setIconPixmap(icon->pixmap(QSize(iconWidthMessageBox,iconWidthMessageBox))); + } + // may be good for help menu. a pull down box with box of data. msgBox.setDetailedText("some detailed string"); + msgBox.setStandardButtons(flags); + msgBox.setDefaultButton(adefault); + msgBox.setWindowFlag(Qt::FramelessWindowHint,true); + + msgBox.setStyleSheet(calculateStyleMessageBox(&menuListFont,top,bottom)); + + // displaywidgets((QWidget*)&msgBox); + bool ret= msgBox.exec()==success; + return ret; +} +#else +bool SaveGraphLayoutSettings::confirmAction(QString name ,QString question,QIcon* icon,QMessageBox::StandardButtons flags , QMessageBox::StandardButton adefault, QMessageBox::StandardButton success) { +//bool SaveGraphLayoutSettings::confirmAction(QString name,QString question,QIcon* icon) + Q_UNUSED(flags); + Q_UNUSED(adefault); + Q_UNUSED(success); QMessageBox msgBox(menuDialog); msgBox.setText(question); if (icon!=nullptr) { @@ -213,8 +363,9 @@ bool SaveGraphLayoutSettings::confirmAction(QString name,QString question,QIcon* Q_UNUSED(name); } +#endif -QString SaveGraphLayoutSettings::calculateStyle(bool on,bool exitBtn){ +QString SaveGraphLayoutSettings::calculateButtonStyle(bool on,bool exitBtn){ QString btnStyle=QString("QPushButton{%1%2}").arg(on ?"color: black;background-color:white;" :"color: darkgray;background-color:#e8e8e8 ;" @@ -239,27 +390,33 @@ QString SaveGraphLayoutSettings::calculateStyle(bool on,bool exitBtn){ } void SaveGraphLayoutSettings::looksOn(QPushButton* button,bool on){ - button->setEnabled(on); + //button->setEnabled(on); button->setStyleSheet(on?styleOn:styleOff); } -void SaveGraphLayoutSettings::enableButtons(bool enable) { +void SaveGraphLayoutSettings::manageButtonApperance() { + + bool enable = menuList->currentItem(); looksOn(menuUpdateBtn,enable); looksOn(menuRestoreBtn,enable); looksOn(menuDeleteBtn,enable); looksOn(menuRenameBtn,enable); + if (nextNumToUse<0) { // check if at Maximum limit + // must always hide first menuAddBtn->hide(); menuAddFullBtn->show(); } else { + // must always hide first menuAddFullBtn->hide(); menuAddBtn->show(); } } + void SaveGraphLayoutSettings::add_feature() { if(!graphView) return; - QString fileName = QString("%1%2").arg(baseName).arg(nextNumToUse,fileNumMaxLength,10,QLatin1Char('0')); + QString fileName = QString("%1%2").arg(fileBaseName).arg(nextNumToUse,fileNumMaxLength,10,QLatin1Char('0')); writeSettings(fileName); // create a default description - use formatted datetime. QString desc=QDateTime::currentDateTime().toString(); @@ -267,25 +424,21 @@ void SaveGraphLayoutSettings::add_feature() { descriptionMap->save(); QListWidgetItem* item = updateFileList( fileName); if (item!=nullptr) { - menulist->setCurrentItem(item,QItemSelectionModel::ClearAndSelect); - menulist->editItem(item); + menuList->setCurrentItem(item,QItemSelectionModel::ClearAndSelect); + menuList->editItem(item); } + menuList->sortItems(); + resizeMenu(); } void SaveGraphLayoutSettings::addFull_feature() { - QMessageBox msgBox(menuDialog); - msgBox.setText(tr("Maximum number exceeded.")); - msgBox.setStandardButtons(QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Cancel); - msgBox.setWindowFlag(Qt::FramelessWindowHint,true); - msgBox.setStyleSheet(styleMessageBox); - msgBox.setIconPixmap(m_icon_addFull->pixmap(QSize(50,50))); - msgBox.exec(); + verifyItem( nullptr,tr("Maximum number of Items exceeded.") , m_icon_add); } void SaveGraphLayoutSettings::update_feature() { if(!graphView) return; - QListWidgetItem * item=menulist->currentItem(); + QListWidgetItem * item=menuList->currentItem(); + if (!verifyItem(item, tr("No Item Selected") , m_icon_update)) return ; if(!confirmAction( item->text(), tr("Ok to Update?") , m_icon_update) ) return; QString fileName = item->data(fileNameRole).toString(); writeSettings(fileName); @@ -293,8 +446,8 @@ void SaveGraphLayoutSettings::update_feature() { void SaveGraphLayoutSettings::restore_feature() { if(!graphView) return; - QListWidgetItem * item=menulist->currentItem(); - if (!item) return; + QListWidgetItem * item=menuList->currentItem(); + if (!verifyItem(item, tr("No Item Selected") , m_icon_restore)) return ; QString fileName = item->data(fileNameRole).toString(); loadSettings(fileName); exit(); @@ -302,17 +455,35 @@ void SaveGraphLayoutSettings::restore_feature() { void SaveGraphLayoutSettings::rename_feature() { if(!graphView) return; - QListWidgetItem * item=menulist->currentItem(); - if (!item) return; - menulist->editItem(item); + QListWidgetItem * item=menuList->currentItem(); + if (!verifyItem(item, tr("No Item Selected") , m_icon_rename)) return ; + menuList->editItem(item); // SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) is called when edit changes the entry. // itemChanged will update the description map } +void SaveGraphLayoutSettings::help_exit_feature() { + helpDialog->close(); + exit(); +} + +void SaveGraphLayoutSettings::help_off_feature() { + helpDialog->close(); +} + +void SaveGraphLayoutSettings::help_feature() { + initminMenuListSize(); + createHelp(); + if(!helpDialog) return; + helpDialog->raise(); + helpDialog->exec(); + manageButtonApperance(); +} + void SaveGraphLayoutSettings::delete_feature() { if(!graphView) return; - QListWidgetItem * item=menulist->currentItem(); - if (!item) return; + QListWidgetItem * item=menuList->currentItem(); + if (!verifyItem(item, tr("No Item Selected") , m_icon_delete)) return ; if(!confirmAction(item->text(), tr("Ok To Delete?") ,m_icon_delete) ) return; QString fileName = item->data(fileNameRole).toString(); @@ -323,7 +494,8 @@ void SaveGraphLayoutSettings::delete_feature() { if (nextNumToUse<0) { nextNumToUse=fileNum(fileName); } - enableButtons(true); + manageButtonApperance(); + resizeMenu(); } void SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) @@ -352,13 +524,34 @@ void SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) descriptionMap->save(); } item->setText(desc); + menuList->sortItems(); + menuList->setCurrentItem(item); + resizeMenu(); + } void SaveGraphLayoutSettings::itemSelectionChanged() { - enableButtons(true); + initminMenuListSize(); + manageButtonApperance(); } +void SaveGraphLayoutSettings::initminMenuListSize() { + if (minMenuDialogSize.width()==0) { + menuDialogSize = menuDialog->size(); + minMenuDialogSize = menuDialogSize; + + menuListSize = menuList->size(); + minMenuListSize = menuListSize; + + dialogListDiff = menuDialogSize - menuListSize; + + dialogListDiff.setWidth (horizontalWidthAdjustment + dialogListDiff.width()); + + resizeMenu(); + } +}; + void SaveGraphLayoutSettings::writeSettings(QString filename) { graphView->SaveSettings(title+"."+filename,dirName); }; @@ -381,9 +574,79 @@ int SaveGraphLayoutSettings::fileNum(QString fileName) { return value; } + +QSize SaveGraphLayoutSettings::maxSize(const QSize AA , const QSize BB ) { + return QSize ( qMax(AA.width(),BB.width()) , qMax(AA.height(),BB.height() ) ); +} + +bool SaveGraphLayoutSettings::sizeEqual(const QSize AA , const QSize BB ) { + return (AA.width()==BB.width()) && ( AA.height()==BB.height()) ; +} + + + +void SaveGraphLayoutSettings::resizeMenu() { + if (minMenuDialogSize.width()==0) return; + + QSize newSize = calculateMenuDialogSize(); + newSize.setWidth ( newSize.width()); + + menuDialogSize = menuDialog->size(); + + if ( sizeEqual(newSize , menuDialogSize)) { + // no work to do + return; + }; + + if ( menuDialogSize.width() < newSize.width() ) { + menuDialog->setMinimumWidth(newSize.width()); + menuDialog->setMaximumWidth(QWIDGETSIZE_MAX); + } else if ( menuDialogSize.width() > newSize.width() ) { + menuDialog->setMaximumWidth(newSize.width()); + menuDialog->setMinimumWidth(newSize.width()); + } + if ( menuDialogSize.height() < newSize.height() ) { + menuDialog->setMinimumHeight(newSize.height()); + menuDialog->setMaximumHeight(QWIDGETSIZE_MAX); + } else if ( menuDialogSize.height() > newSize.height() ) { + menuDialog->setMaximumHeight(newSize.height()); + menuDialog->setMinimumHeight(newSize.height()); + } + menuDialogSize = newSize; +} + +QSize SaveGraphLayoutSettings::calculateMenuDialogSize() { + if (menuDialogSize.width()==0) return QSize(0,0); + QListWidgetItem* item; + widestItem=nullptr; + QFontMetrics fm = QFontMetrics(menuListFont); + + // account for scrollbars. + QSize returnValue = QSize( 0 , fm.height() ); // add an extra space at the bottom. width didn't work + + // Account for dialog Size + returnValue += dialogListDiff; + QSize size; + + for (int index = 0; index < menuList->count(); ++index) { + item = menuList->item(index); + if (!item) continue; + size = fm.boundingRect(item->text()).size(); + if (returnValue.width() < size.width()) { + returnValue.setWidth( qMax( returnValue.width(),size.width())); + widestItem=item; + } + returnValue.setHeight( returnValue.height()+size.height()); + } + returnValue.setWidth( horizontalWidthAdjustment + returnValue.width() ) ; + + returnValue = maxSize(returnValue, minMenuDialogSize); + return returnValue; +} + QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { QListWidgetItem* ret=nullptr; - enableButtons(false); + manageButtonApperance(); dir->refresh(); QFileInfoList filelist = dir->entryInfoList( QDir::Files | QDir::Readable | QDir::Writable | QDir::NoSymLinks,QDir::Name); @@ -391,7 +654,7 @@ QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { int row=0; int count=0; - menulist->clear(); + menuList->clear(); nextNumToUse=-1; descriptionMap->load(); for (int i = 0; i < filelist.size(); ++i) { @@ -414,7 +677,7 @@ QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { QListWidgetItem *item = new QListWidgetItem(descriptionMap->get(fileName)); item->setData(fileNameRole,fileName); item->setFlags(item->flags() | Qt::ItemIsEditable); - menulist->insertItem(row,item); + menuList->insertItem(row,item); row++; if (find!=nullptr && fileName==find) { ret=item; @@ -429,8 +692,8 @@ QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { nextNumToUse=count; } } - enableButtons(false); - menulist->sortItems(); + manageButtonApperance(); + menuList->sortItems(); return ret; } @@ -447,6 +710,7 @@ void SaveGraphLayoutSettings::menu(gGraphView* graphView) { } this->graphView=graphView; updateFileList(); + manageButtonApperance(); menuDialog->raise(); menuDialog->exec(); exit(); @@ -569,19 +833,19 @@ switch (ret) { عذرا ، لا يمكن تحديد موقع ملف. - menuDialog->connect(menulist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); - menuDialog->connect(menulist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); - menuDialog->connect(menulist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); - menuDialog->connect(menulist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); - menuDialog->connect(menulist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->connect(menuList, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); + menuDialog->connect(menuList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); + menuDialog->connect(menuList, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); + menuDialog->connect(menuList, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->connect(menuList, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); - menuDialog->disconnect(menulist, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); - menuDialog->disconnect(menulist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); - menuDialog->disconnect(menulist, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); - menuDialog->disconnect(menulist, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); - menuDialog->disconnect(menulist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->disconnect(menuList, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*) )); + menuDialog->disconnect(menuList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(itemDoubleClicked(QListWidgetItem*) )); + menuDialog->disconnect(menuList, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemClicked(QListWidgetItem*) )); + menuDialog->disconnect(menuList, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); + menuDialog->disconnect(menuList, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); void SaveGraphLayoutSettings::itemActivated(QListWidgetItem *item) diff --git a/oscar/saveGraphLayoutSettings.h b/oscar/saveGraphLayoutSettings.h index c75f2b62..d3e5e3be 100644 --- a/oscar/saveGraphLayoutSettings.h +++ b/oscar/saveGraphLayoutSettings.h @@ -16,9 +16,11 @@ #include #include #include - +#include +#include #include #include + #include "Graphs/gGraphView.h" class DescriptionMap @@ -35,7 +37,7 @@ private: QString filename; QMap descriptions; const QRegularExpression* parseDescriptionsRe; - QChar delimiter = QChar(177); + const QChar delimiter = QChar(':'); }; class SaveGraphLayoutSettings : public QWidget @@ -46,19 +48,35 @@ public: ~SaveGraphLayoutSettings(); void menu(gGraphView* graphView); protected: + QIcon* m_icon_return = new QIcon(":/icons/return.png"); + QIcon* m_icon_help = new QIcon(":/icons/question_mark.png"); QIcon* m_icon_exit = new QIcon(":/icons/exit.png"); QIcon* m_icon_delete = new QIcon(":/icons/trash_can.png"); QIcon* m_icon_update = new QIcon(":/icons/update.png"); QIcon* m_icon_restore = new QIcon(":/icons/restore.png"); QIcon* m_icon_rename = new QIcon(":/icons/rename.png"); QIcon* m_icon_add = new QIcon(":/icons/plus.png"); - QIcon* m_icon_addFull = new QIcon(":/icons/brick-wall.png"); private: - const static int fileNumMaxLength=3; - const static int maxFiles=20; // Max supported design limited is 1000 - based on layoutName has has 3 numeric digits fileNumMaxLength=3. - const static int maxDescriptionLen=80; - const QString baseName=QString("layout"); + const static int fileNumMaxLength = 3; + const static int maxFiles = 30; // Max supported design limited is 1000 10**fileNumMaxLength(3). + const static int iconWidthMessageBox = 50; + const static int maxDescriptionLen = 80; + const QString fileBaseName = QString("layout"); + const int fileNameRole = Qt::UserRole; + int fontSizeIncrease = 0; + int horizontalWidthAdjustment=60; // this seem to make menu size changes work. Testing says it is 60 but what causes it is unknown. + + QSize minMenuListSize = QSize(0,0); + QSize minMenuDialogSize = QSize(0,0); + + QSize dialogListDiff = QSize(0,0); + QSize menuDialogSize = QSize(0,0); + QSize menuListSize = QSize(0,0); + void initminMenuListSize(); + QSize calculateMenuDialogSize(); + QSize maxSize(const QSize AA , const QSize BB ) ; + bool sizeEqual(const QSize AA , const QSize BB ) ; const QRegularExpression* singleLineRe; const QRegularExpression* fileNumRe; @@ -67,10 +85,11 @@ private: QWidget* parent; const QString title; - gGraphView* graphView=nullptr; + gGraphView* graphView = nullptr; + QFont menuListFont; QDialog* menuDialog; - QListWidget* menulist; + QListWidget* menuList; QPushButton* menuAddFullBtn; // Must be first item for workaround. QPushButton* menuAddBtn; @@ -79,31 +98,59 @@ private: QPushButton* menuUpdateBtn; QPushButton* menuRenameBtn; QPushButton* menuExitBtn; + QPushButton* menuHelpBtn; + QVBoxLayout* menuLayout; - QHBoxLayout* menuLayout1; - QVBoxLayout* menuLayout2; + QHBoxLayout* menuLayoutButtons; - QDir* dir=nullptr; + void createHelp(); + void helpDestructor(); + QString helpInfo(); + QDialog* helpDialog=nullptr; + QPushButton* helpInfoExitBtn=nullptr; + QPushButton* helpExitBtn=nullptr; + int helpFontSizeIncrease = 0; + QHBoxLayout* helpLayoutButtons = nullptr; + + + + QDir* dir = nullptr; QString dirName; int nextNumToUse; - QListWidgetItem* updateFileList(QString find=QString()); + QListWidgetItem* updateFileList(QString find = QString()); + QListWidgetItem* widestItem=nullptr; QString styleOn; QString styleOff; - QString styleExitBtn; + QString styleExit; QString styleMessageBox; QString styleDialog; - QString calculateStyle(bool on,bool border); + + QString calculateButtonStyle(bool on,bool border); void looksOn(QPushButton* button,bool on); DescriptionMap* descriptionMap; - bool confirmAction(QString name,QString question,QIcon* icon); + bool confirmAction(QString name,QString question,QIcon* icon, + QMessageBox::StandardButtons flags = (QMessageBox::Cancel|QMessageBox::Yes) , + QMessageBox::StandardButton adefault = QMessageBox::Cancel, + QMessageBox::StandardButton success = QMessageBox::Yes + ); + bool verifyItem(QListWidgetItem* item,QString name,QIcon* icon) ; + + const QString calculateStyleMessageBox( QFont* font, QString& s1, QString& s2); + + void displaywidgets(QWidget* widget); + QSize calculateParagraphSize(QString& text,QFont& font, QString& ); void createMenu(); + void createStyleSheets(); void createSaveFolder(); - void enableButtons(bool enable); - void add_featurertn(); + QPushButton* newBtnRtn(QHBoxLayout*, QString name, QIcon* icon, QString style,QSizePolicy::Policy hPolicy,QString tooltip); + QPushButton* menuBtn( QString name, QIcon* icon, QString style,QSizePolicy::Policy hPolicy,QString tooltip); + QPushButton* helpBtn( QString name, QIcon* icon, QString style,QSizePolicy::Policy hPolicy,QString tooltip); + + void manageButtonApperance(); + void resizeMenu(); - const int fileNameRole = Qt::UserRole; int fileNum(QString fileName); void writeSettings(QString filename); void loadSettings(QString filename); @@ -113,10 +160,13 @@ public slots: private slots: void add_feature(); void addFull_feature(); - void update_feature(); void restore_feature(); - void delete_feature(); void rename_feature(); + void update_feature(); + void help_feature(); + void help_off_feature(); + void help_exit_feature(); + void delete_feature(); void exit(); void itemChanged(QListWidgetItem *item); From 29ca0a55cf86a8f9086de8bf5c2c3231860c7ac9 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Tue, 10 Jan 2023 20:39:53 -0500 Subject: [PATCH 07/17] Updated help message --- oscar/saveGraphLayoutSettings.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/oscar/saveGraphLayoutSettings.cpp b/oscar/saveGraphLayoutSettings.cpp index 0c3cf1d5..d8a6fea9 100644 --- a/oscar/saveGraphLayoutSettings.cpp +++ b/oscar/saveGraphLayoutSettings.cpp @@ -262,20 +262,27 @@ void SaveGraphLayoutSettings::helpDestructor() { QString SaveGraphLayoutSettings::helpInfo() { return QString( tr("\ -
Button Description
\

\ +

Button Description
\ \ - \ +
\ \ \ - \ +
\ + \ +
\ \ - \ +
\ + \ +
\ \ +
\ \ +
\
Add Creates a new saved Setting item. The default descripton is the currenti date.
\ +
Add Creates a new saved Setting item. The default description is the current date.
\ The description may be changed by the User.
\ The Add button will be greyed out when maximum number of saved layouts is reached.
Other Buttons These buttons will be greyed out when no items are selected
Restore Loads the current graph layout setting with the swlected saved settings then returns.
Restore Loads the current graph layout setting with the selected saved settings then returns.
Rename Allows the user to modify the description of the selected saved session.\ Same as a double click on the item.
Update Saves the current graph layout setting to the selected saved settings.
Prompts for confirmation.
Update Saves the current graph layout setting to the selected saved setting.
Prompts for confirmation.
Delete Deletes the selected graph layout setting.
Prompts for confirmation.
Exit (Red circle with a white \"X.\") Returns to OSCAR menu.
\
Graph Layout Settings
\ \ @@ -283,7 +290,7 @@ return QString( tr("\ \
* Height Options * Event Flags * Plots Enabled * Dotted Lines
\
General Information
\ - \ + \ \ \ \ From 1d11c57b57ff5def4549b75b81a3bf19492476a2 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Wed, 11 Jan 2023 20:22:12 -0500 Subject: [PATCH 08/17] fix proplen 59. AHI problem after a waveform preference change. --- oscar/SleepLib/schema.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/oscar/SleepLib/schema.cpp b/oscar/SleepLib/schema.cpp index dfec0b72..ae7cf469 100644 --- a/oscar/SleepLib/schema.cpp +++ b/oscar/SleepLib/schema.cpp @@ -396,6 +396,12 @@ void done() schema::channel.channels.clear(); schema::channel.groups.clear(); + // ahiChannels did not get cleared since day1 OSCAR when a reset was required. + // when reset occured then the Overview AHI graph would should an addtional set of channels. + // this fix just clears the variable that stores ahi data. + // probelm #59 https://gitlab.com/pholy/OSCAR-code/-/issues/59 + ahiChannels.clear(); + schema_initialized = false; } From c19b617e15ebf8b43fc35fd74d9ae23234ed91b8 Mon Sep 17 00:00:00 2001 From: Steve Gearhart Date: Sun, 15 Jan 2023 19:50:02 +0000 Subject: [PATCH 09/17] Viaton Data file with Suffix --- oscar/SleepLib/loader_plugins/viatom_loader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oscar/SleepLib/loader_plugins/viatom_loader.cpp b/oscar/SleepLib/loader_plugins/viatom_loader.cpp index 9d0fb2fa..9dbb6b66 100644 --- a/oscar/SleepLib/loader_plugins/viatom_loader.cpp +++ b/oscar/SleepLib/loader_plugins/viatom_loader.cpp @@ -239,8 +239,8 @@ QStringList ViatomLoader::getNameFilter() // Sometimes the files have a SleepU_ or O2Ring_ prefix. // Sometimes they have punctuation in the timestamp. // Note that ":" is not allowed on macOS, so Mac users will need to rename their files in order to select and import them. - return QStringList({"*20[0-5][0-9][01][0-9][0-3][0-9][012][0-9][0-5][0-9][0-5][0-9]", - "*20[0-5][0-9]-[01][0-9]-[0-3][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9]" + return QStringList({"*20[0-5][0-9][01][0-9][0-3][0-9][012][0-9][0-5][0-9][0-5][0-9]*", + "*20[0-5][0-9]-[01][0-9]-[0-3][0-9] [012][0-9]:[0-5][0-9]:[0-5][0-9]*" }); } From 27abdf7fcddacef3b5959acbda967ee3754c91f9 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Sun, 15 Jan 2023 19:24:17 -0500 Subject: [PATCH 10/17] DIsplay Event Flags when LineCursor is turned off --- oscar/Graphs/gLineChart.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/oscar/Graphs/gLineChart.cpp b/oscar/Graphs/gLineChart.cpp index be4bfd6e..4755cd33 100644 --- a/oscar/Graphs/gLineChart.cpp +++ b/oscar/Graphs/gLineChart.cpp @@ -1086,8 +1086,12 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion ®ion) double sum = 0; int cnt = 0; - // Draw the linechart overlays - if (m_day && (AppSetting->lineCursorMode() || (m_codes[0]==CPAP_FlowRate))) { + //Draw the linechart overlays (Event flags) independant of line Cursor mode + //The problem was that turning lineCUrsor mode off (or Control L) also stopped flag event on most daily graphs. + // The user didn't know what trigger the problem. Best quess is that Control L was typed by mistable. + // this fix allows flag events to be normally displayed when the line Cursor mode is off. + //was if (m_day /*&& (AppSetting->lineCursorMode() || (m_codes[0]==CPAP_FlowRate))*/) + if (m_day) { bool blockhover = false; for (auto fit=flags.begin(), end=flags.end(); fit != end; ++fit) { code = fit.key(); From 66f50cda665f0d4e1df83292e6978fdf931a0085 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Sun, 15 Jan 2023 20:46:04 -0500 Subject: [PATCH 11/17] inhibit Duplicate Overview Graphs When Ahi Pressure Enabled In Preference sDayOnIssue --- oscar/overview.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/oscar/overview.cpp b/oscar/overview.cpp index e376b5ec..661c154c 100644 --- a/oscar/overview.cpp +++ b/oscar/overview.cpp @@ -310,6 +310,11 @@ void Overview::CreateAllGraphs() { G->AddLayer(sc); chartsToBeMonitored.insert(sc,G); } else if (chan->type() == schema::WAVEFORM) { + if ((code==CPAP_AHI)||(code==CPAP_Pressure) ) { + DEBUGF O("SKIPPING") NAME(code) Q(code); + //skip if channel is for AHI. + continue; + } sc= new gSummaryChart(code, chan->machtype()); G->AddLayer(sc); chartsToBeMonitored.insert(sc,G); From e62066a6823d42804029ac6fbc24dbba8f22e37a Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Mon, 16 Jan 2023 08:26:01 -0500 Subject: [PATCH 12/17] refresh Overview When Session Enable Toggled Day One Issue --- oscar/daily.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/oscar/daily.cpp b/oscar/daily.cpp index 8a1e4757..5a686c57 100644 --- a/oscar/daily.cpp +++ b/oscar/daily.cpp @@ -7,7 +7,7 @@ * License. See the file COPYING in the main directory of the source code * for more details. */ -#define TEST_MACROS_ENABLED +#define TEST_MACROS_ENABLEDoff #include #include @@ -602,6 +602,7 @@ void Daily::Link_clicked(const QUrl &url) // Reload day LoadDate(previous_date); + mainwin->getOverview()->graphView()->dataChanged(); // webView->page()->mainFrame()->setScrollBarValue(Qt::Vertical, webView->page()->mainFrame()->scrollBarMaximum(Qt::Vertical)-i); } else if (code=="toggleoxisession") { // Enable/Disable Oximetry session day=p_profile->GetDay(previous_date,MT_OXIMETER); @@ -614,6 +615,7 @@ void Daily::Link_clicked(const QUrl &url) // Reload day LoadDate(previous_date); + mainwin->getOverview()->graphView()->dataChanged(); // webView->page()->mainFrame()->setScrollBarValue(Qt::Vertical, webView->page()->mainFrame()->scrollBarMaximum(Qt::Vertical)-i); } else if (code=="togglestagesession") { // Enable/Disable Sleep Stage session day=p_profile->GetDay(previous_date,MT_SLEEPSTAGE); @@ -622,6 +624,7 @@ void Daily::Link_clicked(const QUrl &url) if (!sess) return; sess->setEnabled(!sess->enabled()); LoadDate(previous_date); + mainwin->getOverview()->graphView()->dataChanged(); } else if (code=="togglepositionsession") { // Enable/Disable Position session day=p_profile->GetDay(previous_date,MT_POSITION); if (!day) return; @@ -629,6 +632,7 @@ void Daily::Link_clicked(const QUrl &url) if (!sess) return; sess->setEnabled(!sess->enabled()); LoadDate(previous_date); + mainwin->getOverview()->graphView()->dataChanged(); } else if (code=="cpap") { day=p_profile->GetDay(previous_date,MT_CPAP); if (day) { From 9b12ecb2b4858af31ba58c213cbae9d912a01f76 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Mon, 16 Jan 2023 12:04:31 -0500 Subject: [PATCH 13/17] Updated layout Settings HelpInfo --- oscar/saveGraphLayoutSettings.cpp | 114 +++++++++++++++++------------- 1 file changed, 65 insertions(+), 49 deletions(-) diff --git a/oscar/saveGraphLayoutSettings.cpp b/oscar/saveGraphLayoutSettings.cpp index d8a6fea9..009515e4 100644 --- a/oscar/saveGraphLayoutSettings.cpp +++ b/oscar/saveGraphLayoutSettings.cpp @@ -78,7 +78,8 @@ SaveGraphLayoutSettings::~SaveGraphLayoutSettings() void SaveGraphLayoutSettings::createSaveFolder() { // Insure that the save folder exists // Get the directory name for the save files - QString layoutFileFolder = "savedGraphLayoutSettings/"; + //QString layoutFileFolder = "savedGraphLayoutSettings/"; + QString layoutFileFolder = "layoutSettings/"; #if 0 // home directory for the current profile. @@ -223,22 +224,14 @@ void SaveGraphLayoutSettings::createHelp() { QFont helpInfoLabelFont = helpInfoFont; helpInfoLabelFont.setPointSize(fontSizeIncrease+ helpInfoFont.pointSize()); - - //QHBoxLayout* helpLayoutButtons; - //QLabel* helpInfoHeaderLabel; - //QFont helpInfoFont; - //QVBoxLayout* helpLayout; - - QLabel* helpInfoHeaderLabel = new QLabel("helpInfoHeaderLabel",parent); - helpInfoHeaderLabel->setText(QString( tr("

Help Menu - Manage Graph Layout Settings

"))); + helpInfoHeaderLabel->setText(QString( tr("

Help Menu - Manage Layout Settings

"))); helpInfoHeaderLabel->setFont(helpInfoLabelFont); QLabel* helpInfoLabel = new QLabel("helpInfo",parent); helpInfoLabel->setFont(helpInfoFont); helpInfoLabel->setText(helpInfo()) ; - helpLayoutButtons = new QHBoxLayout(); helpLayoutButtons->addWidget(helpInfoHeaderLabel); helpInfoExitBtn= helpBtn("" ,m_icon_return , styleOn ,QSizePolicy::Fixed , tr("Exits the help menu.")); @@ -260,47 +253,70 @@ void SaveGraphLayoutSettings::helpDestructor() { } QString SaveGraphLayoutSettings::helpInfo() { - return QString( tr("\ -

\ -

Button Description
\ -
* Maximum description size = 80 characters.
* Maximum Saved Graph Layout Settings = 30
* Saved Graprhg Layout Setting are available for all user profiles
\ - \ -
\ - \ - \ -
\ - \ -
\ - \ -
\ - \ -
\ - \ -
\ - \ -
\ -
Add Creates a new saved Setting item. The default description is the current date.
\ - The description may be changed by the User.
\ - The Add button will be greyed out when maximum number of saved layouts is reached.
Other Buttons These buttons will be greyed out when no items are selected
Restore Loads the current graph layout setting with the selected saved settings then returns.
Rename Allows the user to modify the description of the selected saved session.\ - Same as a double click on the item.
Update Saves the current graph layout setting to the selected saved setting.
Prompts for confirmation.
Delete Deletes the selected graph layout setting.
Prompts for confirmation.
Exit (Red circle with a white \"X.\") Returns to OSCAR menu.
\ -
Graph Layout Settings
\ - \ - \ - \ -
* Name * Order * Pinning * Height
* Height Options * Event Flags * Plots Enabled * Dotted Lines
\ -
General Information
\ - \ - \ - \ - \ - \ - \ -
* Maximum description size = 80 characters.
* Maximum Saved Graph Layout Settings = 30
* Saved Graprhg Layout Setting are available for all user profiles
* Graph Layout Settings only impact how graphs are displayed.
\ - They do not contains any other data.
* The Escape key \"esc\" will always exit a dialog menu - like this help or the layout menu
\ -

\ +

\ + This feature manages the saving and restoring of Layout Settings.\ +
\ + Layout Settings control the layout of a graph or chart.\ +
\ + Different Layouts Settings can be saved and later restored.\ +
\ +

\ + \ + \ + \ + \ + \ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
ButtonDescription
AddCreates a copy of the current Layout Settings.
\ + The default description is the current date.
\ + The description may be changed.
\ + The Add button will be greyed out when maximum number is reached.
Other Buttons Greyed out when there are no selections
RestoreLoads the Layout Settings from the selection. Automatically exits.
Rename Modify the description of the selection. Same as a double click.
Update Saves the current Layout Settings to the selection.
\ + Prompts for confirmation.
DeleteDeletes the selecton.
\ + Prompts for confirmation.
Control
Exit (Red circle with a white \"X\".) Returns to OSCAR menu.
ReturnNext to Exit icon. Only in Help Menu. Returns to Layout menu.
Escape KeyExit the Help or Layout menu.
\ +

Layout Settings

\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
* Name* Pinning* Plots Enabled * Height
* Order* Event Flags* Dotted Lines* Height Options
\ +

General Information

\ +
    \ +
  • Maximum description size = 80 characters.
  • \ +
  • Maximum Saved Layout Settings = 30.
  • \ +
  • Saved Layout Settings can be accessed by all profiles. \ +
  • Layout Settings only control the layout of a graph or chart.
    \ + They do not contain any other data.
    \ + They do not control if a graph is displayed or not.
  • \ +
  • Layout Settings for daily and overview are managed independantly.
  • \ +
\ ")); - } const QString SaveGraphLayoutSettings::calculateStyleMessageBox(QFont* font , QString& s1, QString& s2) { From 30db244ac51e21ce48c2f93d03f2d0ee3fefc4a3 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Fri, 20 Jan 2023 19:59:28 -0500 Subject: [PATCH 14/17] daily Event Combo Tooltip off by one entry --- oscar/daily.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/oscar/daily.cpp b/oscar/daily.cpp index 5a686c57..321595bd 100644 --- a/oscar/daily.cpp +++ b/oscar/daily.cpp @@ -1687,9 +1687,10 @@ void Daily::Load(QDate date) ui->eventsCombo->addItem(*icon_up_down, tr("10 of 10 Event Types"), 0); // Translation used only for spacing for (int i=0; i < available.size(); ++i) { ChannelID code = available.at(i); + int comboxBoxIndex = i+1; schema::Channel & chan = schema::channel[code]; ui->eventsCombo->addItem(chan.enabled() ? *icon_on : * icon_off, chan.label(), code); - ui->eventsCombo->setItemData(i, chan.fullname(), Qt::ToolTipRole); + ui->eventsCombo->setItemData(comboxBoxIndex, chan.fullname(), Qt::ToolTipRole); } setFlagText(); From e512a2b3b426cbf123745f63f4225dc20f0c466e Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Sun, 22 Jan 2023 13:13:26 -0500 Subject: [PATCH 15/17] save Oximetry Preferences that are not saved --- oscar/SleepLib/profiles.h | 15 + oscar/SleepLib/schema.cpp | 3 - oscar/preferencesdialog.cpp | 11 +- preferencesdialog.ui | 3234 ----------------------------------- 4 files changed, 23 insertions(+), 3240 deletions(-) delete mode 100644 preferencesdialog.ui diff --git a/oscar/SleepLib/profiles.h b/oscar/SleepLib/profiles.h index 44daf68d..7139343e 100644 --- a/oscar/SleepLib/profiles.h +++ b/oscar/SleepLib/profiles.h @@ -299,7 +299,11 @@ const QString STR_OS_SPO2DropDuration = "SPO2DropDuration"; const QString STR_OS_SPO2DropPercentage = "SPO2DropPercentage"; const QString STR_OS_PulseChangeDuration = "PulseChangeDuration"; const QString STR_OS_PulseChangeBPM = "PulseChangeBPM"; + const QString STR_OS_SkipOxiIntroScreen = "SkipOxiIntroScreen"; +const QString STR_OS_oxiDesaturationThreshold = "oxiDesaturationThreshold"; +const QString STR_OS_flagPulseAbove = "flagPulseAbove"; +const QString STR_OS_flagPulseBelow = "flagPulseBelow"; // CPAPSettings Strings @@ -489,6 +493,10 @@ class OxiSettings : public PrefSettings initPref(STR_OS_PulseChangeDuration, 8.0); initPref(STR_OS_PulseChangeBPM, 5.0); initPref(STR_OS_SkipOxiIntroScreen, false); + + initPref(STR_OS_oxiDesaturationThreshold, 88); + initPref(STR_OS_flagPulseAbove, 130); + initPref(STR_OS_flagPulseBelow, 40); } bool oximetryEnabled() const { return getPref(STR_OS_EnableOximetry).toBool(); } @@ -502,6 +510,10 @@ class OxiSettings : public PrefSettings double pulseChangeBPM() const { return getPref(STR_OS_PulseChangeBPM).toDouble(); } bool skipOxiIntroScreen() const { return getPref(STR_OS_SkipOxiIntroScreen).toBool(); } + double oxiDesaturationThreshold() const { return getPref(STR_OS_oxiDesaturationThreshold).toDouble(); } + double flagPulseAbove() const { return getPref(STR_OS_flagPulseAbove).toDouble(); } + double flagPulseBelow() const { return getPref(STR_OS_flagPulseBelow).toDouble(); } + void setOximetryEnabled(bool enabled) { setPref(STR_OS_EnableOximetry, enabled); } void setDefaultDevice(QString name) { setPref(STR_OS_DefaultDevice, name); } @@ -517,6 +529,9 @@ class OxiSettings : public PrefSettings void setPulseChangeDuration(double duration) { setPref(STR_OS_PulseChangeDuration, duration); } + void setOxiDesaturationThreshold(double value) { setPref(STR_OS_oxiDesaturationThreshold, value); } + void setFlagPulseAbove(double value) { setPref(STR_OS_flagPulseAbove, value); } + void setFlagPulseBelow(double value) { setPref(STR_OS_flagPulseBelow, value); } }; /*! \class CPAPSettings diff --git a/oscar/SleepLib/schema.cpp b/oscar/SleepLib/schema.cpp index ae7cf469..0d445725 100644 --- a/oscar/SleepLib/schema.cpp +++ b/oscar/SleepLib/schema.cpp @@ -203,12 +203,9 @@ void init() // Oximetry schema::channel.add(GRP_OXI, new Channel(OXI_Pulse = 0x1800, WAVEFORM, MT_OXIMETER, SESSION, STR_GRAPH_Oxi_Pulse, QObject::tr("Pulse Rate"), QObject::tr("Heart rate in beats per minute"), QObject::tr("Pulse Rate"), STR_UNIT_BPM, DEFAULT, QColor("red"))); - schema::channel[OXI_Pulse].setLowerThreshold(40); - schema::channel[OXI_Pulse].setUpperThreshold(130); schema::channel.add(GRP_OXI, new Channel(OXI_SPO2 = 0x1801, WAVEFORM, MT_OXIMETER, SESSION, STR_GRAPH_Oxi_SPO2, QString("SpO2 %"), QObject::tr("Blood-oxygen saturation percentage"), QString("SpO2"), STR_UNIT_Percentage, DEFAULT, QColor("blue"))); - schema::channel[OXI_SPO2].setLowerThreshold(88); schema::channel.add(GRP_OXI, new Channel(OXI_Plethy = 0x1802, WAVEFORM, MT_OXIMETER, SESSION, STR_GRAPH_Oxi_Plethy, QObject::tr("Plethysomogram"), QObject::tr("An optical Photo-plethysomogram showing heart rhythm"), QObject::tr("Plethy"), STR_UNIT_Hz, DEFAULT, QColor("#404040"))); diff --git a/oscar/preferencesdialog.cpp b/oscar/preferencesdialog.cpp index a2f5ea19..a91b46ed 100644 --- a/oscar/preferencesdialog.cpp +++ b/oscar/preferencesdialog.cpp @@ -130,9 +130,10 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, Profile *_profile) : ui->showLeakRedline->setChecked(profile->cpap->showLeakRedline()); ui->leakRedlineSpinbox->setValue(profile->cpap->leakRedline()); - ui->oxiDesaturationThreshold->setValue(schema::channel[OXI_SPO2].lowerThreshold()); - ui->flagPulseAbove->setValue(schema::channel[OXI_Pulse].upperThreshold()); - ui->flagPulseBelow->setValue(schema::channel[OXI_Pulse].lowerThreshold()); + //change initialization from hard coded in schema to profile data. + ui->oxiDesaturationThreshold->setValue(profile->oxi->oxiDesaturationThreshold()); + ui->flagPulseAbove->setValue(profile->oxi->flagPulseAbove()); + ui->flagPulseBelow->setValue(profile->oxi->flagPulseBelow()); ui->spo2Drop->setValue(profile->oxi->spO2DropPercentage()); ui->spo2DropTime->setValue(profile->oxi->spO2DropDuration()); @@ -898,6 +899,10 @@ bool PreferencesDialog::Save() profile->oxi->setPulseChangeDuration(ui->pulseChangeTime->value()); profile->oxi->setOxiDiscardThreshold(ui->oxiDiscardThreshold->value()); + profile->oxi->setOxiDesaturationThreshold(ui->oxiDesaturationThreshold->value()); + profile->oxi->setFlagPulseAbove(ui->flagPulseAbove->value()); + profile->oxi->setFlagPulseBelow(ui->flagPulseBelow->value()); + profile->cpap->setAHIWindow(ui->ahiGraphWindowSize->value()); profile->cpap->setAHIReset(ui->ahiGraphZeroReset->isChecked()); diff --git a/preferencesdialog.ui b/preferencesdialog.ui deleted file mode 100644 index 1dc08914..00000000 --- a/preferencesdialog.ui +++ /dev/null @@ -1,3234 +0,0 @@ - - - PreferencesDialog - - - Qt::ApplicationModal - - - - 0 - 0 - 942 - 651 - - - - - 0 - 0 - - - - - 145 - 0 - - - - Preferences - - - - :/icons/preferences.png:/icons/preferences.png - - - true - - - true - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - 0 - - - - &Import - - - - 4 - - - 4 - - - 4 - - - 4 - - - 4 - - - - - - 0 - 0 - - - - Session Splitting Settings - - - - 4 - - - 4 - - - 4 - - - 4 - - - 4 - - - - - - 0 - 0 - - - - [ResMed warning message] - - - true - - - true - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Combine Close Sessions - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Minutes - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - 0 - 0 - - - - Multiple sessions closer together than this value will be kept on the same day. - - - - 0 - - - 240 - - - 10 - - - 30 - - - 0 - - - Qt::Horizontal - - - false - - - false - - - QSlider::TicksAbove - - - 10 - - - - - - - QFrame::Box - - - 5 - - - QLCDNumber::Flat - - - - - - - - - - - Ignore Short Sessions - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Minutes - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - 4 - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Sessions shorter in duration than this will not be displayed<span style=" font-style:italic;">.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-style:italic;"></p></body></html> - - - 90 - - - 5 - - - Qt::Horizontal - - - QSlider::TicksAbove - - - 5 - - - - - - - QFrame::Box - - - QLCDNumber::Flat - - - - - - - - - 4 - - - - - Day Split Time - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Sessions starting before this time will go to the previous calendar day. - - - QAbstractSpinBox::UpDownArrows - - - - 12 - 0 - 0 - 2000 - 1 - 1 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 10 - 20 - - - - - - - - <html><head/><body><p><span style=" font-weight:600;">This setting should be used with caution...</span> Switching it off comes with consequences involving accuracy of summary only days, as certain calculations only work properly provided summary only sessions that came from individual day records are kept together. </p><p><span style=" font-weight:600;">ResMed users:</span> Just because it seems natural to you and I that the 12 noon session restart should be in the previous day, does not mean ResMed's data agrees with us. The STF.edf summary index format has serious weaknesses that make doing this not a good idea.</p><p>This option exists to pacify those who don't care and want to see this &quot;fixed&quot; no matter the costs, but know it comes with a cost. If you keep your SD card in every night, and import at least once a week, you won't see problems with this very often.</p></body></html> - - - Don't Split Summary Days (Warning: read the tooltip!) - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - - - 0 - 0 - - - - Session Storage Options - - - - 4 - - - 9 - - - 4 - - - 0 - - - 0 - - - 4 - - - - - - true - - - - Changing SD Backup compression options doesn't automatically recompress backup data. - - - true - - - - - - - Compress ResMed (EDF) backups to save disk space. -Backed up EDF files are stored in the .gz format, -which is common on Mac & Linux platforms.. - -OSCAR can import from this compressed backup directory natively.. -To use it with ResScan will require the .gz files to be uncompressed first.. - - - Compress SD Card Backups (slower first import, but makes backups smaller) - - - - - - - - true - - - - The following options affect the amount of disk space OSCAR uses, and have an effect on how long import takes. - - - true - - - - - - - This makes OSCAR's data take around half as much space. -But it makes import and day changing take longer.. -If you've got a new computer with a small solid state disk, this is a good option. - - - Compress Session Data (makes OSCAR data smaller, but day changing slower.) - - - - - - - This maintains a backup of SD-card data for ResMed machines, - -ResMed S9 series machines delete high resolution data older than 7 days, -and graph data older than 30 days.. - -OSCAR can keep a copy of this data if you ever need to reinstall. -(Highly recomended, unless your short on disk space or don't care about the graph data) - - - Create SD Card Backups during Import (Turn this off at your own peril!) - - - - - - - 0 - - - 0 - - - 0 - - - - - Do not import sessions older than: - - - - - - - - 165 - 0 - - - - Sessions older than this date will not be imported - - - true - - - true - - - - 2099 - 12 - 31 - - - - - 1970 - 1 - 2 - - - - QDateTimeEdit::DaySection - - - dd MMMM yyyy - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - 0 - 0 - - - - Memory and Startup Options - - - - - - Bypass the login screen and load the most recent User Profile - - - Auto-Launch CPAP Importer after opening profile - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - <html><head/><body><p>This setting keeps waveform and event data in memory after use to speed up revisiting days.</p><p>This is not really a necessary option, as your operating system caches previously used files too.</p><p>Recommendation is to leave it switched off, unless your computer has a ton of memory.</p></body></html> - - - Keep Waveform/Event data in memory - - - - - - - <html><head/><body><p>Makes starting OSCAR a bit slower, by pre-loading all the summary data in advance, which speeds up overview browsing and a few other calculations later on. </p><p>If you have a large amount of data, it might be worth keeping this switched off, but if you typically like to view <span style=" font-style:italic;">everything</span> in overview, all the summary data still has to be loaded anyway. </p><p>Note this setting doesn't affect waveform and event data, which is always demand loaded as needed.</p></body></html> - - - Pre-Load all summary data at startup - - - - - - - Automatically load last used profile on start-up - - - - - - - <html><head/><body><p>Cuts down on any unimportant confirmation dialogs during import.</p></body></html> - - - Import without asking for confirmation - - - - - - - <html><head/><body><p>Provide an alert when importing data from any machine model that has not yet been tested by OSCAR developers.</p></body></html> - - - Warn when importing data from an untested machine - - - - - - - <html><head/><body><p>Provide an alert when importing data that is somehow different from anything previously seen by OSCAR developers.</p></body></html> - - - Warn when previously unseen data is encountered - - - - - - - - - - - &CPAP - - - - 4 - - - 4 - - - 4 - - - 4 - - - 4 - - - - - 20 - - - QLayout::SetMinimumSize - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - CPAP Clock Drift - - - - 4 - - - 4 - - - 4 - - - 4 - - - 4 - - - - - - 0 - 0 - - - - <html><head/><body><p>Note: This is not intended for timezone corrections! Make sure your operating system clock and timezone is set correctly.</p></body></html> - - - true - - - - - - - -9999 - - - 9999 - - - - - - - Minutes - - - - - - - -59 - - - 59 - - - 0 - - - - - - - -99 - - - - - - - Hours - - - - - - - Seconds - - - - - - - - - - - 0 - 0 - - - - This calculation requires Total Leaks data to be provided by the CPAP machine. (Eg, PRS1, but not ResMed, which has these already) - -The Unintentional Leak calculations used here are linear, they don't model the mask vent curve. - -If you use a few different masks, pick average values instead. It should still be close enough. - - - Calculate Unintentional Leaks When Not Present - - - true - - - - - - Your masks vent rate at 20 cmH2O pressure - - - 300 - - - 550 - - - 10 - - - 470 - - - Qt::Horizontal - - - QSlider::TicksAbove - - - 20 - - - - - - - - 0 - 0 - - - - - 80 - 0 - - - - QFrame::Box - - - 48 l/m - - - true - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Your masks vent rate at 4 cmH2O pressure - - - 120 - - - 240 - - - 1 - - - 10 - - - 201 - - - Qt::Horizontal - - - false - - - QSlider::TicksAbove - - - - - - - 4 cmH2O - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 20 cmH2O - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 80 - 0 - - - - QFrame::Box - - - 20 l/m - - - true - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Note: A linear calculation method is used. Changing these values requires a recalculation. - - - true - - - - - - - - - - - 0 - 0 - - - - Enable/disable experimental event flagging enhancements. -It allows detecting borderline events, and some the machine missed. -This option must be enabled before import, otherwise a purge is required. - - - Custom CPAP User Event Flagging - - - false - - - true - - - - 4 - - - 9 - - - 4 - - - 4 - - - 4 - - - - - s - - - 10.000000000000000 - - - - - - - % - - - 10.000000000000000 - - - - - - - This experimental option attempts to use OSCAR's event flagging system to improve machine detected event positioning. - - - Resync Machine Detected Events (Experimental) - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - #2 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - Flow Restriction - - - - - - - - 0 - 0 - - - - - true - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:italic;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Custom flagging is an experimental method of detecting events missed by the machine. They are <span style=" text-decoration: underline;">not</span> included in AHI.</p></body></html> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - - - - - - 0 - 0 - - - - Percentage of restriction in airflow from the median value. -A value of 20% works well for detecting apneas. - - - % - - - 10.000000000000000 - - - - - - - Show in Event Breakdown Piechart - - - - - - - Duration of airflow restriction - - - s - - - 1.000000000000000 - - - 10.000000000000000 - - - - - - - #1 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Allow duplicates near machine events. - - - - - - - - 0 - 0 - - - - Event Duration - - - - - - - - - - - - QLayout::SetMinimumSize - - - 5 - - - 5 - - - - - - 0 - 0 - - - - General CPAP and Related Settings - - - - - - Show flags for machine detected events that haven't been identified yet. - - - Enable Unknown Events Channels - - - - - - - AHI/Hour Graph Time Window - - - - - - - Compliance defined as - - - - - - - - 0 - 0 - - - - Adjusts the amount of data considered for each point in the AHI/Hour graph. -Defaults to 60 minutes.. Highly recommend it's left at this value. - - - minutes - - - 5 - - - 999 - - - 60 - - - - - - - - 50 - false - - - - Whether to show the leak redline in the leak graph - - - Flag leaks over threshold - - - - - - - Preferred major event index - - - - - - - Reset the counter to zero at beginning of each (time) window. - - - Zero Reset - - - - - - - - 0 - 0 - - - - User definable threshold considered large leak - - - L/min - - - 1 - - - - - - - - 0 - 0 - - - - Regard days with under this usage as "incompliant". 4 hours is usually considered compliant. - - - hours - - - 1 - - - 8.000000000000000 - - - 4.000000000000000 - - - - - - - - 0 - 0 - - - - - AHI - - - - - RDI - - - - - - - - - - - - 0 - 0 - - - - Changes to the following settings needs a restart, but not a recalc. - - - Preferred Calculation Methods - - - - - - For consistancy, ResMed users should use 95% here, -as this is the only value available on summary-only days. - - - % - - - 1 - - - 99 - - - - - - - - 0 - 0 - - - - Middle Calculations - - - - - - - Maximum Calcs - - - - - - - Upper Percentile - - - - - - - Culminative Indices - - - - - - - Median is recommended for ResMed users. - - - - Median - - - - - Weighted Average - - - - - Normal Average - - - - - - - - - 0 - 0 - - - - - 140 - 0 - - - - <html><head/><body><p>True maximum is the maximum of the data set.</p><p>99th percentile filters out the rarest outliers.</p></body></html> - - - - True Maximum - - - - - 99% Percentile - - - - - - - - - Combined Count divided by Total Hours - - - - - Time Weighted average of Indice - - - - - Standard average of indice - - - - - Median - - - - - - - - - 0 - 0 - - - - <html><head/><body><p><span style=" font-weight:600;">Note: </span>Due to summary design limitations, ResMed machines do not support changing these settings.</p></body></html> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - &Oximetry - - - - 4 - - - 2 - - - 2 - - - 2 - - - 2 - - - - - Oximetry Settings - - - false - - - - 4 - - - 8 - - - 4 - - - 4 - - - 5 - - - - - - 0 - 0 - - - - Other oximetry options - - - - - - % - - - - - - - bpm - - - - - - - Small chunks of oximetry data under this amount will be discarded. - - - s - - - 300 - - - - - - - Discard segments under - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - bpm - - - - - - - Flag SPO2 Desaturations Below - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Flag Pulse Rate Below - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Flag Pulse Rate Above - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - 0 - 0 - - - - Flag rapid changes in oximetry stats - - - - - - - 0 - 0 - - - - SPO2 - - - - - - - Minimum duration of drop in oxygen saturation - - - s - - - 0 - - - - - - - Sudden change in Pulse Rate of at least this amount - - - bpm - - - 0 - - - 1.000000000000000 - - - - - - - Minimum duration of pulse change event. - - - s - - - 0 - - - - - - - - 0 - 0 - - - - Pulse - - - - - - - Percentage drop in oxygen saturation - - - % - - - 0 - - - 1.000000000000000 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 0 - 0 - - - - - 300 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.84158pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">Syncing Oximetry and CPAP Data</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">CMS50 data imported from SpO2Review (from .spoR files) or the serial import method does </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600; text-decoration: underline;">not</span><span style=" font-family:'Sans'; font-size:10pt;"> have the correct timestamp needed to sync.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Live view mode (using a serial cable) is one way to acheive an accurate sync on CMS50 oximeters, but does not counter for CPAP clock drift.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">If you start your Oximeters recording mode at </span><span style=" font-family:'Sans'; font-size:10pt; font-style:italic;">exactly </span><span style=" font-family:'Sans'; font-size:10pt;">the same time you start your CPAP machine, you can now also achieve sync. </span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">The serial import process takes the starting time from last nights first CPAP session. (Remember to import your CPAP data first!)</span></p></body></html> - - - - - - - - Events - - - - 4 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Search - - - - - - - - - - - - - 0 - 0 - - - - - - - - - - - 0 - 0 - - - - Reset &Defaults - - - - - - - - 0 - 0 - - - - <html><head/><body><p><span style=" font-weight:600;">Warning: </span>Just because you can, does not mean it's good practice.</p></body></html> - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Waveforms - - - - 4 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Search - - - - - - - - - - - - - 0 - 0 - - - - - - - - - - - 0 - 0 - - - - Reset &Defaults - - - - - - - - 0 - 0 - - - - <html><head/><body><p><span style=" font-weight:600;">Warning: </span>Just because you can, does not mean it's good practice.</p></body></html> - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - &General - - - - - - - - - 0 - 0 - - - - General Settings - - - - 4 - - - 4 - - - 4 - - - 4 - - - 4 - - - - - Allow use of multiple CPU cores where available to improve performance. -Mainly affects the importer. - - - Enable Multithreading - - - - - - - Show Remove Card reminder notification on OSCAR shutdown - - - - - - - Always save screenshots in the OSCAR Data folder - - - - - - - - - - Qt::Vertical - - - - - - - - - Qt::Horizontal - - - - - - - Graphics Engine (Requires Restart) - - - - - - Try changing this from the default setting (Desktop OpenGL) if you experience rendering problems with OSCAR's graphs. - - - true - - - - - - - - - - - - - - 0 - 0 - - - - Check For Updates - - - false - - - - - - - 0 - 0 - - - - You are using a test version of OSCAR. Test versions check for updates automatically at least once every seven days. You may set the interval to less than seven days. - - - true - - - - - - - - 50 - false - false - false - - - - Automatically check for updates - - - - - - - - - - 0 - 0 - - - - Check for new version every - - - - - - - How often OSCAR should check for updates. - - - 90 - - - - - - - - 0 - 0 - - - - days. - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - Last Checked For Updates: - - - - - - - - 0 - 0 - - - - TextLabel - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - If you are interested in helping test new features and bugfixes early, click here. - - - I want to try experimental and test builds. (Advanced users only please.) - - - - - - - - 0 - 0 - - - - If you would like to help test early versions of OSCAR, please see the Wiki page about testing OSCAR. We welcome everyone who would like to test OSCAR, help develop OSCAR, and help with translations to existing or new languages. https://www.sleepfiles.com/OSCAR - - - true - - - true - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - &Appearance - - - - 4 - - - 2 - - - 2 - - - 2 - - - 2 - - - - - - - - 0 - 0 - - - - Graph Settings - - - - - - On Opening - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - <html><head/><body><p>Which tab to open on loading a profile. (Note: It will default to Profile if OSCAR is set to not open a profile on startup)</p></body></html> - - - Profile - - - - Profile - - - - - Welcome - - - - - Daily - - - - - Overview - - - - - Statistics - - - - - - - - Switch Tabs - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - No change - - - - - Welcome - - - - - Daily - - - - - Overview - - - - - Statistics - - - - - - - - After Import - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Graph Height - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - Overlay Flags - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Line Thickness - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - The visual method of displaying waveform overlay flags. - - - - - Standard Bars - - - - - Top Markers - - - - - - - - - - The pixel thickness of line plots - - - 2 - - - 8 - - - 1 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - - - Tooltip Timeout - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Scroll Dampening - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - How long you want the tooltips to stay visible. - - - 1000 - - - 30000 - - - 100 - - - 500 - - - 5000 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 1000 - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - QFrame::Box - - - TextLabel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - Graph Tooltips - - - - - - - - Bar Tops - - - - - Line Chart - - - - - - - - - 0 - 0 - - - - Default display height of graphs in pixels - - - 50 - - - 600 - - - 10 - - - 180 - - - - - - - - - <html><head/><body><p>This makes scrolling when zoomed in easier on sensitive bidirectional TouchPads</p><p>50ms is recommended value.</p></body></html> - - - 25 - - - 1 - - - 5 - - - Qt::Horizontal - - - false - - - QSlider::TicksBelow - - - 1 - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - QFrame::Box - - - TextLabel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - Overview Linecharts - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - 0 - 0 - - - - Other Visual Settings - - - - - - Anti-Aliasing applies smoothing to graph plots.. -Certain plots look more attractive with this on. -This also affects printed reports. - -Try it and see if you like it. - - - Use Anti-Aliasing - - - - - - - Makes certain plots look more "square waved". - - - Square Wave Plots - - - - - - - Pixmap caching is an graphics acceleration technique. May cause problems with font drawing in graph display area on your platform. - - - Use Pixmap Caching - - - - - - - <html><head/><body><p>These features have recently been pruned. They will come back later. </p></body></html> - - - Animations && Fancy Stuff - - - - - - - Daily view navigation buttons will skip over days without data records - - - Skip over Empty Days - - - - - - - Whether to allow changing yAxis scales by double clicking on yAxis labels - - - Allow YAxis Scaling - - - - - - - Whether to include machine serial number on machine settings changes report - - - Include Serial Number - - - - - - - Print reports in black and white, which can be more legible on non-color printers - - - Print reports in black and white (monochrome) - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - Qt::Horizontal - - - - - - - Fonts (Application wide settings) - - - false - - - - 0 - - - 4 - - - 0 - - - 4 - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Font - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Size - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Bold - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Italic - - - - - - - - 0 - 0 - - - - Application - - - - - - - - - - - 80 - 16777215 - - - - 6 - - - 30 - - - 10 - - - - - - - - 0 - 0 - - - - Qt::LeftToRight - - - - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - Graph Text - - - - - - - - - - - 80 - 16777215 - - - - 6 - - - 40 - - - 11 - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - Graph Titles - - - - - - - - - - - 80 - 16777215 - - - - 6 - - - 40 - - - 14 - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - Big Text - - - - - - - - - - - 80 - 16777215 - - - - 6 - - - 72 - - - 18 - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Details - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - &Cancel - - - - - - - &Ok - - - - - - - Qt::Horizontal - - - - 750 - 20 - - - - - - - - - - - - cancelButton - clicked() - PreferencesDialog - reject() - - - 757 - 605 - - - 286 - 274 - - - - - From 9543cbd9c257eb46f695f993245d08c7feecfb59 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Mon, 23 Jan 2023 17:54:27 -0500 Subject: [PATCH 16/17] receiving Ui Signal Before Ui Was First Displayed caused dialog message to appear --- oscar/mainwindow.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/oscar/mainwindow.cpp b/oscar/mainwindow.cpp index bcc8cfb2..846c43bb 100644 --- a/oscar/mainwindow.cpp +++ b/oscar/mainwindow.cpp @@ -7,6 +7,10 @@ * License. See the file COPYING in the main directory of the source code * for more details. */ +#define TEST_MACROS_ENABLED +#include + + #include #include #include @@ -132,6 +136,7 @@ QString MainWindow::getMainWindowTitle() void MainWindow::SetupGUI() { setupRunning = true; + setWindowTitle(getMainWindowTitle()); #ifdef Q_OS_MAC @@ -233,11 +238,17 @@ void MainWindow::SetupGUI() ui->action_Sidebar_Toggle->setChecked(b); ui->toolBox->setVisible(b); + bool oldState = ui->actionShowPersonalData->blockSignals(true); ui->actionShowPersonalData->setChecked(AppSetting->showPersonalData()); + ui->actionShowPersonalData->blockSignals(oldState); + oldState = ui->actionPie_Chart->blockSignals(true); ui->actionPie_Chart->setChecked(AppSetting->showPieChart()); + ui->actionPie_Chart->blockSignals(oldState); + oldState = ui->actionDaily_Calendar->blockSignals(true); ui->actionDaily_Calendar->setChecked(AppSetting->calendarVisible()); + ui->actionDaily_Calendar->blockSignals(oldState); on_tabWidget_currentChanged(0); From 71373d38b584bf20755e90638bc4b5357fc3b16b Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Thu, 26 Jan 2023 07:48:25 -0500 Subject: [PATCH 17/17] channels Updated With Preferences - allows oxi preferences flagPulseAbove/Below and flagSPO2 to work. --- oscar/SleepLib/profiles.cpp | 15 ++++++++++++--- oscar/SleepLib/profiles.h | 1 + oscar/preferencesdialog.cpp | 6 +----- oscar/test_macros.h | 28 ++++++++++++++++------------ 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/oscar/SleepLib/profiles.cpp b/oscar/SleepLib/profiles.cpp index 64217a31..0253b068 100644 --- a/oscar/SleepLib/profiles.cpp +++ b/oscar/SleepLib/profiles.cpp @@ -7,6 +7,9 @@ * License. See the file COPYING in the main directory of the source code * for more details. */ +#define TEST_MACROS_ENABLEDoff +#include + #include #include #include @@ -2101,7 +2104,7 @@ void Profile::loadChannels() if (chan->isNull()) { qDebug() << "loadChannels has no idea about channel" << name; - if (in.atEnd()) return; + if (in.atEnd()) break; continue; } chan->setEnabled(enabled); @@ -2122,8 +2125,14 @@ void Profile::loadChannels() chan->setUpperThresholdColor(upperThresholdColor); chan->setShowInOverview(showOverview); - if (in.atEnd()) return; + if (in.atEnd()) break; } - f.close(); + refrehOxiChannelsPref(); } + +void Profile::refrehOxiChannelsPref() { + schema::channel[OXI_Pulse].setLowerThreshold(oxi->flagPulseBelow()); + schema::channel[OXI_Pulse].setUpperThreshold(oxi->flagPulseAbove()); + schema::channel[OXI_SPO2].setLowerThreshold(oxi->oxiDesaturationThreshold()); +}; diff --git a/oscar/SleepLib/profiles.h b/oscar/SleepLib/profiles.h index 7139343e..2d0f127a 100644 --- a/oscar/SleepLib/profiles.h +++ b/oscar/SleepLib/profiles.h @@ -216,6 +216,7 @@ class Profile : public Preferences void loadChannels(); void saveChannels(); + void refrehOxiChannelsPref(); bool is_first_day; diff --git a/oscar/preferencesdialog.cpp b/oscar/preferencesdialog.cpp index a91b46ed..827acc8f 100644 --- a/oscar/preferencesdialog.cpp +++ b/oscar/preferencesdialog.cpp @@ -820,11 +820,6 @@ bool PreferencesDialog::Save() } } - schema::channel[OXI_SPO2].setLowerThreshold(ui->oxiDesaturationThreshold->value()); - schema::channel[OXI_Pulse].setLowerThreshold(ui->flagPulseBelow->value()); - schema::channel[OXI_Pulse].setUpperThreshold(ui->flagPulseAbove->value()); - - AppSetting->setUserEventPieChart(ui->showUserFlagsInPie->isChecked()); profile->session->setLockSummarySessions(ui->LockSummarySessionSplitting->isChecked()); profile->session->setWarnOnUntestedMachine(ui->warnOnUntestedMachine->isChecked()); @@ -986,6 +981,7 @@ bool PreferencesDialog::Save() p_pref->Save(); profile->Save(); + profile->refrehOxiChannelsPref(); if (recompress_events) { mainwin->recompressEvents(); diff --git a/oscar/test_macros.h b/oscar/test_macros.h index 14e6439d..b6d4f00e 100644 --- a/oscar/test_macros.h +++ b/oscar/test_macros.h @@ -17,10 +17,10 @@ When only these macos are used then debugging is disabled. SO for production code rename TEST_MACROS_ENABLED to TEST_MACROS_ENABLEDoff ########################################### -The the following to source cpp files +The the following to source cpp files to turn on the debug macros for use. -#define TEST_MACROS_ENABLED +#define TEST_MACROS_ENABLED #include To turn off the the test macros. @@ -38,11 +38,13 @@ To turn off the the test macros. #include #include -#define DEBUGQ qDebug().noquote() -#define DEBUGL DEBUGQ <

dwFXp=h5qA^HIK^>G&v5E$1Ey?)ny5z)@y=!QK7 zf2~zN+nIEl!M^`ZT|=HTs9+KEl7${?u9v=D^w*+`Y;<(A-1XZ`vp!D-#q^$-A~tp~ zCWg>blAXXREsR=^zmZTfc0j;t`?;j~*;%~nd=y5b=bQ{jDg9Zojf4{0hqe_4RXoie zq#d*=wAHF%Z#4@Dt+1X-)lv9Z`CC+AZujb{MM+h(0%AUS0w*FXY97U4ySAQ&7QiS{ zEF??}b<`)7?JX?}EACBQuW)MmO^8R=)zt;+73r1f_r=XKio4%$_5kQ0e=xD@P{Msb&nQ_h{K3Bn@EPLJ(FPyX+DB;>I+sZlg~8MKL+A1 z=3pe3`y-fn-#8M5{L1hMq)h71h!yp;=^h9En14zPh_s_0wA9*6$1qDjD~;+jsJ0kI zA%zBy+kgJQ3O~nY@EX!i&+M_Q`8V^bd}YrPmXH`gvnzB4`Yes*ORHVK&ux_mKE1y+ zl3h$Vg3~6PUuO0=Y*Dm&|FMG>_v$W9eIvVAEkjRc2Ui<~e8FeWyeHo(#bXw09gqKu zR%!FzqoI`)i4Uc7ryhg60wJA-@w+?IA10TVE0^CPBb$7-%A?F9yVhwuY=$R2`qs?; z`dsl{U3Ep>5{W!AF){gl{ypicDPNS*b8PMUOUUEy)W{8S6$`BNOA}Mm#f1flAJtg{ zHz*`U`=6uX=yvdG7cbwCL{lKSHEN9aTZnZ)K$h0SLwws$aJCd8oLo>@Q$`|Tgi-ee z1hy)TYa5+sdFt!xX#OL5wN^bj!&CgU#CNqC>jPMx29Ne8&h`)2|Hw)0dX|EtaI4AN|g+KgzsOx!=d_iCx omUnNY7$A#9TRyv*CjCpU82#9ge^dV1zkvjxqNIt!C|E`Q9~ Date: Wed, 28 Dec 2022 13:24:01 -0500 Subject: [PATCH 03/17] Change file names --- oscar/daily.cpp | 12 ++--- oscar/daily.h | 4 +- oscar/oscar.pro | 4 +- oscar/overview.cpp | 12 ++--- oscar/overview.h | 4 +- ...pFiles.cpp => saveGraphLayoutSettings.cpp} | 53 ++++++++++--------- ...ackupFiles.h => saveGraphLayoutSettings.h} | 8 +-- 7 files changed, 49 insertions(+), 48 deletions(-) rename oscar/{backupFiles.cpp => saveGraphLayoutSettings.cpp} (92%) rename oscar/{backupFiles.h => saveGraphLayoutSettings.h} (94%) diff --git a/oscar/daily.cpp b/oscar/daily.cpp index 4909c7eb..aa393581 100644 --- a/oscar/daily.cpp +++ b/oscar/daily.cpp @@ -541,7 +541,7 @@ Daily::Daily(QWidget *parent,gGraphView * shared) ui->JournalNotes->installEventFilter(this); // qDebug() << "Finished making new Daily object"; // sleep(3); - backupFiles=nullptr; + saveGraphLayoutSettings=nullptr; } Daily::~Daily() @@ -564,7 +564,7 @@ Daily::~Daily() delete ui; delete icon_on; delete icon_off; - if (backupFiles!=nullptr) delete backupFiles; + if (saveGraphLayoutSettings!=nullptr) delete saveGraphLayoutSettings; } void Daily::showEvent(QShowEvent *) @@ -2853,11 +2853,11 @@ void Daily::on_splitter_2_splitterMoved(int, int) } void Daily::on_backup_clicked() { - if (!backupFiles) { - backupFiles= new BackupFiles("daily",this); + if (!saveGraphLayoutSettings) { + saveGraphLayoutSettings= new SaveGraphLayoutSettings("daily",this); } - if (backupFiles) { - backupFiles->backupMenu(GraphView); + if (saveGraphLayoutSettings) { + saveGraphLayoutSettings->menu(GraphView); } } diff --git a/oscar/daily.h b/oscar/daily.h index 9d8edaf6..bc3efd13 100644 --- a/oscar/daily.h +++ b/oscar/daily.h @@ -28,7 +28,7 @@ #include "Graphs/gLineChart.h" #include "sessionbar.h" #include "mytextbrowser.h" -#include "backupFiles.h" +#include "saveGraphLayoutSettings.h" namespace Ui { @@ -363,7 +363,7 @@ private: #endif bool BookmarksChanged; - BackupFiles* backupFiles=nullptr; + SaveGraphLayoutSettings* saveGraphLayoutSettings=nullptr; }; #endif // DAILY_H diff --git a/oscar/oscar.pro b/oscar/oscar.pro index aef6e320..9ebec841 100644 --- a/oscar/oscar.pro +++ b/oscar/oscar.pro @@ -256,7 +256,7 @@ lessThan(QT_MAJOR_VERSION,5)|lessThan(QT_MINOR_VERSION,12) { SOURCES += \ checkupdates.cpp \ overview.cpp \ - backupFiles.cpp \ + saveGraphLayoutSettings.cpp \ common_gui.cpp \ cprogressbar.cpp \ daily.cpp \ @@ -363,7 +363,7 @@ QMAKE_EXTRA_COMPILERS += optimize HEADERS += \ checkupdates.h \ overview.h \ - backupFiles.h \ + saveGraphLayoutSettings.h \ common_gui.h \ cprogressbar.h \ daily.h \ diff --git a/oscar/overview.cpp b/oscar/overview.cpp index 5edc37c8..5e660a6f 100644 --- a/oscar/overview.cpp +++ b/oscar/overview.cpp @@ -171,7 +171,7 @@ Overview::Overview(QWidget *parent, gGraphView *shared) : connect(GraphView, SIGNAL(updateRange(double,double)), this, SLOT(on_RangeUpdate(double,double))); connect(GraphView, SIGNAL(GraphsChanged()), this, SLOT(updateGraphCombo())); connect(GraphView, SIGNAL(XBoundsChanged(qint64 ,qint64)), this, SLOT(on_XBoundsChanged(qint64 ,qint64))); - backupFiles=nullptr; + saveGraphLayoutSettings=nullptr; } Overview::~Overview() @@ -193,7 +193,7 @@ Overview::~Overview() delete icon_off ; delete icon_up_down ; delete icon_warning ; - if (backupFiles!=nullptr) delete backupFiles; + if (saveGraphLayoutSettings!=nullptr) delete saveGraphLayoutSettings; } void Overview::ResetFont() @@ -936,11 +936,11 @@ void Overview::on_toggleVisibility_clicked(bool checked) } void Overview::on_backup_clicked() { - if (!backupFiles) { - backupFiles= new BackupFiles("overview",this); + if (!saveGraphLayoutSettings) { + saveGraphLayoutSettings= new SaveGraphLayoutSettings("overview",this); } - if (backupFiles) { - backupFiles->backupMenu(GraphView); + if (saveGraphLayoutSettings) { + saveGraphLayoutSettings->menu(GraphView); } } diff --git a/oscar/overview.h b/oscar/overview.h index 2260b41a..786cefa3 100644 --- a/oscar/overview.h +++ b/oscar/overview.h @@ -23,7 +23,7 @@ #include "Graphs/gOverviewGraph.h" #endif #include "Graphs/gSummaryChart.h" -#include "backupFiles.h" +#include "saveGraphLayoutSettings.h" #include #include @@ -200,7 +200,7 @@ class Overview : public QWidget // Are start and end widgets displaying the same month. bool samePage; - BackupFiles* backupFiles=nullptr; + SaveGraphLayoutSettings* saveGraphLayoutSettings=nullptr; }; diff --git a/oscar/backupFiles.cpp b/oscar/saveGraphLayoutSettings.cpp similarity index 92% rename from oscar/backupFiles.cpp rename to oscar/saveGraphLayoutSettings.cpp index 7d708c3f..c1d95797 100644 --- a/oscar/backupFiles.cpp +++ b/oscar/saveGraphLayoutSettings.cpp @@ -18,10 +18,11 @@ #include #include #include "SleepLib/profiles.h" -#include "backupFiles.h" +#include "saveGraphLayoutSettings.h" -BackupFiles::BackupFiles(QString title,QWidget* parent) : parent(parent),title(title) + +SaveGraphLayoutSettings::SaveGraphLayoutSettings(QString title,QWidget* parent) : parent(parent),title(title) { // Initialize directory accesses to profile files. QString dirname = p_profile->Get("{DataFolder}/"); @@ -54,7 +55,7 @@ BackupFiles::BackupFiles(QString title,QWidget* parent) : parent(parent),title(t parseFilenameRe = new QRegularExpression(QString("^(%1[.](backup(\\d*)))[.]shg$").arg(title)); } -BackupFiles::~BackupFiles() +SaveGraphLayoutSettings::~SaveGraphLayoutSettings() { backupDialog->disconnect(backupaddFullBtn, SIGNAL(clicked()), this, SLOT (addFull_feature() )); backupDialog->disconnect(backupAddBtn, SIGNAL(clicked()), this, SLOT (add_feature() )); @@ -76,7 +77,7 @@ BackupFiles::~BackupFiles() delete parseFilenameRe; } -void BackupFiles::createMenu() { +void SaveGraphLayoutSettings::createMenu() { styleOn= calculateStyle(true,false); styleOff= calculateStyle(false,false); styleExitBtn=calculateStyle(true,true); @@ -185,7 +186,7 @@ void BackupFiles::createMenu() { }; -bool BackupFiles::confirmAction(QString name,QString question,QIcon* icon) { +bool SaveGraphLayoutSettings::confirmAction(QString name,QString question,QIcon* icon) { QMessageBox msgBox; msgBox.setText(question); if (icon!=nullptr) { @@ -207,7 +208,7 @@ bool BackupFiles::confirmAction(QString name,QString question,QIcon* icon) { } -QString BackupFiles::calculateStyle(bool on,bool exitBtn){ +QString SaveGraphLayoutSettings::calculateStyle(bool on,bool exitBtn){ QString btnStyle=QString("QPushButton{%1%2}").arg(on ?"color: black;background-color:white;" :"color: darkgray;background-color:#e8e8e8 ;" @@ -231,12 +232,12 @@ QString BackupFiles::calculateStyle(bool on,bool exitBtn){ return btnStyle; } -void BackupFiles::looksOn(QPushButton* button,bool on){ +void SaveGraphLayoutSettings::looksOn(QPushButton* button,bool on){ button->setEnabled(on); button->setStyleSheet(on?styleOn:styleOff); } -void BackupFiles::enableButtons(bool enable) { +void SaveGraphLayoutSettings::enableButtons(bool enable) { looksOn(backupUpdateBtn,enable); looksOn(backupRestoreBtn,enable); looksOn(backupDeleteBtn,enable); @@ -250,7 +251,7 @@ void BackupFiles::enableButtons(bool enable) { } } -void BackupFiles::update_feature() { +void SaveGraphLayoutSettings::update_feature() { if(!graphView) return; QListWidgetItem * item=backuplist->currentItem(); if (!item) return; @@ -260,7 +261,7 @@ void BackupFiles::update_feature() { graphView->SaveSettings(name); }; -void BackupFiles::restore_feature() { +void SaveGraphLayoutSettings::restore_feature() { if(!graphView) return; QListWidgetItem * item=backuplist->currentItem(); if (!item) return; @@ -270,16 +271,16 @@ void BackupFiles::restore_feature() { exit(); }; -void BackupFiles::rename_feature() { +void SaveGraphLayoutSettings::rename_feature() { if(!graphView) return; QListWidgetItem * item=backuplist->currentItem(); if (!item) return; backuplist->editItem(item); - // BackupFiles::itemChanged(QListWidgetItem *item) is called when edit changes the entry. + // SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) is called when edit changes the entry. // itemChanged will update the description map } -void BackupFiles::delete_feature() { +void SaveGraphLayoutSettings::delete_feature() { if(!graphView) return; QListWidgetItem * item=backuplist->currentItem(); if (!item) return; @@ -296,7 +297,7 @@ void BackupFiles::delete_feature() { enableButtons(true); } -void BackupFiles::addFull_feature() { +void SaveGraphLayoutSettings::addFull_feature() { QMessageBox msgBox; msgBox.setText(tr("Maximum number of Backups exceeded.")); msgBox.setStandardButtons(QMessageBox::Cancel); @@ -311,7 +312,7 @@ void BackupFiles::addFull_feature() { msgBox.exec(); } -void BackupFiles::add_feature() { +void SaveGraphLayoutSettings::add_feature() { if(!graphView) return; QString backupName = QString("%2%3").arg("backup").arg(unusedBackupNum,backupNumMaxLength,10,QLatin1Char('0')); @@ -328,7 +329,7 @@ void BackupFiles::add_feature() { } } -void BackupFiles::itemChanged(QListWidgetItem *item) +void SaveGraphLayoutSettings::itemChanged(QListWidgetItem *item) { QString backupName=item->data(backupFileName).toString(); QString desc= item->text(); @@ -356,12 +357,12 @@ void BackupFiles::itemChanged(QListWidgetItem *item) item->setText(desc); } -void BackupFiles::itemSelectionChanged() +void SaveGraphLayoutSettings::itemSelectionChanged() { enableButtons(true); } -int BackupFiles::backupNum(QString backupName) { +int SaveGraphLayoutSettings::backupNum(QString backupName) { QRegularExpressionMatch match = backupFileNumRe->match(backupName); int value=-1; if (match.hasMatch()) { @@ -370,7 +371,7 @@ int BackupFiles::backupNum(QString backupName) { return value; } -QListWidgetItem* BackupFiles::updateFileList(QString find) { +QListWidgetItem* SaveGraphLayoutSettings::updateFileList(QString find) { Q_UNUSED(find); QListWidgetItem* ret=nullptr; enableButtons(false); @@ -423,11 +424,11 @@ QListWidgetItem* BackupFiles::updateFileList(QString find) { } -void BackupFiles::exit() { +void SaveGraphLayoutSettings::exit() { backupDialog->close(); } -void BackupFiles::backupMenu(gGraphView* graphView) { +void SaveGraphLayoutSettings::menu(gGraphView* graphView) { this->graphView=graphView; updateFileList(); backupDialog->raise(); @@ -567,31 +568,31 @@ switch (ret) { backupDialog->disconnect(backuplist, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(itemEntered(QListWidgetItem*) )); -void BackupFiles::itemActivated(QListWidgetItem *item) +void SaveGraphLayoutSettings::itemActivated(QListWidgetItem *item) { Q_UNUSED( item ); DEBUGF Q( item->text() ); } -void BackupFiles::itemDoubleClicked(QListWidgetItem *item) +void SaveGraphLayoutSettings::itemDoubleClicked(QListWidgetItem *item) { Q_UNUSED( item ); DEBUGF Q( item->text() ); } -void BackupFiles::itemClicked(QListWidgetItem *item) +void SaveGraphLayoutSettings::itemClicked(QListWidgetItem *item) { Q_UNUSED( item ); DEBUGF Q( item->text() ); } -void BackupFiles::itemEntered(QListWidgetItem *item) +void SaveGraphLayoutSettings::itemEntered(QListWidgetItem *item) { Q_UNUSED( item ); DEBUGF Q( item->text() ); } -void BackupFiles::itemPressed(QListWidgetItem *item) +void SaveGraphLayoutSettings::itemPressed(QListWidgetItem *item) { Q_UNUSED( item ); DEBUGF Q( item->text() ); diff --git a/oscar/backupFiles.h b/oscar/saveGraphLayoutSettings.h similarity index 94% rename from oscar/backupFiles.h rename to oscar/saveGraphLayoutSettings.h index 31f4bd11..b3efffc8 100644 --- a/oscar/backupFiles.h +++ b/oscar/saveGraphLayoutSettings.h @@ -37,13 +37,13 @@ private: const QRegularExpression* parseDescriptionsRe; }; -class BackupFiles : public QWidget +class SaveGraphLayoutSettings : public QWidget { Q_OBJECT public: - explicit BackupFiles(QString title , QWidget* parent) ; - ~BackupFiles(); - void backupMenu(gGraphView* graphView); + explicit SaveGraphLayoutSettings(QString title , QWidget* parent) ; + ~SaveGraphLayoutSettings(); + void menu(gGraphView* graphView); protected: QIcon* m_icon_exit = new QIcon(":/icons/exit.png"); QIcon* m_icon_delete = new QIcon(":/icons/trash_can.png"); From d9da68345e48bb66e437d7b95bc5b50f926d51ab Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Thu, 29 Dec 2022 12:54:22 -0500 Subject: [PATCH 04/17] add icon and changed label name --- oscar/daily.cpp | 2 +- oscar/daily.h | 2 +- oscar/daily.ui | 11 +++++++++-- oscar/icons/cog.png | Bin 0 -> 4656 bytes oscar/overview.cpp | 2 +- oscar/overview.h | 2 +- oscar/overview.ui | 11 +++++++++-- 7 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 oscar/icons/cog.png diff --git a/oscar/daily.cpp b/oscar/daily.cpp index aa393581..db836edc 100644 --- a/oscar/daily.cpp +++ b/oscar/daily.cpp @@ -2852,7 +2852,7 @@ void Daily::on_splitter_2_splitterMoved(int, int) AppSetting->setDailyPanelWidth(size); } -void Daily::on_backup_clicked() { +void Daily::on_layout_clicked() { if (!saveGraphLayoutSettings) { saveGraphLayoutSettings= new SaveGraphLayoutSettings("daily",this); } diff --git a/oscar/daily.h b/oscar/daily.h index bc3efd13..5cac0477 100644 --- a/oscar/daily.h +++ b/oscar/daily.h @@ -273,7 +273,7 @@ private slots: void on_splitter_2_splitterMoved(int pos, int index); - void on_backup_clicked(); + void on_layout_clicked(); protected: virtual void showEvent(QShowEvent *); diff --git a/oscar/daily.ui b/oscar/daily.ui index 294abed7..502fbb5b 100644 --- a/oscar/daily.ui +++ b/oscar/daily.ui @@ -1558,9 +1558,16 @@ QToolButton:pressed { - + - Backup + Layout + + + + :/icons/cog.png:/icons/cog.png + + + Save and Restore graph layout settings diff --git a/oscar/icons/cog.png b/oscar/icons/cog.png new file mode 100644 index 0000000000000000000000000000000000000000..e66b4ff700238de8ceaec95ac12f1f08e69296aa GIT binary patch literal 4656 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 JmXTZZ{{Znp^&0>H literal 0 HcmV?d00001 diff --git a/oscar/overview.cpp b/oscar/overview.cpp index 5e660a6f..438c3922 100644 --- a/oscar/overview.cpp +++ b/oscar/overview.cpp @@ -935,7 +935,7 @@ void Overview::on_toggleVisibility_clicked(bool checked) GraphView->redraw(); } -void Overview::on_backup_clicked() { +void Overview::on_layout_clicked() { if (!saveGraphLayoutSettings) { saveGraphLayoutSettings= new SaveGraphLayoutSettings("overview",this); } diff --git a/oscar/overview.h b/oscar/overview.h index 786cefa3..d9c7ccfd 100644 --- a/oscar/overview.h +++ b/oscar/overview.h @@ -145,7 +145,7 @@ class Overview : public QWidget void on_RangeUpdate(double minx, double maxx); void setGraphText (); - void on_backup_clicked(); + void on_layout_clicked(); private: void CreateAllGraphs(); diff --git a/oscar/overview.ui b/oscar/overview.ui index 90ab0d87..e7281f70 100644 --- a/oscar/overview.ui +++ b/oscar/overview.ui @@ -260,9 +260,16 @@ QToolButton:pressed { - + - Backup + Layout + + + + :/icons/cog.png:/icons/cog.png + + + Save and Restore graph layout settings From 4eafac8fbb22961c57f0d3dcde23b1e394ccb946 Mon Sep 17 00:00:00 2001 From: LoudSnorer Date: Fri, 30 Dec 2022 21:02:17 -0500 Subject: [PATCH 05/17] Add folder for saved Layouts --- oscar/Graphs/gGraphView.cpp | 18 +- oscar/Graphs/gGraphView.h | 6 +- oscar/Resources.qrc | 1 + oscar/icons/brick-wall.png | Bin 117847 -> 12788 bytes oscar/icons/cog.png | Bin 4656 -> 4902 bytes oscar/icons/exit.png | Bin 5504 -> 4090 bytes oscar/icons/plus.png | Bin 2204 -> 2128 bytes oscar/icons/rename.png | Bin 5417 -> 4306 bytes oscar/icons/restore.png | Bin 3495 -> 3339 bytes oscar/icons/trash_can.png | Bin 5205 -> 3485 bytes oscar/icons/update.png | Bin 3455 -> 3345 bytes oscar/overview.cpp | 2 + oscar/saveGraphLayoutSettings.cpp | 480 +++++++++++++++--------------- oscar/saveGraphLayoutSettings.h | 67 +++-- 14 files changed, 305 insertions(+), 269 deletions(-) diff --git a/oscar/Graphs/gGraphView.cpp b/oscar/Graphs/gGraphView.cpp index 2b3d94ab..301b8778 100644 --- a/oscar/Graphs/gGraphView.cpp +++ b/oscar/Graphs/gGraphView.cpp @@ -3513,13 +3513,20 @@ void gGraphView::SaveDefaultSettings() { m_default_graphs = m_graphs; } -const quint32 gvmagic = 0x41756728; +const quint32 gvmagic = 0x41756728; //'Aug(' const quint16 gvversion = 4; -void gGraphView::SaveSettings(QString title) +QString gGraphView::settingsFilename (QString title,QString folderName, QString ext) { + if (folderName.size()==0) { + folderName = p_profile->Get("{DataFolder}/"); + } + return folderName+title.toLower()+ext; +} + +void gGraphView::SaveSettings(QString title,QString folderName) { qDebug() << "Saving" << title << "settings"; - QString filename = p_profile->Get("{DataFolder}/") + title.toLower() + ".shg"; + QString filename=settingsFilename(title,folderName) ; QFile f(filename); f.open(QFile::WriteOnly); QDataStream out(&f); @@ -3571,9 +3578,10 @@ template inline void hashMerge(T & a, const T & b) } -bool gGraphView::LoadSettings(QString title) +bool gGraphView::LoadSettings(QString title,QString folderName) { - QString filename = p_profile->Get("{DataFolder}/") + title.toLower() + ".shg"; + //qDebug() << "Loading" << title << "settings"; + QString filename=settingsFilename (title,folderName) ; QFile f(filename); if (!f.exists()) { diff --git a/oscar/Graphs/gGraphView.h b/oscar/Graphs/gGraphView.h index 1e1bfeea..e0a6f12c 100644 --- a/oscar/Graphs/gGraphView.h +++ b/oscar/Graphs/gGraphView.h @@ -396,11 +396,13 @@ class gGraphView //! \brief Supplies time range to all graph objects in linked group, refreshing if requested void SetXBounds(qint64 minx, qint64 maxx, short group = 0, bool refresh = true); + QString settingsFilename (QString title,QString folderName="" ,QString ext=".shg"); + //! \brief Saves the current graph order, heights, min & Max Y values to disk - void SaveSettings(QString title); + void SaveSettings(QString title,QString folderName=""); //! \brief Loads the current graph order, heights, min & max Y values from disk - bool LoadSettings(QString title); + bool LoadSettings(QString title,QString folderName=""); //! \brief Saves the current (initial) graph order, heights, min & Max Y values for future recovery void SaveDefaultSettings(); diff --git a/oscar/Resources.qrc b/oscar/Resources.qrc index 816db239..23f9ba55 100644 --- a/oscar/Resources.qrc +++ b/oscar/Resources.qrc @@ -65,5 +65,6 @@ icons/restore.png icons/trash_can.png icons/update.png + icons/cog.png diff --git a/oscar/icons/brick-wall.png b/oscar/icons/brick-wall.png index 9d2c3536e11a0236199a8325e1426a75b864d241..b82d5ac4b5852d5fce0acba2d4962acc9190d89c 100644 GIT binary patch delta 11823 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 X)KA>hoUwX6Hw)-!=)*s$S%>{EHrZqr literal 117847 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 z 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