SYNERGY-799 Implement add computer button

This commit is contained in:
Serhii Hadzhilov 2021-04-09 17:53:27 +03:00
parent 5a8ec2356d
commit d89657c0d9
6 changed files with 54 additions and 0 deletions

View file

@ -141,3 +141,22 @@ bool ScreenSetupModel::dropMimeData(const QMimeData* data, Qt::DropAction action
return true;
}
void ScreenSetupModel::addScreen(const Screen& newScreen)
{
auto screenTest = std::find_if(m_Screens.begin(), m_Screens.end(),
[](const Screen& item) { return item.isNull(); });
if (screenTest != m_Screens.end())
{
(*screenTest) = newScreen;
}
}
bool ScreenSetupModel::isFull() const
{
auto emptyScreen = std::find_if(m_Screens.cbegin(), m_Screens.cend(),
[](const Screen& item) { return item.isNull(); });
return (emptyScreen == m_Screens.cend());
}

View file

@ -51,6 +51,7 @@ class ScreenSetupModel : public QAbstractTableModel
Qt::ItemFlags flags(const QModelIndex& index) const;
QStringList mimeTypes() const;
QMimeData* mimeData(const QModelIndexList& indexes) const;
bool isFull() const;
protected:
bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent);
@ -58,6 +59,7 @@ class ScreenSetupModel : public QAbstractTableModel
Screen& screen(const QModelIndex& index) { return screen(index.column(), index.row()); }
const Screen& screen(int column, int row) const { return m_Screens[row * m_NumColumns + column]; }
Screen& screen(int column, int row) { return m_Screens[row * m_NumColumns + column]; }
void addScreen(const Screen& newScreen);
private:
ScreenList& m_Screens;

View file

@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ScreenSettingsDialog.h"
#include "ServerConfigDialog.h"
#include "ServerConfig.h"
#include "HotkeyDialog.h"
@ -79,6 +80,9 @@ ServerConfigDialog::ServerConfigDialog(QWidget* parent, ServerConfig& config) :
}
}
}
m_pButtonAddComputer->setEnabled(!model().isFull());
connect(m_pTrashScreenWidget, SIGNAL(screenRemoved()), this, SLOT(onScreenRemoved()));
}
void ServerConfigDialog::showEvent(QShowEvent* event)
@ -239,3 +243,21 @@ void ServerConfigDialog::on_m_pListActions_itemSelectionChanged()
m_pButtonEditAction->setEnabled(!m_pListActions->selectedItems().isEmpty());
m_pButtonRemoveAction->setEnabled(!m_pListActions->selectedItems().isEmpty());
}
void ServerConfigDialog::on_m_pButtonAddComputer_clicked()
{
Screen newScreen("");
ScreenSettingsDialog dlg(this, &newScreen, &model().m_Screens);
if (dlg.exec() == QDialog::Accepted)
{
model().addScreen(newScreen);
}
m_pButtonAddComputer->setEnabled(!model().isFull());
}
void ServerConfigDialog::onScreenRemoved()
{
m_pButtonAddComputer->setEnabled(true);
}

View file

@ -51,6 +51,8 @@ class ServerConfigDialog : public QDialog, public Ui::ServerConfigDialogBase
void on_m_pButtonRemoveAction_clicked();
void on_m_pCheckBoxEnableClipboard_stateChanged(int state);
void on_m_pButtonAddComputer_clicked();
void onScreenRemoved();
protected:
ServerConfig& serverConfig() { return m_ServerConfig; }

View file

@ -36,8 +36,13 @@ void TrashScreenWidget::dragEnterEvent(QDragEnterEvent* event)
void TrashScreenWidget::dropEvent(QDropEvent* event)
{
if (event->mimeData()->hasFormat(ScreenSetupModel::mimeType()))
{
event->acceptProposedAction();
emit screenRemoved();
}
else
{
event->ignore();
}
}

View file

@ -36,6 +36,10 @@ class TrashScreenWidget : public QLabel
public:
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
signals:
void screenRemoved();
};
#endif