Added option to edit the selected dive.

Added option to edit the selected dive.
Now the user can click on 'Edit', and a nice box will
appear stating that the dive is in edit mode, and the user
can edit all of the 'Notes' tab fields, including the
rating. When the edition is finished, the user needs to
click on 'edit' again to mark as accepted, or in
reset to reset the fields to it's original state

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2013-05-18 20:42:59 -03:00 committed by Dirk Hohndel
parent de50f66257
commit c5e7a025e4
5 changed files with 243 additions and 29 deletions

View file

@ -12,15 +12,20 @@
#include "../statistics.h" #include "../statistics.h"
#include <QLabel> #include <QLabel>
#include <QDebug>
MainTab::MainTab(QWidget *parent) : QTabWidget(parent), MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
ui(new Ui::MainTab()), ui(new Ui::MainTab()),
weightModel(new WeightModel()), weightModel(new WeightModel()),
cylindersModel(new CylindersModel()) cylindersModel(new CylindersModel()),
currentDive(0)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->cylinders->setModel(cylindersModel); ui->cylinders->setModel(cylindersModel);
ui->weights->setModel(weightModel); ui->weights->setModel(weightModel);
ui->diveNotesMessage->hide();
ui->diveNotesMessage->setCloseButtonVisible(false);
ui->rating->setReadOnly(true);
/* example of where code is more concise than Qt designer */ /* example of where code is more concise than Qt designer */
QList<QObject *> infoTabWidgets = ui->infoTab->children(); QList<QObject *> infoTabWidgets = ui->infoTab->children();
@ -96,6 +101,7 @@ void MainTab::updateDiveInfo(int dive)
// the access is ui->objectName from here on. // the access is ui->objectName from here on.
volume_t sacVal; volume_t sacVal;
struct dive *d = get_dive(dive); struct dive *d = get_dive(dive);
currentDive = d;
UPDATE_TEXT(d, notes); UPDATE_TEXT(d, notes);
UPDATE_TEXT(d, location); UPDATE_TEXT(d, location);
UPDATE_TEXT(d, suit); UPDATE_TEXT(d, suit);
@ -202,3 +208,98 @@ void MainTab::reload()
{ {
cylindersModel->update(); cylindersModel->update();
} }
void MainTab::on_editNotes_clicked(bool edit)
{
ui->location->setReadOnly(!edit);
ui->divemaster->setReadOnly(!edit);
ui->buddy->setReadOnly(!edit);
ui->suit->setReadOnly(!edit);
ui->notes->setReadOnly(!edit);
ui->rating->setReadOnly(!edit);
if (edit){
ui->diveNotesMessage->setText("This dive is being edited. click on finish / reset when ready.");
ui->diveNotesMessage->animatedShow();
notesBackup.buddy = ui->buddy->text();
notesBackup.suit = ui->suit->text();
notesBackup.notes = ui->notes->toPlainText();
notesBackup.divemaster = ui->divemaster->text();
notesBackup.location = ui->location->text();
notesBackup.rating = ui->rating->currentStars();
}
else{
ui->diveNotesMessage->animatedHide();
}
}
void MainTab::on_resetNotes_clicked()
{
if (!ui->editNotes->isChecked())
return;
ui->buddy->setText(notesBackup.buddy);
ui->suit->setText(notesBackup.suit);
ui->notes->setText(notesBackup.notes);
ui->divemaster->setText(notesBackup.divemaster);
ui->location->setText(notesBackup.location);
ui->rating->setCurrentStars(notesBackup.rating);
ui->editNotes->setChecked(false);
ui->diveNotesMessage->animatedHide();
ui->location->setReadOnly(false);
ui->divemaster->setReadOnly(false);
ui->buddy->setReadOnly(false);
ui->suit->setReadOnly(false);
ui->notes->setReadOnly(false);
ui->rating->setReadOnly(false);
}
#define EDIT_NOTES(what, text) \
QByteArray textByteArray = text.toLocal8Bit(); \
free(currentDive->what);\
currentDive->what = strdup(textByteArray.data());
void MainTab::on_buddy_textChanged(const QString& text)
{
if (!currentDive)
return;
EDIT_NOTES(buddy, text);
}
void MainTab::on_divemaster_textChanged(const QString& text)
{
if (!currentDive)
return;
EDIT_NOTES(divemaster, text);
}
void MainTab::on_location_textChanged(const QString& text)
{
if (!currentDive)
return;
EDIT_NOTES(location, text);
}
void MainTab::on_suit_textChanged(const QString& text)
{
if (!currentDive)
return;
EDIT_NOTES(suit, text);
}
void MainTab::on_notes_textChanged()
{
if (!currentDive)
return;
EDIT_NOTES(notes, ui->notes->toPlainText());
}
#undef EDIT_NOTES
void MainTab::on_rating_valueChanged(int value)
{
if (!currentDive)
return;
currentDive->rating = value;
}

View file

@ -17,6 +17,15 @@ namespace Ui
class MainTab; class MainTab;
} }
struct NotesBackup{
QString location;
QString notes;
QString buddy;
QString suit;
int rating;
QString divemaster;
};
class MainTab : public QTabWidget class MainTab : public QTabWidget
{ {
Q_OBJECT Q_OBJECT
@ -34,13 +43,22 @@ public Q_SLOTS:
void on_addWeight_clicked(); void on_addWeight_clicked();
void on_editWeight_clicked(); void on_editWeight_clicked();
void on_delWeight_clicked(); void on_delWeight_clicked();
void updateDiveInfo(int dive); void updateDiveInfo(int dive);
void on_editNotes_clicked(bool edit);
void on_resetNotes_clicked();
void on_location_textChanged(const QString& text);
void on_divemaster_textChanged(const QString& text);
void on_buddy_textChanged(const QString& text);
void on_suit_textChanged(const QString& text);
void on_notes_textChanged();
void on_rating_valueChanged(int value);
private: private:
Ui::MainTab *ui; Ui::MainTab *ui;
WeightModel *weightModel; WeightModel *weightModel;
CylindersModel *cylindersModel; CylindersModel *cylindersModel;
NotesBackup notesBackup;
struct dive* currentDive;
}; };
#endif #endif

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>400</width> <width>400</width>
<height>325</height> <height>368</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -21,66 +21,106 @@
<string>Dive Notes</string> <string>Dive Notes</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Location</string> <string>Location</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="2" column="0" colspan="2">
<widget class="QLineEdit" name="location"/> <widget class="QLineEdit" name="location">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_15"> <widget class="QLabel" name="label_15">
<property name="text"> <property name="text">
<string>Divemaster</string> <string>Divemaster</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="1">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Buddy</string> <string>Buddy</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0">
<widget class="QLineEdit" name="divemaster"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="buddy"/>
</item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLineEdit" name="divemaster">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="suit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="buddy">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="0" colspan="2">
<widget class="QTextEdit" name="notes">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="text"> <property name="text">
<string>Rating</string> <string>Rating</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="5" column="1">
<widget class="QLabel" name="label_19"> <widget class="QLabel" name="label_19">
<property name="text"> <property name="text">
<string>Suit</string> <string>Suit</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="7" column="0">
<widget class="QLineEdit" name="suit"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_16"> <widget class="QLabel" name="label_16">
<property name="text"> <property name="text">
<string>Notes</string> <string>Notes</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0" colspan="2"> <item row="6" column="0">
<widget class="QTextEdit" name="notes"/>
</item>
<item row="5" column="0">
<widget class="StarWidget" name="rating" native="true"/> <widget class="StarWidget" name="rating" native="true"/>
</item> </item>
<item row="10" column="1">
<widget class="QPushButton" name="resetNotes">
<property name="text">
<string>reset</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QPushButton" name="editNotes">
<property name="text">
<string>edit</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="KMessageWidget" name="diveNotesMessage" native="true"/>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="equipmentTab"> <widget class="QWidget" name="equipmentTab">
@ -213,15 +253,24 @@
</item> </item>
<item> <item>
<layout class="QGridLayout" name="diveInfoUpperGridLayout"> <layout class="QGridLayout" name="diveInfoUpperGridLayout">
<property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>10</number>
</property>
<property name="horizontalSpacing"> <property name="horizontalSpacing">
<number>10</number> <number>10</number>
</property> </property>
<property name="verticalSpacing"> <property name="verticalSpacing">
<number>15</number> <number>15</number>
</property> </property>
<property name="margin">
<number>10</number>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="sacLabel"> <widget class="QLabel" name="sacLabel">
<property name="font"> <property name="font">
@ -319,7 +368,16 @@
</item> </item>
<item> <item>
<layout class="QGridLayout" name="diveInfoLowerGridLayout"> <layout class="QGridLayout" name="diveInfoLowerGridLayout">
<property name="margin"> <property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>10</number> <number>10</number>
</property> </property>
<property name="spacing"> <property name="spacing">
@ -542,7 +600,16 @@
</item> </item>
<item> <item>
<layout class="QGridLayout" name="statsUpperGridLayout"> <layout class="QGridLayout" name="statsUpperGridLayout">
<property name="margin"> <property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>10</number> <number>10</number>
</property> </property>
<property name="spacing"> <property name="spacing">
@ -685,7 +752,16 @@
</item> </item>
<item> <item>
<layout class="QGridLayout" name="statsLowerGridLayout"> <layout class="QGridLayout" name="statsLowerGridLayout">
<property name="margin"> <property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>10</number> <number>10</number>
</property> </property>
<property name="spacing"> <property name="spacing">
@ -873,6 +949,12 @@
</widget> </widget>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget>
<class>KMessageWidget</class>
<extends>QWidget</extends>
<header>kmessagewidget.h</header>
<container>1</container>
</customwidget>
<customwidget> <customwidget>
<class>StarWidget</class> <class>StarWidget</class>
<extends>QWidget</extends> <extends>QWidget</extends>

View file

@ -4,6 +4,7 @@
#include <QPaintEvent> #include <QPaintEvent>
#include <QDebug> #include <QDebug>
#include <QMouseEvent> #include <QMouseEvent>
#include <unistd.h>
QPixmap* StarWidget::activeStar = 0; QPixmap* StarWidget::activeStar = 0;
QPixmap* StarWidget::inactiveStar = 0; QPixmap* StarWidget::inactiveStar = 0;
@ -25,6 +26,10 @@ int StarWidget::currentStars() const
void StarWidget::mouseReleaseEvent(QMouseEvent* event) void StarWidget::mouseReleaseEvent(QMouseEvent* event)
{ {
if (readOnly){
return;
}
int starClicked = event->pos().x() / IMG_SIZE + 1; int starClicked = event->pos().x() / IMG_SIZE + 1;
if (starClicked > TOTALSTARS) if (starClicked > TOTALSTARS)
starClicked = TOTALSTARS; starClicked = TOTALSTARS;
@ -34,6 +39,7 @@ void StarWidget::mouseReleaseEvent(QMouseEvent* event)
else else
current = starClicked; current = starClicked;
Q_EMIT valueChanged(current);
update(); update();
} }
@ -98,3 +104,8 @@ QSize StarWidget::sizeHint() const
{ {
return QSize(IMG_SIZE * TOTALSTARS + SPACING * (TOTALSTARS-1), IMG_SIZE); return QSize(IMG_SIZE * TOTALSTARS + SPACING * (TOTALSTARS-1), IMG_SIZE);
} }
void StarWidget::setReadOnly(bool r)
{
readOnly = r;
}

View file

@ -22,6 +22,7 @@ Q_SIGNALS:
public Q_SLOTS: public Q_SLOTS:
void setCurrentStars(int value); void setCurrentStars(int value);
void setReadOnly( bool readOnly);
protected: protected:
/*reimp*/ void mouseReleaseEvent(QMouseEvent* ); /*reimp*/ void mouseReleaseEvent(QMouseEvent* );
@ -32,6 +33,7 @@ private:
static QPixmap* activeStar; static QPixmap* activeStar;
static QPixmap* inactiveStar; static QPixmap* inactiveStar;
QPixmap grayImage(QPixmap *coloredImg); QPixmap grayImage(QPixmap *coloredImg);
bool readOnly;
}; };
#endif // STARWIDGET_H #endif // STARWIDGET_H