From 8602764f8f069ec3cb6c8965262c016557bedb32 Mon Sep 17 00:00:00 2001
From: Björn Hagemeister
Date: Tue, 17 Jun 2014 12:05:16 +0200
Subject: Removed _tutorFrame and _selectedFrame out of MainWindow to prevent
possible SegFaults because of too many Pointers to ConnectionFrames. Wrote to
getters getTutorFrame() and getSelectedFrame(), which are just iterating over
ConnectionFrames and looking for flags _isTutor and _isSelected.
---
src/server/connectionframe/connectionframe.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'src/server/connectionframe/connectionframe.h')
diff --git a/src/server/connectionframe/connectionframe.h b/src/server/connectionframe/connectionframe.h
index 72f641d..353ebb8 100644
--- a/src/server/connectionframe/connectionframe.h
+++ b/src/server/connectionframe/connectionframe.h
@@ -32,7 +32,7 @@ private:
Client *_client;
int _timerId, _timerCounter;
- bool _selected;
+ bool _isSelected;
bool _isTutor;
static const int _startDragDistance = 40;
@@ -53,7 +53,7 @@ public:
void setSize(int width, int height);
void assignClient(Client *client);
void setSelection(bool selected);
- const inline bool selected() const { return _selected; }
+ const inline bool isSelected() const { return _isSelected; }
const QString& computerId() const { return _computerId; }
Client* client() const { return _client; }
--
cgit v1.2.3-55-g7522
From e5c884b2b36f6ea4cadbe9e835b0b10f7ffbaf3b Mon Sep 17 00:00:00 2001
From: Björn Hagemeister
Date: Thu, 19 Jun 2014 15:28:50 +0200
Subject: NEW feature: Possible to delete offline client by drag and drop to
trash, which is positioned in the right bottom corner of manager.
---
gui/server_normal/mainwindow.ui | 29 +-
icons/trash.svg | 1187 ++++++++++++++++++++++++++
pvsmgr.qrc | 1 +
src/server/connectionframe/connectionframe.h | 1 +
src/server/mainwindow/mainwindow.cpp | 47 +-
src/server/mainwindow/mainwindow.h | 2 +
6 files changed, 1260 insertions(+), 7 deletions(-)
create mode 100644 icons/trash.svg
(limited to 'src/server/connectionframe/connectionframe.h')
diff --git a/gui/server_normal/mainwindow.ui b/gui/server_normal/mainwindow.ui
index 6d29c97..8ab1c05 100644
--- a/gui/server_normal/mainwindow.ui
+++ b/gui/server_normal/mainwindow.ui
@@ -6,8 +6,8 @@
0
0
- 838
- 607
+ 1246
+ 858
@@ -46,6 +46,28 @@
2
+
+
+
+ 10
+ 10
+ 111
+ 121
+
+
+
+ false
+
+
+
+
+
+ :/trash
+
+
+ true
+
+
@@ -181,7 +203,7 @@
-
+
:/reset:/reset
@@ -218,7 +240,6 @@
-
diff --git a/icons/trash.svg b/icons/trash.svg
new file mode 100644
index 0000000..e217a09
--- /dev/null
+++ b/icons/trash.svg
@@ -0,0 +1,1187 @@
+
+
+
+
diff --git a/pvsmgr.qrc b/pvsmgr.qrc
index 3837cee..40df258 100644
--- a/pvsmgr.qrc
+++ b/pvsmgr.qrc
@@ -15,6 +15,7 @@
icons/keyboard_key.svg
icons/student2tutor_extension.svg
icons/help.svg
+ icons/trash.svg
AUTHORS
TRANSLATION
build/pvsmgr_de_DE.qm
diff --git a/src/server/connectionframe/connectionframe.h b/src/server/connectionframe/connectionframe.h
index 353ebb8..5a4e1df 100644
--- a/src/server/connectionframe/connectionframe.h
+++ b/src/server/connectionframe/connectionframe.h
@@ -51,6 +51,7 @@ public:
const QPixmap& getFramePixmap() const { return _remoteScreen; }
void setSize(int width, int height);
+ const inline QPoint& getPreviousPosition() const { return _previousPosition; }
void assignClient(Client *client);
void setSelection(bool selected);
const inline bool isSelected() const { return _isSelected; }
diff --git a/src/server/mainwindow/mainwindow.cpp b/src/server/mainwindow/mainwindow.cpp
index bbabc66..a52690f 100644
--- a/src/server/mainwindow/mainwindow.cpp
+++ b/src/server/mainwindow/mainwindow.cpp
@@ -44,6 +44,8 @@ const QString MainWindow::sStrSourceOffline = tr("The projection source is offli
const QString MainWindow::sStrDestNdef = tr("Please select a projection destination.");
const QString MainWindow::sStrDestOffline = tr("The projection destination is offline.");
const QString MainWindow::sStrSourceDestSame = tr("Selected projection target is tutor.");
+const QString MainWindow::sStrClientOnline = tr("Selected client is currently online.");
+const QString MainWindow::sStrNoDestAv = tr("No projection destination available.");
/***************************************************************************//**
* Initialize MainWindow and ListenServer.
@@ -78,6 +80,9 @@ MainWindow::MainWindow(QString ipListUrl, QWidget* parent) :
ui->action_Exit->setStatusTip(tr("Exit"));
ui->action_Lock->setStatusTip(tr("Lock or Unlock all Clients"));
+ _tileWidth = 10;
+ _tileHeight = 10;
+
// Initialize FileDownloader.
if (!ipListUrl.isEmpty())
{
@@ -125,9 +130,6 @@ MainWindow::MainWindow(QString ipListUrl, QWidget* parent) :
setUnifiedTitleAndToolBarOnMac(true);
this->showMaximized(); // show the Mainwindow maximized
- _tileWidth = 10;
- _tileHeight = 10;
-
_listenServer = new ListenServer(CLIENT_PORT);
connect(_listenServer, SIGNAL(newClient(Client*)), this, SLOT(onClientConnected(Client*)));
_discoveryListener = new DiscoveryListener();
@@ -369,6 +371,14 @@ void MainWindow::resizeEvent(QResizeEvent* e)
(*it)->move((oldpos.x() / _tileWidth) * nw, (oldpos.y() / _tileHeight) * nh);
(*it)->setSize(nw, nh);
}
+
+ // Resize trash and set position.
+ const int width = ui->frmRoom->geometry().width() - (nw + 1);
+ const int height = ui->frmRoom->geometry().height() - (nh + 1);
+ ui->trash->move(width, height);
+ ui->trash->resize(nw, nh);
+ // qDebug() << "Trash pos: " << ui->trash->pos();
+
_tileWidth = nw;
_tileHeight = nh;
}
@@ -449,6 +459,35 @@ void MainWindow::onPlaceFrame(ConnectionFrame* frame)
y = 0;
else if (y > s.height() - _tileHeight)
y = (_tilesY - 1) * _tileHeight;
+
+ const QRect &trashCenter = ui->trash->geometry();
+ // Check if x coordinate is in trash position.
+ if (trashCenter.contains(p))
+ {
+ // Do not offer deleting online client.
+ if (frame->client() != NULL)
+ {
+ QMessageBox::critical(this, tr("Selection"), sStrClientOnline);
+ frame->move(frame->getPreviousPosition());
+ return;
+ }
+ else
+ {
+ int ret = QMessageBox::question(this, "Warning", "Sure, You want to delete selected client?", 0, 1, 2);
+ if (ret == 1)
+ {
+ frame->hide();
+ frame->deleteLater();
+ _clientFrames.removeOne(frame);
+ return;
+ }
+ else
+ {
+ frame->move(frame->getPreviousPosition());
+ return;
+ }
+ }
+ }
qDebug("Move D");
frame->move(x, y);
savePosition(frame);
@@ -600,6 +639,8 @@ void MainWindow::onButtonTutorToAll()
QMessageBox::critical(this, tr("Projection"), sStrTutorNdef);
else if (getTutorFrame()->client() == NULL)
QMessageBox::critical(this, tr("Projection"), sStrTutorOffline);
+ else if (_clientFrames.size() == 1)
+ QMessageBox::critical(this, tr("Projection"), sStrNoDestAv);
else
changeProjection(getTutorFrame()->client(), Mode::Broadcast);
}
diff --git a/src/server/mainwindow/mainwindow.h b/src/server/mainwindow/mainwindow.h
index 851dc84..524a0b1 100644
--- a/src/server/mainwindow/mainwindow.h
+++ b/src/server/mainwindow/mainwindow.h
@@ -69,6 +69,8 @@ private:
static const QString sStrDestNdef;
static const QString sStrDestOffline;
static const QString sStrSourceDestSame;
+ static const QString sStrClientOnline;
+ static const QString sStrNoDestAv;
void placeFrameInFreeSlot(ConnectionFrame* frame);
ConnectionFrame* createFrame();
--
cgit v1.2.3-55-g7522