Commit 00e64e52 authored by Guillaume Roguez's avatar Guillaume Roguez

Merge fixes from tag '0.1.0'

Release 0.1.0

* tag '0.1.0':
  log: remove debugging log
  about: list contributors alphabetically
  packaging: create valid bundle and dmg
  call: detect ring calls to prepend 'ring:'
  credits: add Credits.rtf file
  ui: hide advanced and security screens for accounts
  preferences: bind video prefs to lrc
  build: fix detections of .xib by xcode

Change-Id: I3c4440286982b8e58898c8cd0b8c6f3d22f47412
parents 38f15e50 23f61559
......@@ -208,8 +208,8 @@ public:
[configPanels insertTabViewItem:generalTabItem atIndex:0];
[configPanels insertTabViewItem:audioTabItem atIndex:1];
[configPanels insertTabViewItem:videoTabItem atIndex:2];
[configPanels insertTabViewItem:advancedTabItem atIndex:3];
[configPanels insertTabViewItem:securityTabItem atIndex:4];
//[configPanels insertTabViewItem:advancedTabItem atIndex:3];
//[configPanels insertTabViewItem:securityTabItem atIndex:4];
[self.generalVC loadAccount:acc];
[self.audioVC loadAccount:acc];
......@@ -248,8 +248,8 @@ public:
[configPanels insertTabViewItem:ringTabItem atIndex:0];
[configPanels insertTabViewItem:audioTabItem atIndex:1];
[configPanels insertTabViewItem:videoTabItem atIndex:2];
[configPanels insertTabViewItem:advancedTabItem atIndex:3];
[configPanels insertTabViewItem:securityTabItem atIndex:4];
//[configPanels insertTabViewItem:advancedTabItem atIndex:3];
//[configPanels insertTabViewItem:securityTabItem atIndex:4];
[self.ringVC loadAccount:acc];
[self.audioVC loadAccount:acc];
......
......@@ -5,7 +5,11 @@ IF(POLICY CMP0022)
ENDIF(POLICY CMP0022)
SET(PROJ_NAME Ring)
SET(RING_VERSION 1.0)
SET(RING_VERSION "0.1.0")
SET(RING_VERSION_NAME "Samuel de Champlain")
SET(BUNDLE_VERSION "Samuel de Champlain (0.1.0")
SET(PROJ_COPYRIGHT " © 2015 Savoir-faire Linux \n GPLv3 https://www.gnu.org/copyleft/gpl.html")
ADD_DEFINITIONS("-std=c++11")
......@@ -86,11 +90,7 @@ SET(ringclient_HDRS
# Icons
# NOTE: Don't include the path in MACOSX_BUNDLE_ICON_FILE -- this is
# the property added to Info.plist
#SET(MACOSX_BUNDLE_ICON_FILE appicon.icns)
# And this part tells CMake where to find and install the file itself
# This part tells CMake where to find and install the file itself
SET(myApp_ICON ${CMAKE_CURRENT_SOURCE_DIR}/data/appicon.icns)
SET_SOURCE_FILES_PROPERTIES(${myApp_ICON} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources")
......@@ -106,13 +106,23 @@ ${CMAKE_CURRENT_SOURCE_DIR}/data/dark/audio.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/general.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/video.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_video.png)
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ${xib}.xib)
ENDFOREACH()
ADD_EXECUTABLE(${PROJ_NAME} MACOSX_BUNDLE
${ringclient_SRCS}
${ringclient_HDRS}
${ringclient_XIBS_FOR_EXECUTABLE}
${myApp_ICON}
Credits.rtf
${ring_ICONS})
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
......@@ -134,10 +144,10 @@ set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
SET_TARGET_PROPERTIES(${PROJ_NAME} PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in
MACOSX_BUNDLE_GUI_IDENTIFIER "cx.ring"
MACOSX_BUNDLE_SHORT_VERSION_STRING ${RING_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${RING_VERSION_NAME}
MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJ_NAME} ${RING_VERSION} Nightly"
MACOSX_BUNDLE_BUNDLE_VERSION ${RING_VERSION}
MACOSX_BUNDLE_COPYRIGHT "${PROJ_NAME}"
MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}"
MACOSX_BUNDLE_INFO_STRING "Nightly build of ${PROJ_NAME} ${RING_VERSION} for testing and development"
MACOSX_BUNDLE_BUNDLE_NAME ${PROJ_NAME}
MACOSX_BUNDLE_ICON_FILE "appicon.icns"
......@@ -164,3 +174,46 @@ FOREACH(xib ${ringclient_XIBS})
COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/${xib}.xib")
ENDFOREACH()
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX})
SET(APPS "\${CMAKE_INSTALL_PREFIX}/${PROJ_NAME}.app")
#--------------------------------------------------------------------------------
# Install the QtTest application, on Apple, the bundle is at the root of the
# install tree
INSTALL(TARGETS ${PROJ_NAME} BUNDLE DESTINATION . COMPONENT Runtime)
SET(QT_PLUGINS_DESTDIR ${PROJ_NAME}.app/Contents/Plugins/platforms)
#--------------------------------------------------------------------------------
# Install needed Qt plugins by copying directories from the qt installation
LIST(APPEND QT_PLUGINS Qt5::QTgaPlugin Qt5::QTiffPlugin Qt5::QCocoaIntegrationPlugin)
FOREACH(plugin ${QT_PLUGINS})
GET_TARGET_PROPERTY(_loc ${plugin} LOCATION)
INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR} COMPONENT Runtime)
ENDFOREACH()
# directories to look for dependencies
SET(DIRS ${CMAKE_INSTALL_PREFIX}/lib ${QT_LIB_DIR})
INSTALL(CODE "
file(GLOB_RECURSE QTPLUGINS
\"\${CMAKE_INSTALL_PREFIX}/${QT_PLUGINS_DESTDIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
include(BundleUtilities)
SET(BU_CHMOD_BUNDLE_ITEMS TRUE)
fixup_bundle(\"${APPS}\" \"\${QTPLUGINS}\" \"${DIRS}\")
" COMPONENT Runtime)
#================================
# Packaging
#================================
SET( CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJ_NAME})
SET( CPACK_PACKAGE_NAME ${PROJ_NAME} )
SET( CPACK_PACKAGE_CONTACT "Alexandre Lision")
SET( CPACK_PACKAGE_VENDOR "Savoir-faire Linux")
SET( CPACK_PACKAGE_VERSION_MAJOR ${PROG_MAJOR_VERSION})
SET( CPACK_PACKAGE_VERSION_MINOR ${PROG_MINOR_VERSION})
SET( CPACK_PACKAGE_VERSION_PATCH ${PROG_PATCH_VERSION})
SET(CPACK_BINARY_DRAGNDROP ON)
SET( CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
INCLUDE(CPack)
......@@ -70,8 +70,6 @@
QObject::connect(CallModel::instance(),
&QAbstractItemModel::dataChanged,
[=](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
NSLog(@"data changed for call tree %d, %d", topLeft.row(), bottomRight.row());
[conversationsView reloadDataForRowIndexes:
[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(topLeft.row(), bottomRight.row() + 1)]
columnIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, conversationsView.tableColumns.count)]];
......
{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww9000\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\qc
\f0\i\fs24 \cf0 \
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\qc
{\field{\*\fldinst{HYPERLINK "http://ring.cx/"}}{\fldrslt \cf0 http://ring.cx/}}\
\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\qc
\i0\b \cf0 Authors
\i\b0 \
Adrien B\'e9raud\
Alexandre Lision\
\'c9dric Ladent-Milaret\
Eloi Bail\
Emmanuel Lepage-Vall\'e9e\
Guillaume Roguez\
Marianne Forget\
Stepan Salenikovich\
\
Based on SFLphone's project\
}
......@@ -206,7 +206,6 @@
QObject::connect(CallModel::instance()->selectionModel(),
&QItemSelectionModel::currentChanged,
[=](const QModelIndex &current, const QModelIndex &previous) {
NSLog(@"selection changed!");
if(!current.isValid()) {
[self animateOut];
return;
......@@ -219,14 +218,12 @@
QObject::connect(CallModel::instance(),
&QAbstractItemModel::dataChanged,
[=](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
NSLog(@"data changed!");
[self updateCall];
});
QObject::connect(CallModel::instance()->userActionModel(),
&QAbstractItemModel::dataChanged,
[=](const QModelIndex &topLeft, const QModelIndex &bottomRight) {
NSLog(@"useraction changed");
const int first(topLeft.row()),last(bottomRight.row());
for(int i = first; i <= last;i++) {
[self updateActionAtIndex:i];
......@@ -236,7 +233,6 @@
QObject::connect(CallModel::instance(),
&CallModel::callStateChanged,
[self](Call* c, Call::State state) {
NSLog(@"callStateChanged");
[self updateCall];
});
}
......@@ -255,7 +251,6 @@
if(call->videoRenderer())
{
NSLog(@"GONNA CONNECT TO FRAMES");
[self connectVideoRenderer:call->videoRenderer()];
}
......
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1090</int>
<int key="IBDocument.SystemTarget">101000</int>
<string key="IBDocument.SystemVersion">13F34</string>
<string key="IBDocument.InterfaceBuilderVersion">6254</string>
<string key="IBDocument.AppKitVersion">1265.21</string>
......
......@@ -201,7 +201,17 @@ static NSString* const kCallButtonIdentifer = @"CallButtonIdentifier";
- (IBAction)placeCall:(id)sender
{
Call* c = CallModel::instance()->dialingCall();
c->setDialNumber(QString::fromNSString([callField stringValue]));
// check for a valid ring hash
NSCharacterSet *hexSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789abcdefABCDEF"];
BOOL valid = [[[callField stringValue] stringByTrimmingCharactersInSet:hexSet] isEqualToString:@""];
if(valid && callField.stringValue.length == 40) {
c->setDialNumber(QString::fromNSString([NSString stringWithFormat:@"ring:%@",[callField stringValue]]));
} else {
c->setDialNumber(QString::fromNSString([callField stringValue]));
}
c << Call::Action::ACCEPT;
}
......@@ -237,7 +247,6 @@ static NSString* const kCallButtonIdentifer = @"CallButtonIdentifier";
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
{
NSLog(@"Selector method is (%@)", NSStringFromSelector( commandSelector ) );
if (commandSelector == @selector(insertNewline:)) {
if([[callField stringValue] isNotEqualTo:@""]) {
[self placeCall:nil];
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="13F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6751" systemVersion="14C1510" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6254"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6751"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="VideoPrefsVC">
<connections>
<outlet property="previewView" destination="qAJ-w8-a6Q" id="uSq-tE-heV"/>
<outlet property="ratesList" destination="e3h-qA-wZ5" id="EPS-08-l6m"/>
<outlet property="sizesList" destination="Aec-P9-KNS" id="nYI-YP-fpQ"/>
<outlet property="videoDevicesList" destination="5L8-b6-N3k" id="ZsJ-sc-pYZ"/>
<outlet property="view" destination="c22-O7-iKe" id="EfM-Op-S9T"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="c22-O7-iKe">
<rect key="frame" x="0.0" y="0.0" width="683" height="609"/>
<rect key="frame" x="0.0" y="0.0" width="541" height="440"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DTo-76-fYS">
<rect key="frame" x="71" y="369" width="53" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Camera" id="YCM-JC-jin">
<font key="font" metaFont="system"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FRq-3r-0WL">
<rect key="frame" x="16" y="406" width="66" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Selection" id="VqO-Gm-CbB">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView wantsLayer="YES" canDrawConcurrently="YES" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qAJ-w8-a6Q" userLabel="Preview">
<rect key="frame" x="106" y="104" width="470" height="230"/>
</customView>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Upa-iB-KCC">
<rect key="frame" x="124" y="358" width="122" height="32"/>
<buttonCell key="cell" type="push" title="Start preview" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="bX7-eQ-8Ea">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VWx-4c-7aF">
<rect key="frame" x="116" y="550" width="50" height="17"/>
<rect key="frame" x="61" y="381" width="50" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Device:" id="170-NP-CSP">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Y00-jB-8Ux">
<rect key="frame" x="106" y="505" width="60" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Channel:" id="IJ5-l7-dN7">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5L8-b6-N3k" userLabel="Devices">
<rect key="frame" x="115" y="375" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="6Vf-hb-26C">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="devices" id="zJ9-1a-cpr">
<connections>
<outlet property="delegate" destination="-2" id="mF2-Zc-wNP"/>
</connections>
</menu>
</popUpButtonCell>
<connections>
<action selector="chooseDevice:" target="-2" id="JjJ-Ul-8VM"/>
</connections>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cDr-8B-RiJ">
<rect key="frame" x="132" y="460" width="34" height="17"/>
<rect key="frame" x="77" y="349" width="34" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Size:" id="4bq-ls-mCp">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
......@@ -59,87 +59,78 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="60X-MX-gun">
<rect key="frame" x="130" y="413" width="36" height="17"/>
<rect key="frame" x="75" y="315" width="36" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Rate:" id="5Im-df-jdd">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5L8-b6-N3k">
<rect key="frame" x="170" y="544" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="PLA-b4-Y2Z" id="6Vf-hb-26C">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="zJ9-1a-cpr">
<items>
<menuItem title="Item 1" state="on" id="PLA-b4-Y2Z"/>
<menuItem title="Item 2" id="AqV-S1-JqC"/>
<menuItem title="Item 3" id="CkU-QC-dVQ"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="weW-fX-GwJ">
<rect key="frame" x="170" y="500" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="jp0-zC-w4a" id="TPq-dw-EwN">
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Aec-P9-KNS" userLabel="Sizes">
<rect key="frame" x="115" y="344" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="6ly-dX-MT4">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="9bI-4N-gfG">
<items>
<menuItem title="Item 1" state="on" id="jp0-zC-w4a"/>
<menuItem title="Item 2" id="WQz-Y3-iY1"/>
<menuItem title="Item 3" id="gky-36-FHp"/>
</items>
<menu key="menu" title="sizes" id="ykd-50-las">
<connections>
<outlet property="delegate" destination="-2" id="5cI-wH-0AT"/>
</connections>
</menu>
</popUpButtonCell>
<connections>
<action selector="chooseSize:" target="-2" id="qra-Ci-Om8"/>
</connections>
</popUpButton>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Aec-P9-KNS">
<rect key="frame" x="170" y="455" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="n8r-LT-t3t" id="6ly-dX-MT4">
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="e3h-qA-wZ5" userLabel="Rates">
<rect key="frame" x="115" y="310" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="pDt-c4-Fhs">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="ykd-50-las">
<items>
<menuItem title="Item 1" state="on" id="n8r-LT-t3t"/>
<menuItem title="Item 2" id="jUy-xn-1kn"/>
<menuItem title="Item 3" id="obd-cQ-mz8"/>
</items>
<menu key="menu" title="rates" id="aKL-76-vSP">
<connections>
<outlet property="delegate" destination="-2" id="5Gu-bg-y3C"/>
</connections>
</menu>
</popUpButtonCell>
<connections>
<action selector="chooseRate:" target="-2" id="nye-jT-0NU"/>
</connections>
</popUpButton>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="e3h-qA-wZ5">
<rect key="frame" x="170" y="408" width="189" height="26"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="GFu-rO-tr4" id="pDt-c4-Fhs">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="aKL-76-vSP">
<items>
<menuItem title="Item 1" state="on" id="GFu-rO-tr4"/>
<menuItem title="Item 2" id="aF9-ac-MF4"/>
<menuItem title="Item 3" id="FoN-dd-DcF"/>
</items>
</menu>
</popUpButtonCell>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WNL-Ul-Jbr">
<rect key="frame" x="526" y="342" width="52" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Preview" id="Lrq-tD-NYF">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FRq-3r-0WL">
<rect key="frame" x="71" y="575" width="61" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Selection" id="VqO-Gm-CbB">
<font key="font" metaFont="system"/>
<customView wantsLayer="YES" canDrawConcurrently="YES" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qAJ-w8-a6Q" userLabel="Preview">
<rect key="frame" x="32" y="20" width="470" height="230"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="470" id="WVf-8f-i99"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="230" id="udn-lE-Jd4"/>
</constraints>
</customView>
<button verticalHuggingPriority="750" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qHu-4n-CTV">
<rect key="frame" x="32" y="257" width="122" height="19"/>
<buttonCell key="cell" type="roundRect" title="Test preview" bezelStyle="roundedRect" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="IGT-OE-qJj">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="cellTitle"/>
</buttonCell>
<connections>
<action selector="togglePreview:" target="-2" id="Z1R-EV-1Na"/>
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DTo-76-fYS">
<rect key="frame" x="18" y="284" width="53" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Camera" id="YCM-JC-jin">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<point key="canvasLocation" x="428.5" y="407.5"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="qAJ-w8-a6Q" secondAttribute="trailing" constant="39" id="EIm-N6-noX"/>
<constraint firstItem="qHu-4n-CTV" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="32" id="HL9-hR-8AT"/>
<constraint firstAttribute="bottom" secondItem="qAJ-w8-a6Q" secondAttribute="bottom" constant="20" id="Sv6-Ls-4tS"/>
<constraint firstItem="qAJ-w8-a6Q" firstAttribute="top" secondItem="qHu-4n-CTV" secondAttribute="bottom" constant="8" id="cQh-RN-ARc"/>
<constraint firstItem="qAJ-w8-a6Q" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="32" id="gt3-zq-vOi"/>
<constraint firstItem="qAJ-w8-a6Q" firstAttribute="leading" secondItem="qHu-4n-CTV" secondAttribute="leading" id="oaw-xG-gPo"/>
</constraints>
<point key="canvasLocation" x="372.5" y="257"/>
</customView>
</objects>
</document>
//
// VideoPrefsVC.h
// Ring
//
// Created by Alexandre Lision on 2015-02-20.
//
//
/*
* Copyright (C) 2004-2015 Savoir-Faire Linux Inc.
* Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Additional permission under GNU GPL version 3 section 7:
*
* If you modify this program, or any covered work, by linking or
* combining it with the OpenSSL project's OpenSSL library (or a
* modified version of that library), containing parts covered by the
* terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
* grants you additional permission to convey the resulting work.
* Corresponding Source for a non-source form of such a combination
* shall include the source code for the parts of OpenSSL used as well
* as that of the covered work.
*/
#ifndef RING_VIDEOPREFSVC_H
#define RING_VIDEOPREFSVC_H
#import <Cocoa/Cocoa.h>
@interface VideoPrefsVC : NSViewController
@interface VideoPrefsVC : NSViewController <NSMenuDelegate> {
}
@end
#endif // RING_VIDEOPREFSVC_H
......@@ -29,15 +29,211 @@
*/
#import "VideoPrefsVC.h"
#import <QuartzCore/QuartzCore.h>
#import <QItemSelectionModel>
#import <QAbstractProxyModel>
#import <video/configurationproxy.h>
#import <video/sourcemodel.h>
#import <video/previewmanager.h>
#import <video/renderer.h>
#import <video/device.h>
#import <video/devicemodel.h>
@interface VideoPrefsVC ()
@property (assign) IBOutlet NSView *previewView;
@property (assign) IBOutlet NSPopUpButton *videoDevicesList;
@property (assign) IBOutlet NSPopUpButton *sizesList;
@property (assign) IBOutlet NSPopUpButton *ratesList;
@end
@implementation VideoPrefsVC
@synthesize previewView;
@synthesize videoDevicesList;
@synthesize sizesList;
@synthesize ratesList;
QMetaObject::Connection frameUpdated;
QMetaObject::Connection previewStarted;
QMetaObject::Connection previewStopped;
- (void)loadView
{
[super loadView];
Video::ConfigurationProxy::deviceModel()->rowCount();
Video::ConfigurationProxy::resolutionModel()->rowCount();
Video::ConfigurationProxy::rateModel()->rowCount();
QModelIndex qDeviceIdx = Video::ConfigurationProxy::deviceSelectionModel()->currentIndex();
qDeviceIdx = Video::ConfigurationProxy::deviceSelectionModel()->currentIndex();
[videoDevicesList addItemWithTitle:Video::ConfigurationProxy::deviceModel()->data(qDeviceIdx, Qt::DisplayRole).toString().toNSString()];
QModelIndex qSizeIdx = Video::ConfigurationProxy::resolutionSelectionModel()->currentIndex();
[sizesList addItemWithTitle:Video::ConfigurationProxy::resolutionModel()->data(qSizeIdx, Qt::DisplayRole).toString().toNSString()];
if(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::resolutionModel())) {
QObject::connect(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::resolutionModel()),
&QAbstractProxyModel::modelReset,
[=]() {
NSLog(@"resolution Source model changed!!!");
});
}
QModelIndex qRate = Video::ConfigurationProxy::rateSelectionModel()->currentIndex();
[ratesList addItemWithTitle:Video::ConfigurationProxy::rateModel()->data(qDeviceIdx, Qt::DisplayRole).toString().toNSString()];
if(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::rateModel())) {
QObject::connect(qobject_cast<QAbstractProxyModel*>(Video::ConfigurationProxy::rateModel()),
&QAbstractProxyModel::modelReset,
[=]() {
NSLog(@"rates Source model changed!!!");
});
}
[previewView setWantsLayer:YES];
[previewView setLayer:[CALayer layer]];
[previewView.layer setBackgroundColor:[NSColor blackColor].CGColor];
[previewView.layer setContentsGravity:kCAGravityResizeAspect];
[previewView.layer setFrame:previewView.frame];
[previewView.layer setBounds:previewView.frame];
[self connectPreviewSignals];
}
- (IBAction)chooseDevice:(id)sender {
int index = [sender indexOfSelectedItem];
QModelIndex qIdx = Video::ConfigurationProxy::deviceModel()->index(index, 0);
Video::ConfigurationProxy::deviceSelectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect);