issue #65 - Auto config feature using Zeroconf/Bonjour [no-build]
added massage box to ask user where to add client
This commit is contained in:
parent
aa2accf5a6
commit
cdc740c5d1
|
@ -291,7 +291,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="m_pAutoConnectCheckBox">
|
||||
<property name="text">
|
||||
<string>Auto connect</string>
|
||||
|
|
|
@ -65,7 +65,7 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig) :
|
|||
m_AppConfig(appConfig),
|
||||
m_pSynergy(NULL),
|
||||
m_SynergyState(synergyDisconnected),
|
||||
m_ServerConfig(&m_Settings, 5, 3, m_AppConfig.screenName()),
|
||||
m_ServerConfig(&m_Settings, 5, 3, m_AppConfig.screenName(), this),
|
||||
m_pTempConfigFile(NULL),
|
||||
m_pTrayIcon(NULL),
|
||||
m_pTrayIconMenu(NULL),
|
||||
|
@ -880,15 +880,17 @@ void MainWindow::autoAddScreen(const QString name)
|
|||
int r = m_ServerConfig.autoAddScreen(name);
|
||||
if (r != kAutoAddScreenOk) {
|
||||
switch (r) {
|
||||
case kAutoAddScreenNoServer:
|
||||
case kAutoAddScreenManualServer:
|
||||
showConfigureServer(
|
||||
tr("Please add the server (%1) to the grid.")
|
||||
.arg(appConfig().screenName()));
|
||||
break;
|
||||
|
||||
case kAutoAddScreenNoSpace:
|
||||
case kAutoAddScreenManualClient:
|
||||
showConfigureServer(
|
||||
tr("Please add the client (%1) to the grid.").arg(name));
|
||||
tr("Please drag the new client screen (%1) "
|
||||
"to the desired position on the grid.")
|
||||
.arg(name));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,12 @@
|
|||
|
||||
#include "ServerConfig.h"
|
||||
#include "Hotkey.h"
|
||||
#include "MainWindow.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QMessageBox>
|
||||
#include <QAbstractButton>
|
||||
#include <QPushButton>
|
||||
|
||||
static const struct
|
||||
{
|
||||
|
@ -35,14 +39,23 @@ static const struct
|
|||
|
||||
};
|
||||
|
||||
enum {
|
||||
kAddClientRight,
|
||||
kAddClientLeft,
|
||||
kAddClientOther,
|
||||
kAddClientIgnore
|
||||
};
|
||||
|
||||
const int serverDefaultIndex = 7;
|
||||
|
||||
ServerConfig::ServerConfig(QSettings* settings, int numColumns, int numRows , QString serverName) :
|
||||
ServerConfig::ServerConfig(QSettings* settings, int numColumns, int numRows ,
|
||||
QString serverName, MainWindow* mainWindow) :
|
||||
m_pSettings(settings),
|
||||
m_Screens(),
|
||||
m_NumColumns(numColumns),
|
||||
m_NumRows(numRows),
|
||||
m_ServerName(serverName)
|
||||
m_ServerName(serverName),
|
||||
m_pMainWindow(mainWindow)
|
||||
{
|
||||
Q_ASSERT(m_pSettings);
|
||||
|
||||
|
@ -273,7 +286,7 @@ int ServerConfig::autoAddScreen(const QString name)
|
|||
int targetIndex = -1;
|
||||
if (!findScreenName(m_ServerName, serverIndex)) {
|
||||
if (!fixNoServer(m_ServerName, serverIndex)) {
|
||||
return kAutoAddScreenNoServer;
|
||||
return kAutoAddScreenManualServer;
|
||||
}
|
||||
}
|
||||
if (findScreenName(name, targetIndex)) {
|
||||
|
@ -281,18 +294,44 @@ int ServerConfig::autoAddScreen(const QString name)
|
|||
return kAutoAddScreenOk;
|
||||
}
|
||||
|
||||
int result = showAddClientMsgBox(name);
|
||||
|
||||
if (result == kAddClientIgnore) {
|
||||
return kAutoAddScreenIgnore;
|
||||
}
|
||||
|
||||
if (result == kAddClientOther) {
|
||||
addToFirstEmptyGrid(name);
|
||||
return kAutoAddScreenManualClient;
|
||||
}
|
||||
|
||||
bool success = false;
|
||||
for (unsigned int i = 0; i < sizeof(neighbourDirs) / sizeof(neighbourDirs[0]); i++) {
|
||||
int idx = adjacentScreenIndex(serverIndex, neighbourDirs[i].x, neighbourDirs[i].y);
|
||||
if (idx != -1 && screens()[idx].isNull()) {
|
||||
int startIndex = serverIndex;
|
||||
int offset = 1;
|
||||
int dirIndex = 0;
|
||||
|
||||
if (result == kAddClientLeft) {
|
||||
offset = -1;
|
||||
dirIndex = 1;
|
||||
}
|
||||
|
||||
int idx = adjacentScreenIndex(startIndex, neighbourDirs[dirIndex].x,
|
||||
neighbourDirs[dirIndex].y);
|
||||
while (idx != -1) {
|
||||
if (screens()[idx].isNull()) {
|
||||
m_Screens[idx].setName(name);
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
|
||||
startIndex += offset;
|
||||
idx = adjacentScreenIndex(startIndex, neighbourDirs[dirIndex].x,
|
||||
neighbourDirs[dirIndex].y);
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
return kAutoAddScreenNoSpace;
|
||||
addToFirstEmptyGrid(name);
|
||||
return kAutoAddScreenManualClient;
|
||||
}
|
||||
|
||||
saveSettings();
|
||||
|
@ -303,7 +342,6 @@ bool ServerConfig::findScreenName(const QString& name, int& index)
|
|||
{
|
||||
bool found = false;
|
||||
for (int i = 0; i < screens().size(); i++) {
|
||||
QString test = screens()[i].name();
|
||||
if (!screens()[i].isNull() &&
|
||||
screens()[i].name().compare(name) == 0) {
|
||||
index = i;
|
||||
|
@ -325,3 +363,48 @@ bool ServerConfig::fixNoServer(const QString& name, int& index)
|
|||
|
||||
return fixed;
|
||||
}
|
||||
|
||||
int ServerConfig::showAddClientMsgBox(const QString& clientName)
|
||||
{
|
||||
int result = kAddClientIgnore;
|
||||
QWidget* w = dynamic_cast<QWidget*>(m_pMainWindow);
|
||||
QMessageBox msgBox(w);
|
||||
msgBox.setIcon(QMessageBox::Question);
|
||||
msgBox.setWindowTitle(QObject::tr("Incoming client"));
|
||||
msgBox.setText(QObject::tr(
|
||||
"A new client wants to connect. Which side\n"
|
||||
"of this screen is the client (%1) located?")
|
||||
.arg(clientName));
|
||||
|
||||
QPushButton* left = msgBox.addButton(QObject::tr("Left"), QMessageBox::AcceptRole);
|
||||
QPushButton* right = msgBox.addButton(QObject::tr("Right"), QMessageBox::AcceptRole);
|
||||
QPushButton* other = msgBox.addButton(QObject::tr("Other"), QMessageBox::AcceptRole);
|
||||
QPushButton* ignore = msgBox.addButton(QObject::tr("Ignore"), QMessageBox::RejectRole);
|
||||
msgBox.setDefaultButton(ignore);
|
||||
|
||||
msgBox.exec();
|
||||
|
||||
QAbstractButton* button = msgBox.clickedButton();
|
||||
QPushButton* clickedButton = dynamic_cast<QPushButton*>(button);
|
||||
if (clickedButton == right) {
|
||||
result = kAddClientRight;
|
||||
}
|
||||
else if (clickedButton == left) {
|
||||
result = kAddClientLeft;
|
||||
}
|
||||
else if (clickedButton == other) {
|
||||
result = kAddClientOther;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void::ServerConfig::addToFirstEmptyGrid(const QString &clientName)
|
||||
{
|
||||
for (int i = 0; i < screens().size(); i++) {
|
||||
if (screens()[i].isNull()) {
|
||||
m_Screens[i].setName(clientName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ class QSettings;
|
|||
class QString;
|
||||
class QFile;
|
||||
class ServerConfigDialog;
|
||||
class MainWindow;
|
||||
|
||||
class ServerConfig : public BaseConfig
|
||||
{
|
||||
|
@ -38,7 +39,8 @@ class ServerConfig : public BaseConfig
|
|||
friend QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config);
|
||||
|
||||
public:
|
||||
ServerConfig(QSettings* settings, int numColumns, int numRows, QString serverName);
|
||||
ServerConfig(QSettings* settings, int numColumns, int numRows,
|
||||
QString serverName, MainWindow* mainWindow);
|
||||
~ServerConfig();
|
||||
|
||||
public:
|
||||
|
@ -93,6 +95,8 @@ class ServerConfig : public BaseConfig
|
|||
private:
|
||||
bool findScreenName(const QString& name, int& index);
|
||||
bool fixNoServer(const QString& name, int& index);
|
||||
int showAddClientMsgBox(const QString& clientName);
|
||||
void addToFirstEmptyGrid(const QString& clientName);
|
||||
|
||||
private:
|
||||
QSettings* m_pSettings;
|
||||
|
@ -112,14 +116,16 @@ class ServerConfig : public BaseConfig
|
|||
QList<bool> m_SwitchCorners;
|
||||
HotkeyList m_Hotkeys;
|
||||
QString m_ServerName;
|
||||
MainWindow* m_pMainWindow;
|
||||
};
|
||||
|
||||
QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config);
|
||||
|
||||
enum {
|
||||
kAutoAddScreenOk,
|
||||
kAutoAddScreenNoServer,
|
||||
kAutoAddScreenNoSpace
|
||||
kAutoAddScreenManualServer,
|
||||
kAutoAddScreenManualClient,
|
||||
kAutoAddScreenIgnore
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue