mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-31 16:31:58 +02:00
Add startup fullscreen and volume preferences
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
const { GObject, Gst, Gtk } = imports.gi;
|
const { GObject, Gst, Gtk } = imports.gi;
|
||||||
const Misc = imports.clapper_src.misc;
|
const Misc = imports.clapper_src.misc;
|
||||||
const { Prefs } = imports.clapper_src.prefs;
|
const Prefs = imports.clapper_src.prefs;
|
||||||
|
|
||||||
var actions = [
|
var actions = [
|
||||||
prefs,
|
prefs,
|
||||||
about
|
about,
|
||||||
];
|
];
|
||||||
|
|
||||||
var accels = [
|
var accels = [
|
||||||
@@ -13,14 +13,14 @@ var accels = [
|
|||||||
|
|
||||||
function prefs(window, appName)
|
function prefs(window, appName)
|
||||||
{
|
{
|
||||||
let prefs = new Prefs();
|
let prefsWidget = Prefs.buildPrefsWidget();
|
||||||
let prefsDialog = new Gtk.Dialog({
|
let prefsDialog = new Gtk.Dialog({
|
||||||
title: 'Preferences',
|
title: 'Preferences',
|
||||||
modal: true,
|
modal: true,
|
||||||
transient_for: window,
|
transient_for: window,
|
||||||
child: prefs,
|
child: prefsWidget,
|
||||||
default_width: 400,
|
default_width: 460,
|
||||||
default_height: 320,
|
default_height: 400,
|
||||||
});
|
});
|
||||||
prefsDialog.connect('close-request', () => prefsDialog.run_dispose());
|
prefsDialog.connect('close-request', () => prefsDialog.run_dispose());
|
||||||
prefsDialog.present();
|
prefsDialog.present();
|
||||||
|
@@ -17,6 +17,7 @@ class ClapperPlayer extends PlayerBase
|
|||||||
this.is_local_file = false;
|
this.is_local_file = false;
|
||||||
this.seek_done = true;
|
this.seek_done = true;
|
||||||
this.dragAllowed = false;
|
this.dragAllowed = false;
|
||||||
|
this.doneStartup = false;
|
||||||
|
|
||||||
this.posX = 0;
|
this.posX = 0;
|
||||||
this.posY = 0;
|
this.posY = 0;
|
||||||
@@ -342,18 +343,32 @@ class ClapperPlayer extends PlayerBase
|
|||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onUriLoaded(self, uri)
|
_onUriLoaded(player, uri)
|
||||||
{
|
{
|
||||||
|
if(!this.doneStartup) {
|
||||||
|
if(this.settings.get_boolean('fullscreen-auto')) {
|
||||||
|
let root = player.widget.get_root();
|
||||||
|
if(root) {
|
||||||
|
let clapperWidget = root.get_child();
|
||||||
|
if(!clapperWidget.fullscreenMode)
|
||||||
|
root.fullscreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(this.settings.get_string('volume-initial') === 'custom')
|
||||||
|
this.set_volume(this.settings.get_int('volume-value') / 100);
|
||||||
|
}
|
||||||
|
this.doneStartup = true;
|
||||||
|
|
||||||
this.play();
|
this.play();
|
||||||
debug(`URI loaded: ${uri}`);
|
debug(`URI loaded: ${uri}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onPlayerWarning(self, error)
|
_onPlayerWarning(player, error)
|
||||||
{
|
{
|
||||||
debug(error.message, 'LEVEL_WARNING');
|
debug(error.message, 'LEVEL_WARNING');
|
||||||
}
|
}
|
||||||
|
|
||||||
_onPlayerError(self, error)
|
_onPlayerError(player, error)
|
||||||
{
|
{
|
||||||
debug(error);
|
debug(error);
|
||||||
}
|
}
|
||||||
|
@@ -8,32 +8,46 @@ class ClapperGeneralPage extends PrefsBase.Grid
|
|||||||
{
|
{
|
||||||
super._init();
|
super._init();
|
||||||
|
|
||||||
let label;
|
this.addTitle('Startup');
|
||||||
let widget;
|
this.addCheckButton('Auto enter fullscreen', 'fullscreen-auto');
|
||||||
|
|
||||||
label = this.getLabel('Seeking', true);
|
this.addTitle('Volume');
|
||||||
this.addToGrid(label);
|
let comboBox = this.addComboBoxText('Initial value', [
|
||||||
|
['restore', "Restore"],
|
||||||
|
['custom', "Custom"],
|
||||||
|
], 'volume-initial');
|
||||||
|
let spinButton = this.addSpinButton('Value (percentage)', 0, 200, 'volume-value');
|
||||||
|
this._onVolumeInitialChanged(spinButton, comboBox);
|
||||||
|
comboBox.connect('changed', this._onVolumeInitialChanged.bind(this, spinButton));
|
||||||
|
}
|
||||||
|
|
||||||
label = this.getLabel('Mode:');
|
_onVolumeInitialChanged(spinButton, comboBox)
|
||||||
widget = this.getComboBoxText([
|
{
|
||||||
|
let value = comboBox.get_active_id();
|
||||||
|
spinButton.set_visible(value === 'custom');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let BehaviourPage = GObject.registerClass(
|
||||||
|
class ClapperBehaviourPage extends PrefsBase.Grid
|
||||||
|
{
|
||||||
|
_init()
|
||||||
|
{
|
||||||
|
super._init();
|
||||||
|
|
||||||
|
this.addTitle('Seeking');
|
||||||
|
this.addComboBoxText('Mode', [
|
||||||
['normal', "Normal"],
|
['normal', "Normal"],
|
||||||
['accurate', "Accurate"],
|
['accurate', "Accurate"],
|
||||||
/* Needs gstplayer pipeline ref count fix */
|
/* Needs gstplayer pipeline ref count fix */
|
||||||
//['fast', "Fast"],
|
//['fast', "Fast"],
|
||||||
], 'seeking-mode');
|
], 'seeking-mode');
|
||||||
this.addToGrid(label, widget);
|
this.addComboBoxText('Unit', [
|
||||||
|
|
||||||
label = this.getLabel('Value:');
|
|
||||||
widget = this.getSpinButton(1, 99, 'seeking-value');
|
|
||||||
this.addToGrid(label, widget);
|
|
||||||
|
|
||||||
label = this.getLabel('Unit:');
|
|
||||||
widget = this.getComboBoxText([
|
|
||||||
['second', "Second"],
|
['second', "Second"],
|
||||||
['minute', "Minute"],
|
['minute', "Minute"],
|
||||||
['percentage', "Percentage"],
|
['percentage', "Percentage"],
|
||||||
], 'seeking-unit');
|
], 'seeking-unit');
|
||||||
this.addToGrid(label, widget);
|
this.addSpinButton('Value', 1, 99, 'seeking-value');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,38 +66,37 @@ class ClapperGStreamerPage extends PrefsBase.Grid
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Prefs = GObject.registerClass(
|
function buildPrefsWidget()
|
||||||
class ClapperPrefs extends Gtk.Box
|
|
||||||
{
|
{
|
||||||
_init()
|
let pages = [
|
||||||
{
|
{
|
||||||
super._init({
|
title: 'Player',
|
||||||
orientation: Gtk.Orientation.VERTICAL,
|
pages: [
|
||||||
});
|
{
|
||||||
|
title: 'General',
|
||||||
this.add_css_class('prefsbox');
|
widget: GeneralPage,
|
||||||
|
},
|
||||||
let pages = [
|
{
|
||||||
{
|
title: 'Behaviour',
|
||||||
title: 'General',
|
widget: BehaviourPage,
|
||||||
widget: GeneralPage,
|
}
|
||||||
},
|
]
|
||||||
|
},
|
||||||
/*
|
/*
|
||||||
{
|
{
|
||||||
title: 'Advanced',
|
title: 'Advanced',
|
||||||
pages: [
|
pages: [
|
||||||
{
|
{
|
||||||
title: 'GStreamer',
|
title: 'GStreamer',
|
||||||
widget: GStreamerPage,
|
widget: GStreamerPage,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
];
|
];
|
||||||
|
|
||||||
let prefsNotebook = new PrefsBase.Notebook(pages);
|
let prefsNotebook = new PrefsBase.Notebook(pages);
|
||||||
prefsNotebook.add_css_class('prefsnotebook');
|
prefsNotebook.add_css_class('prefsnotebook');
|
||||||
|
|
||||||
this.append(prefsNotebook);
|
return prefsNotebook;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
@@ -3,13 +3,19 @@ const { Gio, GObject, Gtk } = imports.gi;
|
|||||||
var Notebook = GObject.registerClass(
|
var Notebook = GObject.registerClass(
|
||||||
class ClapperPrefsNotebook extends Gtk.Notebook
|
class ClapperPrefsNotebook extends Gtk.Notebook
|
||||||
{
|
{
|
||||||
_init(pages)
|
_init(pages, isSubpage)
|
||||||
{
|
{
|
||||||
super._init({
|
super._init({
|
||||||
|
show_border: false,
|
||||||
vexpand: true,
|
vexpand: true,
|
||||||
hexpand: true,
|
hexpand: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(isSubpage) {
|
||||||
|
this.set_tab_pos(Gtk.PositionType.LEFT);
|
||||||
|
this.add_css_class('prefssubpage');
|
||||||
|
}
|
||||||
|
|
||||||
this.addArrayPages(pages);
|
this.addArrayPages(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,7 +28,7 @@ class ClapperPrefsNotebook extends Gtk.Notebook
|
|||||||
addObjectPages(item)
|
addObjectPages(item)
|
||||||
{
|
{
|
||||||
let widget = (item.pages)
|
let widget = (item.pages)
|
||||||
? new Notebook(item.pages)
|
? new Notebook(item.pages, true)
|
||||||
: new item.widget();
|
: new item.widget();
|
||||||
|
|
||||||
this.addToNotebook(widget, item.title);
|
this.addToNotebook(widget, item.title);
|
||||||
@@ -66,16 +72,52 @@ class ClapperPrefsGrid extends Gtk.Grid
|
|||||||
|
|
||||||
if(rightWidget) {
|
if(rightWidget) {
|
||||||
spanWidth = 1;
|
spanWidth = 1;
|
||||||
|
rightWidget.bind_property('visible', leftWidget, 'visible',
|
||||||
|
GObject.BindingFlags.SYNC_CREATE
|
||||||
|
);
|
||||||
this.attach(rightWidget, 1, this.gridIndex, 1, 1);
|
this.attach(rightWidget, 1, this.gridIndex, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.attach(leftWidget, 0, this.gridIndex, spanWidth, 1);
|
this.attach(leftWidget, 0, this.gridIndex, spanWidth, 1);
|
||||||
this.gridIndex++;
|
this.gridIndex++;
|
||||||
|
|
||||||
|
return rightWidget || leftWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
addTitle(text)
|
||||||
|
{
|
||||||
|
let label = this.getLabel(text, true);
|
||||||
|
|
||||||
|
return this.addToGrid(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
addComboBoxText(text, entries, setting)
|
||||||
|
{
|
||||||
|
let label = this.getLabel(text + ':');
|
||||||
|
let widget = this.getComboBoxText(entries, setting);
|
||||||
|
|
||||||
|
return this.addToGrid(label, widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
addSpinButton(text, min, max, setting)
|
||||||
|
{
|
||||||
|
let label = this.getLabel(text + ':');
|
||||||
|
let widget = this.getSpinButton(min, max, setting);
|
||||||
|
|
||||||
|
return this.addToGrid(label, widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
addCheckButton(text, setting)
|
||||||
|
{
|
||||||
|
let widget = this.getCheckButton(text, setting);
|
||||||
|
|
||||||
|
return this.addToGrid(widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
getLabel(text, isTitle)
|
getLabel(text, isTitle)
|
||||||
{
|
{
|
||||||
let marginLR = 0;
|
let marginLR = 0;
|
||||||
|
let marginTop = (isTitle && this.gridIndex > 0) ? 16 : 0;
|
||||||
let marginBottom = (isTitle) ? 2 : 0;
|
let marginBottom = (isTitle) ? 2 : 0;
|
||||||
|
|
||||||
if(isTitle)
|
if(isTitle)
|
||||||
@@ -88,6 +130,7 @@ class ClapperPrefsGrid extends Gtk.Grid
|
|||||||
use_markup: true,
|
use_markup: true,
|
||||||
hexpand: true,
|
hexpand: true,
|
||||||
halign: Gtk.Align.START,
|
halign: Gtk.Align.START,
|
||||||
|
margin_top: marginTop,
|
||||||
margin_bottom: marginBottom,
|
margin_bottom: marginBottom,
|
||||||
margin_start: marginLR,
|
margin_start: marginLR,
|
||||||
margin_end: marginLR,
|
margin_end: marginLR,
|
||||||
@@ -115,4 +158,14 @@ class ClapperPrefsGrid extends Gtk.Grid
|
|||||||
|
|
||||||
return spinButton;
|
return spinButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCheckButton(text, setting)
|
||||||
|
{
|
||||||
|
let checkButton = new Gtk.CheckButton({
|
||||||
|
label: text || null,
|
||||||
|
});
|
||||||
|
this.settings.bind(setting, checkButton, 'active', this.flag);
|
||||||
|
|
||||||
|
return checkButton;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
@@ -99,10 +99,9 @@ scale marks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Preferences */
|
/* Preferences */
|
||||||
.prefsbox {
|
|
||||||
margin: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prefsnotebook grid {
|
.prefsnotebook grid {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
.prefssubpage header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
@@ -1,6 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<schemalist gettext-domain="com.github.rafostar.Clapper">
|
<schemalist gettext-domain="com.github.rafostar.Clapper">
|
||||||
<schema id="com.github.rafostar.Clapper" path="/com/github/rafostar/Clapper/">
|
<schema id="com.github.rafostar.Clapper" path="/com/github/rafostar/Clapper/">
|
||||||
|
<!-- General -->
|
||||||
|
<key name="fullscreen-auto" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<summary>Automatically enter fullscreen when first file is loaded</summary>
|
||||||
|
</key>
|
||||||
|
<key name="volume-initial" type="s">
|
||||||
|
<default>"restore"</default>
|
||||||
|
<summary>Mode used for startup volume value</summary>
|
||||||
|
</key>
|
||||||
|
<key name="volume-value" type="i">
|
||||||
|
<default>100</default>
|
||||||
|
<summary>Custom initial volume value after startup</summary>
|
||||||
|
</key>
|
||||||
|
|
||||||
|
<!-- Behaviour -->
|
||||||
<key name="seeking-mode" type="s">
|
<key name="seeking-mode" type="s">
|
||||||
<default>"normal"</default>
|
<default>"normal"</default>
|
||||||
<summary>Mode used for seeking</summary>
|
<summary>Mode used for seeking</summary>
|
||||||
@@ -13,6 +28,8 @@
|
|||||||
<default>"second"</default>
|
<default>"second"</default>
|
||||||
<summary>Unit to use with seeking value</summary>
|
<summary>Unit to use with seeking value</summary>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
<!-- GStreamer -->
|
||||||
<key name="plugin-ranking" type="s">
|
<key name="plugin-ranking" type="s">
|
||||||
<default>"{}"</default>
|
<default>"{}"</default>
|
||||||
<summary>Custom values for GStreamer plugin ranking</summary>
|
<summary>Custom values for GStreamer plugin ranking</summary>
|
||||||
|
Reference in New Issue
Block a user