[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [sflphone-kde] src: [ #50496 ] Improve the screen sharing implementation
From:       Emmanuel Lepage Vallee <emmanuel.lepage () savoirfairelinux ! com>
Date:       2014-06-30 22:20:40
Message-ID: E1X1jwG-0002iO-S4 () scm ! kde ! org
[Download RAW message or body]

Git commit 9b8dafaa095cb0f321b90d1efce9066072867748 by Emmanuel Lepage Vallee.
Committed on 30/06/2014 at 22:20.
Pushed by lepagevalleeemmanuel into branch 'master'.

[ #50496 ] Improve the screen sharing implementation

M  +6    -2    src/lib/video/videodevicemodel.cpp
M  +105  -58   src/widgets/ui/screensharingwidget.ui
M  +39   -0    src/widgets/videodock.cpp
M  +4    -0    src/widgets/videodock.h

http://commits.kde.org/sflphone-kde/9b8dafaa095cb0f321b90d1efce9066072867748

diff --git a/src/lib/video/videodevicemodel.cpp b/src/lib/video/videodevicemodel.cpp
index cbb8725..ae4a814 100644
--- a/src/lib/video/videodevicemodel.cpp
+++ b/src/lib/video/videodevicemodel.cpp
@@ -182,7 +182,7 @@ ExtendedVideoDeviceModel* ExtendedVideoDeviceModel::m_spInstance \
= nullptr;  
 ExtendedVideoDeviceModel::ExtendedVideoDeviceModel() : \
QAbstractListModel(QCoreApplication::instance())  {
-   
+   m_Display.rect = QRect(0,0,0,0);
 }
 
 ExtendedVideoDeviceModel* ExtendedVideoDeviceModel::instance()
@@ -259,7 +259,10 @@ void ExtendedVideoDeviceModel::switchTo(const int idx)
          DBus::VideoManager::instance().switchInput(ProtocolPrefix::NONE);
          break;
       case ExtendedDeviceList::SCREEN:
-         DBus::VideoManager::instance().switchInput( \
QString(ProtocolPrefix::DISPLAY)+"0:100x100"); +         \
DBus::VideoManager::instance().switchInput( \
QString(ProtocolPrefix::DISPLAY)+QString(":%1 %2x%3") +            \
.arg(m_Display.index) +            .arg(m_Display.rect.width())
+            .arg(m_Display.rect.height()));
          break;
       case ExtendedDeviceList::FILE:
          DBus::VideoManager::instance().switchInput(
@@ -296,6 +299,7 @@ void ExtendedVideoDeviceModel::setDisplay(int index, QRect rect)
 {
    m_Display.index  = index ;
    m_Display.rect   = rect  ;
+   switchTo(ExtendedDeviceList::SCREEN);
 }
 
 VideoDevice* VideoDeviceModel::getDevice(const QString& devId) const
diff --git a/src/widgets/ui/screensharingwidget.ui \
b/src/widgets/ui/screensharingwidget.ui index 3839455..44dd86e 100644
--- a/src/widgets/ui/screensharingwidget.ui
+++ b/src/widgets/ui/screensharingwidget.ui
@@ -6,46 +6,97 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>260</width>
-    <height>89</height>
+    <width>320</width>
+    <height>136</height>
    </rect>
   </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="2" column="1" colspan="2">
-    <widget class="QSpinBox" name="m_pWidth"/>
-   </item>
-   <item row="3" column="0">
-    <widget class="QLabel" name="label_3">
-     <property name="text">
-      <string>Offset (x,y):</string>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="1" column="0" rowspan="2" colspan="3">
+    <widget class="QFrame" name="m_pFrame">
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
      </property>
-    </widget>
-   </item>
-   <item row="2" column="0">
-    <widget class="QLabel" name="label_2">
-     <property name="text">
-      <string>Size (width,height):</string>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
      </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="m_pWidth"/>
+      </item>
+      <item row="1" column="4">
+       <widget class="QSpinBox" name="m_pHeight"/>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="m_pDisplay"/>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Display id:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2" colspan="2">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>x</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="5">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="2" column="2">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>,</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Offset (x,y):</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QSpinBox" name="m_pX"/>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Size (width,height):</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="4">
+       <widget class="QSpinBox" name="m_pY"/>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="3" column="5">
-    <widget class="QSpinBox" name="m_pY"/>
-   </item>
-   <item row="2" column="3" colspan="2">
-    <widget class="QLabel" name="label_4">
-     <property name="text">
-      <string>x</string>
-     </property>
-    </widget>
+   <item row="0" column="1" colspan="2">
+    <widget class="QComboBox" name="m_pScreens"/>
    </item>
    <item row="0" column="0">
-    <widget class="QLabel" name="label">
+    <widget class="QLabel" name="label_6">
      <property name="text">
-      <string>Display id:</string>
+      <string>Screen:</string>
      </property>
     </widget>
    </item>
-   <item row="4" column="0" colspan="2">
+   <item row="3" column="0">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -61,37 +112,33 @@
      </property>
     </spacer>
    </item>
-   <item row="3" column="6">
-    <spacer name="horizontalSpacer">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>40</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="0" column="1" colspan="2">
-    <widget class="QSpinBox" name="m_pDisplay"/>
-   </item>
-   <item row="2" column="5">
-    <widget class="QSpinBox" name="m_pHeight"/>
-   </item>
-   <item row="3" column="1" colspan="2">
-    <widget class="QSpinBox" name="m_pX"/>
-   </item>
-   <item row="3" column="3" colspan="2">
-    <widget class="QLabel" name="label_5">
-     <property name="text">
-      <string>,</string>
-     </property>
-    </widget>
-   </item>
   </layout>
+  <zorder>m_pScreens</zorder>
+  <zorder>m_pFrame</zorder>
+  <zorder>label</zorder>
+  <zorder>label_6</zorder>
+  <zorder>verticalSpacer</zorder>
  </widget>
  <resources/>
- <connections/>
+ <connections>
+  <connection>
+   <sender>m_pScreens</sender>
+   <signal>currentIndexChanged(int)</signal>
+   <receiver>ScreenSharing</receiver>
+   <slot>slotScreenIndexChanged(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>133</x>
+     <y>11</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>295</x>
+     <y>20</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+ <slots>
+  <slot>slotScreenIndexChanged(int)</slot>
+ </slots>
 </ui>
diff --git a/src/widgets/videodock.cpp b/src/widgets/videodock.cpp
index 4524215..a6e8b17 100644
--- a/src/widgets/videodock.cpp
+++ b/src/widgets/videodock.cpp
@@ -21,6 +21,7 @@
 #include <QtGui/QGridLayout>
 #include <QtGui/QWidgetItem>
 #include <QtGui/QGraphicsView>
+#include <QtGui/QDesktopWidget>
 #include <QtGui/QLabel>
 
 #include <KLocale>
@@ -67,9 +68,36 @@ public:
    ScreenSharingWidget(QWidget* parent) : QWidget(parent)
    {
       setupUi(this);
+      setupScreenCombo();
+      m_pFrame->setVisible(false);
+      slotScreenIndexChanged(0);
    }
+private:
+   //Helper
+   void setupScreenCombo();
+private Q_SLOTS:
+   void slotScreenIndexChanged(int idx);
 };
 
+void ScreenSharingWidget::setupScreenCombo()
+{
+   for (int i =0; i < QApplication::desktop()->screenCount();i++) {
+      m_pScreens->addItem(QString::number(i));
+   }
+   m_pScreens->addItem(i18n("Custom"));
+}
+
+
+void ScreenSharingWidget::slotScreenIndexChanged(int idx)
+{
+   if (idx == m_pScreens->count()-1) {
+      m_pFrame->setVisible(true);
+   }
+   else {
+      ExtendedVideoDeviceModel::instance()->setDisplay(0,QApplication::desktop()->screenGeometry(idx));
 +      m_pFrame->setVisible(false);
+   }
+}
 
 
 ///Constructor
@@ -128,6 +156,9 @@ void VideoDock::addRenderer(VideoRenderer* r)
    m_pVideoWidet->addRenderer(r);
 }
 
+
+
+
 void VideoDock::slotDeviceChanged(int index)
 {
    switch (index) {
@@ -158,6 +189,8 @@ void VideoDock::slotDeviceChanged(int index)
          if ( !m_pMediaPicker  ) {
             m_pMediaPicker = new MediaPicker(this);
             m_pMoreOpts->addWidget(m_pMediaPicker,11,0,1,4);
+            connect(m_pMediaPicker->m_pPicker,SIGNAL(urlSelected(KUrl)),
+               this,SLOT(slotFileSelected(KUrl)));
          }
          m_pMediaPicker->setVisible(true);
          break;
@@ -178,5 +211,11 @@ void VideoDock::slotDeviceChanged(int index)
    };
 }
 
+
+void VideoDock::slotFileSelected(const KUrl& url)
+{
+   ExtendedVideoDeviceModel::instance()->setFile(url);
+}
+
 #include "moc_videodock.cpp"
 #include "videodock.moc"
diff --git a/src/widgets/videodock.h b/src/widgets/videodock.h
index 227c6a1..a624a26 100644
--- a/src/widgets/videodock.h
+++ b/src/widgets/videodock.h
@@ -23,6 +23,9 @@
 //Qt
 class QGridLayout;
 
+//KDE
+class KUrl;
+
 //SFLPhone
 class VideoWidget3;
 class VideoRenderer;
@@ -46,6 +49,7 @@ private:
 
 private Q_SLOTS:
    void slotDeviceChanged(int index);
+   void slotFileSelected(const KUrl& url);
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic