Skip to content

Commit 07723b2

Browse files
pppanghu77deepin-bot[bot]
authored andcommitted
fix: [mobile] add mobile ui
add mobile ui Log: add mobile ui Task: https://pms.uniontech.com/story-view-35783.html
1 parent 1ec58f6 commit 07723b2

19 files changed

+412
-57
lines changed

src/lib/cooperation/core/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ list(APPEND LINKLIBS cpplogging)
9494
list(APPEND LINKLIBS sessionmanager)
9595
list(APPEND LINKLIBS sslconf)
9696

97+
find_library(QRENCODE_LIBRARY qrencode)
98+
if(NOT QRENCODE_LIBRARY)
99+
message(FATAL_ERROR "libqrencode not found. Please install it.")
100+
endif()
101+
97102
add_library(${PROJECT_NAME}
98103
${PLUGIN_FILES}
99104
${BUSS_FILES}
@@ -136,6 +141,7 @@ target_link_libraries(${PROJECT_NAME}
136141
Qt${QT_VERSION_MAJOR}::Concurrent
137142
QtZeroConf
138143
CuteIPC
144+
qrencode
139145
)
140146

141147
target_link_libraries(${PROJECT_NAME}

src/lib/cooperation/core/discover/deviceinfo.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,16 @@ DeviceInfo::LinkMode DeviceInfo::linkMode() const
113113
return d->linkMode;
114114
}
115115

116+
void DeviceInfo::setDeviceType(DeviceInfo::DeviceType type)
117+
{
118+
d->deviceType = type;
119+
}
120+
121+
DeviceInfo::DeviceType DeviceInfo::deviceType() const
122+
{
123+
return d->deviceType;
124+
}
125+
116126
void DeviceInfo::setPeripheralShared(bool b)
117127
{
118128
d->isPeripheralShared = b;

src/lib/cooperation/core/discover/deviceinfo.h

+8
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class DeviceInfo
4545
LeftMode
4646
};
4747

48+
enum class DeviceType {
49+
PC,
50+
Mobile
51+
};
52+
4853
explicit DeviceInfo();
4954
explicit DeviceInfo(const QString &ip, const QString &name);
5055
explicit DeviceInfo(const DeviceInfo &other);
@@ -73,6 +78,9 @@ class DeviceInfo
7378
void setLinkMode(LinkMode mode);
7479
LinkMode linkMode() const;
7580

81+
void setDeviceType(DeviceInfo::DeviceType type);
82+
DeviceInfo::DeviceType deviceType() const;
83+
7684
void setPeripheralShared(bool b);
7785
bool peripheralShared() const;
7886

src/lib/cooperation/core/discover/deviceinfo_p.h

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class DeviceInfoPrivate
2626
DeviceInfo::TransMode transMode { DeviceInfo::TransMode::Everyone };
2727
DeviceInfo::DiscoveryMode discoveryMode { DeviceInfo::DiscoveryMode::Everyone };
2828
DeviceInfo::LinkMode linkMode { DeviceInfo::LinkMode::RightMode };
29+
DeviceInfo::DeviceType deviceType { DeviceInfo::DeviceType::PC };
2930
};
3031

3132
} // namespace cooperation_core

src/lib/cooperation/core/global_defines.h

+39-27
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
#define TYPE_DEFINES_H
33

44
#if defined(_WIN32) || defined(_WIN64)
5-
#include <QMainWindow>
6-
#include <QApplication>
7-
#include <QDialog>
8-
#include <QPushButton>
9-
#include <QToolButton>
10-
#include <QLabel>
11-
#include <QLineEdit>
12-
#include <QCheckBox>
13-
#include <QPainter>
14-
#include <QMouseEvent>
5+
# include <QMainWindow>
6+
# include <QApplication>
7+
# include <QDialog>
8+
# include <QPushButton>
9+
# include <QToolButton>
10+
# include <QLabel>
11+
# include <QLineEdit>
12+
# include <QCheckBox>
13+
# include <QPainter>
14+
# include <QMouseEvent>
1515
typedef QMainWindow CooperationMainWindow;
1616
typedef QDialog CooperationDialog;
1717
typedef QToolButton CooperationIconButton;
@@ -21,21 +21,26 @@ typedef QToolButton CooperationFloatingEdit;
2121
typedef QLabel CooperationSpinner;
2222
typedef QLineEdit CooperationLineEdit;
2323
typedef QLabel CooperationLabel;
24-
class CooperationSwitchButton : public QPushButton {
24+
class CooperationSwitchButton : public QPushButton
25+
{
2526
public:
26-
CooperationSwitchButton(QWidget *parent = nullptr) : QPushButton(parent){
27+
CooperationSwitchButton(QWidget *parent = nullptr)
28+
: QPushButton(parent)
29+
{
2730
setFixedSize(50, 24);
2831
setCheckable(true);
2932
setDefault(false);
3033
}
34+
3135
protected:
32-
void paintEvent(QPaintEvent *event) override {
36+
void paintEvent(QPaintEvent *event) override
37+
{
3338
Q_UNUSED(event);
3439
QPainter painter(this);
3540
painter.setRenderHint(QPainter::Antialiasing, true);
3641
int x = 0;
3742
QColor color("#000000");
38-
if(isChecked()){
43+
if (isChecked()) {
3944
x = 20;
4045
color.setNamedColor("#0098FF");
4146
}
@@ -46,7 +51,8 @@ class CooperationSwitchButton : public QPushButton {
4651
painter.setBrush(color);
4752
painter.drawRoundedRect(rect, 8, 8);
4853
}
49-
void keyPressEvent(QKeyEvent *event) override {
54+
void keyPressEvent(QKeyEvent *event) override
55+
{
5056
if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) {
5157
event->ignore();
5258
return;
@@ -55,17 +61,17 @@ class CooperationSwitchButton : public QPushButton {
5561
}
5662
};
5763
#else
58-
#include <DMainWindow>
59-
#include <DAbstractDialog>
60-
#include <DSwitchButton>
61-
#include <DSuggestButton>
62-
#include <DSearchEdit>
63-
#include <DDialog>
64-
#include <DSpinner>
65-
#include <DIconButton>
66-
#include <DFloatingButton>
67-
#include <DLineEdit>
68-
#include <DLabel>
64+
# include <DMainWindow>
65+
# include <DAbstractDialog>
66+
# include <DSwitchButton>
67+
# include <DSuggestButton>
68+
# include <DSearchEdit>
69+
# include <DDialog>
70+
# include <DSpinner>
71+
# include <DIconButton>
72+
# include <DFloatingButton>
73+
# include <DLineEdit>
74+
# include <DLabel>
6975
typedef DTK_WIDGET_NAMESPACE::DDialog CooperationDialog;
7076
typedef DTK_WIDGET_NAMESPACE::DSpinner CooperationSpinner;
7177
typedef DTK_WIDGET_NAMESPACE::DMainWindow CooperationMainWindow;
@@ -127,7 +133,13 @@ inline const char MainAppName[] { "dde-cooperation" };
127133
// Setting menu action list
128134
enum MenuAction {
129135
kSettings,
130-
kDownloadWindowClient
136+
kDownloadWindowClient,
137+
kDownloadMobileClient
138+
};
139+
140+
enum CooperationMode {
141+
kPC = 0,
142+
kMobile
131143
};
132144

133145
#endif // TYPE_DEFINES_H

src/lib/cooperation/core/gui/linux/mainwindow_p_linux.cpp

+44-7
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@
77

88
#include <DTitlebar>
99
#include <DIconButton>
10+
#include <DButtonBox>
1011

1112
#include <QVBoxLayout>
1213
#include <QApplication>
14+
#include <QStackedLayout>
1315

1416
#include <gui/widgets/cooperationstatewidget.h>
17+
#include <gui/widgets/devicelistwidget.h>
18+
#include <gui/widgets/mobilewidget.h>
19+
20+
#include <gui/mainwindow_p.h>
1521

1622
using namespace cooperation_core;
1723
DWIDGET_USE_NAMESPACE
@@ -22,19 +28,46 @@ void MainWindowPrivate::initWindow()
2228
q->setFixedSize(500, 630);
2329
q->setWindowIcon(QIcon::fromTheme("dde-cooperation"));
2430

31+
mobileWidget = new MobileWidget(q);
2532
workspaceWidget = new WorkspaceWidget(q);
26-
q->setCentralWidget(workspaceWidget);
33+
34+
stackedLayout = new QStackedLayout;
35+
stackedLayout->addWidget(workspaceWidget);
36+
stackedLayout->addWidget(mobileWidget);
37+
stackedLayout->setCurrentIndex(0);
38+
39+
QWidget *centralWidget = new QWidget();
40+
QVBoxLayout *mainLayout = new QVBoxLayout;
41+
bottomLabel = new BottomLabel(q);
42+
mainLayout->addLayout(stackedLayout);
43+
mainLayout->addWidget(bottomLabel);
44+
mainLayout->setSpacing(0);
45+
mainLayout->setContentsMargins(0, 0, 0, 0);
46+
centralWidget->setLayout(mainLayout);
47+
48+
q->setCentralWidget(centralWidget);
49+
}
50+
51+
void MainWindowPrivate::setIP(const QString &ip)
52+
{
53+
bottomLabel->setIp(ip);
2754
}
2855

2956
void MainWindowPrivate::initTitleBar()
3057
{
3158
auto titleBar = q->titlebar();
32-
DIconButton *refreshBtn = new DIconButton(q);
33-
refreshBtn->setIcon(QIcon::fromTheme("refresh"));
34-
refreshBtn->setIconSize(QSize(16, 16));
35-
refreshBtn->setToolTip(tr("Re-scan for devices"));
36-
titleBar->addWidget(refreshBtn, Qt::AlignLeft);
37-
connect(refreshBtn, &DIconButton::clicked, q, &MainWindow::onLookingForDevices);
59+
60+
DButtonBox *switchBtn = new DButtonBox(q);
61+
QList<DButtonBoxButton *> list;
62+
DButtonBoxButton *PCBtn = new DButtonBoxButton(tr("电脑协同"));
63+
DButtonBoxButton *mobileBtn = new DButtonBoxButton(tr("手机协同"));
64+
list.append(PCBtn);
65+
list.append(mobileBtn);
66+
switchBtn->setButtonList(list, true);
67+
titleBar->addWidget(switchBtn, Qt::AlignCenter);
68+
PCBtn->setChecked(true);
69+
connect(PCBtn, &DButtonBoxButton::clicked, q, [this] { q->onSwitchMode(CooperationMode::kPC); });
70+
connect(mobileBtn, &DButtonBoxButton::clicked, q, [this] { q->onSwitchMode(CooperationMode::kMobile); });
3871

3972
if (qApp->property("onlyTransfer").toBool()) {
4073
titleBar->setMenuVisible(false);
@@ -56,6 +89,10 @@ void MainWindowPrivate::initTitleBar()
5689
action->setData(MenuAction::kDownloadWindowClient);
5790
menu->addAction(action);
5891

92+
action = new QAction(tr("Download Mobile client"), menu);
93+
action->setData(MenuAction::kDownloadWindowClient);
94+
menu->addAction(action);
95+
5996
QObject::connect(menu, &QMenu::triggered, [this](QAction *act) {
6097
bool ok { false };
6198
int val { act->data().toInt(&ok) };

src/lib/cooperation/core/gui/mainwindow.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "mainwindow_p.h"
77
#include "dialogs/settingdialog.h"
88
#include "utils/cooperationutil.h"
9+
#include "widgets/cooperationstatewidget.h"
910

1011
#include <QScreen>
1112
#include <QUrl>
@@ -15,6 +16,7 @@
1516
#include <QSystemTrayIcon>
1617
#include <QMenu>
1718
#include <QVBoxLayout>
19+
#include <QStackedLayout>
1820

1921
using namespace cooperation_core;
2022

@@ -37,6 +39,7 @@ MainWindowPrivate::~MainWindowPrivate()
3739
void MainWindowPrivate::initConnect()
3840
{
3941
connect(workspaceWidget, &WorkspaceWidget::search, q, &MainWindow::onFindDevice);
42+
connect(workspaceWidget, &WorkspaceWidget::refresh, q, &MainWindow::onLookingForDevices);
4043
}
4144

4245
void MainWindowPrivate::moveCenter()
@@ -82,6 +85,9 @@ void MainWindowPrivate::handleSettingMenuTriggered(int action)
8285
case MenuAction::kDownloadWindowClient:
8386
QDesktopServices::openUrl(QUrl("https://www.chinauos.com/resource/assistant"));
8487
break;
88+
case MenuAction::kDownloadMobileClient:
89+
QDesktopServices::openUrl(QUrl("https://www.chinauos.com/resource/assistant"));
90+
break;
8591
}
8692
}
8793

@@ -119,9 +125,9 @@ void MainWindow::onlineStateChanged(const QString &validIP)
119125
if (offline) {
120126
d->workspaceWidget->clear();
121127
d->workspaceWidget->switchWidget(WorkspaceWidget::kNoNetworkWidget);
122-
d->workspaceWidget->setBottomIp("---");
128+
d->setIP("---");
123129
} else {
124-
d->workspaceWidget->setBottomIp(validIP);
130+
d->setIP(validIP);
125131
}
126132
}
127133

@@ -138,6 +144,12 @@ void MainWindow::onLookingForDevices()
138144
d->workspaceWidget->switchWidget(WorkspaceWidget::kLookignForDeviceWidget);
139145
}
140146

147+
void MainWindow::onSwitchMode(CooperationMode mode)
148+
{
149+
d->stackedLayout->setCurrentIndex(mode);
150+
d->bottomLabel->onSwitchMode(mode);
151+
}
152+
141153
void MainWindow::onFindDevice(const QString &ip)
142154
{
143155
_userAction = true;

src/lib/cooperation/core/gui/mainwindow.h

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public Q_SLOTS:
4545
void addDevice(const QList<DeviceInfoPointer> &infoList);
4646
void removeDevice(const QString &ip);
4747
void onRegistOperations(const QVariantMap &map);
48+
void onSwitchMode(CooperationMode mode);
4849

4950
protected:
5051
void showCloseDialog();

src/lib/cooperation/core/gui/mainwindow_p.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@
1212
#include <QMouseEvent>
1313

1414
class QSystemTrayIcon;
15-
namespace cooperation_core {
15+
class QStackedLayout;
1616

17+
namespace cooperation_core {
18+
class DeviceListWidget;
19+
class MobileWidget;
1720
class MainWindow;
21+
class BottomLabel;
1822
class MainWindowPrivate : public QObject
1923
{
2024
Q_OBJECT
@@ -28,6 +32,7 @@ class MainWindowPrivate : public QObject
2832
void moveCenter();
2933

3034
void handleSettingMenuTriggered(int action);
35+
void setIP(const QString &ip);
3136

3237
public:
3338
void paintEvent(QPaintEvent *event);
@@ -37,9 +42,12 @@ class MainWindowPrivate : public QObject
3742

3843
public:
3944
MainWindow *q { nullptr };
45+
QStackedLayout *stackedLayout { nullptr };
4046
WorkspaceWidget *workspaceWidget { nullptr };
47+
MobileWidget *mobileWidget { nullptr };
4148
bool leftButtonPressed { false };
4249
QPoint lastPosition;
50+
BottomLabel *bottomLabel { nullptr };
4351
QSystemTrayIcon *trayIcon { nullptr };
4452
};
4553

0 commit comments

Comments
 (0)