initial step at modularization. not happy with candy distro
This commit is contained in:
parent
f473a73b16
commit
991b23bac5
|
@ -1,5 +1,5 @@
|
|||
namespace Deskcandy.Candy {
|
||||
class Video : BaseCandy {
|
||||
public class Video : BaseCandy {
|
||||
public bool loop { get; set; default = true; }
|
||||
public double speed { get; set; default = 100.0; }
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace Deskcandy.Candy {
|
||||
class XScreensaver : BaseCandy {
|
||||
public class XScreensaver : BaseCandy {
|
||||
public string config_path { get; private set; }
|
||||
public string saver_path { get; private set; }
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace Deskcandy.Candy {
|
|||
|
||||
tag = this.get_child("_description");
|
||||
this.description = tag.text_content.strip();
|
||||
message(@"Loaded $this");
|
||||
debug(@"Loaded $this");
|
||||
}
|
||||
|
||||
public string to_string() {
|
||||
|
|
|
@ -4,5 +4,9 @@
|
|||
<file>window.ui</file>
|
||||
<file>desktop_window.ui</file>
|
||||
<file>main_menu.ui</file>
|
||||
<file>editor_page.ui</file>
|
||||
<file>presets_page.ui</file>
|
||||
<file>screensaver_form.ui</file>
|
||||
<file>video_form.ui</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
|
|
@ -264,176 +264,9 @@
|
|||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<template class="DeskcandyScreensaverForm" parent="GtkBin">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="shadow-type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="screensaver_chooser">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="model">screensavers_liststore</property>
|
||||
<property name="headers-clickable">False</property>
|
||||
<property name="search-column">0</property>
|
||||
<property name="activate-on-single-click">True</property>
|
||||
<signal name="row-activated" handler="on_screensaver_chooser_row_activated" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Name</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="ss_name"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Description</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="ss_description">
|
||||
<property name="single-paragraph-mode">True</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<template class="DeskcandyVideoForm" parent="GtkBin">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="video_chooser">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="filter">video_file_filter</property>
|
||||
<property name="title" translatable="yes">Select Video</property>
|
||||
<signal name="file-set" handler="on_video_property_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Speed</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="video_speed_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="adjustment">video_speed_adjustment</property>
|
||||
<property name="round-digits">2</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<signal name="value-changed" handler="on_video_property_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="video_loop_checkbox">
|
||||
<property name="label" translatable="yes">Loop</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<signal name="toggled" handler="on_video_property_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<object class="GtkAdjustment" id="opacity_adjustment">
|
||||
<property name="upper">100</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="screensavers_liststore">
|
||||
<columns>
|
||||
<!-- column-name label -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name description -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkFileFilter" id="video_file_filter">
|
||||
<mime-types>
|
||||
<mime-type>video/*</mime-type>
|
||||
</mime-types>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="video_speed_adjustment">
|
||||
<property name="lower">0.01</property>
|
||||
<property name="upper">5</property>
|
||||
<property name="step-increment">0.01</property>
|
||||
<property name="page-increment">0.10</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
using Deskcandy.Candy;
|
||||
|
||||
namespace Deskcandy {
|
||||
|
||||
[GtkTemplate(ui = "/moe/solarpunk/Deskcandy/editor_page.ui")]
|
||||
public class EditorPage : Gtk.Bin {
|
||||
public signal void preset_type_changed(string type);
|
||||
|
||||
[GtkChild]
|
||||
private unowned Gtk.Stack preset_type_stack;
|
||||
|
||||
private new unowned Window parent;
|
||||
private ScreensaverForm screensaver_form;
|
||||
private VideoForm video_form;
|
||||
|
||||
public EditorPage(Window parent) {
|
||||
this.parent = parent;
|
||||
|
||||
this.screensaver_form = new ScreensaverForm();
|
||||
this.preset_type_stack.add_titled(screensaver_form, "screensaver", "Screen Saver");
|
||||
|
||||
this.video_form = new VideoForm();
|
||||
this.preset_type_stack.add_titled(video_form, "video", "Video");
|
||||
}
|
||||
|
||||
public void on_initialized(BaseCandy[] candies) {
|
||||
// TODO: clean this up
|
||||
this.screensaver_form.on_initialized((XScreensaver)candies[0]);
|
||||
this.video_form.on_initialized((Video)candies[1]);
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_preset_type_stack_visible_child_name_notify(Object o, ParamSpec param) {
|
||||
if (this.preset_type_stack.visible_child_name == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
message(@"preset type: $(this.preset_type_stack.visible_child_name)");
|
||||
preset_type_changed(this.preset_type_stack.visible_child_name);
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cancel_edit_preset_button_clicked(Gtk.Widget w) {
|
||||
this.parent.main_stack.visible_child_name = "presets";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,10 @@ deskcandy_sources = [
|
|||
'window.vala',
|
||||
'desktop_window.vala',
|
||||
'application.vala',
|
||||
'editor_page.vala',
|
||||
'presets_page.vala',
|
||||
'screensaver_form.vala',
|
||||
'video_form.vala',
|
||||
'candy/base.vala',
|
||||
'candy/xscreensaver.vala',
|
||||
'candy/xscreensaver_config.vala',
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
|
||||
namespace Deskcandy {
|
||||
[GtkTemplate(ui = "/moe/solarpunk/Deskcandy/presets_page.ui")]
|
||||
public class PresetsPage : Gtk.Bin {
|
||||
private new unowned Window parent;
|
||||
|
||||
public PresetsPage(Window parent) {
|
||||
this.parent = parent;
|
||||
|
||||
var preset_action_group = new SimpleActionGroup();
|
||||
var create_preset = new SimpleAction("create", null);
|
||||
preset_action_group.add_action(create_preset);
|
||||
create_preset.activate.connect(this.on_create_preset);
|
||||
|
||||
var delete_preset = new SimpleAction("delete", null);
|
||||
delete_preset.activate.connect(this.on_delete_preset);
|
||||
preset_action_group.add_action(delete_preset);
|
||||
|
||||
this.insert_action_group("presets", preset_action_group);
|
||||
|
||||
}
|
||||
|
||||
private void on_create_preset(SimpleAction a, Variant? v) {
|
||||
this.parent.main_stack.visible_child_name = "editor";
|
||||
}
|
||||
|
||||
private void on_delete_preset(SimpleAction a, Variant? v) {
|
||||
message("delete");
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cancel_new_preset_button_clicked(Gtk.Widget w) {
|
||||
var popover = (Gtk.Popover)w.get_ancestor(typeof(Gtk.Popover));
|
||||
popover.popdown();
|
||||
this.parent.main_stack.visible_child_name = "presets";
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cancel_delete_preset_button_clicked(Gtk.Widget w) {
|
||||
var popover = (Gtk.Popover)w.get_ancestor(typeof(Gtk.Popover));
|
||||
popover.popdown();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.38.2 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.24"/>
|
||||
<template class="DeskcandyScreensaverForm" parent="GtkBin">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="shadow-type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="screensaver_chooser">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="model">screensavers_liststore</property>
|
||||
<property name="headers-clickable">False</property>
|
||||
<property name="search-column">0</property>
|
||||
<property name="activate-on-single-click">True</property>
|
||||
<signal name="row-activated" handler="on_screensaver_chooser_row_activated" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Name</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="ss_name"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Description</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="ss_description">
|
||||
<property name="single-paragraph-mode">True</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<object class="GtkListStore" id="screensavers_liststore">
|
||||
<columns>
|
||||
<!-- column-name label -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name description -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
</interface>
|
|
@ -0,0 +1,32 @@
|
|||
using Deskcandy.Candy;
|
||||
|
||||
namespace Deskcandy {
|
||||
[GtkTemplate(ui = "/moe/solarpunk/Deskcandy/screensaver_form.ui")]
|
||||
public class ScreensaverForm : Gtk.Bin {
|
||||
[GtkChild]
|
||||
private unowned Gtk.ListStore screensavers_liststore;
|
||||
|
||||
private unowned XScreensaver xss;
|
||||
|
||||
public void on_initialized(XScreensaver xss) {
|
||||
this.xss = xss;
|
||||
|
||||
Gtk.TreeIter iter;
|
||||
this.screensavers_liststore.clear();
|
||||
foreach (XScreensaverConfig config in xss.configs) {
|
||||
this.screensavers_liststore.append(out iter);
|
||||
this.screensavers_liststore.set(iter, 0, config.label, 1, config.description, 2, config.name);
|
||||
}
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_screensaver_chooser_row_activated(Gtk.TreeView treeview, Gtk.TreePath path, Gtk.TreeViewColumn col) {
|
||||
Gtk.TreeIter iter;
|
||||
if (treeview.model.get_iter(out iter, path)) {
|
||||
string name;
|
||||
treeview.model.get(iter, 2, out name);
|
||||
this.xss.name = name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.38.2 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.24"/>
|
||||
<template class="DeskcandyVideoForm" parent="GtkBin">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="video_chooser">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="filter">video_file_filter</property>
|
||||
<property name="title" translatable="yes">Select Video</property>
|
||||
<signal name="file-set" handler="on_video_property_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Speed</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="video_speed_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="adjustment">video_speed_adjustment</property>
|
||||
<property name="round-digits">2</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<signal name="value-changed" handler="on_video_property_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="video_loop_checkbox">
|
||||
<property name="label" translatable="yes">Loop</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<signal name="toggled" handler="on_video_property_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<object class="GtkFileFilter" id="video_file_filter">
|
||||
<mime-types>
|
||||
<mime-type>video/*</mime-type>
|
||||
</mime-types>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="video_speed_adjustment">
|
||||
<property name="lower">0.01</property>
|
||||
<property name="upper">5</property>
|
||||
<property name="value">1</property>
|
||||
<property name="step-increment">0.01</property>
|
||||
<property name="page-increment">0.10</property>
|
||||
</object>
|
||||
</interface>
|
|
@ -0,0 +1,27 @@
|
|||
using Deskcandy.Candy;
|
||||
|
||||
namespace Deskcandy {
|
||||
[GtkTemplate(ui = "/moe/solarpunk/Deskcandy/video_form.ui")]
|
||||
public class VideoForm : Gtk.Bin {
|
||||
[GtkChild]
|
||||
private unowned Gtk.FileChooserButton video_chooser;
|
||||
[GtkChild]
|
||||
private unowned Gtk.CheckButton video_loop_checkbox;
|
||||
[GtkChild]
|
||||
private unowned Gtk.Range video_speed_slider;
|
||||
|
||||
private unowned Video video;
|
||||
|
||||
public void on_initialized(Video video) {
|
||||
this.video = video;
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_video_property_changed() {
|
||||
this.video.name = this.video_chooser.get_filename();
|
||||
this.video.loop = this.video_loop_checkbox.get_active();
|
||||
this.video.speed = this.video_speed_slider.get_value();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
126
src/window.vala
126
src/window.vala
|
@ -11,59 +11,59 @@ namespace Deskcandy {
|
|||
[GtkChild]
|
||||
private unowned Gtk.Bin preview;
|
||||
[GtkChild]
|
||||
private unowned Gtk.Stack main_stack;
|
||||
[GtkChild]
|
||||
private unowned Gtk.Stack preset_type_stack;
|
||||
public unowned Gtk.Stack main_stack { get; private set; }
|
||||
[GtkChild]
|
||||
private unowned Gtk.Label candy_status;
|
||||
[GtkChild]
|
||||
private unowned Gtk.ListStore screensavers_liststore;
|
||||
[GtkChild]
|
||||
private unowned Gtk.FileChooserButton video_chooser;
|
||||
[GtkChild]
|
||||
private unowned Gtk.CheckButton video_loop_checkbox;
|
||||
[GtkChild]
|
||||
private unowned Gtk.Range video_speed_slider;
|
||||
|
||||
|
||||
private BaseCandy active_candy;
|
||||
private Subprocess proc;
|
||||
private XScreensaver xss;
|
||||
private Video video;
|
||||
private EditorPage editor_page;
|
||||
|
||||
public Window (Application app) {
|
||||
Object (application: app);
|
||||
|
||||
var preset_action_group = new SimpleActionGroup();
|
||||
var create_preset = new SimpleAction("create", null);
|
||||
preset_action_group.add_action(create_preset);
|
||||
create_preset.activate.connect(this.on_create_preset);
|
||||
|
||||
var delete_preset = new SimpleAction("delete", null);
|
||||
delete_preset.activate.connect(this.on_delete_preset);
|
||||
preset_action_group.add_action(delete_preset);
|
||||
|
||||
this.insert_action_group("presets", preset_action_group);
|
||||
|
||||
var builder = new Gtk.Builder.from_resource("/moe/solarpunk/Deskcandy/main_menu.ui");
|
||||
var menu = (GLib.MenuModel)builder.get_object("main_menu");
|
||||
this.open_menu_button.menu_model = menu;
|
||||
|
||||
app.initialized.connect(this.on_initialized);
|
||||
app.notify["enabled"].connect(this.on_notify_enabled);
|
||||
|
||||
var presets_page = new PresetsPage(this);
|
||||
this.main_stack.add_titled(presets_page, "presets", "Presets");
|
||||
|
||||
this.editor_page = new EditorPage(this);
|
||||
this.editor_page.preset_type_changed.connect(this.on_preset_type_changed);
|
||||
this.main_stack.add_titled(this.editor_page, "editor", "Edit Preset");
|
||||
}
|
||||
|
||||
public void on_initialized(BaseCandy[] candies) {
|
||||
this.xss = (XScreensaver)candies[0];
|
||||
Gtk.TreeIter iter;
|
||||
this.screensavers_liststore.clear();
|
||||
foreach (XScreensaverConfig config in this.xss.configs) {
|
||||
this.screensavers_liststore.append(out iter);
|
||||
this.screensavers_liststore.set(iter, 0, config.label, 1, config.description, 2, config.name);
|
||||
}
|
||||
|
||||
this.video = (Video)candies[1];
|
||||
this.active_candy = this.xss;
|
||||
|
||||
foreach (BaseCandy candy in candies) {
|
||||
candy.notify.connect(this.refresh_socket);
|
||||
}
|
||||
|
||||
this.editor_page.on_initialized(candies);
|
||||
}
|
||||
|
||||
private void on_preset_type_changed(string type) {
|
||||
switch (type) {
|
||||
case "video":
|
||||
this.active_candy = this.video;
|
||||
break;
|
||||
case "screensaver":
|
||||
this.active_candy = this.xss;
|
||||
break;
|
||||
}
|
||||
|
||||
if (this.active_candy.name != null && this.active_candy.name != "") {
|
||||
this.refresh_socket();
|
||||
}
|
||||
}
|
||||
|
||||
private void refresh_socket() {
|
||||
|
@ -89,73 +89,15 @@ namespace Deskcandy {
|
|||
this.application.quit();
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_screensaver_chooser_row_activated(Gtk.TreeView treeview, Gtk.TreePath path, Gtk.TreeViewColumn col) {
|
||||
Gtk.TreeIter iter;
|
||||
if (treeview.model.get_iter(out iter, path)) {
|
||||
string name;
|
||||
treeview.model.get(iter, 2, out name);
|
||||
this.xss.name = name;
|
||||
this.refresh_socket();
|
||||
}
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_video_property_changed() {
|
||||
this.video.name = this.video_chooser.get_filename();
|
||||
this.video.loop = this.video_loop_checkbox.get_active();
|
||||
this.video.speed = this.video_speed_slider.get_value();
|
||||
this.refresh_socket();
|
||||
}
|
||||
|
||||
private void on_create_preset(SimpleAction a, Variant? v) {
|
||||
this.main_stack.visible_child_name = "editor_page";
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cancel_edit_preset_button_clicked(Gtk.Widget w) {
|
||||
this.main_stack.visible_child_name = "presets_page";
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cancel_new_preset_button_clicked(Gtk.Widget w) {
|
||||
var popover = (Gtk.Popover)w.get_ancestor(typeof(Gtk.Popover));
|
||||
popover.popdown();
|
||||
this.main_stack.visible_child_name = "presets_page";
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_cancel_delete_preset_button_clicked(Gtk.Widget w) {
|
||||
var popover = (Gtk.Popover)w.get_ancestor(typeof(Gtk.Popover));
|
||||
popover.popdown();
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_main_stack_visible_child_name_notify(Object o, ParamSpec param) {
|
||||
if (this.main_stack.visible_child_name == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
message(@"page: $(this.main_stack.visible_child_name)");
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_preset_type_stack_visible_child_name_notify(Object o, ParamSpec param) {
|
||||
message(@"preset type: $(this.preset_type_stack.visible_child_name)");
|
||||
switch (this.preset_type_stack.visible_child_name) {
|
||||
case "video_page":
|
||||
this.active_candy = this.video;
|
||||
break;
|
||||
case "screensaver_page":
|
||||
this.active_candy = this.xss;
|
||||
break;
|
||||
}
|
||||
|
||||
if (this.active_candy.name != null && this.active_candy.name != "") {
|
||||
this.refresh_socket();
|
||||
}
|
||||
}
|
||||
|
||||
private void on_delete_preset(SimpleAction a, Variant? v) {
|
||||
message("delete");
|
||||
}
|
||||
|
||||
private void on_notify_enabled(Object o, GLib.ParamSpec param) {
|
||||
var val = ((Application)o).enabled;
|
||||
this.candy_status.label = val ? "Candy started" : "Candy stopped";
|
||||
|
|
Loading…
Reference in New Issue