Sorry but I felt I need to do this after I added images to my dives - I love this feature!!! This patch set is not complete and needs more testing but I wanted to throw this out for feedback. I keep on testing as I did not test this fully.
What it should do is to allow the user to point to a location where pictures are being copied to automatically if the users wishes to do this. For example, while testing I created a path on my drop box, so when I add pictures to my dives they are automatically (when selected in the preferences) copied to my dropbox location. Now I can open my could storage from any of my computers and see my pictures :-) if the computer(s) sync with DropBox. Most likely there are bugs which I will remove if you guys find this useful, if not, it was a good lesson for me to learn more about the code. Sorry Dirk, no idea how I could have made the first patch smaller. This is NOT DONE YET, I basically want to know if I should continue. Lot's of checking is still needed. -- Best regards, Guido
From 6c064ab0e04e046d2407a62630fcc9e3c0bd7a24 Mon Sep 17 00:00:00 2001 From: Guido Lerch <[email protected]> Date: Tue, 13 Oct 2015 00:20:05 +0200 Subject: [PATCH 1/2] Adding image management to preferences Adding a feature where images can be managed by the application. The user has to give a default path to the images, ideally something accessible from several computers such as Box, DropBox or a NAS. Signed-off-by: Guido Lerch <[email protected]> --- pref.h | 2 + qt-ui/preferences.cpp | 21 +++++ qt-ui/preferences.h | 4 + qt-ui/preferences.ui | 235 ++++++++++++++++++++++++++++++++++++++++++++++---- qthelper.cpp | 5 ++ 5 files changed, 249 insertions(+), 18 deletions(-) diff --git a/pref.h b/pref.h index 84975aa..2705a45 100644 --- a/pref.h +++ b/pref.h @@ -118,6 +118,8 @@ struct preferences { geocoding_prefs_t geocoding; enum deco_mode deco_mode; short conservatism_level; + bool manage_images; + char *image_location; }; enum unit_system_values { METRIC, diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index 6450c41..c47f364 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -250,6 +250,10 @@ void PreferencesDialog::setUiFromPrefs() ui.first_item->setCurrentIndex(prefs.geocoding.category[0]); ui.second_item->setCurrentIndex(prefs.geocoding.category[1]); ui.third_item->setCurrentIndex(prefs.geocoding.category[2]); + + // Images + ui.manage_images->setChecked(prefs.manage_images); + ui.image_location->setText(prefs.image_location); } void PreferencesDialog::restorePrefs() @@ -430,6 +434,12 @@ void PreferencesDialog::syncSettings() s.setValue("cat2", ui.third_item->currentIndex()); s.endGroup(); + s.beginGroup("images"); + s.setValue("manage", ui.manage_images->isChecked()); + s.setValue("location", ui.image_location->text()); + + s.endGroup(); + loadSettings(); emit settingsChanged(); } @@ -557,3 +567,14 @@ void PreferencesDialog::on_cloudDefaultFile_toggled(bool toggle) { prefs.default_file_behavior = CLOUD_DEFAULT_FILE; } + +void PreferencesDialog::on_chooseImageLocation_clicked() +{ + QString oldDirectory = ui.image_location->text(); + QString choosenDirectory = QFileDialog::getExistingDirectory(this, tr("Open Image location"), oldDirectory, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + if (!choosenDirectory.isEmpty()) + ui.image_location->setText(choosenDirectory + "/"); + QDir di(ui.image_location->text()); + if (!di.exists()) + di.mkpath(ui.image_location->text()); +} diff --git a/qt-ui/preferences.h b/qt-ui/preferences.h index 326b1f9..d1b45a5 100644 --- a/qt-ui/preferences.h +++ b/qt-ui/preferences.h @@ -41,6 +41,10 @@ slots: void facebookDisconnect(); void cloudPinNeeded(); void passwordUpdateSuccessfull(); +private slots: + + void on_chooseImageLocation_clicked(); + private: explicit PreferencesDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); void setUiFromPrefs(); diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui index de2d79b..8ec9cfe 100644 --- a/qt-ui/preferences.ui +++ b/qt-ui/preferences.ui @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>711</width> + <width>836</width> <height>662</height> </rect> </property> @@ -19,7 +19,16 @@ </iconset> </property> <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -164,7 +173,7 @@ </sizepolicy> </property> <property name="currentIndex"> - <number>4</number> + <number>0</number> </property> <widget class="QWidget" name="defaults_page"> <property name="sizePolicy"> @@ -177,7 +186,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -186,7 +204,16 @@ <string>Lists and tables</string> </property> <layout class="QHBoxLayout" name="horizontalLayout_11"> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -224,7 +251,16 @@ <property name="verticalSpacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item row="0" column="0"> @@ -328,7 +364,16 @@ <property name="verticalSpacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item row="0" column="0"> @@ -354,7 +399,16 @@ <string>Animations</string> </property> <layout class="QHBoxLayout" name="horizontalLayout_7"> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -393,7 +447,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -407,6 +470,79 @@ </widget> </item> <item> + <widget class="QGroupBox" name="groupBox_13"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>100</height> + </size> + </property> + <property name="title"> + <string>Images</string> + </property> + <widget class="QCheckBox" name="manage_images"> + <property name="geometry"> + <rect> + <x>10</x> + <y>20</y> + <width>201</width> + <height>20</height> + </rect> + </property> + <property name="toolTip"> + <string>Manage my picture location for me by copying the images I add to a default location, ideally DropBox, Box or a local NAS.</string> + </property> + <property name="text"> + <string>Manage my images for me.</string> + </property> + </widget> + <widget class="QLabel" name="label_31"> + <property name="geometry"> + <rect> + <x>10</x> + <y>50</y> + <width>59</width> + <height>16</height> + </rect> + </property> + <property name="text"> + <string>Location</string> + </property> + </widget> + <widget class="QWidget" name="horizontalLayoutWidget"> + <property name="geometry"> + <rect> + <x>80</x> + <y>50</y> + <width>591</width> + <height>21</height> + </rect> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="sizeConstraint"> + <enum>QLayout::SetMinimumSize</enum> + </property> + <item> + <widget class="QLineEdit" name="image_location"/> + </item> + <item> + <widget class="QToolButton" name="chooseImageLocation"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -432,7 +568,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -733,7 +878,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -1027,7 +1181,16 @@ <property name="sizeConstraint"> <enum>QLayout::SetNoConstraint</enum> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -1111,7 +1274,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -1341,7 +1513,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -1390,7 +1571,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -1437,7 +1627,16 @@ <property name="spacing"> <number>5</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -1870,14 +2069,14 @@ </connection> </connections> <buttongroups> + <buttongroup name="buttonGroup"/> + <buttongroup name="defaultFileGroup"/> <buttongroup name="verticalSpeed"/> <buttongroup name="buttonGroup_2"/> <buttongroup name="buttonGroup_3"/> <buttongroup name="buttonGroup_4"/> - <buttongroup name="defaultFileGroup"/> <buttongroup name="buttonGroup_5"/> <buttongroup name="buttonGroup_6"/> <buttongroup name="buttonGroup_7"/> - <buttongroup name="buttonGroup"/> </buttongroups> </ui> diff --git a/qthelper.cpp b/qthelper.cpp index a963ad7..da85ffe 100644 --- a/qthelper.cpp +++ b/qthelper.cpp @@ -1536,6 +1536,11 @@ void loadPreferences() GET_ENUM("cat2", taxonomy_category, geocoding.category[2]); s.endGroup(); + s.beginGroup("images"); + GET_BOOL("manage", manage_images); + GET_TXT("location", image_location); + s.endGroup(); + } extern "C" bool isCloudUrl(const char *filename) -- 2.3.8 (Apple Git-58)
From e6f3c8bb2cc6474d1e60151153d236f8567c1298 Mon Sep 17 00:00:00 2001 From: Guido Lerch <[email protected]> Date: Tue, 13 Oct 2015 00:24:45 +0200 Subject: [PATCH 2/2] Adding image management Implementing that images are copied from their origin to the location set in the preferences. My motivation was that I added images to my files and then found that I cannot see them in my other computer. I know there is a function to find moved images but I found this implementation a lot more intuitive, sorry. I am not done but whanted to toss this over the wall for feedback. Error checking, full testing is not done yet. I tried to implement this without changing any existing functionality. Signed-off-by: Guido Lerch <[email protected]> --- dive.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dive.c b/dive.c index 1810109..a9532ad 100644 --- a/dive.c +++ b/dive.c @@ -3297,6 +3297,13 @@ bool picture_check_valid(char *filename, int shift_time) void dive_create_picture(struct dive *dive, char *filename, int shift_time, bool match_all) { + char *new_filename; + if (prefs.manage_images) { + copy_image_and_overwrite(filename, prefs.image_location, get_file_name(filename)); + new_filename = strdup(strcat(prefs.image_location,get_file_name(filename))); + } else { + new_filename = strdup(filename); + } timestamp_t timestamp = picture_get_timestamp(filename); if (!new_picture_for_dive(dive, filename)) return; @@ -3304,12 +3311,13 @@ void dive_create_picture(struct dive *dive, char *filename, int shift_time, bool return; struct picture *picture = alloc_picture(); - picture->filename = strdup(filename); + picture->filename = strdup(new_filename); picture->offset.seconds = timestamp - dive->when + shift_time; picture_load_exif_data(picture); dive_add_picture(dive, picture); dive_set_geodata_from_picture(dive, picture); + free(new_filename); } void dive_add_picture(struct dive *dive, struct picture *newpic) -- 2.3.8 (Apple Git-58)
_______________________________________________ subsurface mailing list [email protected] http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
