From d0fb0870d4f075beb358df0295a770d0730a115c Mon Sep 17 00:00:00 2001 From: uncor3 Date: Fri, 7 Nov 2025 14:31:28 +0000 Subject: [PATCH] fix bugs and styles - Refactored jailbroken tab - Added new icons - Fixed files not closed in read_afc_file_to_byte_array - Improved memory cache for thumbnails in `PhotoModel`, increasing limit to 150MB. - Updated UI elements in `SponsorWidget` and `ToolboxWidget` for better aesthetics and usability. --- resources.qrc | 12 + resources/icons/BxBxsTerminal.png | Bin 0 -> 9383 bytes resources/icons/IconParkTwotoneMoreTwo.png | Bin 0 -> 21274 bytes .../MaterialSymbolsAndroidWifi3BarPlus.png | Bin 0 -> 15439 bytes .../MaterialSymbolsLightAirplayOutline.png | Bin 0 -> 9628 bytes .../MaterialSymbolsLightCableRounded.png | Bin 0 -> 11969 bytes .../MaterialSymbolsLocationOnOutline.png | Bin 0 -> 16952 bytes resources/icons/MdiDisk.png | Bin 0 -> 13153 bytes resources/icons/PepiconsPrintCellphoneEye.png | Bin 0 -> 19540 bytes ...CodeProgrammingQueryFindMagnifyingApps.png | Bin 0 -> 16405 bytes ...StreamlineUltimateMultipleUsersNetwork.png | Bin 0 -> 23920 bytes resources/icons/TablerDatabaseExport.png | Bin 0 -> 17363 bytes resources/icons/fuse.png | Bin 0 -> 32431 bytes .../helpers/read_afc_file_to_byte_array.cpp | 20 +- src/devdiskimageswidget.cpp | 1 - src/deviceinfowidget.cpp | 2 +- src/deviceinfowidget.h | 2 +- src/devicemenuwidget.cpp | 5 + src/devicemenuwidget.h | 3 +- src/diagnosewidget.cpp | 21 +- src/diagnosewidget.h | 4 +- src/diskusagewidget.cpp | 42 +- src/diskusagewidget.h | 1 - src/gallerywidget.cpp | 5 + src/gallerywidget.h | 1 + src/iDescriptor-ui.h | 66 ++- src/jailbrokenwidget.cpp | 381 ++++-------------- src/jailbrokenwidget.h | 61 +-- ...escreenwidget.cpp => livescreenwidget.cpp} | 48 +-- ...ltimescreenwidget.h => livescreenwidget.h} | 14 +- src/opensshterminalwidget.cpp | 354 ++++++++++++++++ src/opensshterminalwidget.h | 99 +++++ src/photoimportdialog.cpp | 11 +- src/photomodel.cpp | 32 +- src/sponsorwidget.cpp | 2 + src/toolboxwidget.cpp | 91 +++-- src/toolboxwidget.h | 4 +- src/welcomewidget.cpp | 2 +- src/wirelessgalleryimportwidget.cpp | 2 +- 39 files changed, 807 insertions(+), 479 deletions(-) create mode 100644 resources/icons/BxBxsTerminal.png create mode 100644 resources/icons/IconParkTwotoneMoreTwo.png create mode 100644 resources/icons/MaterialSymbolsAndroidWifi3BarPlus.png create mode 100644 resources/icons/MaterialSymbolsLightAirplayOutline.png create mode 100644 resources/icons/MaterialSymbolsLightCableRounded.png create mode 100644 resources/icons/MaterialSymbolsLocationOnOutline.png create mode 100644 resources/icons/MdiDisk.png create mode 100644 resources/icons/PepiconsPrintCellphoneEye.png create mode 100644 resources/icons/StreamlineProgrammingBrowserSearchSearchWindowGlassAppCodeProgrammingQueryFindMagnifyingApps.png create mode 100644 resources/icons/StreamlineUltimateMultipleUsersNetwork.png create mode 100644 resources/icons/TablerDatabaseExport.png create mode 100644 resources/icons/fuse.png rename src/{realtimescreenwidget.cpp => livescreenwidget.cpp} (84%) rename src/{realtimescreenwidget.h => livescreenwidget.h} (82%) create mode 100644 src/opensshterminalwidget.cpp create mode 100644 src/opensshterminalwidget.h diff --git a/resources.qrc b/resources.qrc index 2777c10..21645c9 100644 --- a/resources.qrc +++ b/resources.qrc @@ -19,6 +19,18 @@ resources/icons/MaterialSymbolsLightHome.png resources/icons/MdiGithub.png resources/icons/app-icon/icon.ico + resources/icons/MaterialSymbolsLightAirplayOutline.png + resources/icons/MaterialSymbolsLightCableRounded.png + resources/icons/MaterialSymbolsLocationOnOutline.png + resources/icons/MdiDisk.png + resources/icons/PepiconsPrintCellphoneEye.png + resources/icons/StreamlineProgrammingBrowserSearchSearchWindowGlassAppCodeProgrammingQueryFindMagnifyingApps.png + resources/icons/fuse.png + resources/icons/TablerDatabaseExport.png + resources/icons/StreamlineUltimateMultipleUsersNetwork.png + resources/icons/MaterialSymbolsAndroidWifi3BarPlus.png + resources/icons/IconParkTwotoneMoreTwo.png + resources/icons/BxBxsTerminal.png qml/MapView.qml resources/iphone.png resources/ios-wallpapers/iphone-ios4.png diff --git a/resources/icons/BxBxsTerminal.png b/resources/icons/BxBxsTerminal.png new file mode 100644 index 0000000000000000000000000000000000000000..f76e2105f6f5376572a7856472f39723c1cae59c GIT binary patch literal 9383 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 literal 0 HcmV?d00001 diff --git a/resources/icons/IconParkTwotoneMoreTwo.png b/resources/icons/IconParkTwotoneMoreTwo.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f5dcd15f88552cb153307a17ecff4cdd2cf17e GIT binary patch literal 21274 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

H6z(uvkAQ>q?k&iWp}!qx-#Sdih84yf+b&to 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 OFA!eGM7v0n5dMGgDx-Y> literal 0 HcmV?d00001 diff --git a/resources/icons/MaterialSymbolsLightAirplayOutline.png b/resources/icons/MaterialSymbolsLightAirplayOutline.png new file mode 100644 index 0000000000000000000000000000000000000000..99e9907637ac09fc22d306b1ff7fe2941a1dd6dd GIT binary patch literal 9628 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 literal 0 HcmV?d00001 diff --git a/resources/icons/MaterialSymbolsLocationOnOutline.png b/resources/icons/MaterialSymbolsLocationOnOutline.png new file mode 100644 index 0000000000000000000000000000000000000000..88ea17eea819905c5576cf1a7413019eb8872cda GIT binary patch literal 16952 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 E0Nraz82|tP literal 0 HcmV?d00001 diff --git a/resources/icons/MdiDisk.png b/resources/icons/MdiDisk.png new file mode 100644 index 0000000000000000000000000000000000000000..3729f91585399e146a493a1adb48b49e051d2dc2 GIT binary patch literal 13153 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 Ru7kfohPq}t1xFmi{tq%rnMMEr literal 0 HcmV?d00001 diff --git a/resources/icons/PepiconsPrintCellphoneEye.png b/resources/icons/PepiconsPrintCellphoneEye.png new file mode 100644 index 0000000000000000000000000000000000000000..e537949d88d7bac98ffcb6314b8463f0df5f46c9 GIT binary patch literal 19540 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 literal 0 HcmV?d00001 diff --git a/resources/icons/StreamlineProgrammingBrowserSearchSearchWindowGlassAppCodeProgrammingQueryFindMagnifyingApps.png b/resources/icons/StreamlineProgrammingBrowserSearchSearchWindowGlassAppCodeProgrammingQueryFindMagnifyingApps.png new file mode 100644 index 0000000000000000000000000000000000000000..8ccfcd4e861d019813cad3548a3a4d69b870ec94 GIT binary patch literal 16405 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�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 a4-GJ37g8jzHpl_(0dzGDHJ+*wqy7)rW+Scu literal 0 HcmV?d00001 diff --git a/resources/icons/TablerDatabaseExport.png b/resources/icons/TablerDatabaseExport.png new file mode 100644 index 0000000000000000000000000000000000000000..97e76c3b97e2ef179759f37f10ce3d355d876103 GIT binary patch literal 17363 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 i_Wq#sn41Ca1}kvQoe|kcol0e(`=v`2Pbazy9t3 literal 0 HcmV?d00001 diff --git a/resources/icons/fuse.png b/resources/icons/fuse.png new file mode 100644 index 0000000000000000000000000000000000000000..070981a4fa7ee4586390ce937a288c6c26ea0955 GIT binary patch literal 32431 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::ScrollBarAlwaysOff); m_imageListWidget->setStyleSheet( "QListWidget { background: transparent; border: none; }"); - m_imageListWidget->viewport()->setStyleSheet("background: transparent;"); m_stackedWidget->addWidget(m_imageListWidget); diff --git a/src/deviceinfowidget.cpp b/src/deviceinfowidget.cpp index c73827f..f7f597a 100644 --- a/src/deviceinfowidget.cpp +++ b/src/deviceinfowidget.cpp @@ -153,7 +153,7 @@ DeviceInfoWidget::DeviceInfoWidget(iDescriptorDevice *device, QWidget *parent) chargingLayout->setSpacing(5); // Create icon label - m_lightningIconLabel = new ZIconWidget( + m_lightningIconLabel = new ZIconLabel( QIcon(":/resources/icons/MdiLightningBolt.png"), " Charging", this); m_batteryWidget = diff --git a/src/deviceinfowidget.h b/src/deviceinfowidget.h index 2c2eeb3..4d6e0be 100644 --- a/src/deviceinfowidget.h +++ b/src/deviceinfowidget.h @@ -46,7 +46,7 @@ private: QLabel *m_chargingStatusLabel; QLabel *m_chargingWattsWithCableTypeLabel; BatteryWidget *m_batteryWidget; - ZIconWidget *m_lightningIconLabel; + ZIconLabel *m_lightningIconLabel; DeviceImageWidget *m_deviceImageWidget; }; diff --git a/src/devicemenuwidget.cpp b/src/devicemenuwidget.cpp index 99cad13..aa051b9 100644 --- a/src/devicemenuwidget.cpp +++ b/src/devicemenuwidget.cpp @@ -99,3 +99,8 @@ void DeviceMenuWidget::switchToTab(const QString &tabName) qDebug() << "Tab not found:" << tabName; } } + +DeviceMenuWidget::~DeviceMenuWidget() +{ + qDebug() << "DeviceMenuWidget destructor called"; +} \ No newline at end of file diff --git a/src/devicemenuwidget.h b/src/devicemenuwidget.h index b43b759..cf0480a 100644 --- a/src/devicemenuwidget.h +++ b/src/devicemenuwidget.h @@ -35,7 +35,8 @@ public: QWidget *parent = nullptr); void switchToTab(const QString &tabName); void init(); - // ~DeviceMenuWidget(); + ~DeviceMenuWidget(); + private: QStackedWidget *stackedWidget; // Pointer to the stacked widget iDescriptorDevice *device; // Pointer to the iDescriptor device diff --git a/src/diagnosewidget.cpp b/src/diagnosewidget.cpp index 27aede0..2841a2b 100644 --- a/src/diagnosewidget.cpp +++ b/src/diagnosewidget.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -129,7 +130,7 @@ void DependencyItem::setInstalling(bool installing) void DependencyItem::onInstallClicked() { emit installRequested(m_name); } DiagnoseWidget::DiagnoseWidget(QWidget *parent) - : QWidget(parent), m_isExpanded(false) + : QFrame(parent), m_isExpanded(false) { setupUI(); @@ -144,7 +145,7 @@ DiagnoseWidget::DiagnoseWidget(QWidget *parent) #ifdef __linux__ // Add Linux-specific dependency items addDependencyItem("USB Device Permissions", - "Required for recovery device access (udev rules)"); + "Required for recovery devices (udev rules)"); #endif // Auto-check on startup @@ -153,7 +154,15 @@ DiagnoseWidget::DiagnoseWidget(QWidget *parent) void DiagnoseWidget::setupUI() { - setAutoFillBackground(true); + setObjectName("diagnoseWidget"); + setContentsMargins(20, 10, 10, 0); + setStyleSheet("QFrame#diagnoseWidget { " + " background-color: palette(window); " // Set background + // from the theme + " border-top-right-radius: 10px; " + " border-top-left-radius: 10px; " + " border-top: 1px solid #ccc; " + "}"); m_mainLayout = new QVBoxLayout(this); m_mainLayout->setSpacing(10); @@ -168,7 +177,7 @@ void DiagnoseWidget::setupUI() // Check button m_checkButton = new QPushButton("Refresh Check(s)"); - m_checkButton->setMaximumWidth(150); + m_checkButton->setMaximumWidth(m_checkButton->sizeHint().width()); connect(m_checkButton, &QPushButton::clicked, this, [this]() { checkDependencies(false); }); @@ -488,8 +497,8 @@ void DiagnoseWidget::onInstallRequested(const QString &name) QMessageBox::information( this, "Installation Complete", "USB device permissions have been configured.\n\n" - "Note: You may need to log out and log back in for " - "group membership changes to take full effect."); + "Note: You may need to log out and log back in for or " + "even restart for changes to take full effect."); checkDependencies(false); } itemToInstall->setInstalling(false); diff --git a/src/diagnosewidget.h b/src/diagnosewidget.h index 006987d..f6d346f 100644 --- a/src/diagnosewidget.h +++ b/src/diagnosewidget.h @@ -20,6 +20,7 @@ #ifndef DIAGNOSE_WIDGET_H #define DIAGNOSE_WIDGET_H +#include #include #include #include @@ -27,7 +28,6 @@ #include #include #include -#include #include "qprocessindicator.h" @@ -57,7 +57,7 @@ private: QProcessIndicator *m_processIndicator; }; -class DiagnoseWidget : public QWidget +class DiagnoseWidget : public QFrame { Q_OBJECT diff --git a/src/diskusagewidget.cpp b/src/diskusagewidget.cpp index 0f70cb1..619ef67 100644 --- a/src/diskusagewidget.cpp +++ b/src/diskusagewidget.cpp @@ -88,11 +88,9 @@ void DiskUsageWidget::setupUI() // Disk usage bar container m_diskBarContainer = new QWidget(this); - m_diskBarContainer->setMinimumHeight(20); - m_diskBarContainer->setMaximumHeight(20); - m_diskBarContainer->setObjectName("diskBarContainer"); - m_diskBarContainer->setStyleSheet( - "QWidget#diskBarContainer { margin: 0; padding: 0; border: none; }"); + m_diskBarContainer->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + m_diskBarContainer->setFixedHeight(20); m_diskBarLayout = new QHBoxLayout(m_diskBarContainer); m_diskBarLayout->setContentsMargins(0, 0, 0, 0); m_diskBarLayout->setSpacing(0); @@ -149,6 +147,13 @@ void DiskUsageWidget::setupUI() "QWidget#freeBar { background-color: #474747; border: 1px solid " "#4f4f4f; padding: 0; margin: 0; border-top-right-radius: 3px; " "border-bottom-right-radius: 3px; }"); + + // remove padding margin from layout + m_systemBar->setContentsMargins(0, 0, 0, 0); + m_appsBar->setContentsMargins(0, 0, 0, 0); + m_mediaBar->setContentsMargins(0, 0, 0, 0); + m_othersBar->setContentsMargins(0, 0, 0, 0); + m_freeBar->setContentsMargins(0, 0, 0, 0); #endif m_diskBarLayout->addWidget(m_systemBar); @@ -159,21 +164,22 @@ void DiskUsageWidget::setupUI() m_dataLayout->addWidget(m_diskBarContainer); - // Legend layout - m_legendLayout = new QHBoxLayout(); + QWidget *m_legendWidget = new QWidget(); + m_legendWidget->setContentsMargins(0, 0, 0, 0); + m_legendWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + m_legendLayout = new QHBoxLayout(m_legendWidget); m_legendLayout->setSpacing(0); m_legendLayout->setContentsMargins(0, 0, 0, 0); - // Legend labels - m_systemLabel = new QLabel("System", m_dataPage); - m_appsLabel = new QLabel("Apps", m_dataPage); - m_mediaLabel = new QLabel("Media", m_dataPage); - m_othersLabel = new QLabel("Others", m_dataPage); - m_freeLabel = new QLabel("Free", m_dataPage); + m_systemLabel = new QLabel("System", m_legendWidget); + m_appsLabel = new QLabel("Apps", m_legendWidget); + m_mediaLabel = new QLabel("Media", m_legendWidget); + m_othersLabel = new QLabel("Others", m_legendWidget); + m_freeLabel = new QLabel("Free", m_legendWidget); - // Style legend labels with colored backgrounds QString labelStyle = - "padding: 2px 6px; margin: 0px; border-radius: 3px; font-size: 10px;"; + "margin: 0px; padding: 0px 4px 0px 0px; font-size: 10px;"; m_systemLabel->setStyleSheet(labelStyle); m_appsLabel->setStyleSheet(labelStyle); m_mediaLabel->setStyleSheet(labelStyle); @@ -187,8 +193,8 @@ void DiskUsageWidget::setupUI() m_legendLayout->addWidget(m_freeLabel); m_legendLayout->addStretch(); - m_dataLayout->addLayout(m_legendLayout); - // m_dataLayout->addStretch(); + // Add the legend widget (not the layout) to the data layout + m_dataLayout->addWidget(m_legendWidget); m_stackedWidget->addWidget(m_dataPage); @@ -196,8 +202,6 @@ void DiskUsageWidget::setupUI() m_stackedWidget->setCurrentWidget(m_loadingErrorPage); } -QSize DiskUsageWidget::sizeHint() const { return QSize(400, 80); } - void DiskUsageWidget::updateUI() { if (m_state == Loading) { diff --git a/src/diskusagewidget.h b/src/diskusagewidget.h index 461fe36..40601a6 100644 --- a/src/diskusagewidget.h +++ b/src/diskusagewidget.h @@ -37,7 +37,6 @@ class DiskUsageWidget : public QWidget public: explicit DiskUsageWidget(iDescriptorDevice *device, QWidget *parent = nullptr); - QSize sizeHint() const override; private: void fetchData(); diff --git a/src/gallerywidget.cpp b/src/gallerywidget.cpp index 76e5843..9db47e3 100644 --- a/src/gallerywidget.cpp +++ b/src/gallerywidget.cpp @@ -621,4 +621,9 @@ void GalleryWidget::onPhotoContextMenu(const QPoint &pos) &GalleryWidget::onExportSelected); contextMenu.exec(m_listView->viewport()->mapToGlobal(pos)); +} + +GalleryWidget::~GalleryWidget() +{ + qDebug() << "GalleryWidget destructor called"; } \ No newline at end of file diff --git a/src/gallerywidget.h b/src/gallerywidget.h index 5a6ea16..78623f3 100644 --- a/src/gallerywidget.h +++ b/src/gallerywidget.h @@ -46,6 +46,7 @@ public: explicit GalleryWidget(iDescriptorDevice *device, QWidget *parent = nullptr); void load(); + ~GalleryWidget(); private slots: void onSortOrderChanged(); diff --git a/src/iDescriptor-ui.h b/src/iDescriptor-ui.h index 8f6f8aa..16964aa 100644 --- a/src/iDescriptor-ui.h +++ b/src/iDescriptor-ui.h @@ -90,8 +90,15 @@ public: ZIcon(const QString &fileName) : QIcon(fileName) {} ZIcon(const QPixmap &pixmap) : QIcon(pixmap) {} + void setThemable(bool themable) { m_themable = themable; } + QPixmap getThemedPixmap(const QSize &size, const QPalette &palette) const { + // If not themable, return the original pixmap without color filling. + if (!m_themable) { + return QIcon::pixmap(size); + } + QPixmap pixmap = QIcon::pixmap(size); if (pixmap.isNull()) { return pixmap; @@ -123,6 +130,9 @@ public: QIcon::paint(painter, rect); } } + +private: + bool m_themable = true; }; class ZIconWidget : public QAbstractButton @@ -174,9 +184,61 @@ private: ZIcon m_icon; }; +// Add this new class for display-only icons +class ZIconLabel : public QLabel +{ + Q_OBJECT +public: + ZIconLabel(const QIcon &icon, const QString &tooltip, + QWidget *parent = nullptr) + : QLabel(parent), m_icon(icon), m_iconSize(24, 24) + { + setToolTip(tooltip); + // setFixedSize(32, 32); + connect(qApp, &QApplication::paletteChanged, this, + [this]() { update(); }); + } + + void setIcon(const QIcon &icon) + { + m_icon = ZIcon(icon); + update(); + } + + void setIconThemable(bool themable) + { + m_icon.setThemable(themable); + update(); + } + + void setIconSize(const QSize &size) + { + m_iconSize = size; + update(); + } + +protected: + void paintEvent(QPaintEvent *event) override + { + Q_UNUSED(event) + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + + QRect iconRect = rect(); + iconRect.setSize(m_iconSize); + iconRect.moveCenter(rect().center()); + + m_icon.paint(&painter, iconRect, palette()); + } + +private: + ZIcon m_icon; + QSize m_iconSize; +}; + enum class iDescriptorTool { Airplayer, - RealtimeScreen, + LiveScreen, MountDevImage, VirtualLocation, Restart, @@ -184,7 +246,7 @@ enum class iDescriptorTool { RecoveryMode, QueryMobileGestalt, DeveloperDiskImages, - WirelessPhotoImport, + WirelessGalleryImport, CableInfoWidget, /* TODO: to be implemented diff --git a/src/jailbrokenwidget.cpp b/src/jailbrokenwidget.cpp index 947c674..de1906e 100644 --- a/src/jailbrokenwidget.cpp +++ b/src/jailbrokenwidget.cpp @@ -19,8 +19,8 @@ #include "jailbrokenwidget.h" #include "appcontext.h" +#include "opensshterminalwidget.h" #include "responsiveqlabel.h" -#include "sshterminalwidget.h" #ifdef __linux__ #include "core/services/avahi/avahi_service.h" @@ -30,6 +30,7 @@ #include "iDescriptor-ui.h" #include "iDescriptor.h" +#include #include #include #include @@ -41,313 +42,107 @@ #include #include -// TODO: theming is broken JailbrokenWidget::JailbrokenWidget(QWidget *parent) : QWidget{parent} { - QHBoxLayout *mainLayout = new QHBoxLayout(this); - mainLayout->setContentsMargins(2, 2, 2, 2); - mainLayout->setSpacing(2); + QGridLayout *mainLayout = new QGridLayout(this); + mainLayout->setContentsMargins(10, 10, 10, 10); + mainLayout->setSpacing(10); - // Create responsive image label - ResponsiveQLabel *deviceImageLabel = new ResponsiveQLabel(this); - deviceImageLabel->setPixmap(QPixmap(":/resources/iphone.png")); - deviceImageLabel->setMinimumWidth(200); - deviceImageLabel->setSizePolicy(QSizePolicy::Ignored, - QSizePolicy::Expanding); - deviceImageLabel->setStyleSheet("background: transparent; border: none;"); + // Define all the tools you want to display + QList tools; + tools.append({"Open SSH Terminal", "Connect to your device via SSH", + ":/resources/icons/TablerDatabaseExport.png"}); + tools.append({"More Tools Coming", "New features will be added soon", + ":/resources/icons/TablerDatabaseExport.png", + false}); // Disabled placeholder - mainLayout->addWidget(deviceImageLabel, 1); + const int maxColumns = 3; + for (int i = 0; i < tools.size(); ++i) { + const auto &toolInfo = tools[i]; + ClickableWidget *toolWidget = createJailbreakTool(toolInfo); - // Connect to AppContext for device events - connect(AppContext::sharedInstance(), &AppContext::deviceAdded, this, - &JailbrokenWidget::onWiredDeviceAdded); - connect(AppContext::sharedInstance(), &AppContext::deviceRemoved, this, - &JailbrokenWidget::onWiredDeviceRemoved); + int row = i / maxColumns; + int col = i % maxColumns; + mainLayout->addWidget(toolWidget, row, col); + } -#ifdef __linux__ - m_wirelessProvider = new AvahiService(this); - connect(m_wirelessProvider, &AvahiService::deviceAdded, this, - &JailbrokenWidget::onWirelessDeviceAdded); - connect(m_wirelessProvider, &AvahiService::deviceRemoved, this, - &JailbrokenWidget::onWirelessDeviceRemoved); -#else - m_wirelessProvider = new DnssdService(this); - connect(m_wirelessProvider, &DnssdService::deviceAdded, this, - &JailbrokenWidget::onWirelessDeviceAdded); - connect(m_wirelessProvider, &DnssdService::deviceRemoved, this, - &JailbrokenWidget::onWirelessDeviceRemoved); -#endif - - // Right side: Device selection and Terminal - QWidget *rightContainer = new QWidget(); - rightContainer->setSizePolicy(QSizePolicy::Expanding, - QSizePolicy::Expanding); - rightContainer->setMinimumWidth(400); - QVBoxLayout *rightLayout = new QVBoxLayout(rightContainer); - rightLayout->setContentsMargins(15, 15, 15, 15); - rightLayout->setSpacing(10); - - setupDeviceSelectionUI(rightLayout); - - mainLayout->addWidget(rightContainer, 3); - - // Start scanning for wireless devices - m_wirelessProvider->startBrowsing(); - - // Populate initial devices - updateDeviceList(); + // Add a stretch to the last row and column to push everything to the + // top-left + mainLayout->setRowStretch(mainLayout->rowCount(), 1); + mainLayout->setColumnStretch(mainLayout->columnCount(), 1); } -void JailbrokenWidget::setupDeviceSelectionUI(QVBoxLayout *layout) +ClickableWidget * +JailbrokenWidget::createJailbreakTool(const JailbreakToolInfo &info) { - // Create scroll area for device selection - QScrollArea *scrollArea = new QScrollArea(); - scrollArea->setWidgetResizable(true); - scrollArea->setMinimumHeight(200); - scrollArea->setMaximumHeight(300); - scrollArea->setObjectName("devicescrollArea"); + ClickableWidget *b = new ClickableWidget(); + b->setCursor(Qt::PointingHandCursor); + b->setEnabled(info.enabled); - scrollArea->setStyleSheet("QWidget#devicescrollArea {border: none;}"); - QWidget *scrollContent = new QWidget(); - m_deviceLayout = new QVBoxLayout(scrollContent); - m_deviceLayout->setContentsMargins(5, 5, 5, 5); - m_deviceLayout->setSpacing(10); + // Use a theme-aware stylesheet for the background and hover effect + b->setStyleSheet("ClickableWidget {" + " border-radius: 8px;" + " padding: 10px;" + "}"); - // Button group for device selection - m_deviceButtonGroup = new QButtonGroup(this); - connect(m_deviceButtonGroup, - QOverload::of(&QButtonGroup::buttonClicked), - this, &JailbrokenWidget::onDeviceSelected); + QVBoxLayout *layout = new QVBoxLayout(b); - // Wired devices group - m_wiredDevicesGroup = new QGroupBox("Connected Devices"); - m_wiredDevicesLayout = new QVBoxLayout(m_wiredDevicesGroup); - m_deviceLayout->addWidget(m_wiredDevicesGroup); + // Icon (using the theme-aware ZIcon pattern) + // ZIconLabel *iconLabel = new ZIconLabel(); + ZIconLabel *iconLabel = new ZIconLabel(QIcon(), nullptr, this); - // Wireless devices group - m_wirelessDevicesGroup = new QGroupBox("Network Devices"); - m_wirelessDevicesLayout = new QVBoxLayout(m_wirelessDevicesGroup); - m_deviceLayout->addWidget(m_wirelessDevicesGroup); + // iconLabel->setAlignment(Qt::AlignCenter); + // ZIcon toolIcon(QIcon(info.iconPath)); - scrollArea->setWidget(scrollContent); - layout->addWidget(scrollArea); + // auto updateIcon = [b, iconLabel, toolIcon]() { + // iconLabel->setPixmap( + // toolIcon.getThemedPixmap(QSize(45, 45), b->palette())); + // }; + // updateIcon(); + // connect(qApp, &QApplication::paletteChanged, b, updateIcon); - // Info and connect button - m_infoLabel = new QLabel("Select a device to connect"); - layout->addWidget(m_infoLabel); + // Title + QLabel *titleLabel = new QLabel(info.title); + titleLabel->setAlignment(Qt::AlignCenter); + QFont titleFont = titleLabel->font(); + titleFont.setBold(true); + titleLabel->setFont(titleFont); - m_connectButton = new QPushButton("Open SSH Terminal"); - m_connectButton->setEnabled(false); - connect(m_connectButton, &QPushButton::clicked, this, - &JailbrokenWidget::onOpenSSHTerminal); - layout->addWidget(m_connectButton); + // Description (using a theme-aware palette color) + QLabel *descLabel = new QLabel(info.description); + descLabel->setWordWrap(true); + descLabel->setAlignment(Qt::AlignCenter); + descLabel->setStyleSheet("font-size: 12px;"); + + layout->addWidget(iconLabel, 0, Qt::AlignCenter); + layout->addWidget(titleLabel); + layout->addWidget(descLabel); + + // TODO: Connect the clicked signal to a slot + if (info.title == "Open SSH Terminal") { + iconLabel->setIcon(QIcon(":/resources/icons/BxBxsTerminal.png")); + + connect(b, &ClickableWidget::clicked, this, [this]() { + if (m_sshTerminalWidget) { + m_sshTerminalWidget->raise(); + m_sshTerminalWidget->activateWindow(); + return; + } + m_sshTerminalWidget = new OpenSSHTerminalWidget(); + m_sshTerminalWidget->setAttribute(Qt::WA_DeleteOnClose); + m_sshTerminalWidget->show(); + m_sshTerminalWidget->raise(); + m_sshTerminalWidget->activateWindow(); + connect(m_sshTerminalWidget, &QObject::destroyed, this, + [this]() { m_sshTerminalWidget = nullptr; }); + }); + } else if (info.title == "More Tools Coming") { + iconLabel->setIcon( + QIcon(":/resources/icons/IconParkTwotoneMoreTwo.png")); + } + iconLabel->setFixedSize(60, 60); + iconLabel->setIconSize(QSize(45, 45)); + return b; } -void JailbrokenWidget::updateDeviceList() -{ - // Clear existing devices - clearDeviceButtons(); - - // Add wired devices - QList wiredDevices = - AppContext::sharedInstance()->getAllDevices(); - for (iDescriptorDevice *device : wiredDevices) { - addWiredDevice(device); - } - - // Add wireless devices - QList wirelessDevices = - m_wirelessProvider->getNetworkDevices(); - for (const NetworkDevice &device : wirelessDevices) { - addWirelessDevice(device); - } -} - -void JailbrokenWidget::clearDeviceButtons() -{ - // Remove all buttons from button group and layouts - for (QAbstractButton *button : m_deviceButtonGroup->buttons()) { - m_deviceButtonGroup->removeButton(button); - button->deleteLater(); - } - - // Clear layouts - QLayoutItem *item; - while ((item = m_wiredDevicesLayout->takeAt(0)) != nullptr) { - delete item->widget(); - delete item; - } - while ((item = m_wirelessDevicesLayout->takeAt(0)) != nullptr) { - delete item->widget(); - delete item; - } -} - -void JailbrokenWidget::addWiredDevice(iDescriptorDevice *device) -{ - QString deviceName = QString::fromStdString(device->deviceInfo.deviceName); - QString udid = QString::fromStdString(device->udid); - QString displayText = QString("%1\n%2").arg(deviceName, udid); - - QRadioButton *radioButton = new QRadioButton(displayText); - radioButton->setProperty("deviceType", "wired"); - radioButton->setProperty("devicePointer", - QVariant::fromValue(static_cast(device))); - radioButton->setProperty("udid", udid); - - m_deviceButtonGroup->addButton(radioButton); - m_wiredDevicesLayout->addWidget(radioButton); -} - -void JailbrokenWidget::addWirelessDevice(const NetworkDevice &device) -{ - QString displayText = QString("%1\n%2").arg(device.name, device.address); - - QRadioButton *radioButton = new QRadioButton(displayText); - radioButton->setProperty("deviceType", "wireless"); - radioButton->setProperty("deviceAddress", device.address); - radioButton->setProperty("deviceName", device.name); - radioButton->setProperty("devicePort", device.port); - - m_deviceButtonGroup->addButton(radioButton); - m_wirelessDevicesLayout->addWidget(radioButton); -} - -void JailbrokenWidget::onWiredDeviceAdded(iDescriptorDevice *device) -{ - addWiredDevice(device); -} - -void JailbrokenWidget::onWiredDeviceRemoved(const std::string &udid) -{ - QString qudid = QString::fromStdString(udid); - - // Find and remove the corresponding radio button - for (QAbstractButton *button : m_deviceButtonGroup->buttons()) { - if (button->property("deviceType").toString() == "wired" && - button->property("udid").toString() == qudid) { - m_deviceButtonGroup->removeButton(button); - button->deleteLater(); - break; - } - } - - // Reset selection if this device was selected - if (m_selectedDeviceType == DeviceType::Wired && m_selectedWiredDevice && - m_selectedWiredDevice->udid == udid) { - resetSelection(); - } -} - -void JailbrokenWidget::onWirelessDeviceAdded(const NetworkDevice &device) -{ - addWirelessDevice(device); -} - -void JailbrokenWidget::onWirelessDeviceRemoved(const QString &deviceName) -{ - // Find and remove the corresponding radio button - for (QAbstractButton *button : m_deviceButtonGroup->buttons()) { - if (button->property("deviceType").toString() == "wireless" && - button->property("deviceName").toString() == deviceName) { - m_deviceButtonGroup->removeButton(button); - button->deleteLater(); - break; - } - } - - // Reset selection if this device was selected - if (m_selectedDeviceType == DeviceType::Wireless && - m_selectedNetworkDevice.name == deviceName) { - resetSelection(); - } -} - -void JailbrokenWidget::onDeviceSelected(QAbstractButton *button) -{ - QString deviceType = button->property("deviceType").toString(); - - if (deviceType == "wired") { - m_selectedDeviceType = DeviceType::Wired; - m_selectedWiredDevice = static_cast( - button->property("devicePointer").value()); - - if (m_selectedWiredDevice->deviceInfo.jailbroken) { - m_infoLabel->setText("Jailbroken device selected"); - } else { - m_infoLabel->setText( - "Device selected (detected as non-jailbroken)"); - } - } else if (deviceType == "wireless") { - m_selectedDeviceType = DeviceType::Wireless; - m_selectedNetworkDevice.name = - button->property("deviceName").toString(); - m_selectedNetworkDevice.address = - button->property("deviceAddress").toString(); - m_selectedNetworkDevice.port = button->property("devicePort").toUInt(); - - m_infoLabel->setText( - "Network device selected (jailbreak status unknown)"); - } - - m_connectButton->setEnabled(true); - m_connectButton->setText("Open SSH Terminal"); -} - -void JailbrokenWidget::resetSelection() -{ - m_selectedDeviceType = DeviceType::None; - m_selectedWiredDevice = nullptr; - m_selectedNetworkDevice = NetworkDevice{}; - m_connectButton->setEnabled(false); - m_infoLabel->setText("Select a device to connect"); - - // Uncheck all radio buttons - if (m_deviceButtonGroup->checkedButton()) { - m_deviceButtonGroup->setExclusive(false); - m_deviceButtonGroup->checkedButton()->setChecked(false); - m_deviceButtonGroup->setExclusive(true); - } -} - -void JailbrokenWidget::onOpenSSHTerminal() -{ - if (m_selectedDeviceType == DeviceType::None) { - m_infoLabel->setText("Please select a device first"); - return; - } - - // Prepare connection info - ConnectionInfo connectionInfo; - - if (m_selectedDeviceType == DeviceType::Wired) { - if (!m_selectedWiredDevice) { - m_infoLabel->setText("No wired device selected"); - return; - } - - connectionInfo.type = ConnectionType::Wired; - connectionInfo.deviceName = QString::fromStdString( - m_selectedWiredDevice->deviceInfo.deviceName); - connectionInfo.deviceUdid = - QString::fromStdString(m_selectedWiredDevice->udid); - connectionInfo.hostAddress = "127.0.0.1"; - connectionInfo.port = 22; - - } else if (m_selectedDeviceType == DeviceType::Wireless) { - connectionInfo.type = ConnectionType::Wireless; - connectionInfo.deviceName = m_selectedNetworkDevice.name; - connectionInfo.deviceUdid = ""; - connectionInfo.hostAddress = m_selectedNetworkDevice.address; - connectionInfo.port = m_selectedNetworkDevice.port; - } - - // Create and show SSH terminal widget in a new window - SSHTerminalWidget *sshTerminal = new SSHTerminalWidget(connectionInfo); - sshTerminal->setAttribute(Qt::WA_DeleteOnClose); - sshTerminal->show(); - sshTerminal->raise(); - sshTerminal->activateWindow(); -} - -JailbrokenWidget::~JailbrokenWidget() {} +JailbrokenWidget::~JailbrokenWidget() {} \ No newline at end of file diff --git a/src/jailbrokenwidget.h b/src/jailbrokenwidget.h index bc8fa51..1c37b17 100644 --- a/src/jailbrokenwidget.h +++ b/src/jailbrokenwidget.h @@ -27,7 +27,7 @@ #endif #include "iDescriptor.h" -#include "sshterminalwidget.h" +#include "opensshterminalwidget.h" #include #include #include @@ -36,7 +36,15 @@ #include #include -enum class DeviceType { None, Wired, Wireless }; +class ClickableWidget; + +// Define the struct here so it's available to the class declaration +struct JailbreakToolInfo { + QString title; + QString description; + QString iconPath; + bool enabled = true; +}; class JailbrokenWidget : public QWidget { @@ -47,53 +55,10 @@ public: ~JailbrokenWidget(); private slots: - void onOpenSSHTerminal(); - void onWiredDeviceAdded(iDescriptorDevice *device); - void onWiredDeviceRemoved(const std::string &udid); - void onWirelessDeviceAdded(const NetworkDevice &device); - void onWirelessDeviceRemoved(const QString &deviceName); - void onDeviceSelected(QAbstractButton *button); - private: - void setupDeviceSelectionUI(QVBoxLayout *layout); - void updateDeviceList(); - void clearDeviceButtons(); - void addWiredDevice(iDescriptorDevice *device); - void addWirelessDevice(const NetworkDevice &device); - void resetSelection(); - - QLabel *m_infoLabel; - QPushButton *m_connectButton; - - // Device selection UI - QVBoxLayout *m_deviceLayout; - QGroupBox *m_wiredDevicesGroup; - QGroupBox *m_wirelessDevicesGroup; - QVBoxLayout *m_wiredDevicesLayout; - QVBoxLayout *m_wirelessDevicesLayout; - QButtonGroup *m_deviceButtonGroup; - -#ifdef __linux__ - AvahiService *m_wirelessProvider = nullptr; -#else - DnssdService *m_wirelessProvider = nullptr; -#endif - - DeviceType m_selectedDeviceType = DeviceType::None; - iDescriptorDevice *m_selectedWiredDevice = nullptr; - NetworkDevice m_selectedNetworkDevice; - - // Legacy device pointer (kept for compatibility) - iDescriptorDevice *m_device = nullptr; - - // SSH components - ssh_session m_sshSession; - ssh_channel m_sshChannel; - QTimer *m_sshTimer; - QProcess *iproxyProcess = nullptr; - - bool m_sshConnected = false; - bool m_isInitialized = false; + // Helper function to create a tool widget + ClickableWidget *createJailbreakTool(const JailbreakToolInfo &info); + OpenSSHTerminalWidget *m_sshTerminalWidget = nullptr; }; #endif // JAILBROKENWIDGET_H \ No newline at end of file diff --git a/src/realtimescreenwidget.cpp b/src/livescreenwidget.cpp similarity index 84% rename from src/realtimescreenwidget.cpp rename to src/livescreenwidget.cpp index d3deace..e9bcc0b 100644 --- a/src/realtimescreenwidget.cpp +++ b/src/livescreenwidget.cpp @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -#include "realtimescreenwidget.h" +#include "livescreenwidget.h" #include "appcontext.h" #include "devdiskimagehelper.h" #include "devdiskmanager.h" @@ -31,13 +31,12 @@ #include #include #include -// todo: rename to livescreenwidget -RealtimeScreenWidget::RealtimeScreenWidget(iDescriptorDevice *device, - QWidget *parent) + +LiveScreenWidget::LiveScreenWidget(iDescriptorDevice *device, QWidget *parent) : QWidget{parent}, m_device(device), m_timer(nullptr), - m_shotrClient(nullptr), m_fps(50) + m_shotrClient(nullptr), m_fps(20) { - setWindowTitle("Real-time Screen - iDescriptor"); + setWindowTitle("Live Screen - iDescriptor"); unsigned int device_version = get_device_version(m_device->device); unsigned int deviceMajorVersion = (device_version >> 16) & 0xFF; @@ -71,20 +70,6 @@ RealtimeScreenWidget::RealtimeScreenWidget(iDescriptorDevice *device, m_statusLabel->setAlignment(Qt::AlignCenter); mainLayout->addWidget(m_statusLabel); - // FPS control - QHBoxLayout *controlLayout = new QHBoxLayout(); - QLabel *fpsLabel = new QLabel("Frame Rate:"); - QSpinBox *fpsSpinBox = new QSpinBox(); - fpsSpinBox->setRange(1, 50); - fpsSpinBox->setValue(m_fps); - fpsSpinBox->setSuffix(" FPS"); - fpsSpinBox->setMaximumWidth(100); - - controlLayout->addWidget(fpsLabel); - controlLayout->addWidget(fpsSpinBox); - controlLayout->addStretch(); - mainLayout->addLayout(controlLayout); - // Screenshot display m_imageLabel = new QLabel(); m_imageLabel->setMinimumSize(300, 600); @@ -96,15 +81,7 @@ RealtimeScreenWidget::RealtimeScreenWidget(iDescriptorDevice *device, m_timer = new QTimer(this); m_timer->setInterval(1000 / m_fps); connect(m_timer, &QTimer::timeout, this, - &RealtimeScreenWidget::updateScreenshot); - - connect(fpsSpinBox, QOverload::of(&QSpinBox::valueChanged), this, - [this](int value) { - m_fps = value; - if (m_timer && m_timer->isActive()) { - m_timer->setInterval(1000 / m_fps); - } - }); + &LiveScreenWidget::updateScreenshot); const bool initializeScreenshotServiceSuccess = initializeScreenshotService(false); @@ -135,7 +112,7 @@ RealtimeScreenWidget::RealtimeScreenWidget(iDescriptorDevice *device, helper->start(); } -RealtimeScreenWidget::~RealtimeScreenWidget() +LiveScreenWidget::~LiveScreenWidget() { if (m_timer) { m_timer->stop(); @@ -147,7 +124,7 @@ RealtimeScreenWidget::~RealtimeScreenWidget() } } -bool RealtimeScreenWidget::initializeScreenshotService(bool notify) +bool LiveScreenWidget::initializeScreenshotService(bool notify) { lockdownd_client_t lockdownClient = nullptr; lockdownd_service_descriptor_t service = nullptr; @@ -206,8 +183,7 @@ bool RealtimeScreenWidget::initializeScreenshotService(bool notify) } // Successfully initialized, start capturing - m_statusLabel->setText("Capturing at " + QString::number(m_fps) + - " FPS"); + m_statusLabel->setText("Capturing"); startCapturing(); return true; } catch (const std::exception &e) { @@ -226,7 +202,7 @@ bool RealtimeScreenWidget::initializeScreenshotService(bool notify) } } -void RealtimeScreenWidget::startCapturing() +void LiveScreenWidget::startCapturing() { if (!m_shotrClient) { qWarning() @@ -236,11 +212,11 @@ void RealtimeScreenWidget::startCapturing() if (m_timer) { m_timer->start(); - qDebug() << "Started capturing at" << m_fps << "FPS"; + qDebug() << "Started capturing"; } } -void RealtimeScreenWidget::updateScreenshot() +void LiveScreenWidget::updateScreenshot() { if (!m_shotrClient) { qWarning() << "Screenshot client not initialized"; diff --git a/src/realtimescreenwidget.h b/src/livescreenwidget.h similarity index 82% rename from src/realtimescreenwidget.h rename to src/livescreenwidget.h index 8d6f36a..19ebf4f 100644 --- a/src/realtimescreenwidget.h +++ b/src/livescreenwidget.h @@ -17,8 +17,8 @@ * along with this program. If not, see . */ -#ifndef REALTIMESCREEN_H -#define REALTIMESCREEN_H +#ifndef LIVESCREEN_H +#define LIVESCREEN_H #include "iDescriptor.h" #include @@ -27,13 +27,13 @@ #include #include -class RealtimeScreenWidget : public QWidget +class LiveScreenWidget : public QWidget { Q_OBJECT public: - explicit RealtimeScreenWidget(iDescriptorDevice *device, - QWidget *parent = nullptr); - ~RealtimeScreenWidget(); + explicit LiveScreenWidget(iDescriptorDevice *device, + QWidget *parent = nullptr); + ~LiveScreenWidget(); private: bool initializeScreenshotService(bool notify); @@ -50,4 +50,4 @@ private: signals: }; -#endif // REALTIMESCREEN_H +#endif // LIVESCREEN_H diff --git a/src/opensshterminalwidget.cpp b/src/opensshterminalwidget.cpp new file mode 100644 index 0000000..39dbeb6 --- /dev/null +++ b/src/opensshterminalwidget.cpp @@ -0,0 +1,354 @@ +/* + * iDescriptor: A free and open-source idevice management tool. + * + * Copyright (C) 2025 Uncore + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include "opensshterminalwidget.h" +#include "appcontext.h" +#include "responsiveqlabel.h" +#include "sshterminalwidget.h" + +#ifdef __linux__ +#include "core/services/avahi/avahi_service.h" +#else +#include "core/services/dnssd/dnssd_service.h" +#endif + +#include "iDescriptor-ui.h" +#include "iDescriptor.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// TODO: theming is broken +OpenSSHTerminalWidget::OpenSSHTerminalWidget(QWidget *parent) : QWidget{parent} +{ + QHBoxLayout *mainLayout = new QHBoxLayout(this); + mainLayout->setContentsMargins(2, 2, 2, 2); + mainLayout->setSpacing(2); + + // Create responsive image label + ResponsiveQLabel *deviceImageLabel = new ResponsiveQLabel(this); + deviceImageLabel->setPixmap(QPixmap(":/resources/iphone.png")); + deviceImageLabel->setMinimumWidth(200); + deviceImageLabel->setSizePolicy(QSizePolicy::Ignored, + QSizePolicy::Expanding); + deviceImageLabel->setStyleSheet("background: transparent; border: none;"); + + mainLayout->addWidget(deviceImageLabel, 1); + + // Connect to AppContext for device events + connect(AppContext::sharedInstance(), &AppContext::deviceAdded, this, + &OpenSSHTerminalWidget::onWiredDeviceAdded); + connect(AppContext::sharedInstance(), &AppContext::deviceRemoved, this, + &OpenSSHTerminalWidget::onWiredDeviceRemoved); + +#ifdef __linux__ + m_wirelessProvider = new AvahiService(this); + connect(m_wirelessProvider, &AvahiService::deviceAdded, this, + &OpenSSHTerminalWidget::onWirelessDeviceAdded); + connect(m_wirelessProvider, &AvahiService::deviceRemoved, this, + &OpenSSHTerminalWidget::onWirelessDeviceRemoved); +#else + m_wirelessProvider = new DnssdService(this); + connect(m_wirelessProvider, &DnssdService::deviceAdded, this, + &OpenSSHTerminalWidget::onWirelessDeviceAdded); + connect(m_wirelessProvider, &DnssdService::deviceRemoved, this, + &OpenSSHTerminalWidget::onWirelessDeviceRemoved); +#endif + + // Right side: Device selection and Terminal + QWidget *rightContainer = new QWidget(); + rightContainer->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Expanding); + rightContainer->setMinimumWidth(400); + QVBoxLayout *rightLayout = new QVBoxLayout(rightContainer); + rightLayout->setContentsMargins(15, 15, 15, 15); + rightLayout->setSpacing(10); + + setupDeviceSelectionUI(rightLayout); + + mainLayout->addWidget(rightContainer, 3); + + // Start scanning for wireless devices + m_wirelessProvider->startBrowsing(); + + // Populate initial devices + updateDeviceList(); +} + +void OpenSSHTerminalWidget::setupDeviceSelectionUI(QVBoxLayout *layout) +{ + // Create scroll area for device selection + QScrollArea *scrollArea = new QScrollArea(); + scrollArea->setWidgetResizable(true); + scrollArea->setMinimumHeight(200); + scrollArea->setMaximumHeight(300); + scrollArea->setObjectName("devicescrollArea"); + + scrollArea->setStyleSheet("QWidget#devicescrollArea {border: none;}"); + QWidget *scrollContent = new QWidget(); + m_deviceLayout = new QVBoxLayout(scrollContent); + m_deviceLayout->setContentsMargins(5, 5, 5, 5); + m_deviceLayout->setSpacing(10); + + // Button group for device selection + m_deviceButtonGroup = new QButtonGroup(this); + connect(m_deviceButtonGroup, + QOverload::of(&QButtonGroup::buttonClicked), + this, &OpenSSHTerminalWidget::onDeviceSelected); + + // Wired devices group + m_wiredDevicesGroup = new QGroupBox("Connected Devices"); + m_wiredDevicesLayout = new QVBoxLayout(m_wiredDevicesGroup); + m_deviceLayout->addWidget(m_wiredDevicesGroup); + + // Wireless devices group + m_wirelessDevicesGroup = new QGroupBox("Network Devices"); + m_wirelessDevicesLayout = new QVBoxLayout(m_wirelessDevicesGroup); + m_deviceLayout->addWidget(m_wirelessDevicesGroup); + + scrollArea->setWidget(scrollContent); + layout->addWidget(scrollArea); + + // Info and connect button + m_infoLabel = new QLabel("Select a device to connect"); + layout->addWidget(m_infoLabel); + + m_connectButton = new QPushButton("Open SSH Terminal"); + m_connectButton->setMaximumWidth(m_connectButton->sizeHint().width()); + m_connectButton->setEnabled(false); + connect(m_connectButton, &QPushButton::clicked, this, + &OpenSSHTerminalWidget::onOpenSSHTerminal); + layout->addWidget(m_connectButton, 0, Qt::AlignCenter); +} + +void OpenSSHTerminalWidget::updateDeviceList() +{ + // Clear existing devices + clearDeviceButtons(); + + // Add wired devices + QList wiredDevices = + AppContext::sharedInstance()->getAllDevices(); + for (iDescriptorDevice *device : wiredDevices) { + addWiredDevice(device); + } + + // Add wireless devices + QList wirelessDevices = + m_wirelessProvider->getNetworkDevices(); + for (const NetworkDevice &device : wirelessDevices) { + addWirelessDevice(device); + } +} + +void OpenSSHTerminalWidget::clearDeviceButtons() +{ + // Remove all buttons from button group and layouts + for (QAbstractButton *button : m_deviceButtonGroup->buttons()) { + m_deviceButtonGroup->removeButton(button); + button->deleteLater(); + } + + // Clear layouts + QLayoutItem *item; + while ((item = m_wiredDevicesLayout->takeAt(0)) != nullptr) { + delete item->widget(); + delete item; + } + while ((item = m_wirelessDevicesLayout->takeAt(0)) != nullptr) { + delete item->widget(); + delete item; + } +} + +void OpenSSHTerminalWidget::addWiredDevice(iDescriptorDevice *device) +{ + QString deviceName = QString::fromStdString(device->deviceInfo.deviceName); + QString udid = QString::fromStdString(device->udid); + QString displayText = QString("%1\n%2").arg(deviceName, udid); + + QRadioButton *radioButton = new QRadioButton(displayText); + radioButton->setProperty("deviceType", "wired"); + radioButton->setProperty("devicePointer", + QVariant::fromValue(static_cast(device))); + radioButton->setProperty("udid", udid); + + m_deviceButtonGroup->addButton(radioButton); + m_wiredDevicesLayout->addWidget(radioButton); +} + +void OpenSSHTerminalWidget::addWirelessDevice(const NetworkDevice &device) +{ + QString displayText = QString("%1\n%2").arg(device.name, device.address); + + QRadioButton *radioButton = new QRadioButton(displayText); + radioButton->setProperty("deviceType", "wireless"); + radioButton->setProperty("deviceAddress", device.address); + radioButton->setProperty("deviceName", device.name); + radioButton->setProperty("devicePort", device.port); + + m_deviceButtonGroup->addButton(radioButton); + m_wirelessDevicesLayout->addWidget(radioButton); +} + +void OpenSSHTerminalWidget::onWiredDeviceAdded(iDescriptorDevice *device) +{ + addWiredDevice(device); +} + +void OpenSSHTerminalWidget::onWiredDeviceRemoved(const std::string &udid) +{ + QString qudid = QString::fromStdString(udid); + + // Find and remove the corresponding radio button + for (QAbstractButton *button : m_deviceButtonGroup->buttons()) { + if (button->property("deviceType").toString() == "wired" && + button->property("udid").toString() == qudid) { + m_deviceButtonGroup->removeButton(button); + button->deleteLater(); + break; + } + } + + // Reset selection if this device was selected + if (m_selectedDeviceType == DeviceType::Wired && m_selectedWiredDevice && + m_selectedWiredDevice->udid == udid) { + resetSelection(); + } +} + +void OpenSSHTerminalWidget::onWirelessDeviceAdded(const NetworkDevice &device) +{ + addWirelessDevice(device); +} + +void OpenSSHTerminalWidget::onWirelessDeviceRemoved(const QString &deviceName) +{ + // Find and remove the corresponding radio button + for (QAbstractButton *button : m_deviceButtonGroup->buttons()) { + if (button->property("deviceType").toString() == "wireless" && + button->property("deviceName").toString() == deviceName) { + m_deviceButtonGroup->removeButton(button); + button->deleteLater(); + break; + } + } + + // Reset selection if this device was selected + if (m_selectedDeviceType == DeviceType::Wireless && + m_selectedNetworkDevice.name == deviceName) { + resetSelection(); + } +} + +void OpenSSHTerminalWidget::onDeviceSelected(QAbstractButton *button) +{ + QString deviceType = button->property("deviceType").toString(); + + if (deviceType == "wired") { + m_selectedDeviceType = DeviceType::Wired; + m_selectedWiredDevice = static_cast( + button->property("devicePointer").value()); + + if (m_selectedWiredDevice->deviceInfo.jailbroken) { + m_infoLabel->setText("Jailbroken device selected"); + } else { + m_infoLabel->setText( + "Device selected (detected as non-jailbroken)"); + } + } else if (deviceType == "wireless") { + m_selectedDeviceType = DeviceType::Wireless; + m_selectedNetworkDevice.name = + button->property("deviceName").toString(); + m_selectedNetworkDevice.address = + button->property("deviceAddress").toString(); + m_selectedNetworkDevice.port = button->property("devicePort").toUInt(); + + m_infoLabel->setText( + "Network device selected (jailbreak status unknown)"); + } + + m_connectButton->setEnabled(true); + m_connectButton->setText("Open SSH Terminal"); +} + +void OpenSSHTerminalWidget::resetSelection() +{ + m_selectedDeviceType = DeviceType::None; + m_selectedWiredDevice = nullptr; + m_selectedNetworkDevice = NetworkDevice{}; + m_connectButton->setEnabled(false); + m_infoLabel->setText("Select a device to connect"); + + // Uncheck all radio buttons + if (m_deviceButtonGroup->checkedButton()) { + m_deviceButtonGroup->setExclusive(false); + m_deviceButtonGroup->checkedButton()->setChecked(false); + m_deviceButtonGroup->setExclusive(true); + } +} + +void OpenSSHTerminalWidget::onOpenSSHTerminal() +{ + if (m_selectedDeviceType == DeviceType::None) { + m_infoLabel->setText("Please select a device first"); + return; + } + + // Prepare connection info + ConnectionInfo connectionInfo; + + if (m_selectedDeviceType == DeviceType::Wired) { + if (!m_selectedWiredDevice) { + m_infoLabel->setText("No wired device selected"); + return; + } + + connectionInfo.type = ConnectionType::Wired; + connectionInfo.deviceName = QString::fromStdString( + m_selectedWiredDevice->deviceInfo.deviceName); + connectionInfo.deviceUdid = + QString::fromStdString(m_selectedWiredDevice->udid); + connectionInfo.hostAddress = "127.0.0.1"; + connectionInfo.port = 22; + + } else if (m_selectedDeviceType == DeviceType::Wireless) { + connectionInfo.type = ConnectionType::Wireless; + connectionInfo.deviceName = m_selectedNetworkDevice.name; + connectionInfo.deviceUdid = ""; + connectionInfo.hostAddress = m_selectedNetworkDevice.address; + connectionInfo.port = m_selectedNetworkDevice.port; + } + + // Create and show SSH terminal widget in a new window + SSHTerminalWidget *sshTerminal = new SSHTerminalWidget(connectionInfo); + sshTerminal->setAttribute(Qt::WA_DeleteOnClose); + sshTerminal->show(); + sshTerminal->raise(); + sshTerminal->activateWindow(); +} + +OpenSSHTerminalWidget::~OpenSSHTerminalWidget() {} diff --git a/src/opensshterminalwidget.h b/src/opensshterminalwidget.h new file mode 100644 index 0000000..7a04b21 --- /dev/null +++ b/src/opensshterminalwidget.h @@ -0,0 +1,99 @@ +/* + * iDescriptor: A free and open-source idevice management tool. + * + * Copyright (C) 2025 Uncore + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef OPENSSHTERMINALWIDGET_H +#define OPENSSHTERMINALWIDGET_H + +#include +#ifdef __linux__ +#include "core/services/avahi/avahi_service.h" +#else +#include "core/services/dnssd/dnssd_service.h" +#endif + +#include "iDescriptor.h" +#include "sshterminalwidget.h" +#include +#include +#include +#include +#include +#include +#include + +enum class DeviceType { None, Wired, Wireless }; + +class OpenSSHTerminalWidget : public QWidget +{ + Q_OBJECT +public: + explicit OpenSSHTerminalWidget(QWidget *parent = nullptr); + ~OpenSSHTerminalWidget(); +private slots: + void onOpenSSHTerminal(); + void onWiredDeviceAdded(iDescriptorDevice *device); + void onWiredDeviceRemoved(const std::string &udid); + void onWirelessDeviceAdded(const NetworkDevice &device); + void onWirelessDeviceRemoved(const QString &deviceName); + void onDeviceSelected(QAbstractButton *button); + +private: + void setupDeviceSelectionUI(QVBoxLayout *layout); + void updateDeviceList(); + void clearDeviceButtons(); + void addWiredDevice(iDescriptorDevice *device); + void addWirelessDevice(const NetworkDevice &device); + void resetSelection(); + + QLabel *m_infoLabel; + QPushButton *m_connectButton; + + // Device selection UI + QVBoxLayout *m_deviceLayout; + QGroupBox *m_wiredDevicesGroup; + QGroupBox *m_wirelessDevicesGroup; + QVBoxLayout *m_wiredDevicesLayout; + QVBoxLayout *m_wirelessDevicesLayout; + QButtonGroup *m_deviceButtonGroup; + +#ifdef __linux__ + AvahiService *m_wirelessProvider = nullptr; +#else + DnssdService *m_wirelessProvider = nullptr; +#endif + + DeviceType m_selectedDeviceType = DeviceType::None; + iDescriptorDevice *m_selectedWiredDevice = nullptr; + NetworkDevice m_selectedNetworkDevice; + + // Legacy device pointer (kept for compatibility) + iDescriptorDevice *m_device = nullptr; + + // SSH components + ssh_session m_sshSession; + ssh_channel m_sshChannel; + QTimer *m_sshTimer; + QProcess *iproxyProcess = nullptr; + + bool m_sshConnected = false; + bool m_isInitialized = false; +signals: +}; + +#endif // OPENSSHTERMINALWIDGET_H diff --git a/src/photoimportdialog.cpp b/src/photoimportdialog.cpp index 8a7e8d9..89da104 100644 --- a/src/photoimportdialog.cpp +++ b/src/photoimportdialog.cpp @@ -135,13 +135,14 @@ void PhotoImportDialog::onServerStarted() QString localIP = getLocalIP(); int port = m_httpServer->getPort(); QString jsonFileName = m_httpServer->getJsonFileName(); - - generateQRCode( - QString("http://192.168.1.149:5173/?local=%1&port=%2&file=%3") - // QString("https://uncor3.github.io/test-2?local=%1&port=%2&file=%3") + QString url = + QString("https://idescriptor.github.io/import?local=%1&port=%2&file=%3") .arg(localIP) .arg(port) - .arg(jsonFileName)); + .arg(jsonFileName); + qDebug() << "Server url" << url; + + generateQRCode(url); instructionLabel->setText( QString("Server started at %1:%2\n\n1. Scan the QR code to open the " diff --git a/src/photomodel.cpp b/src/photomodel.cpp index 00ea1ef..608c7c7 100644 --- a/src/photomodel.cpp +++ b/src/photomodel.cpp @@ -44,8 +44,8 @@ PhotoModel::PhotoModel(iDescriptorDevice *device, QObject *parent) "/photo_thumbs"; QDir().mkpath(m_cacheDir); - // Configure memory cache (50MB limit - much more reasonable) - m_thumbnailCache.setMaxCost(50 * 1024 * 1024); + // Configure memory cache (150MB limit) + m_thumbnailCache.setMaxCost(150 * 1024 * 1024); connect(this, &PhotoModel::thumbnailNeedsToBeLoaded, this, &PhotoModel::requestThumbnail, Qt::QueuedConnection); @@ -55,6 +55,7 @@ PhotoModel::PhotoModel(iDescriptorDevice *device, QObject *parent) PhotoModel::~PhotoModel() { + qDebug() << "PhotoModel destructor called"; // Clean up any active watchers for (auto *watcher : m_activeLoaders.values()) { if (watcher) { @@ -64,6 +65,9 @@ PhotoModel::~PhotoModel() } } m_activeLoaders.clear(); + m_loadingPaths.clear(); + m_thumbnailCache.clear(); + QDir(m_cacheDir).removeRecursively(); } QPixmap PhotoModel::generateVideoThumbnail(iDescriptorDevice *device, @@ -262,12 +266,16 @@ void PhotoModel::requestThumbnail(int index) // Remove from loading sets m_loadingPaths.remove(filePath); m_activeLoaders.remove(cacheKey); - + // scale down and store in cache if (!thumbnail.isNull()) { // Cache the thumbnail (both memory and disk) int cost = thumbnail.width() * thumbnail.height() * 4; - m_thumbnailCache.insert(cacheKey, new QPixmap(thumbnail), - cost); + m_thumbnailCache.insert( + cacheKey, + new QPixmap(thumbnail.scaled(m_thumbnailSize, + Qt::KeepAspectRatio, + Qt::SmoothTransformation)), + cost); // Find the model index and emit dataChanged for (int i = 0; i < m_photos.size(); ++i) { @@ -714,6 +722,20 @@ PhotoInfo::FileType PhotoModel::determineFileType(const QString &fileName) const void PhotoModel::setAlbumPath(const QString &albumPath) { if (m_albumPath != albumPath) { + // Clear cache when switching albums to prevent memory buildup + clearCache(); + + // Cancel any pending thumbnail requests + for (auto *watcher : m_activeLoaders.values()) { + if (watcher) { + watcher->cancel(); + watcher->waitForFinished(); + watcher->deleteLater(); + } + } + m_activeLoaders.clear(); + m_loadingPaths.clear(); + m_albumPath = albumPath; populatePhotoPaths(); } diff --git a/src/sponsorwidget.cpp b/src/sponsorwidget.cpp index 4cd1fdc..1754afd 100644 --- a/src/sponsorwidget.cpp +++ b/src/sponsorwidget.cpp @@ -26,6 +26,7 @@ SponsorWidget::SponsorWidget(QWidget *parent) : QWidget(parent) { setLayout(new QVBoxLayout(this)); QLabel *sponsorTitle = new QLabel("Would you like to sponsor us?"); + sponsorTitle->setStyleSheet("font-weight: bold; font-size: 16pt;"); sponsorTitle->setAlignment(Qt::AlignCenter); QLabel *sponsorDesc = @@ -33,6 +34,7 @@ SponsorWidget::SponsorWidget(QWidget *parent) : QWidget(parent) "And in order to keep it that way, we rely on donations. " "Consider becoming a sponsor to support " "and promote your app/brand here"); + sponsorDesc->setStyleSheet("font-size: 10pt;"); sponsorDesc->setWordWrap(true); layout()->addWidget(sponsorTitle); layout()->addWidget(sponsorDesc); diff --git a/src/toolboxwidget.cpp b/src/toolboxwidget.cpp index d78d07b..a1d2f91 100644 --- a/src/toolboxwidget.cpp +++ b/src/toolboxwidget.cpp @@ -28,10 +28,10 @@ #ifndef __APPLE__ #include "ifusewidget.h" #endif +#include "livescreenwidget.h" #include "querymobilegestaltwidget.h" -#include "realtimescreenwidget.h" #include "virtuallocationwidget.h" -#include "wirelessphotoimportwidget.h" +#include "wirelessgalleryimportwidget.h" #include #include #include @@ -138,17 +138,15 @@ void ToolboxWidget::setupUI() {iDescriptorTool::Airplayer, "Cast your device screen ", false, ""}); mainToolWidgets.append({iDescriptorTool::VirtualLocation, "Simulate GPS location on your device", true, ""}); - mainToolWidgets.append( - {iDescriptorTool::RealtimeScreen, - "View device screen in real-time (wired connection required)", true, - ""}); + mainToolWidgets.append({iDescriptorTool::LiveScreen, + "View device screen in real-time", true, ""}); mainToolWidgets.append({iDescriptorTool::QueryMobileGestalt, "Query device hardware information", true, ""}); mainToolWidgets.append({iDescriptorTool::DeveloperDiskImages, "Manage developer disk images", false, ""}); mainToolWidgets.append( - {iDescriptorTool::WirelessPhotoImport, - "Import photos wirelessly to your iDevice (requires Shortcut app)", + {iDescriptorTool::WirelessGalleryImport, + "Import photos wirelessly to your iDevice (requires Shortcuts app)", false, ""}); #ifndef __APPLE__ mainToolWidgets.append({iDescriptorTool::iFuse, @@ -222,59 +220,75 @@ ClickableWidget *ToolboxWidget::createToolbox(iDescriptorTool tool, QVBoxLayout *layout = new QVBoxLayout(b); - // Icon - QLabel *iconLabel = new QLabel(); - QIcon icon = - // TODO:icons - this->style()->standardIcon( - static_cast(QStyle::SP_DialogOkButton)); - iconLabel->setPixmap(icon.pixmap(32, 32)); - iconLabel->setAlignment(Qt::AlignCenter); + ZIconLabel *icon = new ZIconLabel(QIcon(), nullptr, this); QString title; switch (tool) { case iDescriptorTool::Airplayer: title = "Airplayer"; + icon->setIcon( + QIcon(":/resources/icons/MaterialSymbolsLightAirplayOutline.png")); break; - case iDescriptorTool::RealtimeScreen: - title = "Realtime Screen"; + case iDescriptorTool::LiveScreen: + title = "Live Screen"; + icon->setIcon(QIcon(":/resources/icons/PepiconsPrintCellphoneEye.png")); break; case iDescriptorTool::MountDevImage: title = "Mount Dev Image"; + icon->setIcon(QIcon(":/resources/icons/MdiDisk.png")); break; case iDescriptorTool::VirtualLocation: title = "Virtual Location"; + icon->setIcon( + QIcon(":/resources/icons/MaterialSymbolsLocationOnOutline.png")); break; case iDescriptorTool::Restart: title = "Restart"; + icon->setIcon(QIcon(":/resources/icons/IcTwotoneRestartAlt.png")); break; case iDescriptorTool::Shutdown: title = "Shutdown"; + icon->setIcon(QIcon(":/resources/icons/IcOutlinePowerSettingsNew.png")); break; case iDescriptorTool::RecoveryMode: title = "Recovery Mode"; + icon->setIcon(QIcon(":/resources/icons/HugeiconsWrench01.png")); break; case iDescriptorTool::QueryMobileGestalt: title = "Query Mobile Gestalt"; + icon->setIcon( + QIcon(":/resources/icons/" + "StreamlineProgrammingBrowserSearchSearchWindowGlassAppCod" + "eProgrammingQueryFindMagnifyingApps.png")); break; case iDescriptorTool::DeveloperDiskImages: title = "Dev Disk Images"; + icon->setIcon(QIcon(":/resources/icons/TablerDatabaseExport.png")); break; - case iDescriptorTool::WirelessPhotoImport: - title = "Wireless Photo Import"; + case iDescriptorTool::WirelessGalleryImport: + title = "Wireless Gallery Import"; + icon->setIcon( + QIcon(":/resources/icons/MaterialSymbolsAndroidWifi3BarPlus.png")); break; case iDescriptorTool::iFuse: title = "iFuse Mount"; + icon->setIcon(QIcon(":/resources/icons/fuse.png")); + icon->setIconThemable(false); break; case iDescriptorTool::CableInfoWidget: title = "Cable Info"; + icon->setIcon( + QIcon(":/resources/icons/MaterialSymbolsLightCableRounded.png")); break; case iDescriptorTool::NetworkDevices: title = "Network Devices"; + icon->setIcon(QIcon( + ":/resources/icons/StreamlineUltimateMultipleUsersNetwork.png")); break; default: title = "Unknown Tool"; break; } + // Title QLabel *titleLabel = new QLabel(title); titleLabel->setAlignment(Qt::AlignCenter); @@ -284,8 +298,10 @@ ClickableWidget *ToolboxWidget::createToolbox(iDescriptorTool tool, descLabel->setWordWrap(true); descLabel->setAlignment(Qt::AlignCenter); descLabel->setStyleSheet("color: #666; font-size: 12px;"); + icon->setFixedSize(60, 60); + icon->setIconSize(QSize(45, 45)); - layout->addWidget(iconLabel); + layout->addWidget(icon, 0, Qt::AlignCenter); layout->addWidget(titleLabel); layout->addWidget(descLabel); @@ -321,8 +337,6 @@ void ToolboxWidget::updateDeviceList() } } - // After rebuilding the list, explicitly sync the UI to match the - // state from AppContext. This avoids creating a feedback loop. onCurrentDeviceChanged( AppContext::sharedInstance()->getCurrentDeviceSelection()); @@ -410,11 +424,10 @@ void ToolboxWidget::onToolboxClicked(iDescriptorTool tool) } } break; - case iDescriptorTool::RealtimeScreen: { - RealtimeScreenWidget *realtimeScreen = - new RealtimeScreenWidget(m_currentDevice); - realtimeScreen->setAttribute(Qt::WA_DeleteOnClose); - realtimeScreen->show(); + case iDescriptorTool::LiveScreen: { + LiveScreenWidget *liveScreen = new LiveScreenWidget(m_currentDevice); + liveScreen->setAttribute(Qt::WA_DeleteOnClose); + liveScreen->show(); } break; case iDescriptorTool::RecoveryMode: { // Handle entering recovery mode @@ -498,18 +511,18 @@ void ToolboxWidget::onToolboxClicked(iDescriptorTool tool) m_devDiskImagesWidget->activateWindow(); } } break; - case iDescriptorTool::WirelessPhotoImport: { - if (!m_wirelessPhotoImportWidget) { - m_wirelessPhotoImportWidget = new WirelessPhotoImportWidget(); - connect(m_wirelessPhotoImportWidget, &QObject::destroyed, this, - [this]() { m_wirelessPhotoImportWidget = nullptr; }); - m_wirelessPhotoImportWidget->setAttribute(Qt::WA_DeleteOnClose); - m_wirelessPhotoImportWidget->setWindowFlag(Qt::Window); - // m_wirelessPhotoImportWidget->resize(800, 600); - m_wirelessPhotoImportWidget->show(); + case iDescriptorTool::WirelessGalleryImport: { + if (!m_wirelessGalleryImportWidget) { + m_wirelessGalleryImportWidget = new WirelessGalleryImportWidget(); + connect(m_wirelessGalleryImportWidget, &QObject::destroyed, this, + [this]() { m_wirelessGalleryImportWidget = nullptr; }); + m_wirelessGalleryImportWidget->setAttribute(Qt::WA_DeleteOnClose); + m_wirelessGalleryImportWidget->setWindowFlag(Qt::Window); + // m_wirelessGalleryImportWidget->resize(800, 600); + m_wirelessGalleryImportWidget->show(); } else { - m_wirelessPhotoImportWidget->raise(); - m_wirelessPhotoImportWidget->activateWindow(); + m_wirelessGalleryImportWidget->raise(); + m_wirelessGalleryImportWidget->activateWindow(); } } break; #ifndef __APPLE__ diff --git a/src/toolboxwidget.h b/src/toolboxwidget.h index cd5cc83..1aa65b6 100644 --- a/src/toolboxwidget.h +++ b/src/toolboxwidget.h @@ -26,7 +26,7 @@ #include "iDescriptor-ui.h" #include "iDescriptor.h" #include "networkdeviceswidget.h" -#include "wirelessphotoimportwidget.h" +#include "wirelessgalleryimportwidget.h" #include #include #include @@ -75,7 +75,7 @@ private: #ifndef __APPLE__ iFuseWidget *m_ifuseWidget = nullptr; #endif - WirelessPhotoImportWidget *m_wirelessPhotoImportWidget = nullptr; + WirelessGalleryImportWidget *m_wirelessGalleryImportWidget = nullptr; signals: }; diff --git a/src/welcomewidget.cpp b/src/welcomewidget.cpp index 338ffb0..ef22c9b 100644 --- a/src/welcomewidget.cpp +++ b/src/welcomewidget.cpp @@ -35,7 +35,7 @@ void WelcomeWidget::setupUI() { // Main layout with proper spacing and margins m_mainLayout = new QVBoxLayout(this); - m_mainLayout->setContentsMargins(0, 0, 0, 0); + m_mainLayout->setContentsMargins(0, 10, 0, 0); m_mainLayout->setSpacing(0); // Add top stretch diff --git a/src/wirelessgalleryimportwidget.cpp b/src/wirelessgalleryimportwidget.cpp index cc8dcbd..294e06c 100644 --- a/src/wirelessgalleryimportwidget.cpp +++ b/src/wirelessgalleryimportwidget.cpp @@ -87,7 +87,7 @@ void WirelessGalleryImportWidget::setupUI() leftLayout->addWidget(m_scrollArea, 1); // Import button - m_importButton = new QPushButton("Import Photos to iOS"); + m_importButton = new QPushButton("Import to Gallery"); m_importButton->setEnabled(false); connect(m_importButton, &QPushButton::clicked, this, &WirelessGalleryImportWidget::onImportPhotos);