Commit f23ec5a5 authored by Alexandre Lision's avatar Alexandre Lision

feature: add sending quality slider

This allows user to adjust its bitrate.

Refs #77700

Change-Id: I1b59f9ab1bf0c40783a5786ca15869ed13d46383
parent 8198f743
......@@ -106,6 +106,8 @@ SET(ringclient_CONTROLLERS
src/HistoryVC.h
src/PersonsVC.mm
src/PersonsVC.h
src/BitrateVC.mm
src/BitrateVC.h
src/ChatVC.mm
src/ChatVC.h)
......@@ -163,6 +165,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_mute_video.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_mute_audio.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_chat.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_search.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_quality.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ancrage.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/audio.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/general.png
......
/*
* 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.
*/
#import <Cocoa/Cocoa.h>
@interface BitrateVC : NSViewController
@end
/*
* 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.
*/
#import "BitrateVC.h"
#import <QSortFilterProxyModel>
#import <audio/codecmodel.h>
#import <callmodel.h>
#import <accountmodel.h>
@interface BitrateVC ()
@property (unsafe_unretained) IBOutlet NSSlider *bitrateSlider;
@end
@implementation BitrateVC
- (void)viewWillAppear
{
// Get the first video codec of the selected call and use this value as default
auto selectedCall = CallModel::instance()->selectedCall();
if (selectedCall) {
int bitrate = selectedCall->account()->codecModel()->videoCodecs()->index(0,0).data(static_cast<int>(CodecModel::Role::BITRATE)).toInt();
[self.bitrateSlider setNumberOfTickMarks:4];
[self.bitrateSlider setIntValue:bitrate];
[self.bitrateSlider setToolTip:[NSString stringWithFormat:@"%i bit/s",bitrate]];
}
}
- (IBAction)valueChanged:(id)sender
{
if (const auto& codecModel = CallModel::instance()->selectedCall()->account()->codecModel()) {
const auto& videoCodecs = codecModel->videoCodecs();
for (int i=0; i < videoCodecs->rowCount();i++) {
const auto& idx = videoCodecs->index(i,0);
videoCodecs->setData(idx, QString::number((unsigned int)[sender integerValue]), CodecModel::Role::BITRATE);
}
codecModel << CodecModel::EditAction::SAVE;
}
[self.bitrateSlider setToolTip:[NSString stringWithFormat:@"%i bit/s",[sender intValue]]];
}
@end
......@@ -75,6 +75,8 @@
@property (unsafe_unretained) IBOutlet NSSplitView *splitView;
@property (unsafe_unretained) IBOutlet NSButton *chatButton;
@property (strong) IBOutlet NSPopover *qualityPopOver;
@property QHash<int, NSButton*> actionHash;
// Video
......@@ -531,6 +533,9 @@
UserActionModel* uam = CallModel::instance()->userActionModel();
uam << UserActionModel::Action::MUTE_VIDEO;
}
- (IBAction)displayQualityPopUp:(id)sender {
[self.qualityPopOver showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge];
}
#pragma mark - NSSplitViewDelegate
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment