added a drawer to change the server name and moved the display of the exported config to a separate drawer
This commit is contained in:
parent
4224e8314b
commit
3a264e6baf
30 changed files with 276 additions and 159 deletions
|
|
@ -1,3 +1,3 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.944 3.26667e-05C8.77112 0.0148396 5.73324 1.28566 3.4949 3.53449C1.25656 5.78332 -3.4549e-05 8.82711 7.12435e-10 12C7.12441e-10 15.1826 1.26428 18.2349 3.51472 20.4853C5.76515 22.7358 8.8174 24 12 24C15.1826 24 18.2348 22.7358 20.4853 20.4853C22.7357 18.2349 24 15.1826 24 12C24 8.81743 22.7357 5.76519 20.4853 3.51475C18.2348 1.26431 15.1826 3.26667e-05 12 3.26667e-05C11.9813 -1.08889e-05 11.9627 -1.08889e-05 11.944 3.26667e-05ZM16.906 7.22403C17.006 7.22203 17.227 7.24703 17.371 7.36403C17.4667 7.44713 17.5277 7.56311 17.542 7.68903C17.558 7.78203 17.578 7.99503 17.562 8.16103C17.382 10.059 16.6 14.663 16.202 16.788C16.034 17.688 15.703 17.989 15.382 18.018C14.686 18.083 14.157 17.558 13.482 17.116C12.426 16.423 11.829 15.992 10.804 15.316C9.619 14.536 10.387 14.106 11.062 13.406C11.239 13.222 14.309 10.429 14.369 10.176C14.376 10.144 14.383 10.026 14.313 9.96403C14.243 9.90203 14.139 9.92303 14.064 9.94003C13.958 9.96403 12.271 11.08 9.003 13.285C8.523 13.615 8.09 13.775 7.701 13.765C7.273 13.757 6.449 13.524 5.836 13.325C5.084 13.08 4.487 12.951 4.539 12.536C4.566 12.32 4.864 12.099 5.432 11.873C8.93 10.349 11.262 9.34403 12.43 8.85903C15.762 7.47303 16.455 7.23203 16.906 7.22403Z" fill="#D7D8DB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.44009 10.8882C8.78796 8.6139 12.3627 7.1439 14.1358 6.42277C19.2263 4.37033 20.2844 4.00977 20.9708 4.00977C21.1138 4.00977 21.457 4.0375 21.6857 4.20392C21.8573 4.34259 21.9145 4.53674 21.9431 4.67542C21.9717 4.8141 22.0003 5.11919 21.9717 5.36882C21.6857 8.17012 20.5132 15.0208 19.8841 18.155C19.6267 19.4863 19.1119 19.9301 18.6257 19.9855C17.5676 20.0687 16.7383 19.2921 15.7087 18.6542C14.1072 17.628 13.408 17.1299 11.8351 16.1314C10.0334 14.9665 11.2059 14.3286 12.2355 13.3024C12.4929 13.025 16.9956 8.75257 17.0814 8.36427C17.0814 8.3088 17.11 8.14239 16.9956 8.05918C16.8812 7.97597 16.7383 8.00371 16.6239 8.03145C16.4523 8.05918 13.8784 9.72332 8.87375 12.9961C8.1302 13.4954 7.47244 13.7173 6.87188 13.7173C6.21412 13.7173 4.9558 13.3567 4.01206 13.0516C2.86813 12.691 1.95299 12.4969 2.03878 11.8867C2.12458 11.5539 2.58215 11.2211 3.44009 10.8882Z" stroke="#D7D8DB" stroke-width="2"/>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1 KiB |
|
|
@ -32,9 +32,8 @@ ConnectionController::ConnectionController(const QSharedPointer<ServersModel> &s
|
|||
void ConnectionController::openConnection()
|
||||
{
|
||||
int serverIndex = m_serversModel->getDefaultServerIndex();
|
||||
QModelIndex serverModelIndex = m_serversModel->index(serverIndex);
|
||||
ServerCredentials credentials = qvariant_cast<ServerCredentials>(m_serversModel->data(serverModelIndex,
|
||||
ServersModel::ServersModelRoles::CredentialsRole));
|
||||
ServerCredentials credentials = qvariant_cast<ServerCredentials>(
|
||||
m_serversModel->data(serverIndex, ServersModel::ServersModelRoles::CredentialsRole));
|
||||
|
||||
DockerContainer container = m_containersModel->getDefaultContainer();
|
||||
QModelIndex containerModelIndex = m_containersModel->index(container);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@ void ExportController::generateFullAccessConfig()
|
|||
void ExportController::generateConnectionConfig()
|
||||
{
|
||||
int serverIndex = m_serversModel->getCurrentlyProcessedServerIndex();
|
||||
ServerCredentials credentials = m_serversModel->getCurrentlyProcessedServerCredentials();
|
||||
ServerCredentials credentials = qvariant_cast<ServerCredentials>(
|
||||
m_serversModel->data(serverIndex, ServersModel::ServersModelRoles::CredentialsRole));
|
||||
|
||||
DockerContainer container = static_cast<DockerContainer>(
|
||||
m_containersModel->getCurrentlyProcessedContainerIndex());
|
||||
|
|
|
|||
|
|
@ -61,7 +61,9 @@ void InstallController::installServer(DockerContainer container, QJsonObject& co
|
|||
void InstallController::installContainer(DockerContainer container, QJsonObject& config)
|
||||
{
|
||||
//todo check if container already installed
|
||||
ServerCredentials serverCredentials = m_serversModel->getCurrentlyProcessedServerCredentials();
|
||||
int serverIndex = m_serversModel->getCurrentlyProcessedServerIndex();
|
||||
ServerCredentials serverCredentials = qvariant_cast<ServerCredentials>(
|
||||
m_serversModel->data(serverIndex, ServersModel::ServersModelRoles::CredentialsRole));
|
||||
|
||||
ServerController serverController(m_settings);
|
||||
ErrorCode errorCode = serverController.setupContainer(serverCredentials, container, config);
|
||||
|
|
|
|||
|
|
@ -19,12 +19,23 @@ bool ServersModel::setData(const QModelIndex &index, const QVariant &value, int
|
|||
return false;
|
||||
}
|
||||
|
||||
QJsonObject server = m_servers.at(index.row()).toObject();
|
||||
|
||||
switch (role) {
|
||||
case NameRole: {
|
||||
server.insert(config_key::description, value.toString());
|
||||
m_settings->editServer(index.row(), server);
|
||||
m_servers.replace(index.row(), server);
|
||||
break;
|
||||
}
|
||||
case IsDefaultRole: {
|
||||
m_settings->setDefaultServer(index.row());
|
||||
m_defaultServerIndex = m_settings->defaultServerIndex();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
return true;
|
||||
}
|
||||
default: return true;
|
||||
}
|
||||
|
||||
emit dataChanged(index, index);
|
||||
|
|
@ -51,6 +62,8 @@ QVariant ServersModel::data(const QModelIndex &index, int role) const
|
|||
return server.value(config_key::hostName).toString();
|
||||
case CredentialsRole:
|
||||
return QVariant::fromValue(m_settings->serverCredentials(index.row()));
|
||||
case CredentialsLoginRole:
|
||||
return m_settings->serverCredentials(index.row()).userName;
|
||||
case IsDefaultRole:
|
||||
return index.row() == m_defaultServerIndex;
|
||||
case IsCurrentlyProcessedRole:
|
||||
|
|
@ -60,6 +73,12 @@ QVariant ServersModel::data(const QModelIndex &index, int role) const
|
|||
return QVariant();
|
||||
}
|
||||
|
||||
QVariant ServersModel::data(const int index, int role) const
|
||||
{
|
||||
QModelIndex modelIndex = this->index(index);
|
||||
return data(modelIndex, role);
|
||||
}
|
||||
|
||||
const int ServersModel::getDefaultServerIndex()
|
||||
{
|
||||
return m_defaultServerIndex;
|
||||
|
|
@ -85,11 +104,6 @@ bool ServersModel::isDefaultServerCurrentlyProcessed()
|
|||
return m_defaultServerIndex == m_currenlyProcessedServerIndex;
|
||||
}
|
||||
|
||||
ServerCredentials ServersModel::getCurrentlyProcessedServerCredentials()
|
||||
{
|
||||
return qvariant_cast<ServerCredentials>(data(index(m_currenlyProcessedServerIndex), CredentialsRole));
|
||||
}
|
||||
|
||||
void ServersModel::addServer(const QJsonObject &server)
|
||||
{
|
||||
beginResetModel();
|
||||
|
|
@ -121,6 +135,7 @@ QHash<int, QByteArray> ServersModel::roleNames() const {
|
|||
roles[NameRole] = "name";
|
||||
roles[HostNameRole] = "hostName";
|
||||
roles[CredentialsRole] = "credentials";
|
||||
roles[CredentialsLoginRole] = "credentialsLogin";
|
||||
roles[IsDefaultRole] = "isDefault";
|
||||
roles[IsCurrentlyProcessedRole] = "isCurrentlyProcessed";
|
||||
return roles;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ public:
|
|||
NameRole = Qt::UserRole + 1,
|
||||
HostNameRole,
|
||||
CredentialsRole,
|
||||
CredentialsLoginRole,
|
||||
IsDefaultRole,
|
||||
IsCurrentlyProcessedRole
|
||||
};
|
||||
|
|
@ -29,6 +30,7 @@ public:
|
|||
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
QVariant data(const int index, int role = Qt::DisplayRole) const;
|
||||
|
||||
public slots:
|
||||
const int getDefaultServerIndex();
|
||||
|
|
@ -38,7 +40,6 @@ public slots:
|
|||
|
||||
void setCurrentlyProcessedServerIndex(int index);
|
||||
int getCurrentlyProcessedServerIndex();
|
||||
ServerCredentials getCurrentlyProcessedServerCredentials();
|
||||
|
||||
void addServer(const QJsonObject &server);
|
||||
void removeServer();
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ DrawerType {
|
|||
Layout.topMargin: 16
|
||||
|
||||
text: "IP, логин и пароль от сервера"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSetupWizardCredentials)
|
||||
|
|
@ -50,7 +50,7 @@ DrawerType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: "QR-код, ключ или файл настроек"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSetupWizardConfigSource)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ DrawerType {
|
|||
id: root
|
||||
|
||||
property alias headerText: header.headerText
|
||||
property alias configContentHeaderText: configContentHeader.headerText
|
||||
|
||||
width: parent.width
|
||||
height: parent.height * 0.9
|
||||
|
|
@ -86,30 +87,60 @@ DrawerType {
|
|||
disabledColor: "#878B91"
|
||||
textColor: "#D7D8DB"
|
||||
|
||||
text: showContent ? qsTr("Collapse content") : qsTr("Show content")
|
||||
text: qsTr("Show content")
|
||||
|
||||
onClicked: {
|
||||
showContent = !showContent
|
||||
configContentDrawer.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: configContent.implicitHeight + configContent.anchors.topMargin + configContent.anchors.bottomMargin
|
||||
DrawerType {
|
||||
id: configContentDrawer
|
||||
|
||||
radius: 10
|
||||
color: "#2C2D30"
|
||||
width: parent.width
|
||||
height: parent.height * 0.9
|
||||
|
||||
visible: showContent
|
||||
BackButtonType {
|
||||
id: backButton
|
||||
|
||||
height: 24
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 16
|
||||
anchors.leftMargin: 16
|
||||
anchors.topMargin: 16
|
||||
|
||||
TextField {
|
||||
backButtonFunction: function() {
|
||||
configContentDrawer.visible = false
|
||||
}
|
||||
}
|
||||
|
||||
FlickableType {
|
||||
anchors.top: backButton.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: configContent.implicitHeight + configContent.anchors.topMargin + configContent.anchors.bottomMargin
|
||||
|
||||
ColumnLayout {
|
||||
id: configContent
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.margins: 16
|
||||
anchors.rightMargin: 16
|
||||
anchors.leftMargin: 16
|
||||
|
||||
Header2Type {
|
||||
id: configContentHeader
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 16
|
||||
}
|
||||
|
||||
TextField {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 16
|
||||
Layout.bottomMargin: 16
|
||||
|
||||
padding: 0
|
||||
height: 24
|
||||
|
||||
color: "#D7D8DB"
|
||||
|
|
@ -122,13 +153,14 @@ DrawerType {
|
|||
|
||||
wrapMode: Text.Wrap
|
||||
|
||||
enabled: false
|
||||
readOnly: true
|
||||
background: Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "transparent"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
|
|
@ -143,17 +175,19 @@ DrawerType {
|
|||
anchors.fill: parent
|
||||
smooth: false
|
||||
|
||||
source: ExportController.qrCodesCount ? ExportController.qrCodes[0] : ""
|
||||
|
||||
Timer {
|
||||
property int idx: 0
|
||||
property int index: 0
|
||||
interval: 1000
|
||||
running: ExportController.qrCodesCount > 0
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
idx++
|
||||
if (idx >= ExportController.qrCodesCount) {
|
||||
idx = 0
|
||||
index++
|
||||
if (index >= ExportController.qrCodesCount) {
|
||||
index = 0
|
||||
}
|
||||
parent.source = ExportController.qrCodes[idx]
|
||||
parent.source = ExportController.qrCodes[index]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ Item {
|
|||
|
||||
property var clickedFunction
|
||||
|
||||
property alias buttonImage: button.image
|
||||
property string iconImage
|
||||
property string rightImageSource
|
||||
property string leftImageSource
|
||||
|
||||
property string textColor: "#d7d8db"
|
||||
|
||||
|
|
@ -26,17 +26,34 @@ Item {
|
|||
anchors.leftMargin: 16
|
||||
anchors.rightMargin: 16
|
||||
|
||||
Rectangle {
|
||||
id: leftImageBackground
|
||||
|
||||
visible: leftImageSource ? true : false
|
||||
|
||||
Layout.preferredHeight: rightImageSource ? leftImage.implicitHeight : 56
|
||||
Layout.preferredWidth: rightImageSource ? leftImage.implicitWidth : 56
|
||||
Layout.rightMargin: rightImageSource ? 16 : 0
|
||||
|
||||
radius: 12
|
||||
color: "transparent"
|
||||
|
||||
Behavior on color {
|
||||
PropertyAnimation { duration: 200 }
|
||||
}
|
||||
|
||||
Image {
|
||||
id: icon
|
||||
source: iconImage
|
||||
visible: iconImage ? true : false
|
||||
Layout.rightMargin: visible ? 16 : 0
|
||||
id: leftImage
|
||||
|
||||
anchors.centerIn: parent
|
||||
source: leftImageSource
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
ListItemTitleType {
|
||||
text: root.text
|
||||
color: textColor
|
||||
color: root.textColor
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 16
|
||||
|
|
@ -63,25 +80,20 @@ Item {
|
|||
}
|
||||
|
||||
ImageButtonType {
|
||||
id: button
|
||||
id: rightImage
|
||||
|
||||
hoverEnabled: false
|
||||
image: buttonImage
|
||||
onClicked: {
|
||||
if (clickedFunction && typeof clickedFunction === "function") {
|
||||
clickedFunction()
|
||||
}
|
||||
}
|
||||
image: rightImageSource
|
||||
visible: rightImageSource ? true : false
|
||||
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
Rectangle {
|
||||
id: imageBackground
|
||||
anchors.fill: button
|
||||
id: rightImageBackground
|
||||
anchors.fill: parent
|
||||
radius: 12
|
||||
color: "transparent"
|
||||
|
||||
|
||||
Behavior on color {
|
||||
PropertyAnimation { duration: 200 }
|
||||
}
|
||||
|
|
@ -106,31 +118,39 @@ Item {
|
|||
hoverEnabled: true
|
||||
|
||||
onEntered: {
|
||||
if (buttonImage) {
|
||||
imageBackground.color = button.hoveredColor
|
||||
if (rightImageSource) {
|
||||
rightImageBackground.color = rightImage.hoveredColor
|
||||
} else if (leftImageSource) {
|
||||
leftImageBackground.color = rightImage.hoveredColor
|
||||
} else {
|
||||
background.color = button.hoveredColor
|
||||
background.color = rightImage.hoveredColor
|
||||
}
|
||||
}
|
||||
|
||||
onExited: {
|
||||
if (buttonImage) {
|
||||
imageBackground.color = button.defaultColor
|
||||
if (rightImageSource) {
|
||||
rightImageBackground.color = rightImage.defaultColor
|
||||
} else if (leftImageSource) {
|
||||
leftImageBackground.color = rightImage.defaultColor
|
||||
} else {
|
||||
background.color = button.defaultColor
|
||||
background.color = rightImage.defaultColor
|
||||
}
|
||||
}
|
||||
|
||||
onPressedChanged: {
|
||||
if (buttonImage) {
|
||||
imageBackground.color = pressed ? button.pressedColor : entered ? button.hoveredColor : button.defaultColor
|
||||
if (rightImageSource) {
|
||||
rightImageBackground.color = pressed ? rightImage.pressedColor : entered ? rightImage.hoveredColor : rightImage.defaultColor
|
||||
} else if (leftImageSource) {
|
||||
leftImageBackground.color = pressed ? rightImage.pressedColor : entered ? rightImage.hoveredColor : rightImage.defaultColor
|
||||
} else {
|
||||
background.color = pressed ? button.pressedColor : entered ? button.hoveredColor : button.defaultColor
|
||||
background.color = pressed ? rightImage.pressedColor : entered ? rightImage.hoveredColor : rightImage.defaultColor
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
button.clicked()
|
||||
if (clickedFunction && typeof clickedFunction === "function") {
|
||||
clickedFunction()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ ListView {
|
|||
id: content
|
||||
|
||||
anchors.fill: parent
|
||||
spacing: 16
|
||||
|
||||
RadioButton {
|
||||
id: radioButton
|
||||
|
|
@ -92,7 +91,7 @@ ListView {
|
|||
|
||||
DividerType {
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 16
|
||||
Layout.bottomMargin: 4
|
||||
|
||||
visible: dividerVisible
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ PageType {
|
|||
Rectangle {
|
||||
id: buttonBackground
|
||||
anchors.fill: buttonContent
|
||||
anchors.bottomMargin: -radius
|
||||
|
||||
radius: 16
|
||||
color: root.defaultColor
|
||||
|
|
@ -59,11 +58,12 @@ PageType {
|
|||
border.width: 1
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
height: 1
|
||||
y: parent.height - height - parent.radius
|
||||
|
||||
color: root.borderColor
|
||||
width: parent.radius
|
||||
height: parent.radius
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
anchors.left: parent.left
|
||||
color: parent.color
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ PageType {
|
|||
|
||||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
@ -40,8 +40,8 @@ PageType {
|
|||
Layout.topMargin: 16
|
||||
|
||||
text: qsTr("Servers")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/server.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/server.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsServersList)
|
||||
|
|
@ -54,8 +54,8 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Connection")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/radio.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/radio.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsConnection)
|
||||
|
|
@ -68,8 +68,8 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Application")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/app.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/app.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsApplication)
|
||||
|
|
@ -82,8 +82,8 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Backup")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/save.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/save.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsBackup)
|
||||
|
|
@ -96,8 +96,8 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("About AmneziaVPN")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/amnezia.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/amnezia.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsAbout)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
@ -102,8 +102,7 @@ And if you don't like the app, all the more support it - the donation will be us
|
|||
|
||||
text: qsTr("Show other methods on Github")
|
||||
|
||||
onClicked: {
|
||||
}
|
||||
onClicked: Qt.openUrlExternally("https://github.com/amnezia-vpn/amnezia-client")
|
||||
}
|
||||
|
||||
ParagraphTextType {
|
||||
|
|
@ -121,11 +120,10 @@ And if you don't like the app, all the more support it - the donation will be us
|
|||
|
||||
text: qsTr("Telegram group")
|
||||
descriptionText: qsTr("To discuss features")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/telegram.svg"
|
||||
leftImageSource: "qrc:/images/controls/telegram.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsAbout)
|
||||
Qt.openUrlExternally("https://t.me/amnezia_vpn_dev")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,11 +134,9 @@ And if you don't like the app, all the more support it - the donation will be us
|
|||
|
||||
text: qsTr("Mail")
|
||||
descriptionText: qsTr("For reviews and bug reports")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/mail.svg"
|
||||
leftImageSource: "qrc:/images/controls/mail.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsAbout)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -150,11 +146,10 @@ And if you don't like the app, all the more support it - the donation will be us
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Github")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/github.svg"
|
||||
leftImageSource: "qrc:/images/controls/github.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsAbout)
|
||||
Qt.openUrlExternally("https://github.com/amnezia-vpn/amnezia-client")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -164,11 +159,9 @@ And if you don't like the app, all the more support it - the donation will be us
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Website")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/amnezia.svg"
|
||||
leftImageSource: "qrc:/images/controls/amnezia.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsAbout)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
@ -35,22 +35,21 @@ PageType {
|
|||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.leftMargin: 16
|
||||
anchors.rightMargin: 16
|
||||
|
||||
spacing: 16
|
||||
|
||||
HeaderType {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: 16
|
||||
Layout.rightMargin: 16
|
||||
|
||||
headerText: qsTr("Application")
|
||||
}
|
||||
|
||||
LabelWithButtonType {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 16
|
||||
|
||||
text: qsTr("Language")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
}
|
||||
|
|
@ -62,7 +61,7 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Reset settings and remove all data from the application")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
@ -35,8 +35,6 @@ PageType {
|
|||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
spacing: 16
|
||||
|
||||
HeaderType {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: 16
|
||||
|
|
@ -47,6 +45,8 @@ PageType {
|
|||
|
||||
SwitcherType {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 16
|
||||
Layout.bottomMargin: 16
|
||||
Layout.leftMargin: 16
|
||||
Layout.rightMargin: 16
|
||||
|
||||
|
|
@ -68,7 +68,7 @@ PageType {
|
|||
|
||||
text: qsTr("DNS servers")
|
||||
descriptionText: qsTr("If AmneziaDNS is not used or installed")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSettingsDns)
|
||||
|
|
@ -82,7 +82,7 @@ PageType {
|
|||
|
||||
text: qsTr("Split site tunneling")
|
||||
descriptionText: qsTr("Allows you to connect to some sites through a secure connection, and to others bypassing it")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
}
|
||||
|
|
@ -95,7 +95,7 @@ PageType {
|
|||
|
||||
text: qsTr("Separate application tunneling")
|
||||
descriptionText: qsTr("Allows you to use the VPN only for certain applications")
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ PageType {
|
|||
|
||||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -54,10 +54,60 @@ PageType {
|
|||
actionButtonImage: "qrc:/images/controls/edit-3.svg"
|
||||
|
||||
headerText: name
|
||||
descriptionText: hostName
|
||||
descriptionText: credentialsLogin + " · " + hostName
|
||||
|
||||
actionButtonFunction: function() {
|
||||
connectionTypeSelection.visible = true
|
||||
serverNameEditDrawer.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
DrawerType {
|
||||
id: serverNameEditDrawer
|
||||
|
||||
width: root.width
|
||||
height: root.height * 0.35
|
||||
|
||||
onVisibleChanged: {
|
||||
if (serverNameEditDrawer.visible) {
|
||||
serverName.textField.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.topMargin: 16
|
||||
anchors.leftMargin: 16
|
||||
anchors.rightMargin: 16
|
||||
|
||||
TextFieldWithHeaderType {
|
||||
id: serverName
|
||||
|
||||
Layout.fillWidth: true
|
||||
headerText: qsTr("Server name")
|
||||
textFieldText: name
|
||||
}
|
||||
|
||||
BasicButtonType {
|
||||
Layout.fillWidth: true
|
||||
|
||||
defaultColor: "transparent"
|
||||
hoveredColor: Qt.rgba(1, 1, 1, 0.08)
|
||||
pressedColor: Qt.rgba(1, 1, 1, 0.12)
|
||||
disabledColor: "#878B91"
|
||||
textColor: "#D7D8DB"
|
||||
borderWidth: 1
|
||||
|
||||
text: qsTr("Save")
|
||||
|
||||
onClicked: {
|
||||
if (serverName.textFieldText !== name) {
|
||||
name = serverName.textFieldText
|
||||
serverNameEditDrawer.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ PageType {
|
|||
|
||||
text: name
|
||||
descriptionText: hostName
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
ServersModel.setCurrentlyProcessedServerIndex(index)
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ PageType {
|
|||
|
||||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
@ -58,8 +58,8 @@ PageType {
|
|||
Layout.topMargin: 16
|
||||
|
||||
text: "Файл с настройками подключения"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/folder-open.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/folder-open.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
onClicked: fileDialog.open()
|
||||
|
|
@ -81,8 +81,8 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: "QR-код"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/qr-code.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/qr-code.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
}
|
||||
|
|
@ -94,8 +94,8 @@ PageType {
|
|||
Layout.fillWidth: true
|
||||
|
||||
text: "Ключ в виде текста"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
iconImage: "qrc:/images/controls/text-cursor.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
leftImageSource: "qrc:/images/controls/text-cursor.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
goToPage(PageEnum.PageSetupWizardTextKey)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.implicitHeight + continueButton.anchors.bottomMargin
|
||||
|
||||
Column {
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ PageType {
|
|||
|
||||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
Column {
|
||||
|
|
@ -87,7 +87,7 @@ PageType {
|
|||
|
||||
text: name
|
||||
descriptionText: description
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
clickedFunction: function() {
|
||||
ContainersModel.setCurrentlyProcessedContainerIndex(proxyContainersModel.mapToSource(index))
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ PageType {
|
|||
|
||||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ PageType {
|
|||
|
||||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ PageType {
|
|||
FlickableType {
|
||||
id: fl
|
||||
anchors.top: backButton.bottom
|
||||
anchors.bottom: root.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.implicitHeight + connectButton.implicitHeight
|
||||
|
||||
ColumnLayout {
|
||||
|
|
|
|||
|
|
@ -56,8 +56,8 @@ PageType {
|
|||
}
|
||||
|
||||
FlickableType {
|
||||
anchors.top: root.top
|
||||
anchors.bottom: root.bottom
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
|
||||
ColumnLayout {
|
||||
|
|
@ -121,6 +121,7 @@ PageType {
|
|||
|
||||
ParagraphTextType {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 24
|
||||
|
||||
text: accessTypeSelector.currentIndex === 0 ? qsTr("VPN access without the ability to manage the server") :
|
||||
qsTr("Full access to server")
|
||||
|
|
@ -222,7 +223,6 @@ PageType {
|
|||
roleName: "isInstalled"
|
||||
value: true
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
|
||||
|
|
@ -231,6 +231,7 @@ PageType {
|
|||
clickedFunction: function () {
|
||||
serverSelector.text += ", " + selectedText
|
||||
shareConnectionDrawer.headerText = qsTr("Connection to ") + serverSelector.text
|
||||
shareConnectionDrawer.configContentHeaderText = qsTr("File with connection settings to ") + serverSelector.text
|
||||
ContainersModel.setCurrentlyProcessedContainerIndex(proxyContainersModel.mapToSource(currentIndex))
|
||||
|
||||
protocolSelector.visible = false
|
||||
|
|
@ -242,6 +243,7 @@ PageType {
|
|||
Component.onCompleted: {
|
||||
serverSelector.text += ", " + selectedText
|
||||
shareConnectionDrawer.headerText = qsTr("Connection to ") + serverSelector.text
|
||||
shareConnectionDrawer.configContentHeaderText = qsTr("File with connection settings to ") + serverSelector.text
|
||||
ContainersModel.setCurrentlyProcessedContainerIndex(proxyContainersModel.mapToSource(currentIndex))
|
||||
|
||||
fillConnectionTypeModel()
|
||||
|
|
|
|||
|
|
@ -59,11 +59,13 @@ PageType {
|
|||
anchors.bottom: parent.bottom
|
||||
|
||||
topPadding: 8
|
||||
bottomPadding: 34
|
||||
bottomPadding: 8//34
|
||||
leftPadding: 96
|
||||
rightPadding: 96
|
||||
|
||||
background: Rectangle {
|
||||
border.width: 1
|
||||
border.color: "#2C2D30"
|
||||
color: "#1C1D21"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ Item {
|
|||
Layout.rightMargin: 16
|
||||
|
||||
text: "IP, логин и пароль от сервера"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
|
@ -139,7 +139,7 @@ Item {
|
|||
Layout.rightMargin: 16
|
||||
|
||||
text: "QR-код, ключ или файл настроек"
|
||||
buttonImage: "qrc:/images/controls/chevron-right.svg"
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue