feat: ui improvments

This commit is contained in:
Mr Finchum 2025-02-02 12:22:46 +00:00
parent 92a9dccc00
commit b1d9d3fa5e
14 changed files with 366 additions and 190 deletions

View file

@ -1,5 +1,14 @@
# Changelog # Changelog
## 0.9.x
### 0.9.0: UI Enhancements and Language Refinements
- Changed text, labels, buttons, and checkboxes for clearer understanding.
- Improved UI language to make the interface easier to navigate.
- Added tooltips for more helpful information and guidance.
- Updates applied across the main window (both tabs) and the preview window.
---
## 0.8.x ## 0.8.x
### 0.8.5: Patch for New PyPiUpdater Version ### 0.8.5: Patch for New PyPiUpdater Version
- **PyPiUpdater 0.5** introduced breaking changes; adjusted code to ensure compatibility with the new version. - **PyPiUpdater 0.5** introduced breaking changes; adjusted code to ensure compatibility with the new version.

View file

@ -1,5 +1,5 @@
# **OptimaLab35** # **OptimaLab35**
_Last updated: 28 Jan 2025_ _Last updated: 02 Feb 2025 (v.0.9.0)_
## **Overview** ## **Overview**
@ -10,13 +10,12 @@ It serves as a GUI for the [OPTIMA35 library](https://gitlab.com/CodeByMrFinchum
--- ---
## **Current Status** ## **Current Status**
### **Alpha Stage** ### **Early Development**
OptimaLab35 is actively developed using **PySide6** and **Qt**, providing a modern interface for **OPTIMA35**.
OptimaLab35 is built using **PySide6** and **Qt**, offering a modern and flexible interface for **OPTIMA35**. The program is still in its early stages, and features may change drastically over time. Some features might be added but later removed if they don't prove useful. Expect significant changes to the UI and functionality between updates.
The program is under **active development**, and while versions released on PyPI should not contain major bugs, occasional issues may arise. For the most accurate and detailed update information, please refer to the [**CHANGELOG**](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/blob/main/CHANGELOG.md) as the readme might lack behind.
For the most accurate and detailed update information, please refer to the well-maintained [**CHANGELOG**](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/blob/main/CHANGELOG.md), as this README may occasionally lag behind the latest updates.
--- ---
@ -28,8 +27,8 @@ For the most accurate and detailed update information, please refer to the well-
- Adjust brightness and contrast - Adjust brightness and contrast
- Add customizable text-based watermarks - Add customizable text-based watermarks
### **Image preview** ### **Image Preview**
- Load a single image and see how change in brightness and contrast changes the image - Load a single image and see how changes in brightness and contrast affect the image
### **EXIF Management** ### **EXIF Management**
- Add EXIF data using a simple dictionary - Add EXIF data using a simple dictionary
@ -39,6 +38,10 @@ For the most accurate and detailed update information, please refer to the well-
- Automatically adjust EXIF timestamps based on image file names - Automatically adjust EXIF timestamps based on image file names
- Add GPS coordinates to images - Add GPS coordinates to images
### **Updater**
- Checks for updates on PyPI, automatically downloads and installs the latest version
- Restarts the program after update
--- ---
## **Installation** ## **Installation**
@ -50,17 +53,13 @@ pip install OptimaLab35
--- ---
## Preview GUI ## Preview GUI **0.9.0**
**PREVIEW** might be out of date. **PREVIEW** might be out of date.
**Main tab** **Main tab**
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/main_tab.png){width=40%} ![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/main_tab.png){width=40%}
**Preview window**
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/preview_window.png){width=40%}
**Exif tab** **Exif tab**
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/exif_tab.png){width=40%} ![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/exif_tab.png){width=40%}
@ -69,6 +68,18 @@ pip install OptimaLab35
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/exif_editor.png){width=40%} ![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/exif_editor.png){width=40%}
**Preview window**
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/preview_window.png){width=40%}
**About**
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/about_window.png){width=40%}
**Updater**
![main](https://gitlab.com/CodeByMrFinchum/OptimaLab35/-/raw/main/media/updater_window.png){width=40%}
--- ---
# Use of LLMs # Use of LLMs

BIN
media/about_window.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 222 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 220 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 2.4 MiB

Before After
Before After

BIN
media/updater_window.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View file

@ -538,6 +538,9 @@ class Ui_MainWindow(object):
self.dateEdit.setObjectName(u"dateEdit") self.dateEdit.setObjectName(u"dateEdit")
self.dateEdit.setEnabled(False) self.dateEdit.setEnabled(False)
self.dateEdit.setDateTime(QDateTime(QDate(2025, 1, 1), QTime(0, 0, 0))) self.dateEdit.setDateTime(QDateTime(QDate(2025, 1, 1), QTime(0, 0, 0)))
self.dateEdit.setMaximumDate(QDate(2038, 12, 31))
self.dateEdit.setMinimumDate(QDate(1970, 1, 1))
self.dateEdit.setCalendarPopup(True)
self.horizontalLayout_2.addWidget(self.dateEdit) self.horizontalLayout_2.addWidget(self.dateEdit)
@ -603,27 +606,60 @@ class Ui_MainWindow(object):
self.actionPreview.setText(QCoreApplication.translate("MainWindow", u"Preview image", None)) self.actionPreview.setText(QCoreApplication.translate("MainWindow", u"Preview image", None))
self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"About", None)) self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"About", None))
self.actionUpdate.setText(QCoreApplication.translate("MainWindow", u"Update", None)) self.actionUpdate.setText(QCoreApplication.translate("MainWindow", u"Update", None))
#if QT_CONFIG(tooltip)
self.input_folder_button.setToolTip(QCoreApplication.translate("MainWindow", u"Open a file browser to select a folder for loading images.", None))
#endif // QT_CONFIG(tooltip)
self.input_folder_button.setText(QCoreApplication.translate("MainWindow", u"Input", None)) self.input_folder_button.setText(QCoreApplication.translate("MainWindow", u"Input", None))
self.output_path.setText("") self.output_path.setText("")
self.output_path.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Output folder", None)) self.output_path.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Output folder", None))
#if QT_CONFIG(tooltip)
self.input_path.setToolTip("")
#endif // QT_CONFIG(tooltip)
self.input_path.setText("") self.input_path.setText("")
self.input_path.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Input folder", None)) self.input_path.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Input folder", None))
#if QT_CONFIG(tooltip)
self.output_folder_button.setToolTip(QCoreApplication.translate("MainWindow", u"Open a file browser to select a folder for saving images.", None))
#endif // QT_CONFIG(tooltip)
self.output_folder_button.setText(QCoreApplication.translate("MainWindow", u"Output", None)) self.output_folder_button.setText(QCoreApplication.translate("MainWindow", u"Output", None))
self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"Essential group", None)) self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"Export Settings", None))
self.quality_label_2.setText(QCoreApplication.translate("MainWindow", u"Quality", None)) self.quality_label_2.setText(QCoreApplication.translate("MainWindow", u"Quality", None))
self.label_11.setText(QCoreApplication.translate("MainWindow", u"Format ", None)) self.label_11.setText(QCoreApplication.translate("MainWindow", u"Format ", None))
self.optimize_checkBox.setText(QCoreApplication.translate("MainWindow", u"optimize", None)) #if QT_CONFIG(tooltip)
self.optimize_checkBox.setToolTip(QCoreApplication.translate("MainWindow", u"Recommended for web use. Enables PIL optimization to slightly reduce file size without visible quality loss. ", None))
#endif // QT_CONFIG(tooltip)
self.optimize_checkBox.setText(QCoreApplication.translate("MainWindow", u"Optimize", None))
#if QT_CONFIG(tooltip)
self.png_quality_Slider.setToolTip("")
#endif // QT_CONFIG(tooltip)
self.quality_label_1.setText(QCoreApplication.translate("MainWindow", u"Quality", None)) self.quality_label_1.setText(QCoreApplication.translate("MainWindow", u"Quality", None))
#if QT_CONFIG(tooltip)
self.image_type.setToolTip(QCoreApplication.translate("MainWindow", u"Select export file type.", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(tooltip)
self.label_13.setToolTip(QCoreApplication.translate("MainWindow", u"Choose image scaling options. \u26a0 Upscaling large images may freeze the system depending on hardware.", None))
#endif // QT_CONFIG(tooltip)
self.label_13.setText(QCoreApplication.translate("MainWindow", u"Resize", None)) self.label_13.setText(QCoreApplication.translate("MainWindow", u"Resize", None))
self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow", u"Extra stuff", None)) #if QT_CONFIG(tooltip)
self.resize_Slider.setToolTip("")
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(tooltip)
self.resize_spinBox.setToolTip("")
#endif // QT_CONFIG(tooltip)
self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow", u"Image Adjustments", None))
self.label_9.setText(QCoreApplication.translate("MainWindow", u"Brightness", None)) self.label_9.setText(QCoreApplication.translate("MainWindow", u"Brightness", None))
self.label_10.setText(QCoreApplication.translate("MainWindow", u"Contrast", None)) self.label_10.setText(QCoreApplication.translate("MainWindow", u"Contrast", None))
self.grayscale_checkBox.setText(QCoreApplication.translate("MainWindow", u"Turn image to Black and White", None)) #if QT_CONFIG(tooltip)
self.grayscale_checkBox.setToolTip(QCoreApplication.translate("MainWindow", u"Converts image to Grayscale", None))
#endif // QT_CONFIG(tooltip)
self.grayscale_checkBox.setText(QCoreApplication.translate("MainWindow", u"Black and White Mode", None))
#if QT_CONFIG(tooltip)
self.preview_Button.setToolTip(QCoreApplication.translate("MainWindow", u"Open a preview window to see how brightness, contrast, and grayscale adjustments affect your image.", None))
#endif // QT_CONFIG(tooltip)
self.preview_Button.setText(QCoreApplication.translate("MainWindow", u"Preview", None)) self.preview_Button.setText(QCoreApplication.translate("MainWindow", u"Preview", None))
self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow", u"Watermark", None)) self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow", u"Watermarking", None))
self.watermark_lineEdit.setText("") self.watermark_lineEdit.setText("")
self.watermark_lineEdit.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Enter Watermark", None)) self.watermark_lineEdit.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Enter Watermark Text", None))
self.label_12.setText(QCoreApplication.translate("MainWindow", u"Size", None)) self.label_12.setText(QCoreApplication.translate("MainWindow", u"Size", None))
self.font_size_comboBox.setItemText(0, QCoreApplication.translate("MainWindow", u"Tiny", None)) self.font_size_comboBox.setItemText(0, QCoreApplication.translate("MainWindow", u"Tiny", None))
self.font_size_comboBox.setItemText(1, QCoreApplication.translate("MainWindow", u"Small", None)) self.font_size_comboBox.setItemText(1, QCoreApplication.translate("MainWindow", u"Small", None))
@ -631,20 +667,41 @@ class Ui_MainWindow(object):
self.font_size_comboBox.setItemText(3, QCoreApplication.translate("MainWindow", u"Large", None)) self.font_size_comboBox.setItemText(3, QCoreApplication.translate("MainWindow", u"Large", None))
self.font_size_comboBox.setItemText(4, QCoreApplication.translate("MainWindow", u"Huge", None)) self.font_size_comboBox.setItemText(4, QCoreApplication.translate("MainWindow", u"Huge", None))
#if QT_CONFIG(tooltip)
self.font_size_comboBox.setToolTip(QCoreApplication.translate("MainWindow", u"Adjust the font size for the watermark. Size scales proportionally to image dimensions.", None))
#endif // QT_CONFIG(tooltip)
self.font_size_comboBox.setCurrentText(QCoreApplication.translate("MainWindow", u"Normal", None)) self.font_size_comboBox.setCurrentText(QCoreApplication.translate("MainWindow", u"Normal", None))
self.rename_group.setTitle(QCoreApplication.translate("MainWindow", u"files", None)) self.rename_group.setTitle(QCoreApplication.translate("MainWindow", u"File Naming", None))
#if QT_CONFIG(tooltip)
self.rename_checkbox.setToolTip(QCoreApplication.translate("MainWindow", u"Enable to rename all images with a new base name. '_xx' will be added at the end of each filename.", None))
#endif // QT_CONFIG(tooltip)
self.rename_checkbox.setText(QCoreApplication.translate("MainWindow", u"Rename", None)) self.rename_checkbox.setText(QCoreApplication.translate("MainWindow", u"Rename", None))
#if QT_CONFIG(tooltip)
self.revert_checkbox.setToolTip(QCoreApplication.translate("MainWindow", u"Reverses the order of images. Useful for scanned film rolls where the last image (e.g., 36) is scanned first.", None))
#endif // QT_CONFIG(tooltip)
self.revert_checkbox.setText(QCoreApplication.translate("MainWindow", u"Revert order", None)) self.revert_checkbox.setText(QCoreApplication.translate("MainWindow", u"Revert order", None))
self.filename.setText("") self.filename.setText("")
self.filename.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Enter file name", None)) self.filename.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Enter new File Names", None))
self.start_button.setText(QCoreApplication.translate("MainWindow", u"Convert", None)) self.start_button.setText(QCoreApplication.translate("MainWindow", u"Convert", None))
#if QT_CONFIG(tooltip)
self.insert_exif_Button.setToolTip(QCoreApplication.translate("MainWindow", u"Insert EXIF without modifying images.", None))
#endif // QT_CONFIG(tooltip)
self.insert_exif_Button.setText(QCoreApplication.translate("MainWindow", u"Insert Exif", None)) self.insert_exif_Button.setText(QCoreApplication.translate("MainWindow", u"Insert Exif", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), QCoreApplication.translate("MainWindow", u"Main", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), QCoreApplication.translate("MainWindow", u"Main", None))
self.exif_group.setTitle(QCoreApplication.translate("MainWindow", u"EXIF EXPERIMENTAL", None)) self.exif_group.setTitle(QCoreApplication.translate("MainWindow", u"EXIF Settings", None))
self.exif_checkbox.setText(QCoreApplication.translate("MainWindow", u"own exif", None)) #if QT_CONFIG(tooltip)
self.exif_copy_checkBox.setText(QCoreApplication.translate("MainWindow", u"copy exif", None)) self.exif_checkbox.setToolTip(QCoreApplication.translate("MainWindow", u"Add your own EXIF data to the images with the selection from below.", None))
self.edit_exif_button.setText(QCoreApplication.translate("MainWindow", u"Edit Exif", None)) #endif // QT_CONFIG(tooltip)
self.exif_options_group.setTitle(QCoreApplication.translate("MainWindow", u"Must", None)) self.exif_checkbox.setText(QCoreApplication.translate("MainWindow", u"Custom EXIF", None))
#if QT_CONFIG(tooltip)
self.exif_copy_checkBox.setToolTip(QCoreApplication.translate("MainWindow", u"Copy EXIF from the input data.", None))
#endif // QT_CONFIG(tooltip)
self.exif_copy_checkBox.setText(QCoreApplication.translate("MainWindow", u"Copy EXIF", None))
#if QT_CONFIG(tooltip)
self.edit_exif_button.setToolTip(QCoreApplication.translate("MainWindow", u"Open the EXIF Editor to add or remove metadata entries, making them available for selection.", None))
#endif // QT_CONFIG(tooltip)
self.edit_exif_button.setText(QCoreApplication.translate("MainWindow", u"EXIF editor", None))
self.exif_options_group.setTitle(QCoreApplication.translate("MainWindow", u"Essential EXIF Info", None))
self.label_7.setText(QCoreApplication.translate("MainWindow", u"Artist", None)) self.label_7.setText(QCoreApplication.translate("MainWindow", u"Artist", None))
self.label_4.setText(QCoreApplication.translate("MainWindow", u"ISO", None)) self.label_4.setText(QCoreApplication.translate("MainWindow", u"ISO", None))
self.label_6.setText(QCoreApplication.translate("MainWindow", u"Scanner", None)) self.label_6.setText(QCoreApplication.translate("MainWindow", u"Scanner", None))
@ -655,14 +712,26 @@ class Ui_MainWindow(object):
self.make_comboBox.setPlaceholderText("") self.make_comboBox.setPlaceholderText("")
self.label_3.setText(QCoreApplication.translate("MainWindow", u"Model", None)) self.label_3.setText(QCoreApplication.translate("MainWindow", u"Model", None))
self.label_8.setText(QCoreApplication.translate("MainWindow", u"Copyright", None)) self.label_8.setText(QCoreApplication.translate("MainWindow", u"Copyright", None))
self.gps_groupBox.setTitle(QCoreApplication.translate("MainWindow", u"GPS", None)) self.gps_groupBox.setTitle(QCoreApplication.translate("MainWindow", u"GPS Coordinates", None))
self.gps_checkBox.setText(QCoreApplication.translate("MainWindow", u"add gps", None)) #if QT_CONFIG(tooltip)
self.gps_checkBox.setToolTip(QCoreApplication.translate("MainWindow", u"From a Homepage like latlong.net", None))
#endif // QT_CONFIG(tooltip)
self.gps_checkBox.setText(QCoreApplication.translate("MainWindow", u"Enable GPS Data", None))
#if QT_CONFIG(tooltip)
self.lat_lineEdit.setToolTip(QCoreApplication.translate("MainWindow", u"Format: xx.xxxxxx (e.g., 57.618520)", None))
#endif // QT_CONFIG(tooltip)
self.lat_lineEdit.setText("") self.lat_lineEdit.setText("")
self.lat_lineEdit.setPlaceholderText(QCoreApplication.translate("MainWindow", u"xx.xxxxxx latitude", None)) self.lat_lineEdit.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Latitude", None))
#if QT_CONFIG(tooltip)
self.long_lineEdit.setToolTip(QCoreApplication.translate("MainWindow", u"Format: xx.xxxxxx (e.g., -13.779602)", None))
#endif // QT_CONFIG(tooltip)
self.long_lineEdit.setText("") self.long_lineEdit.setText("")
self.long_lineEdit.setPlaceholderText(QCoreApplication.translate("MainWindow", u"xx.xxxxxx longitude", None)) self.long_lineEdit.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Longitude", None))
self.date_groupBox.setTitle(QCoreApplication.translate("MainWindow", u"Optional", None)) self.date_groupBox.setTitle(QCoreApplication.translate("MainWindow", u"Original Capture Data and Time", None))
self.add_date_checkBox.setText(QCoreApplication.translate("MainWindow", u"add date", None)) #if QT_CONFIG(tooltip)
self.add_date_checkBox.setToolTip(QCoreApplication.translate("MainWindow", u"Adds \"Date and Time (original)\" to the image, i.e. when the picture was taking.", None))
#endif // QT_CONFIG(tooltip)
self.add_date_checkBox.setText(QCoreApplication.translate("MainWindow", u"Enable Timestamp", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("MainWindow", u"EXIF", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("MainWindow", u"EXIF", None))
self.menuHelp.setTitle(QCoreApplication.translate("MainWindow", u"Help", None)) self.menuHelp.setTitle(QCoreApplication.translate("MainWindow", u"Help", None))
self.menuSettings.setTitle(QCoreApplication.translate("MainWindow", u"Settings", None)) self.menuSettings.setTitle(QCoreApplication.translate("MainWindow", u"Settings", None))

View file

@ -63,6 +63,9 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>Open a file browser to select a folder for loading images.</string>
</property>
<property name="text"> <property name="text">
<string extracomment="Comment?">Input</string> <string extracomment="Comment?">Input</string>
</property> </property>
@ -83,6 +86,9 @@
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLineEdit" name="input_path"> <widget class="QLineEdit" name="input_path">
<property name="toolTip">
<string/>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -99,6 +105,9 @@
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>Open a file browser to select a folder for saving images.</string>
</property>
<property name="text"> <property name="text">
<string>Output</string> <string>Output</string>
</property> </property>
@ -116,7 +125,7 @@
</size> </size>
</property> </property>
<property name="title"> <property name="title">
<string>Essential group</string> <string>Export Settings</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_4"> <layout class="QGridLayout" name="gridLayout_4">
<item row="4" column="0"> <item row="4" column="0">
@ -148,13 +157,19 @@
</item> </item>
<item row="0" column="3"> <item row="0" column="3">
<widget class="QCheckBox" name="optimize_checkBox"> <widget class="QCheckBox" name="optimize_checkBox">
<property name="toolTip">
<string>Recommended for web use. Enables PIL optimization to slightly reduce file size without visible quality loss. </string>
</property>
<property name="text"> <property name="text">
<string>optimize</string> <string>Optimize</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="2"> <item row="4" column="2">
<widget class="QSlider" name="png_quality_Slider"> <widget class="QSlider" name="png_quality_Slider">
<property name="toolTip">
<string/>
</property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
</property> </property>
@ -197,6 +212,9 @@
</item> </item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QComboBox" name="image_type"> <widget class="QComboBox" name="image_type">
<property name="toolTip">
<string>Select export file type.</string>
</property>
<item> <item>
<property name="text"> <property name="text">
<string notr="true">jpg</string> <string notr="true">jpg</string>
@ -232,6 +250,9 @@
</item> </item>
<item row="5" column="0"> <item row="5" column="0">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="toolTip">
<string>Choose image scaling options. ⚠ Upscaling large images may freeze the system depending on hardware.</string>
</property>
<property name="text"> <property name="text">
<string>Resize</string> <string>Resize</string>
</property> </property>
@ -239,6 +260,9 @@
</item> </item>
<item row="5" column="2"> <item row="5" column="2">
<widget class="QSlider" name="resize_Slider"> <widget class="QSlider" name="resize_Slider">
<property name="toolTip">
<string/>
</property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
</property> </property>
@ -258,6 +282,9 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="toolTip">
<string/>
</property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>1</number>
</property> </property>
@ -287,7 +314,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Extra stuff</string> <string>Image Adjustments</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0"> <item row="1" column="0">
@ -364,13 +391,19 @@
</item> </item>
<item row="5" column="0" colspan="2"> <item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="grayscale_checkBox"> <widget class="QCheckBox" name="grayscale_checkBox">
<property name="toolTip">
<string>Converts image to Grayscale</string>
</property>
<property name="text"> <property name="text">
<string>Turn image to Black and White</string> <string>Black and White Mode</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="2"> <item row="5" column="2">
<widget class="QPushButton" name="preview_Button"> <widget class="QPushButton" name="preview_Button">
<property name="toolTip">
<string>Open a preview window to see how brightness, contrast, and grayscale adjustments affect your image.</string>
</property>
<property name="text"> <property name="text">
<string>Preview</string> <string>Preview</string>
</property> </property>
@ -385,7 +418,7 @@
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Watermark</string> <string>Watermarking</string>
</property> </property>
<property name="flat"> <property name="flat">
<bool>false</bool> <bool>false</bool>
@ -406,7 +439,7 @@
<string/> <string/>
</property> </property>
<property name="placeholderText"> <property name="placeholderText">
<string>Enter Watermark</string> <string>Enter Watermark Text</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -419,6 +452,9 @@
</item> </item>
<item> <item>
<widget class="QComboBox" name="font_size_comboBox"> <widget class="QComboBox" name="font_size_comboBox">
<property name="toolTip">
<string>Adjust the font size for the watermark. Size scales proportionally to image dimensions.</string>
</property>
<property name="currentText"> <property name="currentText">
<string>Normal</string> <string>Normal</string>
</property> </property>
@ -464,11 +500,14 @@
</size> </size>
</property> </property>
<property name="title"> <property name="title">
<string>files</string> <string>File Naming</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_6"> <layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QCheckBox" name="rename_checkbox"> <widget class="QCheckBox" name="rename_checkbox">
<property name="toolTip">
<string>Enable to rename all images with a new base name. '_xx' will be added at the end of each filename.</string>
</property>
<property name="text"> <property name="text">
<string>Rename</string> <string>Rename</string>
</property> </property>
@ -479,6 +518,9 @@
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="toolTip">
<string>Reverses the order of images. Useful for scanned film rolls where the last image (e.g., 36) is scanned first.</string>
</property>
<property name="text"> <property name="text">
<string>Revert order</string> <string>Revert order</string>
</property> </property>
@ -493,7 +535,7 @@
<string/> <string/>
</property> </property>
<property name="placeholderText"> <property name="placeholderText">
<string>Enter file name</string> <string>Enter new File Names</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -534,6 +576,9 @@
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="toolTip">
<string>Insert EXIF without modifying images.</string>
</property>
<property name="text"> <property name="text">
<string>Insert Exif</string> <string>Insert Exif</string>
</property> </property>
@ -552,7 +597,7 @@
<item> <item>
<widget class="QGroupBox" name="exif_group"> <widget class="QGroupBox" name="exif_group">
<property name="title"> <property name="title">
<string>EXIF EXPERIMENTAL</string> <string>EXIF Settings</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
@ -560,15 +605,21 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="toolTip">
<string>Add your own EXIF data to the images with the selection from below.</string>
</property>
<property name="text"> <property name="text">
<string>own exif</string> <string>Custom EXIF</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="exif_copy_checkBox"> <widget class="QCheckBox" name="exif_copy_checkBox">
<property name="toolTip">
<string>Copy EXIF from the input data.</string>
</property>
<property name="text"> <property name="text">
<string>copy exif</string> <string>Copy EXIF</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -577,8 +628,11 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="toolTip">
<string>Open the EXIF Editor to add or remove metadata entries, making them available for selection.</string>
</property>
<property name="text"> <property name="text">
<string>Edit Exif</string> <string>EXIF editor</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -591,7 +645,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Must</string> <string>Essential EXIF Info</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="3" column="0"> <item row="3" column="0">
@ -738,13 +792,16 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="title"> <property name="title">
<string>GPS</string> <string>GPS Coordinates</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="QCheckBox" name="gps_checkBox"> <widget class="QCheckBox" name="gps_checkBox">
<property name="toolTip">
<string>From a Homepage like latlong.net</string>
</property>
<property name="text"> <property name="text">
<string>add gps</string> <string>Enable GPS Data</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -753,6 +810,9 @@
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="toolTip">
<string>Format: xx.xxxxxx (e.g., 57.618520)</string>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -760,7 +820,7 @@
<number>8</number> <number>8</number>
</property> </property>
<property name="placeholderText"> <property name="placeholderText">
<string>xx.xxxxxx latitude</string> <string>Latitude</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -769,6 +829,9 @@
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="toolTip">
<string>Format: xx.xxxxxx (e.g., -13.779602)</string>
</property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -776,7 +839,7 @@
<number>8</number> <number>8</number>
</property> </property>
<property name="placeholderText"> <property name="placeholderText">
<string>xx.xxxxxx longitude</string> <string>Longitude</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -789,13 +852,16 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Optional</string> <string>Original Capture Data and Time</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QCheckBox" name="add_date_checkBox"> <widget class="QCheckBox" name="add_date_checkBox">
<property name="toolTip">
<string>Adds &quot;Date and Time (original)&quot; to the image, i.e. when the picture was taking.</string>
</property>
<property name="text"> <property name="text">
<string>add date</string> <string>Enable Timestamp</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -814,6 +880,23 @@
<day>1</day> <day>1</day>
</datetime> </datetime>
</property> </property>
<property name="maximumDate">
<date>
<year>2038</year>
<month>12</month>
<day>31</day>
</date>
</property>
<property name="minimumDate">
<date>
<year>1970</year>
<month>1</month>
<day>1</day>
</date>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>

View file

@ -40,23 +40,24 @@ class Ui_Preview_Window(object):
self.widget = QWidget(self.centralwidget) self.widget = QWidget(self.centralwidget)
self.widget.setObjectName(u"widget") self.widget.setObjectName(u"widget")
self.widget.setMinimumSize(QSize(140, 628)) self.widget.setMinimumSize(QSize(150, 628))
self.widget.setMaximumSize(QSize(140, 16777215)) self.widget.setMaximumSize(QSize(150, 16777215))
self.verticalLayout_3 = QVBoxLayout(self.widget) self.verticalLayout_4 = QVBoxLayout(self.widget)
self.verticalLayout_3.setObjectName(u"verticalLayout_3") self.verticalLayout_4.setObjectName(u"verticalLayout_4")
self.image_path_lineEdit = QLineEdit(self.widget) self.image_path_lineEdit = QLineEdit(self.widget)
self.image_path_lineEdit.setObjectName(u"image_path_lineEdit") self.image_path_lineEdit.setObjectName(u"image_path_lineEdit")
self.verticalLayout_3.addWidget(self.image_path_lineEdit) self.verticalLayout_4.addWidget(self.image_path_lineEdit)
self.load_Button = QPushButton(self.widget) self.load_Button = QPushButton(self.widget)
self.load_Button.setObjectName(u"load_Button") self.load_Button.setObjectName(u"load_Button")
self.verticalLayout_3.addWidget(self.load_Button) self.verticalLayout_4.addWidget(self.load_Button)
self.widget_2 = QWidget(self.widget) self.widget_2 = QWidget(self.widget)
self.widget_2.setObjectName(u"widget_2") self.widget_2.setObjectName(u"widget_2")
self.widget_2.setMaximumSize(QSize(16777215, 120)) self.widget_2.setMinimumSize(QSize(0, 250))
self.widget_2.setMaximumSize(QSize(16777215, 250))
self.verticalLayout = QVBoxLayout(self.widget_2) self.verticalLayout = QVBoxLayout(self.widget_2)
self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setObjectName(u"verticalLayout")
self.label = QLabel(self.widget_2) self.label = QLabel(self.widget_2)
@ -84,94 +85,75 @@ class Ui_Preview_Window(object):
self.verticalLayout.addWidget(self.reset_brightness_Button) self.verticalLayout.addWidget(self.reset_brightness_Button)
self.contrast_Slider = QSlider(self.widget_2)
self.verticalLayout_3.addWidget(self.widget_2)
self.widget_3 = QWidget(self.widget)
self.widget_3.setObjectName(u"widget_3")
self.widget_3.setMaximumSize(QSize(16777215, 120))
self.verticalLayout_2 = QVBoxLayout(self.widget_3)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.label_2 = QLabel(self.widget_3)
self.label_2.setObjectName(u"label_2")
self.verticalLayout_2.addWidget(self.label_2)
self.contrast_spinBox = QSpinBox(self.widget_3)
self.contrast_spinBox.setObjectName(u"contrast_spinBox")
self.contrast_spinBox.setMinimum(-100)
self.contrast_spinBox.setMaximum(100)
self.verticalLayout_2.addWidget(self.contrast_spinBox)
self.contrast_Slider = QSlider(self.widget_3)
self.contrast_Slider.setObjectName(u"contrast_Slider") self.contrast_Slider.setObjectName(u"contrast_Slider")
self.contrast_Slider.setMinimum(-100) self.contrast_Slider.setMinimum(-100)
self.contrast_Slider.setMaximum(100) self.contrast_Slider.setMaximum(100)
self.contrast_Slider.setOrientation(Qt.Horizontal) self.contrast_Slider.setOrientation(Qt.Horizontal)
self.verticalLayout_2.addWidget(self.contrast_Slider) self.verticalLayout.addWidget(self.contrast_Slider)
self.reset_contrast_Button = QPushButton(self.widget_3) self.contrast_spinBox = QSpinBox(self.widget_2)
self.contrast_spinBox.setObjectName(u"contrast_spinBox")
self.contrast_spinBox.setMinimum(-100)
self.contrast_spinBox.setMaximum(100)
self.verticalLayout.addWidget(self.contrast_spinBox)
self.label_2 = QLabel(self.widget_2)
self.label_2.setObjectName(u"label_2")
self.verticalLayout.addWidget(self.label_2)
self.reset_contrast_Button = QPushButton(self.widget_2)
self.reset_contrast_Button.setObjectName(u"reset_contrast_Button") self.reset_contrast_Button.setObjectName(u"reset_contrast_Button")
self.verticalLayout_2.addWidget(self.reset_contrast_Button) self.verticalLayout.addWidget(self.reset_contrast_Button)
self.grayscale_checkBox = QCheckBox(self.widget_2)
self.verticalLayout_3.addWidget(self.widget_3)
self.grayscale_checkBox = QCheckBox(self.widget)
self.grayscale_checkBox.setObjectName(u"grayscale_checkBox") self.grayscale_checkBox.setObjectName(u"grayscale_checkBox")
self.verticalLayout_3.addWidget(self.grayscale_checkBox) self.verticalLayout.addWidget(self.grayscale_checkBox)
self.update_Button = QPushButton(self.widget)
self.update_Button.setObjectName(u"update_Button")
self.verticalLayout_3.addWidget(self.update_Button) self.verticalLayout_4.addWidget(self.widget_2)
self.widget_5 = QWidget(self.widget) self.widget_5 = QWidget(self.widget)
self.widget_5.setObjectName(u"widget_5") self.widget_5.setObjectName(u"widget_5")
self.verticalLayout_5 = QVBoxLayout(self.widget_5) self.verticalLayout_2 = QVBoxLayout(self.widget_5)
self.verticalLayout_5.setObjectName(u"verticalLayout_5") self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.label_4 = QLabel(self.widget_5)
self.label_4.setObjectName(u"label_4")
self.label_4.setWordWrap(True)
self.verticalLayout_5.addWidget(self.label_4) self.verticalLayout_4.addWidget(self.widget_5)
self.live_update = QCheckBox(self.widget_5)
self.live_update.setObjectName(u"live_update")
self.verticalLayout_5.addWidget(self.live_update)
self.verticalLayout_3.addWidget(self.widget_5)
self.widget_4 = QWidget(self.widget) self.widget_4 = QWidget(self.widget)
self.widget_4.setObjectName(u"widget_4") self.widget_4.setObjectName(u"widget_4")
self.verticalLayout_4 = QVBoxLayout(self.widget_4) self.verticalLayout_3 = QVBoxLayout(self.widget_4)
self.verticalLayout_4.setObjectName(u"verticalLayout_4") self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.label_3 = QLabel(self.widget_4) self.live_update = QCheckBox(self.widget_4)
self.label_3.setObjectName(u"label_3") self.live_update.setObjectName(u"live_update")
self.label_3.setScaledContents(False)
self.label_3.setWordWrap(True)
self.verticalLayout_4.addWidget(self.label_3) self.verticalLayout_3.addWidget(self.live_update)
self.update_Button = QPushButton(self.widget_4)
self.update_Button.setObjectName(u"update_Button")
self.update_Button.setAutoFillBackground(False)
self.verticalLayout_3.addWidget(self.update_Button)
self.checkBox = QCheckBox(self.widget_4) self.checkBox = QCheckBox(self.widget_4)
self.checkBox.setObjectName(u"checkBox") self.checkBox.setObjectName(u"checkBox")
self.checkBox.setLayoutDirection(Qt.LeftToRight)
self.checkBox.setChecked(True) self.checkBox.setChecked(True)
self.verticalLayout_4.addWidget(self.checkBox) self.verticalLayout_3.addWidget(self.checkBox)
self.close_Button = QPushButton(self.widget_4) self.close_Button = QPushButton(self.widget_4)
self.close_Button.setObjectName(u"close_Button") self.close_Button.setObjectName(u"close_Button")
self.verticalLayout_4.addWidget(self.close_Button) self.verticalLayout_3.addWidget(self.close_Button)
self.verticalLayout_3.addWidget(self.widget_4) self.verticalLayout_4.addWidget(self.widget_4)
self.horizontalLayout.addWidget(self.widget) self.horizontalLayout.addWidget(self.widget)
@ -194,18 +176,40 @@ class Ui_Preview_Window(object):
def retranslateUi(self, Preview_Window): def retranslateUi(self, Preview_Window):
Preview_Window.setWindowTitle(QCoreApplication.translate("Preview_Window", u"OptimaLab35 - Preview", None)) Preview_Window.setWindowTitle(QCoreApplication.translate("Preview_Window", u"OptimaLab35 - Preview", None))
self.QLabel.setText("") self.QLabel.setText("")
self.image_path_lineEdit.setPlaceholderText(QCoreApplication.translate("Preview_Window", u"Path to image", None)) #if QT_CONFIG(tooltip)
self.image_path_lineEdit.setToolTip(QCoreApplication.translate("Preview_Window", u"Enter the path to the image file or use the 'Select Image' button to browse.", None))
#endif // QT_CONFIG(tooltip)
self.image_path_lineEdit.setPlaceholderText(QCoreApplication.translate("Preview_Window", u"Image Path", None))
self.load_Button.setText(QCoreApplication.translate("Preview_Window", u"Select image", None)) self.load_Button.setText(QCoreApplication.translate("Preview_Window", u"Select image", None))
self.label.setText(QCoreApplication.translate("Preview_Window", u"Brightness", None)) self.label.setText(QCoreApplication.translate("Preview_Window", u"Brightness", None))
#if QT_CONFIG(tooltip)
self.reset_brightness_Button.setToolTip(QCoreApplication.translate("Preview_Window", u"Click to reset the brightness to its default value (0).", None))
#endif // QT_CONFIG(tooltip)
self.reset_brightness_Button.setText(QCoreApplication.translate("Preview_Window", u"Reset", None)) self.reset_brightness_Button.setText(QCoreApplication.translate("Preview_Window", u"Reset", None))
self.label_2.setText(QCoreApplication.translate("Preview_Window", u"Contrast", None)) self.label_2.setText(QCoreApplication.translate("Preview_Window", u"Contrast", None))
#if QT_CONFIG(tooltip)
self.reset_contrast_Button.setToolTip(QCoreApplication.translate("Preview_Window", u"Click to reset the contrast to its default value (0).", None))
#endif // QT_CONFIG(tooltip)
self.reset_contrast_Button.setText(QCoreApplication.translate("Preview_Window", u"Reset", None)) self.reset_contrast_Button.setText(QCoreApplication.translate("Preview_Window", u"Reset", None))
self.grayscale_checkBox.setText(QCoreApplication.translate("Preview_Window", u"Grayscale", None)) #if QT_CONFIG(tooltip)
self.update_Button.setText(QCoreApplication.translate("Preview_Window", u"Update preview", None)) self.grayscale_checkBox.setToolTip(QCoreApplication.translate("Preview_Window", u"Convert the image to grayscale (black and white).", None))
self.label_4.setText(QCoreApplication.translate("Preview_Window", u"Update preview live might have large impact on system, especilly if image is large.", None)) #endif // QT_CONFIG(tooltip)
self.grayscale_checkBox.setText(QCoreApplication.translate("Preview_Window", u"Black n White", None))
#if QT_CONFIG(tooltip)
self.live_update.setToolTip(QCoreApplication.translate("Preview_Window", u"Enable live updates to immediately preview changes as you adjust brightness, contrast, or grayscale. Be aware that this might impact performance, especially with large images.", None))
#endif // QT_CONFIG(tooltip)
self.live_update.setText(QCoreApplication.translate("Preview_Window", u"Live update", None)) self.live_update.setText(QCoreApplication.translate("Preview_Window", u"Live update", None))
self.label_3.setText(QCoreApplication.translate("Preview_Window", u"Copy values to main window when closing", None)) #if QT_CONFIG(tooltip)
self.update_Button.setToolTip(QCoreApplication.translate("Preview_Window", u"Apply Changes to Preview", None))
#endif // QT_CONFIG(tooltip)
self.update_Button.setText(QCoreApplication.translate("Preview_Window", u"Update Preview", None))
#if QT_CONFIG(tooltip)
self.checkBox.setToolTip(QCoreApplication.translate("Preview_Window", u"Enable to copy adjustments to the main window upon closing", None))
#endif // QT_CONFIG(tooltip)
self.checkBox.setText(QCoreApplication.translate("Preview_Window", u"Copy Values", None)) self.checkBox.setText(QCoreApplication.translate("Preview_Window", u"Copy Values", None))
#if QT_CONFIG(tooltip)
self.close_Button.setToolTip("")
#endif // QT_CONFIG(tooltip)
self.close_Button.setText(QCoreApplication.translate("Preview_Window", u"Close", None)) self.close_Button.setText(QCoreApplication.translate("Preview_Window", u"Close", None))
# retranslateUi # retranslateUi

View file

@ -44,21 +44,24 @@
<widget class="QWidget" name="widget" native="true"> <widget class="QWidget" name="widget" native="true">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>140</width> <width>150</width>
<height>628</height> <height>628</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>140</width> <width>150</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_4">
<item> <item>
<widget class="QLineEdit" name="image_path_lineEdit"> <widget class="QLineEdit" name="image_path_lineEdit">
<property name="toolTip">
<string>Enter the path to the image file or use the 'Select Image' button to browse.</string>
</property>
<property name="placeholderText"> <property name="placeholderText">
<string>Path to image</string> <string>Image Path</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -71,10 +74,16 @@
</item> </item>
<item> <item>
<widget class="QWidget" name="widget_2" native="true"> <widget class="QWidget" name="widget_2" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>250</height>
</size>
</property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>16777215</width> <width>16777215</width>
<height>120</height> <height>250</height>
</size> </size>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -110,40 +119,14 @@
</item> </item>
<item> <item>
<widget class="QPushButton" name="reset_brightness_Button"> <widget class="QPushButton" name="reset_brightness_Button">
<property name="toolTip">
<string>Click to reset the brightness to its default value (0).</string>
</property>
<property name="text"> <property name="text">
<string>Reset</string> <string>Reset</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_3" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>120</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Contrast</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="contrast_spinBox">
<property name="minimum">
<number>-100</number>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item> <item>
<widget class="QSlider" name="contrast_Slider"> <widget class="QSlider" name="contrast_Slider">
<property name="minimum"> <property name="minimum">
@ -157,71 +140,85 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QSpinBox" name="contrast_spinBox">
<property name="minimum">
<number>-100</number>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Contrast</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="reset_contrast_Button"> <widget class="QPushButton" name="reset_contrast_Button">
<property name="toolTip">
<string>Click to reset the contrast to its default value (0).</string>
</property>
<property name="text"> <property name="text">
<string>Reset</string> <string>Reset</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="grayscale_checkBox">
<property name="toolTip">
<string>Convert the image to grayscale (black and white).</string>
</property>
<property name="text">
<string>Black n White</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="grayscale_checkBox">
<property name="text">
<string>Grayscale</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="update_Button">
<property name="text">
<string>Update preview</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QWidget" name="widget_5" native="true"> <widget class="QWidget" name="widget_5" native="true">
<layout class="QVBoxLayout" name="verticalLayout_5"> <layout class="QVBoxLayout" name="verticalLayout_2"/>
<item> </widget>
<widget class="QLabel" name="label_4"> </item>
<property name="text"> <item>
<string>Update preview live might have large impact on system, especilly if image is large.</string> <widget class="QWidget" name="widget_4" native="true">
</property> <layout class="QVBoxLayout" name="verticalLayout_3">
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="live_update"> <widget class="QCheckBox" name="live_update">
<property name="toolTip">
<string>Enable live updates to immediately preview changes as you adjust brightness, contrast, or grayscale. Be aware that this might impact performance, especially with large images.</string>
</property>
<property name="text"> <property name="text">
<string>Live update</string> <string>Live update</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item> <item>
<widget class="QLabel" name="label_3"> <widget class="QPushButton" name="update_Button">
<property name="text"> <property name="toolTip">
<string>Copy values to main window when closing</string> <string>Apply Changes to Preview</string>
</property> </property>
<property name="scaledContents"> <property name="autoFillBackground">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="wordWrap"> <property name="text">
<bool>true</bool> <string>Update Preview</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="checkBox"> <widget class="QCheckBox" name="checkBox">
<property name="toolTip">
<string>Enable to copy adjustments to the main window upon closing</string>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text"> <property name="text">
<string>Copy Values</string> <string>Copy Values</string>
</property> </property>
@ -232,6 +229,9 @@
</item> </item>
<item> <item>
<widget class="QPushButton" name="close_Button"> <widget class="QPushButton" name="close_Button">
<property name="toolTip">
<string/>
</property>
<property name="text"> <property name="text">
<string>Close</string> <string>Close</string>
</property> </property>