mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Implement the functionality of remove_picture.
Added the remove_picture functionality, with code shamelessy stolen from remove_event, and hoock it up with the interface. Fixes #650 Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
1e6986d870
commit
3b9bceacb6
6 changed files with 32 additions and 8 deletions
17
dive.c
17
dive.c
|
@ -2489,9 +2489,22 @@ void dive_set_geodata_from_picture(struct dive *d, struct picture *pic)
|
|||
}
|
||||
}
|
||||
|
||||
void dive_remove_picture(struct dive *d, struct picture *p)
|
||||
static void picture_free( struct picture *p){
|
||||
if (!p)
|
||||
return;
|
||||
free( p->filename );
|
||||
free( p );
|
||||
}
|
||||
void dive_remove_picture(struct picture *p)
|
||||
{
|
||||
|
||||
struct picture **ep = ¤t_dive->picture_list;
|
||||
while (ep && !same_string((*ep)->filename, p->filename))
|
||||
ep = &(*ep)->next;
|
||||
if (ep) {
|
||||
struct picture *temp = (*ep)->next;
|
||||
picture_free(*ep);
|
||||
*ep = temp;
|
||||
}
|
||||
}
|
||||
|
||||
/* this always acts on the current divecomputer of the current dive */
|
||||
|
|
2
dive.h
2
dive.h
|
@ -311,7 +311,7 @@ struct picture {
|
|||
extern struct picture *alloc_picture();
|
||||
extern void dive_create_picture(struct dive *d, char *filename, int shift_time);
|
||||
extern void dive_add_picture(struct dive *d, struct picture *newpic);
|
||||
extern void dive_remove_picture(struct dive *d, struct picture *pic);
|
||||
extern void dive_remove_picture(struct picture *pic);
|
||||
extern unsigned int dive_get_picture_count(struct dive *d);
|
||||
extern void picture_load_exif_data(struct picture *p, timestamp_t *timestamp);
|
||||
extern void dive_set_geodata_from_picture(struct dive *d, struct picture *pic);
|
||||
|
|
|
@ -89,11 +89,21 @@ QVariant DivePictureModel::data(const QModelIndex &index, int role) const
|
|||
switch (role) {
|
||||
case Qt::UserRole:
|
||||
ret = QVariant::fromValue((void *)stringPixmapCache[key].picture);
|
||||
break;
|
||||
case Qt::DisplayRole:
|
||||
ret = key;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DivePictureModel::removePicture(const QString &fileUrl)
|
||||
{
|
||||
dive_remove_picture(stringPixmapCache[fileUrl].picture);
|
||||
copy_dive(current_dive, &displayed_dive);
|
||||
updateDivePictures();
|
||||
}
|
||||
|
||||
int DivePictureModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return numberOfPictures;
|
||||
|
|
|
@ -19,6 +19,7 @@ public:
|
|||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
void updateDivePictures();
|
||||
void removePicture(const QString& fileUrl);
|
||||
|
||||
private:
|
||||
DivePictureModel();
|
||||
|
|
|
@ -119,9 +119,7 @@ void DivePictureItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|||
|
||||
void DivePictureItem::removePicture()
|
||||
{
|
||||
/* this is a WIP, it doesn't really *removes* anything, merely hides it.
|
||||
* good workaround, I still need to figure out how to activelly remove
|
||||
* it from the model. */
|
||||
button->hide();
|
||||
hide();
|
||||
DivePictureModel::instance()->removePicture(fileUrl);
|
||||
}
|
||||
|
|
|
@ -1352,7 +1352,9 @@ void ProfileWidget2::keyEscAction()
|
|||
|
||||
void ProfileWidget2::plotPictures()
|
||||
{
|
||||
qDeleteAll(pictures);
|
||||
Q_FOREACH(DivePictureItem *item, pictures){
|
||||
item->deleteLater();
|
||||
}
|
||||
pictures.clear();
|
||||
|
||||
if (printMode)
|
||||
|
@ -1368,7 +1370,7 @@ void ProfileWidget2::plotPictures()
|
|||
continue;
|
||||
DivePictureItem *item = new DivePictureItem();
|
||||
item->setPixmap(m->index(i,0).data(Qt::DecorationRole).value<QPixmap>());
|
||||
item->setFileUrl(m->index(i,0).data(Qt::DisplayPropertyRole).toString());
|
||||
item->setFileUrl(m->index(i,1).data().toString());
|
||||
// let's put the picture at the correct time, but at a fixed "depth" on the profile
|
||||
// not sure this is ideal, but it seems to look right.
|
||||
x = timeAxis->posAtValue(pic->offset.seconds);
|
||||
|
|
Loading…
Add table
Reference in a new issue