mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-09-14 19:32:10 +02:00
Compare commits
86 Commits
Author | SHA1 | Date | |
---|---|---|---|
5dc2e71976 | |||
28eb7d0810 | |||
c641a92d89 | |||
3e57cc045f | |||
c60a8ddf66 | |||
8becef3e45 | |||
3237634e3b | |||
2a4a659e39 | |||
fcaa47c0a8 | |||
68ea17ccbd | |||
80308c7102 | |||
6f4a99a7cb | |||
ac245f5128 | |||
7f9e9e27a0 | |||
abf58a4aec | |||
5d9a700a6e | |||
3662b1eb1d | |||
34449da2b8 | |||
42f367f822 | |||
781ca0bb77 | |||
ebe5d50dae | |||
00d6dc5626 | |||
a1648c307f | |||
b8f170ae39 | |||
073f1da5b4 | |||
6310711136 | |||
fcac7a4ce1 | |||
c2b1aef810 | |||
c8ab26275c | |||
a1fd6a2b6b | |||
561c08e0cc | |||
4658e30e89 | |||
225e6b369a | |||
0e9094a19f | |||
2da0e03c6c | |||
9a6fac5fc8 | |||
b541f0a896 | |||
cec7cce077 | |||
fb13695ca5 | |||
20c76d06f7 | |||
339a11f649 | |||
0989400d87 | |||
52aacf602d | |||
54d70a6a17 | |||
d980e09e0f | |||
2e4cb12817 | |||
7b91cb2e96 | |||
95c04a8abc | |||
25822fefdb | |||
d800ee2d28 | |||
2a51371aca | |||
ee5d1a47dc | |||
b330b74347 | |||
11fa13f0bb | |||
21400d72b3 | |||
a710cb9d4f | |||
3326ad52ce | |||
c9560df851 | |||
74cb45118e | |||
c79bf19e51 | |||
961bec0a2f | |||
89e4977cd1 | |||
bfe16475db | |||
915d36867c | |||
48435af407 | |||
86b6ec5212 | |||
775e70bc45 | |||
9f565447d0 | |||
88d27bc29d | |||
172ae87ac6 | |||
91d572235e | |||
64d32dcb75 | |||
564b4283b6 | |||
ca4d374a81 | |||
a753806d7b | |||
bd1692cea3 | |||
b7ce089f08 | |||
8a6b47c5db | |||
9f1fc4df18 | |||
c018a2a7bc | |||
a1aebab114 | |||
e30702e1d8 | |||
008ff4b055 | |||
d7bba22e19 | |||
2b9a910533 | |||
118ebcc627 |
@@ -7,7 +7,6 @@ using TweetDuck.Core;
|
|||||||
using TweetDuck.Core.Controls;
|
using TweetDuck.Core.Controls;
|
||||||
using TweetDuck.Core.Notification;
|
using TweetDuck.Core.Notification;
|
||||||
using TweetDuck.Core.Utils;
|
using TweetDuck.Core.Utils;
|
||||||
using TweetDuck.Plugins;
|
|
||||||
|
|
||||||
namespace TweetDuck.Configuration{
|
namespace TweetDuck.Configuration{
|
||||||
[Serializable]
|
[Serializable]
|
||||||
@@ -20,7 +19,7 @@ namespace TweetDuck.Configuration{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private const int CurrentFileVersion = 9;
|
private const int CurrentFileVersion = 10;
|
||||||
|
|
||||||
// START OF CONFIGURATION
|
// START OF CONFIGURATION
|
||||||
|
|
||||||
@@ -37,6 +36,7 @@ namespace TweetDuck.Configuration{
|
|||||||
public int NotificationDisplay { get; set; }
|
public int NotificationDisplay { get; set; }
|
||||||
public int NotificationIdlePauseSeconds { get; set; }
|
public int NotificationIdlePauseSeconds { get; set; }
|
||||||
public int NotificationDurationValue { get; set; }
|
public int NotificationDurationValue { get; set; }
|
||||||
|
public int NotificationScrollSpeed { get; set; }
|
||||||
|
|
||||||
public bool EnableSpellCheck { get; set; }
|
public bool EnableSpellCheck { get; set; }
|
||||||
public bool ExpandLinksOnHover { get; set; }
|
public bool ExpandLinksOnHover { get; set; }
|
||||||
@@ -46,7 +46,6 @@ namespace TweetDuck.Configuration{
|
|||||||
public bool EnableUpdateCheck { get; set; }
|
public bool EnableUpdateCheck { get; set; }
|
||||||
public string DismissedUpdate { get; set; }
|
public string DismissedUpdate { get; set; }
|
||||||
|
|
||||||
[Obsolete] public PluginConfig Plugins { get; set; } // TODO remove eventually
|
|
||||||
public WindowState PluginsWindow { get; set; }
|
public WindowState PluginsWindow { get; set; }
|
||||||
|
|
||||||
public string CustomCefArgs { get; set; }
|
public string CustomCefArgs { get; set; }
|
||||||
@@ -126,6 +125,7 @@ namespace TweetDuck.Configuration{
|
|||||||
CustomNotificationPosition = ControlExtensions.InvisibleLocation;
|
CustomNotificationPosition = ControlExtensions.InvisibleLocation;
|
||||||
NotificationEdgeDistance = 8;
|
NotificationEdgeDistance = 8;
|
||||||
NotificationDurationValue = 25;
|
NotificationDurationValue = 25;
|
||||||
|
NotificationScrollSpeed = 100;
|
||||||
EnableUpdateCheck = true;
|
EnableUpdateCheck = true;
|
||||||
ExpandLinksOnHover = true;
|
ExpandLinksOnHover = true;
|
||||||
SwitchAccountSelectors = true;
|
SwitchAccountSelectors = true;
|
||||||
@@ -185,6 +185,11 @@ namespace TweetDuck.Configuration{
|
|||||||
++fileVersion;
|
++fileVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fileVersion == 9){
|
||||||
|
NotificationScrollSpeed = 100;
|
||||||
|
++fileVersion;
|
||||||
|
}
|
||||||
|
|
||||||
// update the version
|
// update the version
|
||||||
fileVersion = CurrentFileVersion;
|
fileVersion = CurrentFileVersion;
|
||||||
Save();
|
Save();
|
||||||
@@ -237,7 +242,7 @@ namespace TweetDuck.Configuration{
|
|||||||
Program.Reporter.Log(e.ToString());
|
Program.Reporter.Log(e.ToString());
|
||||||
}
|
}
|
||||||
else if (firstException != null){
|
else if (firstException != null){
|
||||||
Program.Reporter.HandleException("Configuration Error", "Could not open the backup configuration file. If you continue, you may lose your settings and list of enabled plugins.", true, e);
|
Program.Reporter.HandleException("Configuration Error", "Could not open the backup configuration file. If you continue, your program options will be reset.", true, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -47,6 +47,14 @@ namespace TweetDuck.Core.Controls{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool AlignValueToTick(this TrackBar trackBar){
|
||||||
|
if (trackBar.Value % trackBar.SmallChange != 0){
|
||||||
|
trackBar.Value = trackBar.SmallChange*(int)Math.Floor(((double)trackBar.Value/trackBar.SmallChange)+0.5);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static void SetElevated(this Button button){
|
public static void SetElevated(this Button button){
|
||||||
button.Text = " "+button.Text;
|
button.Text = " "+button.Text;
|
||||||
button.FlatStyle = FlatStyle.System;
|
button.FlatStyle = FlatStyle.System;
|
||||||
|
23
Core/Controls/LabelVertical.cs
Normal file
23
Core/Controls/LabelVertical.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace TweetDuck.Core.Controls{
|
||||||
|
sealed class LabelVertical : Label{
|
||||||
|
public int LineHeight { get; set; }
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e){
|
||||||
|
int y = (int)Math.Floor((ClientRectangle.Height-Text.Length*LineHeight)/2F)-2; // 2 = random
|
||||||
|
|
||||||
|
using(Brush brush = new SolidBrush(ForeColor)){
|
||||||
|
foreach(char chr in Text){
|
||||||
|
string str = chr.ToString();
|
||||||
|
float x = (ClientRectangle.Width-e.Graphics.MeasureString(str, Font).Width)/2F;
|
||||||
|
|
||||||
|
e.Graphics.DrawString(str, Font, brush, x, y);
|
||||||
|
y += LineHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,25 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace TweetDuck.Core.Controls{
|
|
||||||
sealed class TabButton : FlatButton{
|
|
||||||
public Action Callback { get; private set; }
|
|
||||||
|
|
||||||
public void SetupButton(int locationX, int sizeWidth, string title, Action callback){
|
|
||||||
Callback = callback;
|
|
||||||
|
|
||||||
SuspendLayout();
|
|
||||||
FlatAppearance.BorderColor = Color.DimGray;
|
|
||||||
FlatAppearance.MouseDownBackColor = Color.White;
|
|
||||||
FlatAppearance.MouseOverBackColor = Color.White;
|
|
||||||
FlatStyle = FlatStyle.Flat;
|
|
||||||
Location = new Point(locationX, 0);
|
|
||||||
Margin = new Padding(0);
|
|
||||||
Size = new Size(sizeWidth, 30);
|
|
||||||
Text = title;
|
|
||||||
UseVisualStyleBackColor = true;
|
|
||||||
ResumeLayout(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
68
Core/Controls/TabPanel.Designer.cs
generated
68
Core/Controls/TabPanel.Designer.cs
generated
@@ -1,68 +0,0 @@
|
|||||||
namespace TweetDuck.Core.Controls {
|
|
||||||
partial class TabPanel {
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing) {
|
|
||||||
if (disposing && (components != null)) {
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Component Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent() {
|
|
||||||
this.panelButtons = new System.Windows.Forms.Panel();
|
|
||||||
this.panelContent = new System.Windows.Forms.Panel();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// panelButtons
|
|
||||||
//
|
|
||||||
this.panelButtons.Dock = System.Windows.Forms.DockStyle.Top;
|
|
||||||
this.panelButtons.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.panelButtons.Margin = new System.Windows.Forms.Padding(0);
|
|
||||||
this.panelButtons.Name = "panelButtons";
|
|
||||||
this.panelButtons.Size = new System.Drawing.Size(640, 30);
|
|
||||||
this.panelButtons.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// panelContent
|
|
||||||
//
|
|
||||||
this.panelContent.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.panelContent.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
|
||||||
this.panelContent.Location = new System.Drawing.Point(0, 29);
|
|
||||||
this.panelContent.Margin = new System.Windows.Forms.Padding(0);
|
|
||||||
this.panelContent.Name = "panelContent";
|
|
||||||
this.panelContent.Size = new System.Drawing.Size(640, 451);
|
|
||||||
this.panelContent.TabIndex = 1;
|
|
||||||
//
|
|
||||||
// TabPanel
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.Controls.Add(this.panelContent);
|
|
||||||
this.Controls.Add(this.panelButtons);
|
|
||||||
this.Name = "TabPanel";
|
|
||||||
this.Size = new System.Drawing.Size(640, 480);
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.Panel panelButtons;
|
|
||||||
private System.Windows.Forms.Panel panelContent;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,52 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace TweetDuck.Core.Controls{
|
|
||||||
sealed partial class TabPanel : UserControl{
|
|
||||||
public Panel Content => panelContent;
|
|
||||||
public IEnumerable<TabButton> Buttons => panelButtons.Controls.Cast<TabButton>();
|
|
||||||
|
|
||||||
public TabButton ActiveButton { get; private set; }
|
|
||||||
|
|
||||||
private int btnWidth;
|
|
||||||
|
|
||||||
public TabPanel(){
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetupTabPanel(int buttonWidth){
|
|
||||||
this.btnWidth = buttonWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TabButton AddButton(string title, Action callback){
|
|
||||||
TabButton button = new TabButton();
|
|
||||||
button.SetupButton((btnWidth-1)*panelButtons.Controls.Count, btnWidth, title, callback);
|
|
||||||
button.Click += (sender, args) => SelectTab((TabButton)sender);
|
|
||||||
|
|
||||||
panelButtons.Controls.Add(button);
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SelectTab(TabButton button){
|
|
||||||
if (ActiveButton != null){
|
|
||||||
ActiveButton.BackColor = SystemColors.Control;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.BackColor = Color.White;
|
|
||||||
button.Callback();
|
|
||||||
|
|
||||||
ActiveButton = button;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ReplaceContent(Control newControl){
|
|
||||||
newControl.Dock = DockStyle.Fill;
|
|
||||||
Content.SuspendLayout();
|
|
||||||
Content.Controls.Clear();
|
|
||||||
Content.Controls.Add(newControl);
|
|
||||||
Content.ResumeLayout(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -11,8 +11,8 @@ using TweetDuck.Core.Controls;
|
|||||||
using TweetDuck.Core.Handling;
|
using TweetDuck.Core.Handling;
|
||||||
using TweetDuck.Core.Notification;
|
using TweetDuck.Core.Notification;
|
||||||
using TweetDuck.Core.Notification.Screenshot;
|
using TweetDuck.Core.Notification.Screenshot;
|
||||||
using TweetDuck.Core.Notification.Sound;
|
|
||||||
using TweetDuck.Core.Other;
|
using TweetDuck.Core.Other;
|
||||||
|
using TweetDuck.Core.Other.Settings;
|
||||||
using TweetDuck.Core.Utils;
|
using TweetDuck.Core.Utils;
|
||||||
using TweetDuck.Plugins;
|
using TweetDuck.Plugins;
|
||||||
using TweetDuck.Plugins.Enums;
|
using TweetDuck.Plugins.Enums;
|
||||||
@@ -20,6 +20,7 @@ using TweetDuck.Plugins.Events;
|
|||||||
using TweetDuck.Resources;
|
using TweetDuck.Resources;
|
||||||
using TweetDuck.Updates;
|
using TweetDuck.Updates;
|
||||||
using TweetDuck.Updates.Events;
|
using TweetDuck.Updates.Events;
|
||||||
|
using TweetLib.Audio.Utils;
|
||||||
|
|
||||||
namespace TweetDuck.Core{
|
namespace TweetDuck.Core{
|
||||||
sealed partial class FormBrowser : Form{
|
sealed partial class FormBrowser : Form{
|
||||||
@@ -38,7 +39,7 @@ namespace TweetDuck.Core{
|
|||||||
private FormWindowState prevState;
|
private FormWindowState prevState;
|
||||||
|
|
||||||
private TweetScreenshotManager notificationScreenshotManager;
|
private TweetScreenshotManager notificationScreenshotManager;
|
||||||
private ISoundNotificationPlayer soundNotification;
|
private SoundNotification soundNotification;
|
||||||
|
|
||||||
public FormBrowser(PluginManager pluginManager, UpdaterSettings updaterSettings){
|
public FormBrowser(PluginManager pluginManager, UpdaterSettings updaterSettings){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -312,12 +313,12 @@ namespace TweetDuck.Core{
|
|||||||
using(FormMessage form = new FormMessage("Notification Sound Error", "Could not play custom notification sound."+Environment.NewLine+e.Message, MessageBoxIcon.Error)){
|
using(FormMessage form = new FormMessage("Notification Sound Error", "Could not play custom notification sound."+Environment.NewLine+e.Message, MessageBoxIcon.Error)){
|
||||||
form.CancelButton = form.AddButton("Ignore");
|
form.CancelButton = form.AddButton("Ignore");
|
||||||
|
|
||||||
Button btnOpenSettings = form.AddButton("Open Settings");
|
Button btnOpenSettings = form.AddButton("View Options");
|
||||||
btnOpenSettings.Width += 16;
|
btnOpenSettings.Width += 16;
|
||||||
btnOpenSettings.Location = new Point(btnOpenSettings.Location.X-16, btnOpenSettings.Location.Y);
|
btnOpenSettings.Location = new Point(btnOpenSettings.Location.X-16, btnOpenSettings.Location.Y);
|
||||||
|
|
||||||
if (form.ShowDialog() == DialogResult.OK && form.ClickedButton == btnOpenSettings){
|
if (form.ShowDialog() == DialogResult.OK && form.ClickedButton == btnOpenSettings){
|
||||||
OpenSettings(FormSettings.TabIndexNotification);
|
OpenSettings(typeof(TabSettingsSounds));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -376,14 +377,14 @@ namespace TweetDuck.Core{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void OpenSettings(){
|
public void OpenSettings(){
|
||||||
OpenSettings(0);
|
OpenSettings(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenSettings(int tabIndex){
|
public void OpenSettings(Type startTab){
|
||||||
if (!TryBringToFront<FormSettings>()){
|
if (!TryBringToFront<FormSettings>()){
|
||||||
bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
|
bool prevEnableUpdateCheck = Config.EnableUpdateCheck;
|
||||||
|
|
||||||
FormSettings form = new FormSettings(this, plugins, updates, tabIndex);
|
FormSettings form = new FormSettings(this, plugins, updates, startTab);
|
||||||
|
|
||||||
form.FormClosed += (sender, args) => {
|
form.FormClosed += (sender, args) => {
|
||||||
if (!prevEnableUpdateCheck && Config.EnableUpdateCheck){
|
if (!prevEnableUpdateCheck && Config.EnableUpdateCheck){
|
||||||
@@ -427,7 +428,7 @@ namespace TweetDuck.Core{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (soundNotification == null){
|
if (soundNotification == null){
|
||||||
soundNotification = SoundNotification.New();
|
soundNotification = new SoundNotification();
|
||||||
soundNotification.PlaybackError += soundNotification_PlaybackError;
|
soundNotification.PlaybackError += soundNotification_PlaybackError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@ namespace TweetDuck.Core.Handling{
|
|||||||
|
|
||||||
private const string TitleReloadBrowser = "Reload browser";
|
private const string TitleReloadBrowser = "Reload browser";
|
||||||
private const string TitleMuteNotifications = "Mute notifications";
|
private const string TitleMuteNotifications = "Mute notifications";
|
||||||
private const string TitleSettings = "Settings";
|
private const string TitleSettings = "Options";
|
||||||
private const string TitlePlugins = "Plugins";
|
private const string TitlePlugins = "Plugins";
|
||||||
private const string TitleAboutProgram = "About "+Program.BrandName;
|
private const string TitleAboutProgram = "About "+Program.BrandName;
|
||||||
|
|
||||||
|
@@ -5,5 +5,13 @@ namespace TweetDuck.Core.Handling{
|
|||||||
public override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status){
|
public override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status){
|
||||||
browser.Reload();
|
browser.Reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback){
|
||||||
|
if (request.ResourceType == ResourceType.Script && request.Url.Contains("analytics.")){
|
||||||
|
return CefReturnValue.Cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CefReturnValue.Continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -103,8 +103,10 @@ namespace TweetDuck.Core.Notification{
|
|||||||
if (nCode == 0){
|
if (nCode == 0){
|
||||||
int eventType = wParam.ToInt32();
|
int eventType = wParam.ToInt32();
|
||||||
|
|
||||||
if (eventType == NativeMethods.WM_MOUSEWHEEL && browser.Bounds.Contains(PointToClient(Cursor.Position)) && !ContainsFocus && !owner.ContainsFocus){
|
if (eventType == NativeMethods.WM_MOUSEWHEEL && browser.Bounds.Contains(PointToClient(Cursor.Position))){
|
||||||
browser.SendMouseWheelEvent(0, 0, 0, NativeMethods.GetMouseHookData(lParam), CefEventFlags.None);
|
int distance = (int)Math.Round(NativeMethods.GetMouseHookData(lParam)*(Program.UserConfig.NotificationScrollSpeed/100.0));
|
||||||
|
|
||||||
|
browser.SendMouseWheelEvent(0, 0, 0, distance, CefEventFlags.None);
|
||||||
return NativeMethods.HOOK_HANDLED;
|
return NativeMethods.HOOK_HANDLED;
|
||||||
}
|
}
|
||||||
else if (eventType == NativeMethods.WM_XBUTTONDOWN && DesktopBounds.Contains(Cursor.Position)){
|
else if (eventType == NativeMethods.WM_XBUTTONDOWN && DesktopBounds.Contains(Cursor.Position)){
|
||||||
|
@@ -1,12 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace TweetDuck.Core.Notification.Sound{
|
|
||||||
interface ISoundNotificationPlayer : IDisposable{
|
|
||||||
string SupportedFormats { get; }
|
|
||||||
|
|
||||||
event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
|
||||||
|
|
||||||
void Play(string file);
|
|
||||||
void Stop();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,28 +1,29 @@
|
|||||||
using System.Runtime.InteropServices;
|
using System;
|
||||||
using TweetDuck.Core.Notification.Sound;
|
using TweetLib.Audio;
|
||||||
|
using TweetLib.Audio.Utils;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Notification{
|
namespace TweetDuck.Core.Notification{
|
||||||
static class SoundNotification{
|
sealed class SoundNotification : IDisposable{
|
||||||
private static bool? IsWMPAvailable;
|
public string SupportedFormats => player.SupportedFormats;
|
||||||
|
public event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
||||||
|
|
||||||
public static ISoundNotificationPlayer New(){
|
private readonly AudioPlayer player;
|
||||||
if (IsWMPAvailable.HasValue){
|
|
||||||
if (IsWMPAvailable.Value){
|
public SoundNotification(){
|
||||||
return new SoundPlayerImplWMP();
|
this.player = AudioPlayer.New();
|
||||||
}
|
this.player.PlaybackError += Player_PlaybackError;
|
||||||
else{
|
|
||||||
return new SoundPlayerImplFallback();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
public void Play(string file){
|
||||||
SoundPlayerImplWMP implWMP = new SoundPlayerImplWMP();
|
player.Play(file);
|
||||||
IsWMPAvailable = true;
|
}
|
||||||
return implWMP;
|
|
||||||
}catch(COMException){
|
private void Player_PlaybackError(object sender, PlaybackErrorEventArgs e){
|
||||||
IsWMPAvailable = false;
|
PlaybackError?.Invoke(this, e);
|
||||||
return new SoundPlayerImplFallback();
|
}
|
||||||
}
|
|
||||||
|
public void Dispose(){
|
||||||
|
player.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,7 @@ namespace TweetDuck.Core.Notification{
|
|||||||
ExampleTweetHTML = ScriptLoader.LoadResource("pages/example.html", true);
|
ExampleTweetHTML = ScriptLoader.LoadResource("pages/example.html", true);
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
ExampleTweetHTML = ExampleTweetHTML.Replace("</p>", @"</p><div style='margin-top:64px'>Scrollbar test padding...</div>");
|
ExampleTweetHTML = ExampleTweetHTML.Replace("</p>", @"</p><div style='margin-top:256px'>Scrollbar test padding...</div>");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
22
Core/Other/FormPlugins.Designer.cs
generated
22
Core/Other/FormPlugins.Designer.cs
generated
@@ -26,7 +26,7 @@
|
|||||||
this.btnClose = new System.Windows.Forms.Button();
|
this.btnClose = new System.Windows.Forms.Button();
|
||||||
this.btnReload = new System.Windows.Forms.Button();
|
this.btnReload = new System.Windows.Forms.Button();
|
||||||
this.btnOpenFolder = new System.Windows.Forms.Button();
|
this.btnOpenFolder = new System.Windows.Forms.Button();
|
||||||
this.tabPanelPlugins = new TweetDuck.Core.Controls.TabPanel();
|
this.flowLayoutPlugins = new TweetDuck.Plugins.Controls.PluginListFlowLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
@@ -68,22 +68,26 @@
|
|||||||
this.btnOpenFolder.UseVisualStyleBackColor = true;
|
this.btnOpenFolder.UseVisualStyleBackColor = true;
|
||||||
this.btnOpenFolder.Click += new System.EventHandler(this.btnOpenFolder_Click);
|
this.btnOpenFolder.Click += new System.EventHandler(this.btnOpenFolder_Click);
|
||||||
//
|
//
|
||||||
// tabPanelPlugins
|
// flowLayoutPlugins
|
||||||
//
|
//
|
||||||
this.tabPanelPlugins.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
this.flowLayoutPlugins.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.tabPanelPlugins.Location = new System.Drawing.Point(12, 12);
|
this.flowLayoutPlugins.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.tabPanelPlugins.Name = "tabPanelPlugins";
|
this.flowLayoutPlugins.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
|
||||||
this.tabPanelPlugins.Size = new System.Drawing.Size(680, 421);
|
this.flowLayoutPlugins.Location = new System.Drawing.Point(12, 12);
|
||||||
this.tabPanelPlugins.TabIndex = 0;
|
this.flowLayoutPlugins.Name = "flowLayoutPlugins";
|
||||||
|
this.flowLayoutPlugins.Size = new System.Drawing.Size(680, 421);
|
||||||
|
this.flowLayoutPlugins.TabIndex = 0;
|
||||||
|
this.flowLayoutPlugins.WrapContents = false;
|
||||||
|
this.flowLayoutPlugins.Resize += new System.EventHandler(this.flowLayoutPlugins_Resize);
|
||||||
//
|
//
|
||||||
// FormPlugins
|
// FormPlugins
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(704, 474);
|
this.ClientSize = new System.Drawing.Size(704, 474);
|
||||||
this.Controls.Add(this.tabPanelPlugins);
|
this.Controls.Add(this.flowLayoutPlugins);
|
||||||
this.Controls.Add(this.btnOpenFolder);
|
this.Controls.Add(this.btnOpenFolder);
|
||||||
this.Controls.Add(this.btnReload);
|
this.Controls.Add(this.btnReload);
|
||||||
this.Controls.Add(this.btnClose);
|
this.Controls.Add(this.btnClose);
|
||||||
@@ -101,6 +105,6 @@
|
|||||||
private System.Windows.Forms.Button btnClose;
|
private System.Windows.Forms.Button btnClose;
|
||||||
private System.Windows.Forms.Button btnReload;
|
private System.Windows.Forms.Button btnReload;
|
||||||
private System.Windows.Forms.Button btnOpenFolder;
|
private System.Windows.Forms.Button btnOpenFolder;
|
||||||
private TweetDuck.Core.Controls.TabPanel tabPanelPlugins;
|
private Plugins.Controls.PluginListFlowLayout flowLayoutPlugins;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -3,19 +3,12 @@ using System.Diagnostics;
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using TweetDuck.Core.Controls;
|
|
||||||
using TweetDuck.Plugins;
|
using TweetDuck.Plugins;
|
||||||
using TweetDuck.Plugins.Controls;
|
using TweetDuck.Plugins.Controls;
|
||||||
using TweetDuck.Plugins.Enums;
|
|
||||||
using TweetDuck.Plugins.Events;
|
|
||||||
|
|
||||||
namespace TweetDuck.Core.Other{
|
namespace TweetDuck.Core.Other{
|
||||||
sealed partial class FormPlugins : Form{
|
sealed partial class FormPlugins : Form{
|
||||||
private readonly PluginManager pluginManager;
|
private readonly PluginManager pluginManager;
|
||||||
private readonly TabButton tabBtnOfficial, tabBtnCustom;
|
|
||||||
private readonly PluginListFlowLayout flowLayoutPlugins;
|
|
||||||
|
|
||||||
private PluginGroup? selectedGroup;
|
|
||||||
|
|
||||||
public FormPlugins(){
|
public FormPlugins(){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -25,66 +18,41 @@ namespace TweetDuck.Core.Other{
|
|||||||
|
|
||||||
public FormPlugins(PluginManager pluginManager) : this(){
|
public FormPlugins(PluginManager pluginManager) : this(){
|
||||||
this.pluginManager = pluginManager;
|
this.pluginManager = pluginManager;
|
||||||
this.pluginManager.Reloaded += pluginManager_Reloaded;
|
|
||||||
|
|
||||||
this.flowLayoutPlugins = new PluginListFlowLayout();
|
|
||||||
this.flowLayoutPlugins.Resize += flowLayoutPlugins_Resize;
|
|
||||||
|
|
||||||
this.tabPanelPlugins.SetupTabPanel(90);
|
|
||||||
this.tabPanelPlugins.ReplaceContent(flowLayoutPlugins);
|
|
||||||
|
|
||||||
this.tabBtnOfficial = tabPanelPlugins.AddButton("", () => SelectGroup(PluginGroup.Official));
|
|
||||||
this.tabBtnCustom = tabPanelPlugins.AddButton("", () => SelectGroup(PluginGroup.Custom));
|
|
||||||
|
|
||||||
this.pluginManager_Reloaded(pluginManager, null);
|
|
||||||
|
|
||||||
Shown += (sender, args) => {
|
Shown += (sender, args) => {
|
||||||
Program.UserConfig.PluginsWindow.Restore(this, false);
|
Program.UserConfig.PluginsWindow.Restore(this, false);
|
||||||
this.tabPanelPlugins.SelectTab(tabBtnOfficial);
|
ReloadPluginList();
|
||||||
};
|
};
|
||||||
|
|
||||||
FormClosed += (sender, args) => {
|
FormClosed += (sender, args) => {
|
||||||
Program.UserConfig.PluginsWindow.Save(this);
|
Program.UserConfig.PluginsWindow.Save(this);
|
||||||
Program.UserConfig.Save();
|
Program.UserConfig.Save();
|
||||||
};
|
};
|
||||||
|
|
||||||
Disposed += (sender, args) => this.pluginManager.Reloaded -= pluginManager_Reloaded;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SelectGroup(PluginGroup group){
|
private int GetPluginOrderIndex(Plugin plugin){
|
||||||
if (selectedGroup.HasValue && selectedGroup == group)return;
|
return !plugin.CanRun ? 0 : pluginManager.Config.IsEnabled(plugin) ? 1 : 2;
|
||||||
|
|
||||||
selectedGroup = group;
|
|
||||||
|
|
||||||
ReloadPluginTab();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReloadPluginTab(){
|
private void ReloadPluginList(){
|
||||||
if (!selectedGroup.HasValue)return;
|
|
||||||
|
|
||||||
flowLayoutPlugins.SuspendLayout();
|
flowLayoutPlugins.SuspendLayout();
|
||||||
flowLayoutPlugins.Controls.Clear();
|
flowLayoutPlugins.Controls.Clear();
|
||||||
|
|
||||||
Plugin[] plugins = pluginManager.GetPluginsByGroup(selectedGroup.Value).OrderBy(plugin => !plugin.CanRun ? 0 : pluginManager.Config.IsEnabled(plugin) ? 1 : 2).ThenBy(plugin => plugin.Name).ToArray();
|
foreach(Plugin plugin in pluginManager.Plugins.OrderBy(GetPluginOrderIndex).ThenBy(plugin => plugin.Name)){
|
||||||
|
flowLayoutPlugins.Controls.Add(new PluginControl(pluginManager, plugin));
|
||||||
|
|
||||||
for(int index = 0; index < plugins.Length; index++){
|
|
||||||
flowLayoutPlugins.Controls.Add(new PluginControl(pluginManager, plugins[index]));
|
|
||||||
|
|
||||||
if (index < plugins.Length-1){
|
|
||||||
flowLayoutPlugins.Controls.Add(new Panel{
|
flowLayoutPlugins.Controls.Add(new Panel{
|
||||||
BackColor = Color.DimGray,
|
BackColor = Color.DimGray,
|
||||||
|
Margin = new Padding(0),
|
||||||
Size = new Size(1, 1)
|
Size = new Size(1, 1)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
flowLayoutPlugins.ResumeLayout(true);
|
flowLayoutPlugins.ResumeLayout(true);
|
||||||
flowLayoutPlugins_Resize(flowLayoutPlugins, new EventArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void pluginManager_Reloaded(object sender, PluginErrorEventArgs e){
|
// sorry, I guess...
|
||||||
tabBtnOfficial.Text = "Official: "+pluginManager.CountPluginByGroup(PluginGroup.Official);
|
Padding = new Padding(Padding.Left, Padding.Top, Padding.Right+1, Padding.Bottom);
|
||||||
tabBtnCustom.Text = "Custom: "+pluginManager.CountPluginByGroup(PluginGroup.Custom);
|
Padding = new Padding(Padding.Left, Padding.Top, Padding.Right-1, Padding.Bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void flowLayoutPlugins_Resize(object sender, EventArgs e){
|
private void flowLayoutPlugins_Resize(object sender, EventArgs e){
|
||||||
@@ -103,6 +71,7 @@ namespace TweetDuck.Core.Other{
|
|||||||
control.Width = flowLayoutPlugins.Width-control.Margin.Horizontal-horizontalOffset;
|
control.Width = flowLayoutPlugins.Width-control.Margin.Horizontal-horizontalOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastControl.Visible = !showScrollBar;
|
||||||
flowLayoutPlugins.Focus();
|
flowLayoutPlugins.Focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +82,7 @@ namespace TweetDuck.Core.Other{
|
|||||||
private void btnReload_Click(object sender, EventArgs e){
|
private void btnReload_Click(object sender, EventArgs e){
|
||||||
if (MessageBox.Show("This will also reload the browser window. Do you want to proceed?", "Reloading Plugins", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
if (MessageBox.Show("This will also reload the browser window. Do you want to proceed?", "Reloading Plugins", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
||||||
pluginManager.Reload();
|
pluginManager.Reload();
|
||||||
ReloadPluginTab();
|
ReloadPluginList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
71
Core/Other/FormSettings.Designer.cs
generated
71
Core/Other/FormSettings.Designer.cs
generated
@@ -24,51 +24,70 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.btnClose = new System.Windows.Forms.Button();
|
this.btnClose = new System.Windows.Forms.Button();
|
||||||
this.labelTip = new System.Windows.Forms.Label();
|
this.panelContents = new System.Windows.Forms.Panel();
|
||||||
this.tabPanel = new TweetDuck.Core.Controls.TabPanel();
|
this.panelButtons = new System.Windows.Forms.Panel();
|
||||||
|
this.btnManageOptions = new System.Windows.Forms.Button();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
//
|
//
|
||||||
this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnClose.AutoSize = true;
|
this.btnClose.AutoSize = true;
|
||||||
this.btnClose.Location = new System.Drawing.Point(443, 349);
|
this.btnClose.Location = new System.Drawing.Point(449, 447);
|
||||||
this.btnClose.Name = "btnClose";
|
this.btnClose.Name = "btnClose";
|
||||||
this.btnClose.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnClose.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnClose.Size = new System.Drawing.Size(49, 23);
|
this.btnClose.Size = new System.Drawing.Size(49, 23);
|
||||||
this.btnClose.TabIndex = 4;
|
this.btnClose.TabIndex = 3;
|
||||||
this.btnClose.Text = "Close";
|
this.btnClose.Text = "Close";
|
||||||
this.btnClose.UseVisualStyleBackColor = true;
|
this.btnClose.UseVisualStyleBackColor = true;
|
||||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
//
|
//
|
||||||
// labelTip
|
// panelContents
|
||||||
//
|
//
|
||||||
this.labelTip.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.panelContents.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
this.labelTip.AutoSize = true;
|
|
||||||
this.labelTip.Location = new System.Drawing.Point(12, 351);
|
|
||||||
this.labelTip.Name = "labelTip";
|
|
||||||
this.labelTip.Size = new System.Drawing.Size(310, 13);
|
|
||||||
this.labelTip.TabIndex = 5;
|
|
||||||
this.labelTip.Text = "Tip: Move your cursor over an option to see detailed explanation";
|
|
||||||
//
|
|
||||||
// tabPanel
|
|
||||||
//
|
|
||||||
this.tabPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.tabPanel.Location = new System.Drawing.Point(12, 12);
|
this.panelContents.AutoScroll = true;
|
||||||
this.tabPanel.Name = "tabPanel";
|
this.panelContents.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.tabPanel.Size = new System.Drawing.Size(480, 331);
|
this.panelContents.Location = new System.Drawing.Point(135, 12);
|
||||||
this.tabPanel.TabIndex = 3;
|
this.panelContents.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
|
||||||
|
this.panelContents.Name = "panelContents";
|
||||||
|
this.panelContents.Size = new System.Drawing.Size(363, 429);
|
||||||
|
this.panelContents.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelButtons
|
||||||
|
//
|
||||||
|
this.panelButtons.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.panelButtons.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.panelButtons.Margin = new System.Windows.Forms.Padding(3, 3, 0, 3);
|
||||||
|
this.panelButtons.Name = "panelButtons";
|
||||||
|
this.panelButtons.Size = new System.Drawing.Size(124, 429);
|
||||||
|
this.panelButtons.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// btnManageOptions
|
||||||
|
//
|
||||||
|
this.btnManageOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.btnManageOptions.AutoSize = true;
|
||||||
|
this.btnManageOptions.Location = new System.Drawing.Point(12, 447);
|
||||||
|
this.btnManageOptions.Name = "btnManageOptions";
|
||||||
|
this.btnManageOptions.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
|
this.btnManageOptions.Size = new System.Drawing.Size(101, 23);
|
||||||
|
this.btnManageOptions.TabIndex = 4;
|
||||||
|
this.btnManageOptions.Text = "Manage Options";
|
||||||
|
this.btnManageOptions.UseVisualStyleBackColor = true;
|
||||||
|
this.btnManageOptions.Click += new System.EventHandler(this.btnManageOptions_Click);
|
||||||
//
|
//
|
||||||
// FormSettings
|
// FormSettings
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(504, 384);
|
this.ClientSize = new System.Drawing.Size(510, 482);
|
||||||
this.Controls.Add(this.labelTip);
|
this.Controls.Add(this.btnManageOptions);
|
||||||
|
this.Controls.Add(this.panelContents);
|
||||||
|
this.Controls.Add(this.panelButtons);
|
||||||
this.Controls.Add(this.btnClose);
|
this.Controls.Add(this.btnClose);
|
||||||
this.Controls.Add(this.tabPanel);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
this.Icon = global::TweetDuck.Properties.Resources.icon;
|
this.Icon = global::TweetDuck.Properties.Resources.icon;
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
@@ -82,9 +101,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private Controls.TabPanel tabPanel;
|
|
||||||
private System.Windows.Forms.Button btnClose;
|
private System.Windows.Forms.Button btnClose;
|
||||||
private System.Windows.Forms.Label labelTip;
|
private System.Windows.Forms.Panel panelContents;
|
||||||
|
private System.Windows.Forms.Panel panelButtons;
|
||||||
|
private System.Windows.Forms.Button btnManageOptions;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,68 +1,148 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using TweetDuck.Core.Controls;
|
||||||
using TweetDuck.Core.Other.Settings;
|
using TweetDuck.Core.Other.Settings;
|
||||||
|
using TweetDuck.Core.Other.Settings.Dialogs;
|
||||||
using TweetDuck.Plugins;
|
using TweetDuck.Plugins;
|
||||||
using TweetDuck.Updates;
|
using TweetDuck.Updates;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Other{
|
namespace TweetDuck.Core.Other{
|
||||||
sealed partial class FormSettings : Form{
|
sealed partial class FormSettings : Form{
|
||||||
public const int TabIndexNotification = 1;
|
|
||||||
|
|
||||||
private readonly FormBrowser browser;
|
private readonly FormBrowser browser;
|
||||||
private readonly Dictionary<Type, BaseTabSettings> tabs = new Dictionary<Type, BaseTabSettings>(4);
|
private readonly PluginManager plugins;
|
||||||
|
|
||||||
public FormSettings(FormBrowser browser, PluginManager plugins, UpdateHandler updates, int startTabIndex = 0){
|
private readonly Dictionary<Type, SettingsTab> tabs = new Dictionary<Type, SettingsTab>(4);
|
||||||
|
private SettingsTab currentTab;
|
||||||
|
|
||||||
|
public FormSettings(FormBrowser browser, PluginManager plugins, UpdateHandler updates, Type startTab){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Text = Program.BrandName+" Settings";
|
Text = Program.BrandName+" Options";
|
||||||
|
|
||||||
this.browser = browser;
|
this.browser = browser;
|
||||||
this.browser.PauseNotification();
|
this.browser.PauseNotification();
|
||||||
|
|
||||||
this.tabPanel.SetupTabPanel(100);
|
this.plugins = plugins;
|
||||||
this.tabPanel.AddButton("General", () => SelectTab(() => new TabSettingsGeneral(updates)));
|
|
||||||
this.tabPanel.AddButton("Notifications", () => SelectTab(() => new TabSettingsNotifications(browser.CreateNotificationForm(false))));
|
|
||||||
this.tabPanel.AddButton("Sounds", () => SelectTab(() => new TabSettingsSounds()));
|
|
||||||
this.tabPanel.AddButton("Advanced", () => SelectTab(() => new TabSettingsAdvanced(browser.ReinjectCustomCSS, plugins)));
|
|
||||||
|
|
||||||
this.tabPanel.SelectTab(tabPanel.Buttons.ElementAt(startTabIndex));
|
AddButton("General", () => new TabSettingsGeneral(updates));
|
||||||
}
|
AddButton("Notifications", () => new TabSettingsNotifications(browser.CreateNotificationForm(false)));
|
||||||
|
AddButton("Sounds", () => new TabSettingsSounds());
|
||||||
|
AddButton("Advanced", () => new TabSettingsAdvanced(browser.ReinjectCustomCSS));
|
||||||
|
|
||||||
private void SelectTab<T>(Func<T> constructor) where T : BaseTabSettings{
|
SelectTab(tabs[startTab ?? typeof(TabSettingsGeneral)]);
|
||||||
if (tabs.TryGetValue(typeof(T), out BaseTabSettings control)){
|
|
||||||
tabPanel.ReplaceContent(control);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
control = tabs[typeof(T)] = constructor();
|
|
||||||
control.OnReady();
|
|
||||||
tabPanel.ReplaceContent(control);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FormSettings_FormClosing(object sender, FormClosingEventArgs e){
|
private void FormSettings_FormClosing(object sender, FormClosingEventArgs e){
|
||||||
foreach(BaseTabSettings control in tabs.Values){
|
foreach(SettingsTab tab in tabs.Values){
|
||||||
control.OnClosing();
|
if (tab.IsInitialized){
|
||||||
|
tab.Control.OnClosing();
|
||||||
|
tab.Control.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Program.UserConfig.Save();
|
Program.UserConfig.Save();
|
||||||
|
browser.ResumeNotification();
|
||||||
foreach(BaseTabSettings control in tabs.Values){
|
|
||||||
control.Dispose();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
browser.ResumeNotification();
|
private void btnManageOptions_Click(object sender, EventArgs e){
|
||||||
|
using(DialogSettingsManage dialog = new DialogSettingsManage(plugins)){
|
||||||
|
if (dialog.ShowDialog() == DialogResult.OK && dialog.ShouldReloadUI){
|
||||||
|
foreach(SettingsTab tab in tabs.Values){
|
||||||
|
tab.Control = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectTab(currentTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnClose_Click(object sender, EventArgs e){
|
private void btnClose_Click(object sender, EventArgs e){
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReloadUI(){
|
private void AddButton<T>(string title, Func<T> constructor) where T : BaseTabSettings{
|
||||||
tabs.Clear();
|
const int btnHeight = 39;
|
||||||
tabPanel.Content.Controls.Clear();
|
|
||||||
tabPanel.ActiveButton.Callback();
|
FlatButton btn = new FlatButton{
|
||||||
|
BackColor = SystemColors.Control,
|
||||||
|
FlatStyle = FlatStyle.Flat,
|
||||||
|
Location = new Point(0, (btnHeight+1)*(panelButtons.Controls.Count/2)),
|
||||||
|
Margin = new Padding(0),
|
||||||
|
Size = new Size(panelButtons.Width, btnHeight),
|
||||||
|
Text = title,
|
||||||
|
UseVisualStyleBackColor = true
|
||||||
|
};
|
||||||
|
|
||||||
|
btn.FlatAppearance.BorderSize = 0;
|
||||||
|
btn.FlatAppearance.MouseDownBackColor = Color.FromArgb(179, 213, 232);
|
||||||
|
btn.FlatAppearance.MouseOverBackColor = Color.FromArgb(216, 230, 237);
|
||||||
|
|
||||||
|
panelButtons.Controls.Add(btn);
|
||||||
|
|
||||||
|
panelButtons.Controls.Add(new Panel{
|
||||||
|
BackColor = Color.DimGray,
|
||||||
|
Location = new Point(0, panelButtons.Controls[panelButtons.Controls.Count-1].Location.Y+btnHeight),
|
||||||
|
Margin = new Padding(0),
|
||||||
|
Size = new Size(panelButtons.Width, 1)
|
||||||
|
});
|
||||||
|
|
||||||
|
tabs.Add(typeof(T), new SettingsTab(btn, constructor));
|
||||||
|
|
||||||
|
btn.Click += (sender, args) => SelectTab<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectTab<T>() where T : BaseTabSettings{
|
||||||
|
SelectTab(tabs[typeof(T)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectTab(SettingsTab tab){
|
||||||
|
if (currentTab != null){
|
||||||
|
currentTab.Button.BackColor = SystemColors.Control;
|
||||||
|
}
|
||||||
|
|
||||||
|
tab.Button.BackColor = tab.Button.FlatAppearance.MouseDownBackColor;
|
||||||
|
|
||||||
|
if (!tab.IsInitialized){
|
||||||
|
foreach(Control control in tab.Control.InteractiveControls){
|
||||||
|
control.MouseLeave += control_MouseLeave;
|
||||||
|
}
|
||||||
|
|
||||||
|
tab.Control.OnReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
panelContents.SuspendLayout();
|
||||||
|
panelContents.VerticalScroll.Value = 0; // https://gfycat.com/GrotesqueTastyAstarte
|
||||||
|
panelContents.Controls.Clear();
|
||||||
|
panelContents.Controls.Add(tab.Control);
|
||||||
|
panelContents.ResumeLayout(true);
|
||||||
|
panelContents.Focus();
|
||||||
|
|
||||||
|
currentTab = tab;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void control_MouseLeave(object sender, EventArgs e){
|
||||||
|
panelContents.Focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SettingsTab{
|
||||||
|
public Button Button { get; }
|
||||||
|
|
||||||
|
public BaseTabSettings Control{
|
||||||
|
get => control ?? (control = constructor());
|
||||||
|
set => control = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsInitialized => control != null;
|
||||||
|
|
||||||
|
private readonly Func<BaseTabSettings> constructor;
|
||||||
|
private BaseTabSettings control;
|
||||||
|
|
||||||
|
public SettingsTab(Button button, Func<BaseTabSettings> constructor){
|
||||||
|
this.Button = button;
|
||||||
|
this.constructor = constructor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,22 @@
|
|||||||
using System.Windows.Forms;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
using TweetDuck.Configuration;
|
using TweetDuck.Configuration;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Other.Settings{
|
namespace TweetDuck.Core.Other.Settings{
|
||||||
class BaseTabSettings : UserControl{
|
class BaseTabSettings : UserControl{
|
||||||
protected static UserConfig Config => Program.UserConfig;
|
protected static UserConfig Config => Program.UserConfig;
|
||||||
|
|
||||||
|
public IEnumerable<Control> InteractiveControls{
|
||||||
|
get{
|
||||||
|
foreach(Panel panel in Controls.OfType<Panel>()){
|
||||||
|
foreach(Control control in panel.Controls){
|
||||||
|
yield return control;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BaseTabSettings(){
|
public BaseTabSettings(){
|
||||||
Padding = new Padding(6);
|
Padding = new Padding(6);
|
||||||
}
|
}
|
||||||
@@ -13,7 +25,7 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
public virtual void OnClosing(){}
|
public virtual void OnClosing(){}
|
||||||
|
|
||||||
protected static void PromptRestart(){
|
protected static void PromptRestart(){
|
||||||
if (MessageBox.Show("The application must restart for the setting to take place. Do you want to restart now?", Program.BrandName+" Settings", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes){
|
if (MessageBox.Show("The application must restart for the option to take place. Do you want to restart now?", Program.BrandName+" Options", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes){
|
||||||
Program.Restart();
|
Program.Restart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,7 +13,7 @@ namespace TweetDuck.Core.Other.Settings.Dialogs{
|
|||||||
public DialogSettingsCSS(Action<string> reinjectBrowserCSS){
|
public DialogSettingsCSS(Action<string> reinjectBrowserCSS){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Text = Program.BrandName+" Settings - CSS";
|
Text = Program.BrandName+" Options - CSS";
|
||||||
|
|
||||||
this.reinjectBrowserCSS = reinjectBrowserCSS;
|
this.reinjectBrowserCSS = reinjectBrowserCSS;
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ namespace TweetDuck.Core.Other.Settings.Dialogs{
|
|||||||
public DialogSettingsCefArgs(){
|
public DialogSettingsCefArgs(){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Text = Program.BrandName+" Settings - CEF Arguments";
|
Text = Program.BrandName+" Options - CEF Arguments";
|
||||||
|
|
||||||
textBoxArgs.EnableMultilineShortcuts();
|
textBoxArgs.EnableMultilineShortcuts();
|
||||||
textBoxArgs.Text = Program.UserConfig.CustomCefArgs ?? "";
|
textBoxArgs.Text = Program.UserConfig.CustomCefArgs ?? "";
|
||||||
@@ -31,7 +31,7 @@ namespace TweetDuck.Core.Other.Settings.Dialogs{
|
|||||||
}
|
}
|
||||||
|
|
||||||
int count = CommandLineArgsParser.ReadCefArguments(CefArgs).Count;
|
int count = CommandLineArgsParser.ReadCefArguments(CefArgs).Count;
|
||||||
string prompt = count == 0 && !string.IsNullOrWhiteSpace(prevArgs) ? "All arguments will be removed from the settings. Continue?" : count+(count == 1 ? " argument" : " arguments")+" will be added to the settings. Continue?";
|
string prompt = count == 0 && !string.IsNullOrWhiteSpace(prevArgs) ? "All current arguments will be removed. Continue?" : count+(count == 1 ? " argument was" : " arguments were")+" detected. Continue?";
|
||||||
|
|
||||||
if (MessageBox.Show(prompt, "Confirm CEF Arguments", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){
|
if (MessageBox.Show(prompt, "Confirm CEF Arguments", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){
|
||||||
DialogResult = DialogResult.OK;
|
DialogResult = DialogResult.OK;
|
||||||
|
@@ -1,130 +0,0 @@
|
|||||||
namespace TweetDuck.Core.Other.Settings.Dialogs {
|
|
||||||
partial class DialogSettingsExport {
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing) {
|
|
||||||
if (disposing && (components != null)) {
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent() {
|
|
||||||
this.components = new System.ComponentModel.Container();
|
|
||||||
this.btnCancel = new System.Windows.Forms.Button();
|
|
||||||
this.btnApply = new System.Windows.Forms.Button();
|
|
||||||
this.cbConfig = new System.Windows.Forms.CheckBox();
|
|
||||||
this.cbSession = new System.Windows.Forms.CheckBox();
|
|
||||||
this.cbPluginData = new System.Windows.Forms.CheckBox();
|
|
||||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// btnCancel
|
|
||||||
//
|
|
||||||
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.btnCancel.AutoSize = true;
|
|
||||||
this.btnCancel.Location = new System.Drawing.Point(176, 97);
|
|
||||||
this.btnCancel.Name = "btnCancel";
|
|
||||||
this.btnCancel.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
|
||||||
this.btnCancel.Size = new System.Drawing.Size(56, 23);
|
|
||||||
this.btnCancel.TabIndex = 4;
|
|
||||||
this.btnCancel.Text = "Cancel";
|
|
||||||
this.btnCancel.UseVisualStyleBackColor = true;
|
|
||||||
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
|
|
||||||
//
|
|
||||||
// btnApply
|
|
||||||
//
|
|
||||||
this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.btnApply.AutoSize = true;
|
|
||||||
this.btnApply.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
|
||||||
this.btnApply.Location = new System.Drawing.Point(144, 97);
|
|
||||||
this.btnApply.Name = "btnApply";
|
|
||||||
this.btnApply.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
|
||||||
this.btnApply.Size = new System.Drawing.Size(26, 23);
|
|
||||||
this.btnApply.TabIndex = 3;
|
|
||||||
this.btnApply.Text = " ";
|
|
||||||
this.btnApply.UseVisualStyleBackColor = true;
|
|
||||||
this.btnApply.Click += new System.EventHandler(this.btnApply_Click);
|
|
||||||
//
|
|
||||||
// cbConfig
|
|
||||||
//
|
|
||||||
this.cbConfig.AutoSize = true;
|
|
||||||
this.cbConfig.Location = new System.Drawing.Point(13, 13);
|
|
||||||
this.cbConfig.Name = "cbConfig";
|
|
||||||
this.cbConfig.Size = new System.Drawing.Size(106, 17);
|
|
||||||
this.cbConfig.TabIndex = 0;
|
|
||||||
this.cbConfig.Text = "Program Settings";
|
|
||||||
this.toolTip.SetToolTip(this.cbConfig, "Interface, notification, and update settings.\r\nIncludes a list of disabled plugin" +
|
|
||||||
"s.");
|
|
||||||
this.cbConfig.UseVisualStyleBackColor = true;
|
|
||||||
this.cbConfig.CheckedChanged += new System.EventHandler(this.cbConfig_CheckedChanged);
|
|
||||||
//
|
|
||||||
// cbSession
|
|
||||||
//
|
|
||||||
this.cbSession.AutoSize = true;
|
|
||||||
this.cbSession.Location = new System.Drawing.Point(13, 37);
|
|
||||||
this.cbSession.Name = "cbSession";
|
|
||||||
this.cbSession.Size = new System.Drawing.Size(92, 17);
|
|
||||||
this.cbSession.TabIndex = 1;
|
|
||||||
this.cbSession.Text = "Login Session";
|
|
||||||
this.toolTip.SetToolTip(this.cbSession, "A token that allows logging into the\r\ncurrent TweetDeck account.");
|
|
||||||
this.cbSession.UseVisualStyleBackColor = true;
|
|
||||||
this.cbSession.CheckedChanged += new System.EventHandler(this.cbSession_CheckedChanged);
|
|
||||||
//
|
|
||||||
// cbPluginData
|
|
||||||
//
|
|
||||||
this.cbPluginData.AutoSize = true;
|
|
||||||
this.cbPluginData.Location = new System.Drawing.Point(13, 61);
|
|
||||||
this.cbPluginData.Name = "cbPluginData";
|
|
||||||
this.cbPluginData.Size = new System.Drawing.Size(81, 17);
|
|
||||||
this.cbPluginData.TabIndex = 2;
|
|
||||||
this.cbPluginData.Text = "Plugin Data";
|
|
||||||
this.toolTip.SetToolTip(this.cbPluginData, "Data files generated by plugins.\r\nDoes not include the plugins themselves.");
|
|
||||||
this.cbPluginData.UseVisualStyleBackColor = true;
|
|
||||||
this.cbPluginData.CheckedChanged += new System.EventHandler(this.cbPluginData_CheckedChanged);
|
|
||||||
//
|
|
||||||
// DialogSettingsExport
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(244, 132);
|
|
||||||
this.Controls.Add(this.cbPluginData);
|
|
||||||
this.Controls.Add(this.cbSession);
|
|
||||||
this.Controls.Add(this.cbConfig);
|
|
||||||
this.Controls.Add(this.btnApply);
|
|
||||||
this.Controls.Add(this.btnCancel);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
|
||||||
this.MaximizeBox = false;
|
|
||||||
this.MinimizeBox = false;
|
|
||||||
this.MinimumSize = new System.Drawing.Size(200, 170);
|
|
||||||
this.Name = "DialogSettingsExport";
|
|
||||||
this.ShowIcon = false;
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.Button btnCancel;
|
|
||||||
private System.Windows.Forms.Button btnApply;
|
|
||||||
private System.Windows.Forms.CheckBox cbConfig;
|
|
||||||
private System.Windows.Forms.CheckBox cbSession;
|
|
||||||
private System.Windows.Forms.CheckBox cbPluginData;
|
|
||||||
private System.Windows.Forms.ToolTip toolTip;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,80 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using TweetDuck.Core.Other.Settings.Export;
|
|
||||||
|
|
||||||
namespace TweetDuck.Core.Other.Settings.Dialogs{
|
|
||||||
sealed partial class DialogSettingsExport : Form{
|
|
||||||
public static DialogSettingsExport Import(ExportFileFlags flags){
|
|
||||||
return new DialogSettingsExport(flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DialogSettingsExport Export(){
|
|
||||||
return new DialogSettingsExport(ExportFileFlags.None);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExportFileFlags Flags{
|
|
||||||
get => selectedFlags;
|
|
||||||
|
|
||||||
set{
|
|
||||||
// this will call events and SetFlag, which also updates the UI
|
|
||||||
cbConfig.Checked = value.HasFlag(ExportFileFlags.Config);
|
|
||||||
cbSession.Checked = value.HasFlag(ExportFileFlags.Session);
|
|
||||||
cbPluginData.Checked = value.HasFlag(ExportFileFlags.PluginData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private readonly bool isExporting;
|
|
||||||
private ExportFileFlags selectedFlags = ExportFileFlags.None;
|
|
||||||
|
|
||||||
private DialogSettingsExport(ExportFileFlags importFlags){
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
this.isExporting = importFlags == ExportFileFlags.None;
|
|
||||||
|
|
||||||
if (isExporting){
|
|
||||||
Text = "Export Profile";
|
|
||||||
btnApply.Text = "Export Profile";
|
|
||||||
Flags = ExportFileFlags.All & ~ExportFileFlags.Session;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
Text = "Import Profile";
|
|
||||||
Flags = importFlags;
|
|
||||||
|
|
||||||
cbConfig.Enabled = cbConfig.Checked;
|
|
||||||
cbSession.Enabled = cbSession.Checked;
|
|
||||||
cbPluginData.Enabled = cbPluginData.Checked;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetFlag(ExportFileFlags flag, bool enable){
|
|
||||||
selectedFlags = enable ? selectedFlags | flag : selectedFlags & ~flag;
|
|
||||||
btnApply.Enabled = selectedFlags != ExportFileFlags.None;
|
|
||||||
|
|
||||||
if (!isExporting){
|
|
||||||
btnApply.Text = selectedFlags.HasFlag(ExportFileFlags.Session) ? "Import && Restart" : "Import Profile";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cbConfig_CheckedChanged(object sender, EventArgs e){
|
|
||||||
SetFlag(ExportFileFlags.Config, cbConfig.Checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cbSession_CheckedChanged(object sender, EventArgs e){
|
|
||||||
SetFlag(ExportFileFlags.Session, cbSession.Checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cbPluginData_CheckedChanged(object sender, EventArgs e){
|
|
||||||
SetFlag(ExportFileFlags.PluginData, cbPluginData.Checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnApply_Click(object sender, EventArgs e){
|
|
||||||
DialogResult = DialogResult.OK;
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnCancel_Click(object sender, EventArgs e){
|
|
||||||
DialogResult = DialogResult.Cancel;
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
203
Core/Other/Settings/Dialogs/DialogSettingsManage.Designer.cs
generated
Normal file
203
Core/Other/Settings/Dialogs/DialogSettingsManage.Designer.cs
generated
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
namespace TweetDuck.Core.Other.Settings.Dialogs {
|
||||||
|
partial class DialogSettingsManage {
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing) {
|
||||||
|
if (disposing && (components != null)) {
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent() {
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
|
this.btnCancel = new System.Windows.Forms.Button();
|
||||||
|
this.btnContinue = new System.Windows.Forms.Button();
|
||||||
|
this.cbConfig = new System.Windows.Forms.CheckBox();
|
||||||
|
this.cbSession = new System.Windows.Forms.CheckBox();
|
||||||
|
this.cbPluginData = new System.Windows.Forms.CheckBox();
|
||||||
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
|
this.panelExport = new System.Windows.Forms.Panel();
|
||||||
|
this.panelDecision = new System.Windows.Forms.Panel();
|
||||||
|
this.radioReset = new System.Windows.Forms.RadioButton();
|
||||||
|
this.radioExport = new System.Windows.Forms.RadioButton();
|
||||||
|
this.radioImport = new System.Windows.Forms.RadioButton();
|
||||||
|
this.panelExport.SuspendLayout();
|
||||||
|
this.panelDecision.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// btnCancel
|
||||||
|
//
|
||||||
|
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.btnCancel.AutoSize = true;
|
||||||
|
this.btnCancel.Location = new System.Drawing.Point(176, 97);
|
||||||
|
this.btnCancel.Name = "btnCancel";
|
||||||
|
this.btnCancel.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
|
this.btnCancel.Size = new System.Drawing.Size(56, 23);
|
||||||
|
this.btnCancel.TabIndex = 4;
|
||||||
|
this.btnCancel.Text = "Cancel";
|
||||||
|
this.btnCancel.UseVisualStyleBackColor = true;
|
||||||
|
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
|
||||||
|
//
|
||||||
|
// btnContinue
|
||||||
|
//
|
||||||
|
this.btnContinue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.btnContinue.AutoSize = true;
|
||||||
|
this.btnContinue.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.btnContinue.Enabled = false;
|
||||||
|
this.btnContinue.Location = new System.Drawing.Point(125, 97);
|
||||||
|
this.btnContinue.Name = "btnContinue";
|
||||||
|
this.btnContinue.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
|
this.btnContinue.Size = new System.Drawing.Size(45, 23);
|
||||||
|
this.btnContinue.TabIndex = 3;
|
||||||
|
this.btnContinue.Text = "Next";
|
||||||
|
this.btnContinue.UseVisualStyleBackColor = true;
|
||||||
|
this.btnContinue.Click += new System.EventHandler(this.btnContinue_Click);
|
||||||
|
//
|
||||||
|
// cbConfig
|
||||||
|
//
|
||||||
|
this.cbConfig.AutoSize = true;
|
||||||
|
this.cbConfig.Location = new System.Drawing.Point(0, 3);
|
||||||
|
this.cbConfig.Name = "cbConfig";
|
||||||
|
this.cbConfig.Size = new System.Drawing.Size(104, 17);
|
||||||
|
this.cbConfig.TabIndex = 0;
|
||||||
|
this.cbConfig.Text = "Program Options";
|
||||||
|
this.toolTip.SetToolTip(this.cbConfig, "Interface, notification, and update options.");
|
||||||
|
this.cbConfig.UseVisualStyleBackColor = true;
|
||||||
|
this.cbConfig.CheckedChanged += new System.EventHandler(this.cbConfig_CheckedChanged);
|
||||||
|
//
|
||||||
|
// cbSession
|
||||||
|
//
|
||||||
|
this.cbSession.AutoSize = true;
|
||||||
|
this.cbSession.Location = new System.Drawing.Point(0, 27);
|
||||||
|
this.cbSession.Name = "cbSession";
|
||||||
|
this.cbSession.Size = new System.Drawing.Size(92, 17);
|
||||||
|
this.cbSession.TabIndex = 1;
|
||||||
|
this.cbSession.Text = "Login Session";
|
||||||
|
this.toolTip.SetToolTip(this.cbSession, "A token that allows logging into the\r\ncurrent TweetDeck account.");
|
||||||
|
this.cbSession.UseVisualStyleBackColor = true;
|
||||||
|
this.cbSession.CheckedChanged += new System.EventHandler(this.cbSession_CheckedChanged);
|
||||||
|
//
|
||||||
|
// cbPluginData
|
||||||
|
//
|
||||||
|
this.cbPluginData.AutoSize = true;
|
||||||
|
this.cbPluginData.Location = new System.Drawing.Point(0, 51);
|
||||||
|
this.cbPluginData.Name = "cbPluginData";
|
||||||
|
this.cbPluginData.Size = new System.Drawing.Size(81, 17);
|
||||||
|
this.cbPluginData.TabIndex = 2;
|
||||||
|
this.cbPluginData.Text = "Plugin Data";
|
||||||
|
this.toolTip.SetToolTip(this.cbPluginData, "Data files generated by plugins.\r\nDoes not include the plugins themselves.");
|
||||||
|
this.cbPluginData.UseVisualStyleBackColor = true;
|
||||||
|
this.cbPluginData.CheckedChanged += new System.EventHandler(this.cbPluginData_CheckedChanged);
|
||||||
|
//
|
||||||
|
// panelExport
|
||||||
|
//
|
||||||
|
this.panelExport.Controls.Add(this.cbConfig);
|
||||||
|
this.panelExport.Controls.Add(this.cbPluginData);
|
||||||
|
this.panelExport.Controls.Add(this.cbSession);
|
||||||
|
this.panelExport.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.panelExport.Name = "panelExport";
|
||||||
|
this.panelExport.Size = new System.Drawing.Size(220, 79);
|
||||||
|
this.panelExport.TabIndex = 5;
|
||||||
|
this.panelExport.Visible = false;
|
||||||
|
//
|
||||||
|
// panelDecision
|
||||||
|
//
|
||||||
|
this.panelDecision.Controls.Add(this.radioReset);
|
||||||
|
this.panelDecision.Controls.Add(this.radioExport);
|
||||||
|
this.panelDecision.Controls.Add(this.radioImport);
|
||||||
|
this.panelDecision.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.panelDecision.Name = "panelDecision";
|
||||||
|
this.panelDecision.Size = new System.Drawing.Size(220, 79);
|
||||||
|
this.panelDecision.TabIndex = 6;
|
||||||
|
//
|
||||||
|
// radioReset
|
||||||
|
//
|
||||||
|
this.radioReset.AutoSize = true;
|
||||||
|
this.radioReset.Location = new System.Drawing.Point(3, 49);
|
||||||
|
this.radioReset.Name = "radioReset";
|
||||||
|
this.radioReset.Size = new System.Drawing.Size(104, 17);
|
||||||
|
this.radioReset.TabIndex = 2;
|
||||||
|
this.radioReset.TabStop = true;
|
||||||
|
this.radioReset.Text = "Restore Defaults";
|
||||||
|
this.radioReset.UseVisualStyleBackColor = true;
|
||||||
|
this.radioReset.CheckedChanged += new System.EventHandler(this.radioDecision_CheckedChanged);
|
||||||
|
//
|
||||||
|
// radioExport
|
||||||
|
//
|
||||||
|
this.radioExport.AutoSize = true;
|
||||||
|
this.radioExport.Location = new System.Drawing.Point(3, 26);
|
||||||
|
this.radioExport.Name = "radioExport";
|
||||||
|
this.radioExport.Size = new System.Drawing.Size(87, 17);
|
||||||
|
this.radioExport.TabIndex = 1;
|
||||||
|
this.radioExport.TabStop = true;
|
||||||
|
this.radioExport.Text = "Export Profile";
|
||||||
|
this.radioExport.UseVisualStyleBackColor = true;
|
||||||
|
this.radioExport.CheckedChanged += new System.EventHandler(this.radioDecision_CheckedChanged);
|
||||||
|
//
|
||||||
|
// radioImport
|
||||||
|
//
|
||||||
|
this.radioImport.AutoSize = true;
|
||||||
|
this.radioImport.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.radioImport.Name = "radioImport";
|
||||||
|
this.radioImport.Size = new System.Drawing.Size(86, 17);
|
||||||
|
this.radioImport.TabIndex = 0;
|
||||||
|
this.radioImport.TabStop = true;
|
||||||
|
this.radioImport.Text = "Import Profile";
|
||||||
|
this.radioImport.UseVisualStyleBackColor = true;
|
||||||
|
this.radioImport.CheckedChanged += new System.EventHandler(this.radioDecision_CheckedChanged);
|
||||||
|
//
|
||||||
|
// DialogSettingsManage
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(244, 132);
|
||||||
|
this.Controls.Add(this.panelDecision);
|
||||||
|
this.Controls.Add(this.panelExport);
|
||||||
|
this.Controls.Add(this.btnContinue);
|
||||||
|
this.Controls.Add(this.btnCancel);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.MinimumSize = new System.Drawing.Size(200, 170);
|
||||||
|
this.Name = "DialogSettingsManage";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
this.Text = "Manage Options";
|
||||||
|
this.panelExport.ResumeLayout(false);
|
||||||
|
this.panelExport.PerformLayout();
|
||||||
|
this.panelDecision.ResumeLayout(false);
|
||||||
|
this.panelDecision.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Button btnCancel;
|
||||||
|
private System.Windows.Forms.Button btnContinue;
|
||||||
|
private System.Windows.Forms.CheckBox cbConfig;
|
||||||
|
private System.Windows.Forms.CheckBox cbSession;
|
||||||
|
private System.Windows.Forms.CheckBox cbPluginData;
|
||||||
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
|
private System.Windows.Forms.Panel panelExport;
|
||||||
|
private System.Windows.Forms.Panel panelDecision;
|
||||||
|
private System.Windows.Forms.RadioButton radioReset;
|
||||||
|
private System.Windows.Forms.RadioButton radioExport;
|
||||||
|
private System.Windows.Forms.RadioButton radioImport;
|
||||||
|
}
|
||||||
|
}
|
170
Core/Other/Settings/Dialogs/DialogSettingsManage.cs
Normal file
170
Core/Other/Settings/Dialogs/DialogSettingsManage.cs
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using TweetDuck.Core.Other.Settings.Export;
|
||||||
|
using TweetDuck.Plugins;
|
||||||
|
|
||||||
|
namespace TweetDuck.Core.Other.Settings.Dialogs{
|
||||||
|
sealed partial class DialogSettingsManage : Form{
|
||||||
|
private enum State{
|
||||||
|
Deciding, Import, Export
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExportFileFlags Flags{
|
||||||
|
get => selectedFlags;
|
||||||
|
|
||||||
|
set{
|
||||||
|
// this will call events and SetFlag, which also updates the UI
|
||||||
|
cbConfig.Checked = value.HasFlag(ExportFileFlags.Config);
|
||||||
|
cbSession.Checked = value.HasFlag(ExportFileFlags.Session);
|
||||||
|
cbPluginData.Checked = value.HasFlag(ExportFileFlags.PluginData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ShouldReloadUI { get; private set; }
|
||||||
|
|
||||||
|
private readonly PluginManager plugins;
|
||||||
|
private State currentState;
|
||||||
|
|
||||||
|
private ExportManager importManager;
|
||||||
|
private ExportFileFlags selectedFlags = ExportFileFlags.None;
|
||||||
|
|
||||||
|
public DialogSettingsManage(PluginManager plugins){
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
this.plugins = plugins;
|
||||||
|
this.currentState = State.Deciding;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void radioDecision_CheckedChanged(object sender, EventArgs e){
|
||||||
|
btnContinue.Enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbConfig_CheckedChanged(object sender, EventArgs e){
|
||||||
|
SetFlag(ExportFileFlags.Config, cbConfig.Checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbSession_CheckedChanged(object sender, EventArgs e){
|
||||||
|
SetFlag(ExportFileFlags.Session, cbSession.Checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbPluginData_CheckedChanged(object sender, EventArgs e){
|
||||||
|
SetFlag(ExportFileFlags.PluginData, cbPluginData.Checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnContinue_Click(object sender, EventArgs e){
|
||||||
|
string file;
|
||||||
|
|
||||||
|
switch(currentState){
|
||||||
|
case State.Deciding:
|
||||||
|
// Reset
|
||||||
|
if (radioReset.Checked){
|
||||||
|
if (MessageBox.Show("This will reset all of your program options. Plugins will not be affected. Do you want to proceed?", "Reset "+Program.BrandName+" Options", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
||||||
|
Program.ResetConfig();
|
||||||
|
|
||||||
|
ShouldReloadUI = true;
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Import
|
||||||
|
else if (radioImport.Checked){
|
||||||
|
using(OpenFileDialog dialog = new OpenFileDialog{
|
||||||
|
AutoUpgradeEnabled = true,
|
||||||
|
DereferenceLinks = true,
|
||||||
|
Title = "Import "+Program.BrandName+" Profile",
|
||||||
|
Filter = Program.BrandName+" Profile (*.tdsettings)|*.tdsettings"
|
||||||
|
}){
|
||||||
|
if (dialog.ShowDialog() != DialogResult.OK){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
file = dialog.FileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
importManager = new ExportManager(file, plugins);
|
||||||
|
currentState = State.Import;
|
||||||
|
|
||||||
|
Text = "Import Profile";
|
||||||
|
Flags = importManager.GetImportFlags();
|
||||||
|
|
||||||
|
cbConfig.Enabled = cbConfig.Checked;
|
||||||
|
cbSession.Enabled = cbSession.Checked;
|
||||||
|
cbPluginData.Enabled = cbPluginData.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export
|
||||||
|
else if (radioExport.Checked){
|
||||||
|
currentState = State.Export;
|
||||||
|
|
||||||
|
Text = "Export Profile";
|
||||||
|
btnContinue.Text = "Export Profile";
|
||||||
|
Flags = ExportFileFlags.All & ~ExportFileFlags.Session;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continue...
|
||||||
|
panelDecision.Visible = false;
|
||||||
|
panelExport.Visible = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case State.Import:
|
||||||
|
if (importManager.Import(Flags)){
|
||||||
|
if (!importManager.IsRestarting){
|
||||||
|
ShouldReloadUI = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Program.Reporter.HandleException("Profile Import Error", "An exception happened while importing "+Program.BrandName+" profile.", true, importManager.LastException);
|
||||||
|
}
|
||||||
|
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
Close();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case State.Export:
|
||||||
|
using(SaveFileDialog dialog = new SaveFileDialog{
|
||||||
|
AddExtension = true,
|
||||||
|
AutoUpgradeEnabled = true,
|
||||||
|
OverwritePrompt = true,
|
||||||
|
DefaultExt = "tdsettings",
|
||||||
|
FileName = Program.BrandName+".tdsettings",
|
||||||
|
Title = "Export "+Program.BrandName+" Profile",
|
||||||
|
Filter = Program.BrandName+" Profile (*.tdsettings)|*.tdsettings"
|
||||||
|
}){
|
||||||
|
if (dialog.ShowDialog() != DialogResult.OK){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
file = dialog.FileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
Program.UserConfig.Save();
|
||||||
|
ExportManager manager = new ExportManager(file, plugins);
|
||||||
|
|
||||||
|
if (!manager.Export(Flags)){
|
||||||
|
Program.Reporter.HandleException("Profile Export Error", "An exception happened while exporting "+Program.BrandName+" profile.", true, manager.LastException);
|
||||||
|
}
|
||||||
|
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
Close();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCancel_Click(object sender, EventArgs e){
|
||||||
|
DialogResult = DialogResult.Cancel;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetFlag(ExportFileFlags flag, bool enable){
|
||||||
|
selectedFlags = enable ? selectedFlags | flag : selectedFlags & ~flag;
|
||||||
|
btnContinue.Enabled = selectedFlags != ExportFileFlags.None;
|
||||||
|
|
||||||
|
if (currentState == State.Import){
|
||||||
|
btnContinue.Text = selectedFlags.HasFlag(ExportFileFlags.Session) ? "Import && Restart" : "Import Profile";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
202
Core/Other/Settings/TabSettingsAdvanced.Designer.cs
generated
202
Core/Other/Settings/TabSettingsAdvanced.Designer.cs
generated
@@ -33,22 +33,23 @@
|
|||||||
this.btnRestart = new System.Windows.Forms.Button();
|
this.btnRestart = new System.Windows.Forms.Button();
|
||||||
this.btnOpenAppFolder = new System.Windows.Forms.Button();
|
this.btnOpenAppFolder = new System.Windows.Forms.Button();
|
||||||
this.btnOpenDataFolder = new System.Windows.Forms.Button();
|
this.btnOpenDataFolder = new System.Windows.Forms.Button();
|
||||||
this.btnReset = new System.Windows.Forms.Button();
|
this.labelApp = new System.Windows.Forms.Label();
|
||||||
this.btnImport = new System.Windows.Forms.Button();
|
this.panelApp = new System.Windows.Forms.Panel();
|
||||||
this.btnExport = new System.Windows.Forms.Button();
|
this.labelPerformance = new System.Windows.Forms.Label();
|
||||||
this.groupPerformance = new System.Windows.Forms.GroupBox();
|
this.panelPerformance = new System.Windows.Forms.Panel();
|
||||||
this.groupConfiguration = new System.Windows.Forms.GroupBox();
|
this.panelConfiguration = new System.Windows.Forms.Panel();
|
||||||
this.groupApp = new System.Windows.Forms.GroupBox();
|
this.labelConfiguration = new System.Windows.Forms.Label();
|
||||||
this.groupPerformance.SuspendLayout();
|
this.panelApp.SuspendLayout();
|
||||||
this.groupConfiguration.SuspendLayout();
|
this.panelPerformance.SuspendLayout();
|
||||||
this.groupApp.SuspendLayout();
|
this.panelConfiguration.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// btnClearCache
|
// btnClearCache
|
||||||
//
|
//
|
||||||
this.btnClearCache.Location = new System.Drawing.Point(6, 44);
|
this.btnClearCache.Location = new System.Drawing.Point(5, 28);
|
||||||
|
this.btnClearCache.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.btnClearCache.Name = "btnClearCache";
|
this.btnClearCache.Name = "btnClearCache";
|
||||||
this.btnClearCache.Size = new System.Drawing.Size(171, 23);
|
this.btnClearCache.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnClearCache.TabIndex = 1;
|
this.btnClearCache.TabIndex = 1;
|
||||||
this.btnClearCache.Text = "Clear Cache (calculating)";
|
this.btnClearCache.Text = "Clear Cache (calculating)";
|
||||||
this.toolTip.SetToolTip(this.btnClearCache, "Clearing cache will free up space taken by downloaded images and other resources." +
|
this.toolTip.SetToolTip(this.btnClearCache, "Clearing cache will free up space taken by downloaded images and other resources." +
|
||||||
@@ -58,7 +59,7 @@
|
|||||||
// checkHardwareAcceleration
|
// checkHardwareAcceleration
|
||||||
//
|
//
|
||||||
this.checkHardwareAcceleration.AutoSize = true;
|
this.checkHardwareAcceleration.AutoSize = true;
|
||||||
this.checkHardwareAcceleration.Location = new System.Drawing.Point(9, 21);
|
this.checkHardwareAcceleration.Location = new System.Drawing.Point(6, 5);
|
||||||
this.checkHardwareAcceleration.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
this.checkHardwareAcceleration.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkHardwareAcceleration.Name = "checkHardwareAcceleration";
|
this.checkHardwareAcceleration.Name = "checkHardwareAcceleration";
|
||||||
this.checkHardwareAcceleration.Size = new System.Drawing.Size(134, 17);
|
this.checkHardwareAcceleration.Size = new System.Drawing.Size(134, 17);
|
||||||
@@ -70,9 +71,10 @@
|
|||||||
//
|
//
|
||||||
// btnEditCefArgs
|
// btnEditCefArgs
|
||||||
//
|
//
|
||||||
this.btnEditCefArgs.Location = new System.Drawing.Point(6, 19);
|
this.btnEditCefArgs.Location = new System.Drawing.Point(5, 3);
|
||||||
|
this.btnEditCefArgs.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.btnEditCefArgs.Name = "btnEditCefArgs";
|
this.btnEditCefArgs.Name = "btnEditCefArgs";
|
||||||
this.btnEditCefArgs.Size = new System.Drawing.Size(171, 23);
|
this.btnEditCefArgs.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnEditCefArgs.TabIndex = 0;
|
this.btnEditCefArgs.TabIndex = 0;
|
||||||
this.btnEditCefArgs.Text = "Edit CEF Arguments";
|
this.btnEditCefArgs.Text = "Edit CEF Arguments";
|
||||||
this.toolTip.SetToolTip(this.btnEditCefArgs, "Set custom command line arguments for Chromium Embedded Framework.");
|
this.toolTip.SetToolTip(this.btnEditCefArgs, "Set custom command line arguments for Chromium Embedded Framework.");
|
||||||
@@ -80,9 +82,9 @@
|
|||||||
//
|
//
|
||||||
// btnEditCSS
|
// btnEditCSS
|
||||||
//
|
//
|
||||||
this.btnEditCSS.Location = new System.Drawing.Point(6, 48);
|
this.btnEditCSS.Location = new System.Drawing.Point(155, 3);
|
||||||
this.btnEditCSS.Name = "btnEditCSS";
|
this.btnEditCSS.Name = "btnEditCSS";
|
||||||
this.btnEditCSS.Size = new System.Drawing.Size(171, 23);
|
this.btnEditCSS.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnEditCSS.TabIndex = 1;
|
this.btnEditCSS.TabIndex = 1;
|
||||||
this.btnEditCSS.Text = "Edit CSS";
|
this.btnEditCSS.Text = "Edit CSS";
|
||||||
this.toolTip.SetToolTip(this.btnEditCSS, "Set custom CSS for browser and notification windows.");
|
this.toolTip.SetToolTip(this.btnEditCSS, "Set custom CSS for browser and notification windows.");
|
||||||
@@ -90,9 +92,9 @@
|
|||||||
//
|
//
|
||||||
// btnRestartArgs
|
// btnRestartArgs
|
||||||
//
|
//
|
||||||
this.btnRestartArgs.Location = new System.Drawing.Point(6, 106);
|
this.btnRestartArgs.Location = new System.Drawing.Point(155, 32);
|
||||||
this.btnRestartArgs.Name = "btnRestartArgs";
|
this.btnRestartArgs.Name = "btnRestartArgs";
|
||||||
this.btnRestartArgs.Size = new System.Drawing.Size(171, 23);
|
this.btnRestartArgs.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnRestartArgs.TabIndex = 3;
|
this.btnRestartArgs.TabIndex = 3;
|
||||||
this.btnRestartArgs.Text = "Restart with Arguments";
|
this.btnRestartArgs.Text = "Restart with Arguments";
|
||||||
this.toolTip.SetToolTip(this.btnRestartArgs, "Restarts the program with customizable\r\ncommand line arguments.");
|
this.toolTip.SetToolTip(this.btnRestartArgs, "Restarts the program with customizable\r\ncommand line arguments.");
|
||||||
@@ -100,9 +102,9 @@
|
|||||||
//
|
//
|
||||||
// btnRestart
|
// btnRestart
|
||||||
//
|
//
|
||||||
this.btnRestart.Location = new System.Drawing.Point(6, 77);
|
this.btnRestart.Location = new System.Drawing.Point(155, 3);
|
||||||
this.btnRestart.Name = "btnRestart";
|
this.btnRestart.Name = "btnRestart";
|
||||||
this.btnRestart.Size = new System.Drawing.Size(171, 23);
|
this.btnRestart.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnRestart.TabIndex = 2;
|
this.btnRestart.TabIndex = 2;
|
||||||
this.btnRestart.Text = "Restart the Program";
|
this.btnRestart.Text = "Restart the Program";
|
||||||
this.toolTip.SetToolTip(this.btnRestart, "Restarts the program using the same command\r\nline arguments that were used at lau" +
|
this.toolTip.SetToolTip(this.btnRestart, "Restarts the program using the same command\r\nline arguments that were used at lau" +
|
||||||
@@ -111,9 +113,10 @@
|
|||||||
//
|
//
|
||||||
// btnOpenAppFolder
|
// btnOpenAppFolder
|
||||||
//
|
//
|
||||||
this.btnOpenAppFolder.Location = new System.Drawing.Point(6, 19);
|
this.btnOpenAppFolder.Location = new System.Drawing.Point(5, 3);
|
||||||
|
this.btnOpenAppFolder.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.btnOpenAppFolder.Name = "btnOpenAppFolder";
|
this.btnOpenAppFolder.Name = "btnOpenAppFolder";
|
||||||
this.btnOpenAppFolder.Size = new System.Drawing.Size(171, 23);
|
this.btnOpenAppFolder.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnOpenAppFolder.TabIndex = 0;
|
this.btnOpenAppFolder.TabIndex = 0;
|
||||||
this.btnOpenAppFolder.Text = "Open Program Folder";
|
this.btnOpenAppFolder.Text = "Open Program Folder";
|
||||||
this.toolTip.SetToolTip(this.btnOpenAppFolder, "Opens the folder where the app is located.");
|
this.toolTip.SetToolTip(this.btnOpenAppFolder, "Opens the folder where the app is located.");
|
||||||
@@ -121,102 +124,99 @@
|
|||||||
//
|
//
|
||||||
// btnOpenDataFolder
|
// btnOpenDataFolder
|
||||||
//
|
//
|
||||||
this.btnOpenDataFolder.Location = new System.Drawing.Point(6, 48);
|
this.btnOpenDataFolder.Location = new System.Drawing.Point(5, 32);
|
||||||
|
this.btnOpenDataFolder.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.btnOpenDataFolder.Name = "btnOpenDataFolder";
|
this.btnOpenDataFolder.Name = "btnOpenDataFolder";
|
||||||
this.btnOpenDataFolder.Size = new System.Drawing.Size(171, 23);
|
this.btnOpenDataFolder.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnOpenDataFolder.TabIndex = 1;
|
this.btnOpenDataFolder.TabIndex = 1;
|
||||||
this.btnOpenDataFolder.Text = "Open Data Folder";
|
this.btnOpenDataFolder.Text = "Open Data Folder";
|
||||||
this.toolTip.SetToolTip(this.btnOpenDataFolder, "Opens the folder where your profile data is located.");
|
this.toolTip.SetToolTip(this.btnOpenDataFolder, "Opens the folder where your profile data is located.");
|
||||||
this.btnOpenDataFolder.UseVisualStyleBackColor = true;
|
this.btnOpenDataFolder.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// btnReset
|
// labelApp
|
||||||
//
|
//
|
||||||
this.btnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.labelApp.AutoSize = true;
|
||||||
this.btnReset.AutoSize = true;
|
this.labelApp.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
this.btnReset.Location = new System.Drawing.Point(190, 268);
|
this.labelApp.Location = new System.Drawing.Point(6, 8);
|
||||||
this.btnReset.Name = "btnReset";
|
this.labelApp.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
|
||||||
this.btnReset.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.labelApp.Name = "labelApp";
|
||||||
this.btnReset.Size = new System.Drawing.Size(102, 23);
|
this.labelApp.Size = new System.Drawing.Size(38, 20);
|
||||||
this.btnReset.TabIndex = 5;
|
this.labelApp.TabIndex = 0;
|
||||||
this.btnReset.Text = "Restore Defaults";
|
this.labelApp.Text = "App";
|
||||||
this.btnReset.UseVisualStyleBackColor = true;
|
|
||||||
//
|
//
|
||||||
// btnImport
|
// panelApp
|
||||||
//
|
//
|
||||||
this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.panelApp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.btnImport.AutoSize = true;
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnImport.Location = new System.Drawing.Point(100, 268);
|
this.panelApp.Controls.Add(this.btnOpenDataFolder);
|
||||||
this.btnImport.Name = "btnImport";
|
this.panelApp.Controls.Add(this.btnOpenAppFolder);
|
||||||
this.btnImport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.panelApp.Controls.Add(this.btnRestart);
|
||||||
this.btnImport.Size = new System.Drawing.Size(84, 23);
|
this.panelApp.Controls.Add(this.btnRestartArgs);
|
||||||
this.btnImport.TabIndex = 4;
|
this.panelApp.Location = new System.Drawing.Point(9, 31);
|
||||||
this.btnImport.Text = "Import Profile";
|
this.panelApp.Name = "panelApp";
|
||||||
this.btnImport.UseVisualStyleBackColor = true;
|
this.panelApp.Size = new System.Drawing.Size(322, 59);
|
||||||
|
this.panelApp.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// btnExport
|
// labelPerformance
|
||||||
//
|
//
|
||||||
this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.labelPerformance.AutoSize = true;
|
||||||
this.btnExport.AutoSize = true;
|
this.labelPerformance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
this.btnExport.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
this.labelPerformance.Location = new System.Drawing.Point(6, 114);
|
||||||
this.btnExport.Location = new System.Drawing.Point(9, 268);
|
this.labelPerformance.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
this.btnExport.Name = "btnExport";
|
this.labelPerformance.Name = "labelPerformance";
|
||||||
this.btnExport.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.labelPerformance.Size = new System.Drawing.Size(100, 20);
|
||||||
this.btnExport.Size = new System.Drawing.Size(85, 23);
|
this.labelPerformance.TabIndex = 2;
|
||||||
this.btnExport.TabIndex = 3;
|
this.labelPerformance.Text = "Performance";
|
||||||
this.btnExport.Text = "Export Profile";
|
|
||||||
this.btnExport.UseVisualStyleBackColor = true;
|
|
||||||
//
|
//
|
||||||
// groupPerformance
|
// panelPerformance
|
||||||
//
|
//
|
||||||
this.groupPerformance.Controls.Add(this.checkHardwareAcceleration);
|
this.panelPerformance.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.groupPerformance.Controls.Add(this.btnClearCache);
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.groupPerformance.Location = new System.Drawing.Point(9, 9);
|
this.panelPerformance.Controls.Add(this.checkHardwareAcceleration);
|
||||||
this.groupPerformance.Name = "groupPerformance";
|
this.panelPerformance.Controls.Add(this.btnClearCache);
|
||||||
this.groupPerformance.Size = new System.Drawing.Size(183, 74);
|
this.panelPerformance.Location = new System.Drawing.Point(9, 137);
|
||||||
this.groupPerformance.TabIndex = 0;
|
this.panelPerformance.Name = "panelPerformance";
|
||||||
this.groupPerformance.TabStop = false;
|
this.panelPerformance.Size = new System.Drawing.Size(322, 54);
|
||||||
this.groupPerformance.Text = "Performance";
|
this.panelPerformance.TabIndex = 3;
|
||||||
//
|
//
|
||||||
// groupConfiguration
|
// panelConfiguration
|
||||||
//
|
//
|
||||||
this.groupConfiguration.Controls.Add(this.btnEditCSS);
|
this.panelConfiguration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.groupConfiguration.Controls.Add(this.btnEditCefArgs);
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.groupConfiguration.Location = new System.Drawing.Point(9, 89);
|
this.panelConfiguration.Controls.Add(this.btnEditCSS);
|
||||||
this.groupConfiguration.Name = "groupConfiguration";
|
this.panelConfiguration.Controls.Add(this.btnEditCefArgs);
|
||||||
this.groupConfiguration.Size = new System.Drawing.Size(183, 77);
|
this.panelConfiguration.Location = new System.Drawing.Point(9, 238);
|
||||||
this.groupConfiguration.TabIndex = 1;
|
this.panelConfiguration.Name = "panelConfiguration";
|
||||||
this.groupConfiguration.TabStop = false;
|
this.panelConfiguration.Size = new System.Drawing.Size(322, 29);
|
||||||
this.groupConfiguration.Text = "Configuration";
|
this.panelConfiguration.TabIndex = 5;
|
||||||
//
|
//
|
||||||
// groupApp
|
// labelConfiguration
|
||||||
//
|
//
|
||||||
this.groupApp.Controls.Add(this.btnOpenDataFolder);
|
this.labelConfiguration.AutoSize = true;
|
||||||
this.groupApp.Controls.Add(this.btnOpenAppFolder);
|
this.labelConfiguration.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
this.groupApp.Controls.Add(this.btnRestartArgs);
|
this.labelConfiguration.Location = new System.Drawing.Point(6, 215);
|
||||||
this.groupApp.Controls.Add(this.btnRestart);
|
this.labelConfiguration.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
this.groupApp.Location = new System.Drawing.Point(198, 9);
|
this.labelConfiguration.Name = "labelConfiguration";
|
||||||
this.groupApp.Name = "groupApp";
|
this.labelConfiguration.Size = new System.Drawing.Size(104, 20);
|
||||||
this.groupApp.Size = new System.Drawing.Size(183, 135);
|
this.labelConfiguration.TabIndex = 4;
|
||||||
this.groupApp.TabIndex = 2;
|
this.labelConfiguration.Text = "Configuration";
|
||||||
this.groupApp.TabStop = false;
|
|
||||||
this.groupApp.Text = "App";
|
|
||||||
//
|
//
|
||||||
// TabSettingsAdvanced
|
// TabSettingsAdvanced
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.Controls.Add(this.groupApp);
|
this.Controls.Add(this.labelConfiguration);
|
||||||
this.Controls.Add(this.groupConfiguration);
|
this.Controls.Add(this.panelConfiguration);
|
||||||
this.Controls.Add(this.groupPerformance);
|
this.Controls.Add(this.panelPerformance);
|
||||||
this.Controls.Add(this.btnReset);
|
this.Controls.Add(this.labelPerformance);
|
||||||
this.Controls.Add(this.btnImport);
|
this.Controls.Add(this.panelApp);
|
||||||
this.Controls.Add(this.btnExport);
|
this.Controls.Add(this.labelApp);
|
||||||
this.Name = "TabSettingsAdvanced";
|
this.Name = "TabSettingsAdvanced";
|
||||||
this.Size = new System.Drawing.Size(478, 300);
|
this.Size = new System.Drawing.Size(340, 277);
|
||||||
this.groupPerformance.ResumeLayout(false);
|
this.panelApp.ResumeLayout(false);
|
||||||
this.groupPerformance.PerformLayout();
|
this.panelPerformance.ResumeLayout(false);
|
||||||
this.groupConfiguration.ResumeLayout(false);
|
this.panelPerformance.PerformLayout();
|
||||||
this.groupApp.ResumeLayout(false);
|
this.panelConfiguration.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
@@ -227,17 +227,17 @@
|
|||||||
private System.Windows.Forms.Button btnClearCache;
|
private System.Windows.Forms.Button btnClearCache;
|
||||||
private System.Windows.Forms.CheckBox checkHardwareAcceleration;
|
private System.Windows.Forms.CheckBox checkHardwareAcceleration;
|
||||||
private System.Windows.Forms.ToolTip toolTip;
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
private System.Windows.Forms.Button btnReset;
|
|
||||||
private System.Windows.Forms.Button btnImport;
|
|
||||||
private System.Windows.Forms.Button btnExport;
|
|
||||||
private System.Windows.Forms.GroupBox groupPerformance;
|
|
||||||
private System.Windows.Forms.GroupBox groupConfiguration;
|
|
||||||
private System.Windows.Forms.Button btnEditCefArgs;
|
private System.Windows.Forms.Button btnEditCefArgs;
|
||||||
private System.Windows.Forms.Button btnEditCSS;
|
private System.Windows.Forms.Button btnEditCSS;
|
||||||
private System.Windows.Forms.GroupBox groupApp;
|
|
||||||
private System.Windows.Forms.Button btnRestartArgs;
|
private System.Windows.Forms.Button btnRestartArgs;
|
||||||
private System.Windows.Forms.Button btnRestart;
|
private System.Windows.Forms.Button btnRestart;
|
||||||
private System.Windows.Forms.Button btnOpenAppFolder;
|
private System.Windows.Forms.Button btnOpenAppFolder;
|
||||||
private System.Windows.Forms.Button btnOpenDataFolder;
|
private System.Windows.Forms.Button btnOpenDataFolder;
|
||||||
|
private System.Windows.Forms.Label labelApp;
|
||||||
|
private System.Windows.Forms.Panel panelApp;
|
||||||
|
private System.Windows.Forms.Label labelPerformance;
|
||||||
|
private System.Windows.Forms.Panel panelPerformance;
|
||||||
|
private System.Windows.Forms.Panel panelConfiguration;
|
||||||
|
private System.Windows.Forms.Label labelConfiguration;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,20 +4,16 @@ using System.Windows.Forms;
|
|||||||
using TweetDuck.Configuration;
|
using TweetDuck.Configuration;
|
||||||
using TweetDuck.Core.Controls;
|
using TweetDuck.Core.Controls;
|
||||||
using TweetDuck.Core.Other.Settings.Dialogs;
|
using TweetDuck.Core.Other.Settings.Dialogs;
|
||||||
using TweetDuck.Core.Other.Settings.Export;
|
|
||||||
using TweetDuck.Core.Utils;
|
using TweetDuck.Core.Utils;
|
||||||
using TweetDuck.Plugins;
|
|
||||||
|
|
||||||
namespace TweetDuck.Core.Other.Settings{
|
namespace TweetDuck.Core.Other.Settings{
|
||||||
partial class TabSettingsAdvanced : BaseTabSettings{
|
partial class TabSettingsAdvanced : BaseTabSettings{
|
||||||
private readonly Action<string> reinjectBrowserCSS;
|
private readonly Action<string> reinjectBrowserCSS;
|
||||||
private readonly PluginManager plugins;
|
|
||||||
|
|
||||||
public TabSettingsAdvanced(Action<string> reinjectBrowserCSS, PluginManager plugins){
|
public TabSettingsAdvanced(Action<string> reinjectBrowserCSS){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
this.reinjectBrowserCSS = reinjectBrowserCSS;
|
this.reinjectBrowserCSS = reinjectBrowserCSS;
|
||||||
this.plugins = plugins;
|
|
||||||
|
|
||||||
if (SystemConfig.IsHardwareAccelerationSupported){
|
if (SystemConfig.IsHardwareAccelerationSupported){
|
||||||
checkHardwareAcceleration.Checked = Program.SystemConfig.HardwareAcceleration;
|
checkHardwareAcceleration.Checked = Program.SystemConfig.HardwareAcceleration;
|
||||||
@@ -44,10 +40,6 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
btnEditCefArgs.Click += btnEditCefArgs_Click;
|
btnEditCefArgs.Click += btnEditCefArgs_Click;
|
||||||
btnEditCSS.Click += btnEditCSS_Click;
|
btnEditCSS.Click += btnEditCSS_Click;
|
||||||
|
|
||||||
btnExport.Click += btnExport_Click;
|
|
||||||
btnImport.Click += btnImport_Click;
|
|
||||||
btnReset.Click += btnReset_Click;
|
|
||||||
|
|
||||||
btnOpenAppFolder.Click += btnOpenAppFolder_Click;
|
btnOpenAppFolder.Click += btnOpenAppFolder_Click;
|
||||||
btnOpenDataFolder.Click += btnOpenDataFolder_Click;
|
btnOpenDataFolder.Click += btnOpenDataFolder_Click;
|
||||||
btnRestart.Click += btnRestart_Click;
|
btnRestart.Click += btnRestart_Click;
|
||||||
@@ -79,8 +71,8 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
|
|
||||||
if (form.DialogResult == DialogResult.OK){
|
if (form.DialogResult == DialogResult.OK){
|
||||||
Config.CustomCefArgs = form.CefArgs;
|
Config.CustomCefArgs = form.CefArgs;
|
||||||
form.Dispose();
|
|
||||||
PromptRestart();
|
PromptRestart();
|
||||||
|
form.Dispose();
|
||||||
}
|
}
|
||||||
else form.Dispose();
|
else form.Dispose();
|
||||||
};
|
};
|
||||||
@@ -112,88 +104,6 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
NativeMethods.SetFormDisabled(ParentForm, true);
|
NativeMethods.SetFormDisabled(ParentForm, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnExport_Click(object sender, EventArgs e){
|
|
||||||
ExportFileFlags flags;
|
|
||||||
|
|
||||||
using(DialogSettingsExport dialog = DialogSettingsExport.Export()){
|
|
||||||
if (dialog.ShowDialog() != DialogResult.OK){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
flags = dialog.Flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
string file;
|
|
||||||
|
|
||||||
using(SaveFileDialog dialog = new SaveFileDialog{
|
|
||||||
AddExtension = true,
|
|
||||||
AutoUpgradeEnabled = true,
|
|
||||||
OverwritePrompt = true,
|
|
||||||
DefaultExt = "tdsettings",
|
|
||||||
FileName = Program.BrandName+".tdsettings",
|
|
||||||
Title = "Export "+Program.BrandName+" Settings",
|
|
||||||
Filter = Program.BrandName+" Settings (*.tdsettings)|*.tdsettings"
|
|
||||||
}){
|
|
||||||
if (dialog.ShowDialog() != DialogResult.OK){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
file = dialog.FileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
Program.UserConfig.Save();
|
|
||||||
|
|
||||||
ExportManager manager = new ExportManager(file, plugins);
|
|
||||||
|
|
||||||
if (!manager.Export(flags)){
|
|
||||||
Program.Reporter.HandleException("Profile Export Error", "An exception happened while exporting "+Program.BrandName+" settings.", true, manager.LastException);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnImport_Click(object sender, EventArgs e){
|
|
||||||
string file;
|
|
||||||
|
|
||||||
using(OpenFileDialog dialog = new OpenFileDialog{
|
|
||||||
AutoUpgradeEnabled = true,
|
|
||||||
DereferenceLinks = true,
|
|
||||||
Title = "Import "+Program.BrandName+" Settings",
|
|
||||||
Filter = Program.BrandName+" Settings (*.tdsettings)|*.tdsettings"
|
|
||||||
}){
|
|
||||||
if (dialog.ShowDialog() != DialogResult.OK){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
file = dialog.FileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
ExportManager manager = new ExportManager(file, plugins);
|
|
||||||
ExportFileFlags flags;
|
|
||||||
|
|
||||||
using(DialogSettingsExport dialog = DialogSettingsExport.Import(manager.GetImportFlags())){
|
|
||||||
if (dialog.ShowDialog() != DialogResult.OK){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
flags = dialog.Flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (manager.Import(flags)){
|
|
||||||
if (!manager.IsRestarting){
|
|
||||||
((FormSettings)ParentForm).ReloadUI();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
Program.Reporter.HandleException("Profile Import Error", "An exception happened while importing "+Program.BrandName+" settings.", true, manager.LastException);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnReset_Click(object sender, EventArgs e){
|
|
||||||
if (MessageBox.Show("This will reset all of your program settings. Plugins will not be affected. Do you want to proceed?", "Reset "+Program.BrandName+" Settings", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes){
|
|
||||||
Program.ResetConfig();
|
|
||||||
((FormSettings)ParentForm).ReloadUI();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnOpenAppFolder_Click(object sender, EventArgs e){
|
private void btnOpenAppFolder_Click(object sender, EventArgs e){
|
||||||
using(Process.Start("explorer.exe", "\""+Program.ProgramPath+"\"")){}
|
using(Process.Start("explorer.exe", "\""+Program.ProgramPath+"\"")){}
|
||||||
}
|
}
|
||||||
|
193
Core/Other/Settings/TabSettingsGeneral.Designer.cs
generated
193
Core/Other/Settings/TabSettingsGeneral.Designer.cs
generated
@@ -33,23 +33,26 @@
|
|||||||
this.btnCheckUpdates = new System.Windows.Forms.Button();
|
this.btnCheckUpdates = new System.Windows.Forms.Button();
|
||||||
this.labelZoomValue = new System.Windows.Forms.Label();
|
this.labelZoomValue = new System.Windows.Forms.Label();
|
||||||
this.checkSwitchAccountSelectors = new System.Windows.Forms.CheckBox();
|
this.checkSwitchAccountSelectors = new System.Windows.Forms.CheckBox();
|
||||||
this.groupTray = new System.Windows.Forms.GroupBox();
|
|
||||||
this.labelTrayIcon = new System.Windows.Forms.Label();
|
this.labelTrayIcon = new System.Windows.Forms.Label();
|
||||||
this.groupInterface = new System.Windows.Forms.GroupBox();
|
|
||||||
this.trackBarZoom = new System.Windows.Forms.TrackBar();
|
this.trackBarZoom = new System.Windows.Forms.TrackBar();
|
||||||
this.labelZoom = new System.Windows.Forms.Label();
|
this.labelZoom = new System.Windows.Forms.Label();
|
||||||
this.groupUpdates = new System.Windows.Forms.GroupBox();
|
|
||||||
this.zoomUpdateTimer = new System.Windows.Forms.Timer(this.components);
|
this.zoomUpdateTimer = new System.Windows.Forms.Timer(this.components);
|
||||||
this.groupTray.SuspendLayout();
|
this.labelUI = new System.Windows.Forms.Label();
|
||||||
this.groupInterface.SuspendLayout();
|
this.panelUI = new System.Windows.Forms.Panel();
|
||||||
|
this.labelTray = new System.Windows.Forms.Label();
|
||||||
|
this.panelUpdates = new System.Windows.Forms.Panel();
|
||||||
|
this.panelTray = new System.Windows.Forms.Panel();
|
||||||
|
this.labelUpdates = new System.Windows.Forms.Label();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarZoom)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarZoom)).BeginInit();
|
||||||
this.groupUpdates.SuspendLayout();
|
this.panelUI.SuspendLayout();
|
||||||
|
this.panelUpdates.SuspendLayout();
|
||||||
|
this.panelTray.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// checkExpandLinks
|
// checkExpandLinks
|
||||||
//
|
//
|
||||||
this.checkExpandLinks.AutoSize = true;
|
this.checkExpandLinks.AutoSize = true;
|
||||||
this.checkExpandLinks.Location = new System.Drawing.Point(9, 21);
|
this.checkExpandLinks.Location = new System.Drawing.Point(6, 5);
|
||||||
this.checkExpandLinks.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
this.checkExpandLinks.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkExpandLinks.Name = "checkExpandLinks";
|
this.checkExpandLinks.Name = "checkExpandLinks";
|
||||||
this.checkExpandLinks.Size = new System.Drawing.Size(166, 17);
|
this.checkExpandLinks.Size = new System.Drawing.Size(166, 17);
|
||||||
@@ -63,16 +66,17 @@
|
|||||||
//
|
//
|
||||||
this.comboBoxTrayType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.comboBoxTrayType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.comboBoxTrayType.FormattingEnabled = true;
|
this.comboBoxTrayType.FormattingEnabled = true;
|
||||||
this.comboBoxTrayType.Location = new System.Drawing.Point(6, 19);
|
this.comboBoxTrayType.Location = new System.Drawing.Point(5, 5);
|
||||||
|
this.comboBoxTrayType.Margin = new System.Windows.Forms.Padding(5, 5, 3, 3);
|
||||||
this.comboBoxTrayType.Name = "comboBoxTrayType";
|
this.comboBoxTrayType.Name = "comboBoxTrayType";
|
||||||
this.comboBoxTrayType.Size = new System.Drawing.Size(171, 21);
|
this.comboBoxTrayType.Size = new System.Drawing.Size(144, 21);
|
||||||
this.comboBoxTrayType.TabIndex = 0;
|
this.comboBoxTrayType.TabIndex = 0;
|
||||||
this.toolTip.SetToolTip(this.comboBoxTrayType, "Changes behavior of the Tray icon.\r\nRight-click the icon for an action menu.");
|
this.toolTip.SetToolTip(this.comboBoxTrayType, "Changes behavior of the Tray icon.\r\nRight-click the icon for an action menu.");
|
||||||
//
|
//
|
||||||
// checkTrayHighlight
|
// checkTrayHighlight
|
||||||
//
|
//
|
||||||
this.checkTrayHighlight.AutoSize = true;
|
this.checkTrayHighlight.AutoSize = true;
|
||||||
this.checkTrayHighlight.Location = new System.Drawing.Point(9, 70);
|
this.checkTrayHighlight.Location = new System.Drawing.Point(6, 56);
|
||||||
this.checkTrayHighlight.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
this.checkTrayHighlight.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkTrayHighlight.Name = "checkTrayHighlight";
|
this.checkTrayHighlight.Name = "checkTrayHighlight";
|
||||||
this.checkTrayHighlight.Size = new System.Drawing.Size(103, 17);
|
this.checkTrayHighlight.Size = new System.Drawing.Size(103, 17);
|
||||||
@@ -85,7 +89,7 @@
|
|||||||
// checkSpellCheck
|
// checkSpellCheck
|
||||||
//
|
//
|
||||||
this.checkSpellCheck.AutoSize = true;
|
this.checkSpellCheck.AutoSize = true;
|
||||||
this.checkSpellCheck.Location = new System.Drawing.Point(9, 67);
|
this.checkSpellCheck.Location = new System.Drawing.Point(6, 51);
|
||||||
this.checkSpellCheck.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
this.checkSpellCheck.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
||||||
this.checkSpellCheck.Name = "checkSpellCheck";
|
this.checkSpellCheck.Name = "checkSpellCheck";
|
||||||
this.checkSpellCheck.Size = new System.Drawing.Size(119, 17);
|
this.checkSpellCheck.Size = new System.Drawing.Size(119, 17);
|
||||||
@@ -97,7 +101,7 @@
|
|||||||
// checkUpdateNotifications
|
// checkUpdateNotifications
|
||||||
//
|
//
|
||||||
this.checkUpdateNotifications.AutoSize = true;
|
this.checkUpdateNotifications.AutoSize = true;
|
||||||
this.checkUpdateNotifications.Location = new System.Drawing.Point(9, 21);
|
this.checkUpdateNotifications.Location = new System.Drawing.Point(6, 5);
|
||||||
this.checkUpdateNotifications.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
this.checkUpdateNotifications.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkUpdateNotifications.Name = "checkUpdateNotifications";
|
this.checkUpdateNotifications.Name = "checkUpdateNotifications";
|
||||||
this.checkUpdateNotifications.Size = new System.Drawing.Size(165, 17);
|
this.checkUpdateNotifications.Size = new System.Drawing.Size(165, 17);
|
||||||
@@ -109,9 +113,10 @@
|
|||||||
//
|
//
|
||||||
// btnCheckUpdates
|
// btnCheckUpdates
|
||||||
//
|
//
|
||||||
this.btnCheckUpdates.Location = new System.Drawing.Point(6, 44);
|
this.btnCheckUpdates.Location = new System.Drawing.Point(5, 28);
|
||||||
|
this.btnCheckUpdates.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.btnCheckUpdates.Name = "btnCheckUpdates";
|
this.btnCheckUpdates.Name = "btnCheckUpdates";
|
||||||
this.btnCheckUpdates.Size = new System.Drawing.Size(171, 23);
|
this.btnCheckUpdates.Size = new System.Drawing.Size(144, 23);
|
||||||
this.btnCheckUpdates.TabIndex = 1;
|
this.btnCheckUpdates.TabIndex = 1;
|
||||||
this.btnCheckUpdates.Text = "Check Updates Now";
|
this.btnCheckUpdates.Text = "Check Updates Now";
|
||||||
this.toolTip.SetToolTip(this.btnCheckUpdates, "Forces an update check, even for updates that had been dismissed.");
|
this.toolTip.SetToolTip(this.btnCheckUpdates, "Forces an update check, even for updates that had been dismissed.");
|
||||||
@@ -119,9 +124,8 @@
|
|||||||
//
|
//
|
||||||
// labelZoomValue
|
// labelZoomValue
|
||||||
//
|
//
|
||||||
this.labelZoomValue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.labelZoomValue.BackColor = System.Drawing.Color.Transparent;
|
this.labelZoomValue.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.labelZoomValue.Location = new System.Drawing.Point(139, 116);
|
this.labelZoomValue.Location = new System.Drawing.Point(141, 100);
|
||||||
this.labelZoomValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
this.labelZoomValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||||
this.labelZoomValue.Name = "labelZoomValue";
|
this.labelZoomValue.Name = "labelZoomValue";
|
||||||
this.labelZoomValue.Size = new System.Drawing.Size(38, 13);
|
this.labelZoomValue.Size = new System.Drawing.Size(38, 13);
|
||||||
@@ -133,7 +137,7 @@
|
|||||||
// checkSwitchAccountSelectors
|
// checkSwitchAccountSelectors
|
||||||
//
|
//
|
||||||
this.checkSwitchAccountSelectors.AutoSize = true;
|
this.checkSwitchAccountSelectors.AutoSize = true;
|
||||||
this.checkSwitchAccountSelectors.Location = new System.Drawing.Point(9, 44);
|
this.checkSwitchAccountSelectors.Location = new System.Drawing.Point(6, 28);
|
||||||
this.checkSwitchAccountSelectors.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
this.checkSwitchAccountSelectors.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
||||||
this.checkSwitchAccountSelectors.Name = "checkSwitchAccountSelectors";
|
this.checkSwitchAccountSelectors.Name = "checkSwitchAccountSelectors";
|
||||||
this.checkSwitchAccountSelectors.Size = new System.Drawing.Size(172, 17);
|
this.checkSwitchAccountSelectors.Size = new System.Drawing.Size(172, 17);
|
||||||
@@ -143,54 +147,26 @@
|
|||||||
"iple accounts, instead of TweetDeck\'s default behavior.");
|
"iple accounts, instead of TweetDeck\'s default behavior.");
|
||||||
this.checkSwitchAccountSelectors.UseVisualStyleBackColor = true;
|
this.checkSwitchAccountSelectors.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// groupTray
|
|
||||||
//
|
|
||||||
this.groupTray.Controls.Add(this.checkTrayHighlight);
|
|
||||||
this.groupTray.Controls.Add(this.labelTrayIcon);
|
|
||||||
this.groupTray.Controls.Add(this.comboBoxTrayType);
|
|
||||||
this.groupTray.Location = new System.Drawing.Point(9, 168);
|
|
||||||
this.groupTray.Name = "groupTray";
|
|
||||||
this.groupTray.Size = new System.Drawing.Size(183, 93);
|
|
||||||
this.groupTray.TabIndex = 1;
|
|
||||||
this.groupTray.TabStop = false;
|
|
||||||
this.groupTray.Text = "System Tray";
|
|
||||||
//
|
|
||||||
// labelTrayIcon
|
// labelTrayIcon
|
||||||
//
|
//
|
||||||
this.labelTrayIcon.AutoSize = true;
|
this.labelTrayIcon.AutoSize = true;
|
||||||
this.labelTrayIcon.Location = new System.Drawing.Point(6, 52);
|
this.labelTrayIcon.Location = new System.Drawing.Point(3, 38);
|
||||||
this.labelTrayIcon.Margin = new System.Windows.Forms.Padding(3, 9, 3, 0);
|
this.labelTrayIcon.Margin = new System.Windows.Forms.Padding(3, 9, 3, 0);
|
||||||
this.labelTrayIcon.Name = "labelTrayIcon";
|
this.labelTrayIcon.Name = "labelTrayIcon";
|
||||||
this.labelTrayIcon.Size = new System.Drawing.Size(52, 13);
|
this.labelTrayIcon.Size = new System.Drawing.Size(52, 13);
|
||||||
this.labelTrayIcon.TabIndex = 1;
|
this.labelTrayIcon.TabIndex = 1;
|
||||||
this.labelTrayIcon.Text = "Tray Icon";
|
this.labelTrayIcon.Text = "Tray Icon";
|
||||||
//
|
//
|
||||||
// groupInterface
|
|
||||||
//
|
|
||||||
this.groupInterface.Controls.Add(this.checkSwitchAccountSelectors);
|
|
||||||
this.groupInterface.Controls.Add(this.labelZoomValue);
|
|
||||||
this.groupInterface.Controls.Add(this.trackBarZoom);
|
|
||||||
this.groupInterface.Controls.Add(this.labelZoom);
|
|
||||||
this.groupInterface.Controls.Add(this.checkSpellCheck);
|
|
||||||
this.groupInterface.Controls.Add(this.checkExpandLinks);
|
|
||||||
this.groupInterface.Location = new System.Drawing.Point(9, 9);
|
|
||||||
this.groupInterface.Name = "groupInterface";
|
|
||||||
this.groupInterface.Size = new System.Drawing.Size(183, 153);
|
|
||||||
this.groupInterface.TabIndex = 0;
|
|
||||||
this.groupInterface.TabStop = false;
|
|
||||||
this.groupInterface.Text = "User Interface";
|
|
||||||
//
|
|
||||||
// trackBarZoom
|
// trackBarZoom
|
||||||
//
|
//
|
||||||
this.trackBarZoom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.trackBarZoom.AutoSize = false;
|
this.trackBarZoom.AutoSize = false;
|
||||||
|
this.trackBarZoom.BackColor = System.Drawing.SystemColors.Control;
|
||||||
this.trackBarZoom.LargeChange = 25;
|
this.trackBarZoom.LargeChange = 25;
|
||||||
this.trackBarZoom.Location = new System.Drawing.Point(6, 115);
|
this.trackBarZoom.Location = new System.Drawing.Point(3, 99);
|
||||||
this.trackBarZoom.Maximum = 200;
|
this.trackBarZoom.Maximum = 200;
|
||||||
this.trackBarZoom.Minimum = 50;
|
this.trackBarZoom.Minimum = 50;
|
||||||
this.trackBarZoom.Name = "trackBarZoom";
|
this.trackBarZoom.Name = "trackBarZoom";
|
||||||
this.trackBarZoom.Size = new System.Drawing.Size(141, 30);
|
this.trackBarZoom.Size = new System.Drawing.Size(148, 30);
|
||||||
this.trackBarZoom.SmallChange = 5;
|
this.trackBarZoom.SmallChange = 5;
|
||||||
this.trackBarZoom.TabIndex = 4;
|
this.trackBarZoom.TabIndex = 4;
|
||||||
this.trackBarZoom.TickFrequency = 25;
|
this.trackBarZoom.TickFrequency = 25;
|
||||||
@@ -198,49 +174,111 @@
|
|||||||
//
|
//
|
||||||
// labelZoom
|
// labelZoom
|
||||||
//
|
//
|
||||||
this.labelZoom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.labelZoom.AutoSize = true;
|
this.labelZoom.AutoSize = true;
|
||||||
this.labelZoom.Location = new System.Drawing.Point(5, 99);
|
this.labelZoom.Location = new System.Drawing.Point(3, 83);
|
||||||
this.labelZoom.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
this.labelZoom.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
this.labelZoom.Name = "labelZoom";
|
this.labelZoom.Name = "labelZoom";
|
||||||
this.labelZoom.Size = new System.Drawing.Size(34, 13);
|
this.labelZoom.Size = new System.Drawing.Size(34, 13);
|
||||||
this.labelZoom.TabIndex = 3;
|
this.labelZoom.TabIndex = 3;
|
||||||
this.labelZoom.Text = "Zoom";
|
this.labelZoom.Text = "Zoom";
|
||||||
//
|
//
|
||||||
// groupUpdates
|
|
||||||
//
|
|
||||||
this.groupUpdates.Controls.Add(this.checkUpdateNotifications);
|
|
||||||
this.groupUpdates.Controls.Add(this.btnCheckUpdates);
|
|
||||||
this.groupUpdates.Location = new System.Drawing.Point(198, 9);
|
|
||||||
this.groupUpdates.Name = "groupUpdates";
|
|
||||||
this.groupUpdates.Size = new System.Drawing.Size(183, 75);
|
|
||||||
this.groupUpdates.TabIndex = 2;
|
|
||||||
this.groupUpdates.TabStop = false;
|
|
||||||
this.groupUpdates.Text = "Updates";
|
|
||||||
//
|
|
||||||
// zoomUpdateTimer
|
// zoomUpdateTimer
|
||||||
//
|
//
|
||||||
this.zoomUpdateTimer.Interval = 250;
|
this.zoomUpdateTimer.Interval = 250;
|
||||||
this.zoomUpdateTimer.Tick += new System.EventHandler(this.zoomUpdateTimer_Tick);
|
this.zoomUpdateTimer.Tick += new System.EventHandler(this.zoomUpdateTimer_Tick);
|
||||||
//
|
//
|
||||||
|
// labelUI
|
||||||
|
//
|
||||||
|
this.labelUI.AutoSize = true;
|
||||||
|
this.labelUI.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelUI.Location = new System.Drawing.Point(6, 8);
|
||||||
|
this.labelUI.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
|
||||||
|
this.labelUI.Name = "labelUI";
|
||||||
|
this.labelUI.Size = new System.Drawing.Size(111, 20);
|
||||||
|
this.labelUI.TabIndex = 0;
|
||||||
|
this.labelUI.Text = "User Interface";
|
||||||
|
//
|
||||||
|
// panelUI
|
||||||
|
//
|
||||||
|
this.panelUI.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelUI.Controls.Add(this.checkExpandLinks);
|
||||||
|
this.panelUI.Controls.Add(this.checkSwitchAccountSelectors);
|
||||||
|
this.panelUI.Controls.Add(this.checkSpellCheck);
|
||||||
|
this.panelUI.Controls.Add(this.labelZoom);
|
||||||
|
this.panelUI.Controls.Add(this.labelZoomValue);
|
||||||
|
this.panelUI.Controls.Add(this.trackBarZoom);
|
||||||
|
this.panelUI.Location = new System.Drawing.Point(9, 31);
|
||||||
|
this.panelUI.Name = "panelUI";
|
||||||
|
this.panelUI.Size = new System.Drawing.Size(322, 134);
|
||||||
|
this.panelUI.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// labelTray
|
||||||
|
//
|
||||||
|
this.labelTray.AutoSize = true;
|
||||||
|
this.labelTray.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelTray.Location = new System.Drawing.Point(5, 189);
|
||||||
|
this.labelTray.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
|
this.labelTray.Name = "labelTray";
|
||||||
|
this.labelTray.Size = new System.Drawing.Size(96, 20);
|
||||||
|
this.labelTray.TabIndex = 2;
|
||||||
|
this.labelTray.Text = "System Tray";
|
||||||
|
//
|
||||||
|
// panelUpdates
|
||||||
|
//
|
||||||
|
this.panelUpdates.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelUpdates.Controls.Add(this.checkUpdateNotifications);
|
||||||
|
this.panelUpdates.Controls.Add(this.btnCheckUpdates);
|
||||||
|
this.panelUpdates.Location = new System.Drawing.Point(9, 335);
|
||||||
|
this.panelUpdates.Name = "panelUpdates";
|
||||||
|
this.panelUpdates.Size = new System.Drawing.Size(322, 55);
|
||||||
|
this.panelUpdates.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// panelTray
|
||||||
|
//
|
||||||
|
this.panelTray.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelTray.Controls.Add(this.checkTrayHighlight);
|
||||||
|
this.panelTray.Controls.Add(this.comboBoxTrayType);
|
||||||
|
this.panelTray.Controls.Add(this.labelTrayIcon);
|
||||||
|
this.panelTray.Location = new System.Drawing.Point(9, 212);
|
||||||
|
this.panelTray.Name = "panelTray";
|
||||||
|
this.panelTray.Size = new System.Drawing.Size(322, 76);
|
||||||
|
this.panelTray.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// labelUpdates
|
||||||
|
//
|
||||||
|
this.labelUpdates.AutoSize = true;
|
||||||
|
this.labelUpdates.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelUpdates.Location = new System.Drawing.Point(6, 312);
|
||||||
|
this.labelUpdates.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
|
this.labelUpdates.Name = "labelUpdates";
|
||||||
|
this.labelUpdates.Size = new System.Drawing.Size(70, 20);
|
||||||
|
this.labelUpdates.TabIndex = 4;
|
||||||
|
this.labelUpdates.Text = "Updates";
|
||||||
|
//
|
||||||
// TabSettingsGeneral
|
// TabSettingsGeneral
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.Controls.Add(this.groupUpdates);
|
this.Controls.Add(this.labelUpdates);
|
||||||
this.Controls.Add(this.groupInterface);
|
this.Controls.Add(this.panelTray);
|
||||||
this.Controls.Add(this.groupTray);
|
this.Controls.Add(this.panelUpdates);
|
||||||
|
this.Controls.Add(this.labelTray);
|
||||||
|
this.Controls.Add(this.panelUI);
|
||||||
|
this.Controls.Add(this.labelUI);
|
||||||
this.Name = "TabSettingsGeneral";
|
this.Name = "TabSettingsGeneral";
|
||||||
this.Size = new System.Drawing.Size(478, 300);
|
this.Size = new System.Drawing.Size(340, 400);
|
||||||
this.groupTray.ResumeLayout(false);
|
|
||||||
this.groupTray.PerformLayout();
|
|
||||||
this.groupInterface.ResumeLayout(false);
|
|
||||||
this.groupInterface.PerformLayout();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarZoom)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarZoom)).EndInit();
|
||||||
this.groupUpdates.ResumeLayout(false);
|
this.panelUI.ResumeLayout(false);
|
||||||
this.groupUpdates.PerformLayout();
|
this.panelUI.PerformLayout();
|
||||||
|
this.panelUpdates.ResumeLayout(false);
|
||||||
|
this.panelUpdates.PerformLayout();
|
||||||
|
this.panelTray.ResumeLayout(false);
|
||||||
|
this.panelTray.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,12 +287,9 @@
|
|||||||
private System.Windows.Forms.CheckBox checkExpandLinks;
|
private System.Windows.Forms.CheckBox checkExpandLinks;
|
||||||
private System.Windows.Forms.ComboBox comboBoxTrayType;
|
private System.Windows.Forms.ComboBox comboBoxTrayType;
|
||||||
private System.Windows.Forms.ToolTip toolTip;
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
private System.Windows.Forms.GroupBox groupTray;
|
|
||||||
private System.Windows.Forms.GroupBox groupInterface;
|
|
||||||
private System.Windows.Forms.Label labelTrayIcon;
|
private System.Windows.Forms.Label labelTrayIcon;
|
||||||
private System.Windows.Forms.CheckBox checkTrayHighlight;
|
private System.Windows.Forms.CheckBox checkTrayHighlight;
|
||||||
private System.Windows.Forms.CheckBox checkSpellCheck;
|
private System.Windows.Forms.CheckBox checkSpellCheck;
|
||||||
private System.Windows.Forms.GroupBox groupUpdates;
|
|
||||||
private System.Windows.Forms.CheckBox checkUpdateNotifications;
|
private System.Windows.Forms.CheckBox checkUpdateNotifications;
|
||||||
private System.Windows.Forms.Button btnCheckUpdates;
|
private System.Windows.Forms.Button btnCheckUpdates;
|
||||||
private System.Windows.Forms.Label labelZoom;
|
private System.Windows.Forms.Label labelZoom;
|
||||||
@@ -262,5 +297,11 @@
|
|||||||
private System.Windows.Forms.TrackBar trackBarZoom;
|
private System.Windows.Forms.TrackBar trackBarZoom;
|
||||||
private System.Windows.Forms.Timer zoomUpdateTimer;
|
private System.Windows.Forms.Timer zoomUpdateTimer;
|
||||||
private System.Windows.Forms.CheckBox checkSwitchAccountSelectors;
|
private System.Windows.Forms.CheckBox checkSwitchAccountSelectors;
|
||||||
|
private System.Windows.Forms.Label labelUI;
|
||||||
|
private System.Windows.Forms.Panel panelUI;
|
||||||
|
private System.Windows.Forms.Label labelTray;
|
||||||
|
private System.Windows.Forms.Panel panelUpdates;
|
||||||
|
private System.Windows.Forms.Panel panelTray;
|
||||||
|
private System.Windows.Forms.Label labelUpdates;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -66,10 +66,7 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void trackBarZoom_ValueChanged(object sender, EventArgs e){
|
private void trackBarZoom_ValueChanged(object sender, EventArgs e){
|
||||||
if (trackBarZoom.Value % trackBarZoom.SmallChange != 0){
|
if (trackBarZoom.AlignValueToTick()){
|
||||||
trackBarZoom.Value = trackBarZoom.SmallChange*(int)Math.Floor(((double)trackBarZoom.Value/trackBarZoom.SmallChange)+0.5);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
zoomUpdateTimer.Stop();
|
zoomUpdateTimer.Stop();
|
||||||
zoomUpdateTimer.Start();
|
zoomUpdateTimer.Start();
|
||||||
labelZoomValue.Text = trackBarZoom.Value+"%";
|
labelZoomValue.Text = trackBarZoom.Value+"%";
|
||||||
|
368
Core/Other/Settings/TabSettingsNotifications.Designer.cs
generated
368
Core/Other/Settings/TabSettingsNotifications.Designer.cs
generated
@@ -24,7 +24,6 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
this.groupNotificationLocation = new System.Windows.Forms.GroupBox();
|
|
||||||
this.labelEdgeDistanceValue = new System.Windows.Forms.Label();
|
this.labelEdgeDistanceValue = new System.Windows.Forms.Label();
|
||||||
this.labelDisplay = new System.Windows.Forms.Label();
|
this.labelDisplay = new System.Windows.Forms.Label();
|
||||||
this.comboBoxDisplay = new System.Windows.Forms.ComboBox();
|
this.comboBoxDisplay = new System.Windows.Forms.ComboBox();
|
||||||
@@ -35,14 +34,12 @@
|
|||||||
this.radioLocTR = new System.Windows.Forms.RadioButton();
|
this.radioLocTR = new System.Windows.Forms.RadioButton();
|
||||||
this.radioLocTL = new System.Windows.Forms.RadioButton();
|
this.radioLocTL = new System.Windows.Forms.RadioButton();
|
||||||
this.trackBarEdgeDistance = new System.Windows.Forms.TrackBar();
|
this.trackBarEdgeDistance = new System.Windows.Forms.TrackBar();
|
||||||
this.groupNotificationDuration = new System.Windows.Forms.GroupBox();
|
|
||||||
this.tableLayoutDurationButtons = new System.Windows.Forms.TableLayoutPanel();
|
this.tableLayoutDurationButtons = new System.Windows.Forms.TableLayoutPanel();
|
||||||
this.btnDurationMedium = new TweetDuck.Core.Controls.FlatButton();
|
this.btnDurationMedium = new TweetDuck.Core.Controls.FlatButton();
|
||||||
this.btnDurationLong = new TweetDuck.Core.Controls.FlatButton();
|
this.btnDurationLong = new TweetDuck.Core.Controls.FlatButton();
|
||||||
this.btnDurationShort = new TweetDuck.Core.Controls.FlatButton();
|
this.btnDurationShort = new TweetDuck.Core.Controls.FlatButton();
|
||||||
this.labelDurationValue = new System.Windows.Forms.Label();
|
this.labelDurationValue = new System.Windows.Forms.Label();
|
||||||
this.trackBarDuration = new System.Windows.Forms.TrackBar();
|
this.trackBarDuration = new System.Windows.Forms.TrackBar();
|
||||||
this.groupUserInterface = new System.Windows.Forms.GroupBox();
|
|
||||||
this.checkSkipOnLinkClick = new System.Windows.Forms.CheckBox();
|
this.checkSkipOnLinkClick = new System.Windows.Forms.CheckBox();
|
||||||
this.checkColumnName = new System.Windows.Forms.CheckBox();
|
this.checkColumnName = new System.Windows.Forms.CheckBox();
|
||||||
this.labelIdlePause = new System.Windows.Forms.Label();
|
this.labelIdlePause = new System.Windows.Forms.Label();
|
||||||
@@ -51,37 +48,31 @@
|
|||||||
this.checkTimerCountDown = new System.Windows.Forms.CheckBox();
|
this.checkTimerCountDown = new System.Windows.Forms.CheckBox();
|
||||||
this.checkNotificationTimer = new System.Windows.Forms.CheckBox();
|
this.checkNotificationTimer = new System.Windows.Forms.CheckBox();
|
||||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
this.groupNotificationLocation.SuspendLayout();
|
this.labelGeneral = new System.Windows.Forms.Label();
|
||||||
|
this.panelGeneral = new System.Windows.Forms.Panel();
|
||||||
|
this.labelScrollSpeedValue = new System.Windows.Forms.Label();
|
||||||
|
this.trackBarScrollSpeed = new System.Windows.Forms.TrackBar();
|
||||||
|
this.labelScrollSpeed = new System.Windows.Forms.Label();
|
||||||
|
this.labelLocation = new System.Windows.Forms.Label();
|
||||||
|
this.panelLocation = new System.Windows.Forms.Panel();
|
||||||
|
this.panelTimer = new System.Windows.Forms.Panel();
|
||||||
|
this.labelDuration = new System.Windows.Forms.Label();
|
||||||
|
this.labelTimer = new System.Windows.Forms.Label();
|
||||||
|
this.labelMiscellaneous = new System.Windows.Forms.Label();
|
||||||
|
this.panelMiscellaneous = new System.Windows.Forms.Panel();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarEdgeDistance)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarEdgeDistance)).BeginInit();
|
||||||
this.groupNotificationDuration.SuspendLayout();
|
|
||||||
this.tableLayoutDurationButtons.SuspendLayout();
|
this.tableLayoutDurationButtons.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarDuration)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarDuration)).BeginInit();
|
||||||
this.groupUserInterface.SuspendLayout();
|
this.panelGeneral.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.trackBarScrollSpeed)).BeginInit();
|
||||||
|
this.panelLocation.SuspendLayout();
|
||||||
|
this.panelTimer.SuspendLayout();
|
||||||
|
this.panelMiscellaneous.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupNotificationLocation
|
|
||||||
//
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.labelEdgeDistanceValue);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.labelDisplay);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.comboBoxDisplay);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.labelEdgeDistance);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocCustom);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocBR);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocBL);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocTR);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.radioLocTL);
|
|
||||||
this.groupNotificationLocation.Controls.Add(this.trackBarEdgeDistance);
|
|
||||||
this.groupNotificationLocation.Location = new System.Drawing.Point(198, 9);
|
|
||||||
this.groupNotificationLocation.Name = "groupNotificationLocation";
|
|
||||||
this.groupNotificationLocation.Size = new System.Drawing.Size(183, 282);
|
|
||||||
this.groupNotificationLocation.TabIndex = 2;
|
|
||||||
this.groupNotificationLocation.TabStop = false;
|
|
||||||
this.groupNotificationLocation.Text = "Location";
|
|
||||||
//
|
|
||||||
// labelEdgeDistanceValue
|
// labelEdgeDistanceValue
|
||||||
//
|
//
|
||||||
this.labelEdgeDistanceValue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.labelEdgeDistanceValue.Location = new System.Drawing.Point(147, 129);
|
||||||
this.labelEdgeDistanceValue.Location = new System.Drawing.Point(143, 217);
|
|
||||||
this.labelEdgeDistanceValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
this.labelEdgeDistanceValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||||
this.labelEdgeDistanceValue.Name = "labelEdgeDistanceValue";
|
this.labelEdgeDistanceValue.Name = "labelEdgeDistanceValue";
|
||||||
this.labelEdgeDistanceValue.Size = new System.Drawing.Size(34, 13);
|
this.labelEdgeDistanceValue.Size = new System.Drawing.Size(34, 13);
|
||||||
@@ -92,7 +83,7 @@
|
|||||||
// labelDisplay
|
// labelDisplay
|
||||||
//
|
//
|
||||||
this.labelDisplay.AutoSize = true;
|
this.labelDisplay.AutoSize = true;
|
||||||
this.labelDisplay.Location = new System.Drawing.Point(5, 144);
|
this.labelDisplay.Location = new System.Drawing.Point(3, 60);
|
||||||
this.labelDisplay.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
this.labelDisplay.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
this.labelDisplay.Name = "labelDisplay";
|
this.labelDisplay.Name = "labelDisplay";
|
||||||
this.labelDisplay.Size = new System.Drawing.Size(41, 13);
|
this.labelDisplay.Size = new System.Drawing.Size(41, 13);
|
||||||
@@ -105,15 +96,16 @@
|
|||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.comboBoxDisplay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.comboBoxDisplay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.comboBoxDisplay.FormattingEnabled = true;
|
this.comboBoxDisplay.FormattingEnabled = true;
|
||||||
this.comboBoxDisplay.Location = new System.Drawing.Point(6, 160);
|
this.comboBoxDisplay.Location = new System.Drawing.Point(5, 76);
|
||||||
|
this.comboBoxDisplay.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.comboBoxDisplay.Name = "comboBoxDisplay";
|
this.comboBoxDisplay.Name = "comboBoxDisplay";
|
||||||
this.comboBoxDisplay.Size = new System.Drawing.Size(171, 21);
|
this.comboBoxDisplay.Size = new System.Drawing.Size(144, 21);
|
||||||
this.comboBoxDisplay.TabIndex = 6;
|
this.comboBoxDisplay.TabIndex = 6;
|
||||||
//
|
//
|
||||||
// labelEdgeDistance
|
// labelEdgeDistance
|
||||||
//
|
//
|
||||||
this.labelEdgeDistance.AutoSize = true;
|
this.labelEdgeDistance.AutoSize = true;
|
||||||
this.labelEdgeDistance.Location = new System.Drawing.Point(5, 196);
|
this.labelEdgeDistance.Location = new System.Drawing.Point(3, 112);
|
||||||
this.labelEdgeDistance.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
this.labelEdgeDistance.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
this.labelEdgeDistance.Name = "labelEdgeDistance";
|
this.labelEdgeDistance.Name = "labelEdgeDistance";
|
||||||
this.labelEdgeDistance.Size = new System.Drawing.Size(103, 13);
|
this.labelEdgeDistance.Size = new System.Drawing.Size(103, 13);
|
||||||
@@ -122,11 +114,10 @@
|
|||||||
//
|
//
|
||||||
// radioLocCustom
|
// radioLocCustom
|
||||||
//
|
//
|
||||||
this.radioLocCustom.AutoSize = true;
|
this.radioLocCustom.Location = new System.Drawing.Point(205, 4);
|
||||||
this.radioLocCustom.Location = new System.Drawing.Point(8, 112);
|
this.radioLocCustom.Margin = new System.Windows.Forms.Padding(5, 4, 3, 3);
|
||||||
this.radioLocCustom.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
|
||||||
this.radioLocCustom.Name = "radioLocCustom";
|
this.radioLocCustom.Name = "radioLocCustom";
|
||||||
this.radioLocCustom.Size = new System.Drawing.Size(60, 17);
|
this.radioLocCustom.Size = new System.Drawing.Size(65, 41);
|
||||||
this.radioLocCustom.TabIndex = 4;
|
this.radioLocCustom.TabIndex = 4;
|
||||||
this.radioLocCustom.TabStop = true;
|
this.radioLocCustom.TabStop = true;
|
||||||
this.radioLocCustom.Text = "Custom";
|
this.radioLocCustom.Text = "Custom";
|
||||||
@@ -135,11 +126,10 @@
|
|||||||
//
|
//
|
||||||
// radioLocBR
|
// radioLocBR
|
||||||
//
|
//
|
||||||
this.radioLocBR.AutoSize = true;
|
this.radioLocBR.Location = new System.Drawing.Point(105, 28);
|
||||||
this.radioLocBR.Location = new System.Drawing.Point(8, 89);
|
this.radioLocBR.Margin = new System.Windows.Forms.Padding(5, 4, 3, 3);
|
||||||
this.radioLocBR.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
|
||||||
this.radioLocBR.Name = "radioLocBR";
|
this.radioLocBR.Name = "radioLocBR";
|
||||||
this.radioLocBR.Size = new System.Drawing.Size(86, 17);
|
this.radioLocBR.Size = new System.Drawing.Size(92, 17);
|
||||||
this.radioLocBR.TabIndex = 3;
|
this.radioLocBR.TabIndex = 3;
|
||||||
this.radioLocBR.TabStop = true;
|
this.radioLocBR.TabStop = true;
|
||||||
this.radioLocBR.Text = "Bottom Right";
|
this.radioLocBR.Text = "Bottom Right";
|
||||||
@@ -147,11 +137,10 @@
|
|||||||
//
|
//
|
||||||
// radioLocBL
|
// radioLocBL
|
||||||
//
|
//
|
||||||
this.radioLocBL.AutoSize = true;
|
this.radioLocBL.Location = new System.Drawing.Point(5, 28);
|
||||||
this.radioLocBL.Location = new System.Drawing.Point(8, 66);
|
this.radioLocBL.Margin = new System.Windows.Forms.Padding(5, 4, 3, 3);
|
||||||
this.radioLocBL.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
|
||||||
this.radioLocBL.Name = "radioLocBL";
|
this.radioLocBL.Name = "radioLocBL";
|
||||||
this.radioLocBL.Size = new System.Drawing.Size(79, 17);
|
this.radioLocBL.Size = new System.Drawing.Size(92, 17);
|
||||||
this.radioLocBL.TabIndex = 2;
|
this.radioLocBL.TabIndex = 2;
|
||||||
this.radioLocBL.TabStop = true;
|
this.radioLocBL.TabStop = true;
|
||||||
this.radioLocBL.Text = "Bottom Left";
|
this.radioLocBL.Text = "Bottom Left";
|
||||||
@@ -159,11 +148,10 @@
|
|||||||
//
|
//
|
||||||
// radioLocTR
|
// radioLocTR
|
||||||
//
|
//
|
||||||
this.radioLocTR.AutoSize = true;
|
this.radioLocTR.Location = new System.Drawing.Point(105, 4);
|
||||||
this.radioLocTR.Location = new System.Drawing.Point(8, 43);
|
this.radioLocTR.Margin = new System.Windows.Forms.Padding(5, 4, 3, 3);
|
||||||
this.radioLocTR.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
|
||||||
this.radioLocTR.Name = "radioLocTR";
|
this.radioLocTR.Name = "radioLocTR";
|
||||||
this.radioLocTR.Size = new System.Drawing.Size(72, 17);
|
this.radioLocTR.Size = new System.Drawing.Size(92, 17);
|
||||||
this.radioLocTR.TabIndex = 1;
|
this.radioLocTR.TabIndex = 1;
|
||||||
this.radioLocTR.TabStop = true;
|
this.radioLocTR.TabStop = true;
|
||||||
this.radioLocTR.Text = "Top Right";
|
this.radioLocTR.Text = "Top Right";
|
||||||
@@ -171,11 +159,10 @@
|
|||||||
//
|
//
|
||||||
// radioLocTL
|
// radioLocTL
|
||||||
//
|
//
|
||||||
this.radioLocTL.AutoSize = true;
|
this.radioLocTL.Location = new System.Drawing.Point(5, 4);
|
||||||
this.radioLocTL.Location = new System.Drawing.Point(8, 20);
|
|
||||||
this.radioLocTL.Margin = new System.Windows.Forms.Padding(5, 4, 3, 3);
|
this.radioLocTL.Margin = new System.Windows.Forms.Padding(5, 4, 3, 3);
|
||||||
this.radioLocTL.Name = "radioLocTL";
|
this.radioLocTL.Name = "radioLocTL";
|
||||||
this.radioLocTL.Size = new System.Drawing.Size(65, 17);
|
this.radioLocTL.Size = new System.Drawing.Size(92, 17);
|
||||||
this.radioLocTL.TabIndex = 0;
|
this.radioLocTL.TabIndex = 0;
|
||||||
this.radioLocTL.TabStop = true;
|
this.radioLocTL.TabStop = true;
|
||||||
this.radioLocTL.Text = "Top Left";
|
this.radioLocTL.Text = "Top Left";
|
||||||
@@ -183,36 +170,20 @@
|
|||||||
//
|
//
|
||||||
// trackBarEdgeDistance
|
// trackBarEdgeDistance
|
||||||
//
|
//
|
||||||
this.trackBarEdgeDistance.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.trackBarEdgeDistance.AutoSize = false;
|
this.trackBarEdgeDistance.AutoSize = false;
|
||||||
this.trackBarEdgeDistance.LargeChange = 8;
|
this.trackBarEdgeDistance.LargeChange = 8;
|
||||||
this.trackBarEdgeDistance.Location = new System.Drawing.Point(8, 212);
|
this.trackBarEdgeDistance.Location = new System.Drawing.Point(5, 128);
|
||||||
this.trackBarEdgeDistance.Maximum = 40;
|
this.trackBarEdgeDistance.Maximum = 40;
|
||||||
this.trackBarEdgeDistance.Minimum = 8;
|
this.trackBarEdgeDistance.Minimum = 8;
|
||||||
this.trackBarEdgeDistance.Name = "trackBarEdgeDistance";
|
this.trackBarEdgeDistance.Name = "trackBarEdgeDistance";
|
||||||
this.trackBarEdgeDistance.Size = new System.Drawing.Size(141, 30);
|
this.trackBarEdgeDistance.Size = new System.Drawing.Size(148, 30);
|
||||||
this.trackBarEdgeDistance.SmallChange = 2;
|
this.trackBarEdgeDistance.SmallChange = 2;
|
||||||
this.trackBarEdgeDistance.TabIndex = 8;
|
this.trackBarEdgeDistance.TabIndex = 8;
|
||||||
this.trackBarEdgeDistance.TickFrequency = 4;
|
this.trackBarEdgeDistance.TickFrequency = 4;
|
||||||
this.trackBarEdgeDistance.Value = 8;
|
this.trackBarEdgeDistance.Value = 8;
|
||||||
//
|
//
|
||||||
// groupNotificationDuration
|
|
||||||
//
|
|
||||||
this.groupNotificationDuration.Controls.Add(this.tableLayoutDurationButtons);
|
|
||||||
this.groupNotificationDuration.Controls.Add(this.labelDurationValue);
|
|
||||||
this.groupNotificationDuration.Controls.Add(this.trackBarDuration);
|
|
||||||
this.groupNotificationDuration.Location = new System.Drawing.Point(9, 202);
|
|
||||||
this.groupNotificationDuration.Name = "groupNotificationDuration";
|
|
||||||
this.groupNotificationDuration.Size = new System.Drawing.Size(183, 89);
|
|
||||||
this.groupNotificationDuration.TabIndex = 1;
|
|
||||||
this.groupNotificationDuration.TabStop = false;
|
|
||||||
this.groupNotificationDuration.Text = "Duration";
|
|
||||||
//
|
|
||||||
// tableLayoutDurationButtons
|
// tableLayoutDurationButtons
|
||||||
//
|
//
|
||||||
this.tableLayoutDurationButtons.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.tableLayoutDurationButtons.ColumnCount = 3;
|
this.tableLayoutDurationButtons.ColumnCount = 3;
|
||||||
this.tableLayoutDurationButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 32F));
|
this.tableLayoutDurationButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 32F));
|
||||||
this.tableLayoutDurationButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 36F));
|
this.tableLayoutDurationButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 36F));
|
||||||
@@ -220,12 +191,12 @@
|
|||||||
this.tableLayoutDurationButtons.Controls.Add(this.btnDurationMedium, 0, 0);
|
this.tableLayoutDurationButtons.Controls.Add(this.btnDurationMedium, 0, 0);
|
||||||
this.tableLayoutDurationButtons.Controls.Add(this.btnDurationLong, 1, 0);
|
this.tableLayoutDurationButtons.Controls.Add(this.btnDurationLong, 1, 0);
|
||||||
this.tableLayoutDurationButtons.Controls.Add(this.btnDurationShort, 0, 0);
|
this.tableLayoutDurationButtons.Controls.Add(this.btnDurationShort, 0, 0);
|
||||||
this.tableLayoutDurationButtons.Location = new System.Drawing.Point(6, 56);
|
this.tableLayoutDurationButtons.Location = new System.Drawing.Point(3, 113);
|
||||||
this.tableLayoutDurationButtons.Name = "tableLayoutDurationButtons";
|
this.tableLayoutDurationButtons.Name = "tableLayoutDurationButtons";
|
||||||
this.tableLayoutDurationButtons.RowCount = 1;
|
this.tableLayoutDurationButtons.RowCount = 1;
|
||||||
this.tableLayoutDurationButtons.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
this.tableLayoutDurationButtons.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
this.tableLayoutDurationButtons.Size = new System.Drawing.Size(171, 27);
|
this.tableLayoutDurationButtons.Size = new System.Drawing.Size(171, 27);
|
||||||
this.tableLayoutDurationButtons.TabIndex = 2;
|
this.tableLayoutDurationButtons.TabIndex = 5;
|
||||||
//
|
//
|
||||||
// btnDurationMedium
|
// btnDurationMedium
|
||||||
//
|
//
|
||||||
@@ -274,55 +245,36 @@
|
|||||||
//
|
//
|
||||||
// labelDurationValue
|
// labelDurationValue
|
||||||
//
|
//
|
||||||
this.labelDurationValue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.labelDurationValue.BackColor = System.Drawing.Color.Transparent;
|
this.labelDurationValue.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.labelDurationValue.Location = new System.Drawing.Point(129, 20);
|
this.labelDurationValue.Location = new System.Drawing.Point(147, 77);
|
||||||
this.labelDurationValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
this.labelDurationValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||||
this.labelDurationValue.Name = "labelDurationValue";
|
this.labelDurationValue.Name = "labelDurationValue";
|
||||||
this.labelDurationValue.Size = new System.Drawing.Size(48, 13);
|
this.labelDurationValue.Size = new System.Drawing.Size(48, 13);
|
||||||
this.labelDurationValue.TabIndex = 1;
|
this.labelDurationValue.TabIndex = 4;
|
||||||
this.labelDurationValue.Text = "0 ms/c";
|
this.labelDurationValue.Text = "0 ms/c";
|
||||||
this.labelDurationValue.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
this.labelDurationValue.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
this.toolTip.SetToolTip(this.labelDurationValue, "Milliseconds per character.");
|
this.toolTip.SetToolTip(this.labelDurationValue, "Milliseconds per character.");
|
||||||
//
|
//
|
||||||
// trackBarDuration
|
// trackBarDuration
|
||||||
//
|
//
|
||||||
this.trackBarDuration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.trackBarDuration.AutoSize = false;
|
this.trackBarDuration.AutoSize = false;
|
||||||
this.trackBarDuration.Location = new System.Drawing.Point(6, 19);
|
this.trackBarDuration.Location = new System.Drawing.Point(3, 76);
|
||||||
this.trackBarDuration.Maximum = 60;
|
this.trackBarDuration.Maximum = 60;
|
||||||
this.trackBarDuration.Minimum = 10;
|
this.trackBarDuration.Minimum = 10;
|
||||||
this.trackBarDuration.Name = "trackBarDuration";
|
this.trackBarDuration.Name = "trackBarDuration";
|
||||||
this.trackBarDuration.Size = new System.Drawing.Size(128, 30);
|
this.trackBarDuration.Size = new System.Drawing.Size(148, 30);
|
||||||
this.trackBarDuration.TabIndex = 0;
|
this.trackBarDuration.TabIndex = 3;
|
||||||
this.trackBarDuration.TickFrequency = 5;
|
this.trackBarDuration.TickFrequency = 5;
|
||||||
this.trackBarDuration.Value = 25;
|
this.trackBarDuration.Value = 25;
|
||||||
//
|
//
|
||||||
// groupUserInterface
|
|
||||||
//
|
|
||||||
this.groupUserInterface.Controls.Add(this.checkSkipOnLinkClick);
|
|
||||||
this.groupUserInterface.Controls.Add(this.checkColumnName);
|
|
||||||
this.groupUserInterface.Controls.Add(this.labelIdlePause);
|
|
||||||
this.groupUserInterface.Controls.Add(this.comboBoxIdlePause);
|
|
||||||
this.groupUserInterface.Controls.Add(this.checkNonIntrusive);
|
|
||||||
this.groupUserInterface.Controls.Add(this.checkTimerCountDown);
|
|
||||||
this.groupUserInterface.Controls.Add(this.checkNotificationTimer);
|
|
||||||
this.groupUserInterface.Location = new System.Drawing.Point(9, 9);
|
|
||||||
this.groupUserInterface.Name = "groupUserInterface";
|
|
||||||
this.groupUserInterface.Size = new System.Drawing.Size(183, 187);
|
|
||||||
this.groupUserInterface.TabIndex = 0;
|
|
||||||
this.groupUserInterface.TabStop = false;
|
|
||||||
this.groupUserInterface.Text = "General";
|
|
||||||
//
|
|
||||||
// checkSkipOnLinkClick
|
// checkSkipOnLinkClick
|
||||||
//
|
//
|
||||||
this.checkSkipOnLinkClick.AutoSize = true;
|
this.checkSkipOnLinkClick.AutoSize = true;
|
||||||
this.checkSkipOnLinkClick.Location = new System.Drawing.Point(9, 90);
|
this.checkSkipOnLinkClick.Location = new System.Drawing.Point(6, 28);
|
||||||
this.checkSkipOnLinkClick.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
this.checkSkipOnLinkClick.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
||||||
this.checkSkipOnLinkClick.Name = "checkSkipOnLinkClick";
|
this.checkSkipOnLinkClick.Name = "checkSkipOnLinkClick";
|
||||||
this.checkSkipOnLinkClick.Size = new System.Drawing.Size(113, 17);
|
this.checkSkipOnLinkClick.Size = new System.Drawing.Size(113, 17);
|
||||||
this.checkSkipOnLinkClick.TabIndex = 3;
|
this.checkSkipOnLinkClick.TabIndex = 1;
|
||||||
this.checkSkipOnLinkClick.Text = "Skip On Link Click";
|
this.checkSkipOnLinkClick.Text = "Skip On Link Click";
|
||||||
this.toolTip.SetToolTip(this.checkSkipOnLinkClick, "Skips current notification when a link\r\ninside the notification is clicked.");
|
this.toolTip.SetToolTip(this.checkSkipOnLinkClick, "Skips current notification when a link\r\ninside the notification is clicked.");
|
||||||
this.checkSkipOnLinkClick.UseVisualStyleBackColor = true;
|
this.checkSkipOnLinkClick.UseVisualStyleBackColor = true;
|
||||||
@@ -330,7 +282,7 @@
|
|||||||
// checkColumnName
|
// checkColumnName
|
||||||
//
|
//
|
||||||
this.checkColumnName.AutoSize = true;
|
this.checkColumnName.AutoSize = true;
|
||||||
this.checkColumnName.Location = new System.Drawing.Point(9, 21);
|
this.checkColumnName.Location = new System.Drawing.Point(6, 5);
|
||||||
this.checkColumnName.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
this.checkColumnName.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkColumnName.Name = "checkColumnName";
|
this.checkColumnName.Name = "checkColumnName";
|
||||||
this.checkColumnName.Size = new System.Drawing.Size(129, 17);
|
this.checkColumnName.Size = new System.Drawing.Size(129, 17);
|
||||||
@@ -342,35 +294,33 @@
|
|||||||
//
|
//
|
||||||
// labelIdlePause
|
// labelIdlePause
|
||||||
//
|
//
|
||||||
this.labelIdlePause.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.labelIdlePause.AutoSize = true;
|
this.labelIdlePause.AutoSize = true;
|
||||||
this.labelIdlePause.Location = new System.Drawing.Point(5, 141);
|
this.labelIdlePause.Location = new System.Drawing.Point(3, 60);
|
||||||
this.labelIdlePause.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
this.labelIdlePause.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
this.labelIdlePause.Name = "labelIdlePause";
|
this.labelIdlePause.Name = "labelIdlePause";
|
||||||
this.labelIdlePause.Size = new System.Drawing.Size(89, 13);
|
this.labelIdlePause.Size = new System.Drawing.Size(89, 13);
|
||||||
this.labelIdlePause.TabIndex = 3;
|
this.labelIdlePause.TabIndex = 2;
|
||||||
this.labelIdlePause.Text = "Pause When Idle";
|
this.labelIdlePause.Text = "Pause When Idle";
|
||||||
//
|
//
|
||||||
// comboBoxIdlePause
|
// comboBoxIdlePause
|
||||||
//
|
//
|
||||||
this.comboBoxIdlePause.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.comboBoxIdlePause.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.comboBoxIdlePause.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.comboBoxIdlePause.FormattingEnabled = true;
|
this.comboBoxIdlePause.FormattingEnabled = true;
|
||||||
this.comboBoxIdlePause.Location = new System.Drawing.Point(6, 157);
|
this.comboBoxIdlePause.Location = new System.Drawing.Point(5, 76);
|
||||||
|
this.comboBoxIdlePause.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3);
|
||||||
this.comboBoxIdlePause.Name = "comboBoxIdlePause";
|
this.comboBoxIdlePause.Name = "comboBoxIdlePause";
|
||||||
this.comboBoxIdlePause.Size = new System.Drawing.Size(171, 21);
|
this.comboBoxIdlePause.Size = new System.Drawing.Size(144, 21);
|
||||||
this.comboBoxIdlePause.TabIndex = 4;
|
this.comboBoxIdlePause.TabIndex = 3;
|
||||||
this.toolTip.SetToolTip(this.comboBoxIdlePause, "Pauses new notifications after going idle for a set amount of time.");
|
this.toolTip.SetToolTip(this.comboBoxIdlePause, "Pauses new notifications after going idle for a set amount of time.");
|
||||||
//
|
//
|
||||||
// checkNonIntrusive
|
// checkNonIntrusive
|
||||||
//
|
//
|
||||||
this.checkNonIntrusive.AutoSize = true;
|
this.checkNonIntrusive.AutoSize = true;
|
||||||
this.checkNonIntrusive.Location = new System.Drawing.Point(9, 113);
|
this.checkNonIntrusive.Location = new System.Drawing.Point(6, 5);
|
||||||
this.checkNonIntrusive.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
this.checkNonIntrusive.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkNonIntrusive.Name = "checkNonIntrusive";
|
this.checkNonIntrusive.Name = "checkNonIntrusive";
|
||||||
this.checkNonIntrusive.Size = new System.Drawing.Size(128, 17);
|
this.checkNonIntrusive.Size = new System.Drawing.Size(128, 17);
|
||||||
this.checkNonIntrusive.TabIndex = 4;
|
this.checkNonIntrusive.TabIndex = 0;
|
||||||
this.checkNonIntrusive.Text = "Non-Intrusive Popups";
|
this.checkNonIntrusive.Text = "Non-Intrusive Popups";
|
||||||
this.toolTip.SetToolTip(this.checkNonIntrusive, "When not idle and the cursor is within the notification window area,\r\nit will be " +
|
this.toolTip.SetToolTip(this.checkNonIntrusive, "When not idle and the cursor is within the notification window area,\r\nit will be " +
|
||||||
"delayed until the cursor moves away to prevent accidental clicks.");
|
"delayed until the cursor moves away to prevent accidental clicks.");
|
||||||
@@ -379,11 +329,11 @@
|
|||||||
// checkTimerCountDown
|
// checkTimerCountDown
|
||||||
//
|
//
|
||||||
this.checkTimerCountDown.AutoSize = true;
|
this.checkTimerCountDown.AutoSize = true;
|
||||||
this.checkTimerCountDown.Location = new System.Drawing.Point(9, 67);
|
this.checkTimerCountDown.Location = new System.Drawing.Point(6, 28);
|
||||||
this.checkTimerCountDown.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
this.checkTimerCountDown.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
||||||
this.checkTimerCountDown.Name = "checkTimerCountDown";
|
this.checkTimerCountDown.Name = "checkTimerCountDown";
|
||||||
this.checkTimerCountDown.Size = new System.Drawing.Size(119, 17);
|
this.checkTimerCountDown.Size = new System.Drawing.Size(119, 17);
|
||||||
this.checkTimerCountDown.TabIndex = 2;
|
this.checkTimerCountDown.TabIndex = 1;
|
||||||
this.checkTimerCountDown.Text = "Timer Counts Down";
|
this.checkTimerCountDown.Text = "Timer Counts Down";
|
||||||
this.toolTip.SetToolTip(this.checkTimerCountDown, "The notification timer counts down instead of up.");
|
this.toolTip.SetToolTip(this.checkTimerCountDown, "The notification timer counts down instead of up.");
|
||||||
this.checkTimerCountDown.UseVisualStyleBackColor = true;
|
this.checkTimerCountDown.UseVisualStyleBackColor = true;
|
||||||
@@ -391,39 +341,195 @@
|
|||||||
// checkNotificationTimer
|
// checkNotificationTimer
|
||||||
//
|
//
|
||||||
this.checkNotificationTimer.AutoSize = true;
|
this.checkNotificationTimer.AutoSize = true;
|
||||||
this.checkNotificationTimer.Location = new System.Drawing.Point(9, 44);
|
this.checkNotificationTimer.Location = new System.Drawing.Point(6, 5);
|
||||||
this.checkNotificationTimer.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
|
this.checkNotificationTimer.Margin = new System.Windows.Forms.Padding(6, 5, 3, 3);
|
||||||
this.checkNotificationTimer.Name = "checkNotificationTimer";
|
this.checkNotificationTimer.Name = "checkNotificationTimer";
|
||||||
this.checkNotificationTimer.Size = new System.Drawing.Size(145, 17);
|
this.checkNotificationTimer.Size = new System.Drawing.Size(145, 17);
|
||||||
this.checkNotificationTimer.TabIndex = 1;
|
this.checkNotificationTimer.TabIndex = 0;
|
||||||
this.checkNotificationTimer.Text = "Display Notification Timer";
|
this.checkNotificationTimer.Text = "Display Notification Timer";
|
||||||
this.checkNotificationTimer.UseVisualStyleBackColor = true;
|
this.checkNotificationTimer.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
|
// labelGeneral
|
||||||
|
//
|
||||||
|
this.labelGeneral.AutoSize = true;
|
||||||
|
this.labelGeneral.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelGeneral.Location = new System.Drawing.Point(6, 8);
|
||||||
|
this.labelGeneral.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
|
||||||
|
this.labelGeneral.Name = "labelGeneral";
|
||||||
|
this.labelGeneral.Size = new System.Drawing.Size(66, 20);
|
||||||
|
this.labelGeneral.TabIndex = 0;
|
||||||
|
this.labelGeneral.Text = "General";
|
||||||
|
//
|
||||||
|
// panelGeneral
|
||||||
|
//
|
||||||
|
this.panelGeneral.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelGeneral.Controls.Add(this.checkColumnName);
|
||||||
|
this.panelGeneral.Controls.Add(this.checkSkipOnLinkClick);
|
||||||
|
this.panelGeneral.Controls.Add(this.labelIdlePause);
|
||||||
|
this.panelGeneral.Controls.Add(this.comboBoxIdlePause);
|
||||||
|
this.panelGeneral.Location = new System.Drawing.Point(9, 31);
|
||||||
|
this.panelGeneral.Name = "panelGeneral";
|
||||||
|
this.panelGeneral.Size = new System.Drawing.Size(322, 103);
|
||||||
|
this.panelGeneral.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// labelScrollSpeedValue
|
||||||
|
//
|
||||||
|
this.labelScrollSpeedValue.Location = new System.Drawing.Point(147, 54);
|
||||||
|
this.labelScrollSpeedValue.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||||
|
this.labelScrollSpeedValue.Name = "labelScrollSpeedValue";
|
||||||
|
this.labelScrollSpeedValue.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.labelScrollSpeedValue.TabIndex = 3;
|
||||||
|
this.labelScrollSpeedValue.Text = "100%";
|
||||||
|
this.labelScrollSpeedValue.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
|
//
|
||||||
|
// trackBarScrollSpeed
|
||||||
|
//
|
||||||
|
this.trackBarScrollSpeed.AutoSize = false;
|
||||||
|
this.trackBarScrollSpeed.LargeChange = 25;
|
||||||
|
this.trackBarScrollSpeed.Location = new System.Drawing.Point(5, 53);
|
||||||
|
this.trackBarScrollSpeed.Maximum = 200;
|
||||||
|
this.trackBarScrollSpeed.Minimum = 25;
|
||||||
|
this.trackBarScrollSpeed.Name = "trackBarScrollSpeed";
|
||||||
|
this.trackBarScrollSpeed.Size = new System.Drawing.Size(148, 30);
|
||||||
|
this.trackBarScrollSpeed.SmallChange = 25;
|
||||||
|
this.trackBarScrollSpeed.TabIndex = 2;
|
||||||
|
this.trackBarScrollSpeed.TickFrequency = 25;
|
||||||
|
this.trackBarScrollSpeed.Value = 100;
|
||||||
|
//
|
||||||
|
// labelScrollSpeed
|
||||||
|
//
|
||||||
|
this.labelScrollSpeed.AutoSize = true;
|
||||||
|
this.labelScrollSpeed.Location = new System.Drawing.Point(3, 37);
|
||||||
|
this.labelScrollSpeed.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
|
this.labelScrollSpeed.Name = "labelScrollSpeed";
|
||||||
|
this.labelScrollSpeed.Size = new System.Drawing.Size(67, 13);
|
||||||
|
this.labelScrollSpeed.TabIndex = 1;
|
||||||
|
this.labelScrollSpeed.Text = "Scroll Speed";
|
||||||
|
//
|
||||||
|
// labelLocation
|
||||||
|
//
|
||||||
|
this.labelLocation.AutoSize = true;
|
||||||
|
this.labelLocation.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelLocation.Location = new System.Drawing.Point(6, 158);
|
||||||
|
this.labelLocation.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
|
this.labelLocation.Name = "labelLocation";
|
||||||
|
this.labelLocation.Size = new System.Drawing.Size(70, 20);
|
||||||
|
this.labelLocation.TabIndex = 2;
|
||||||
|
this.labelLocation.Text = "Location";
|
||||||
|
//
|
||||||
|
// panelLocation
|
||||||
|
//
|
||||||
|
this.panelLocation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelLocation.Controls.Add(this.labelEdgeDistanceValue);
|
||||||
|
this.panelLocation.Controls.Add(this.radioLocTL);
|
||||||
|
this.panelLocation.Controls.Add(this.labelDisplay);
|
||||||
|
this.panelLocation.Controls.Add(this.trackBarEdgeDistance);
|
||||||
|
this.panelLocation.Controls.Add(this.comboBoxDisplay);
|
||||||
|
this.panelLocation.Controls.Add(this.radioLocTR);
|
||||||
|
this.panelLocation.Controls.Add(this.labelEdgeDistance);
|
||||||
|
this.panelLocation.Controls.Add(this.radioLocBL);
|
||||||
|
this.panelLocation.Controls.Add(this.radioLocCustom);
|
||||||
|
this.panelLocation.Controls.Add(this.radioLocBR);
|
||||||
|
this.panelLocation.Location = new System.Drawing.Point(9, 181);
|
||||||
|
this.panelLocation.Name = "panelLocation";
|
||||||
|
this.panelLocation.Size = new System.Drawing.Size(322, 165);
|
||||||
|
this.panelLocation.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// panelTimer
|
||||||
|
//
|
||||||
|
this.panelTimer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelTimer.Controls.Add(this.labelDuration);
|
||||||
|
this.panelTimer.Controls.Add(this.checkNotificationTimer);
|
||||||
|
this.panelTimer.Controls.Add(this.tableLayoutDurationButtons);
|
||||||
|
this.panelTimer.Controls.Add(this.checkTimerCountDown);
|
||||||
|
this.panelTimer.Controls.Add(this.labelDurationValue);
|
||||||
|
this.panelTimer.Controls.Add(this.trackBarDuration);
|
||||||
|
this.panelTimer.Location = new System.Drawing.Point(9, 393);
|
||||||
|
this.panelTimer.Name = "panelTimer";
|
||||||
|
this.panelTimer.Size = new System.Drawing.Size(322, 144);
|
||||||
|
this.panelTimer.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// labelDuration
|
||||||
|
//
|
||||||
|
this.labelDuration.AutoSize = true;
|
||||||
|
this.labelDuration.Location = new System.Drawing.Point(3, 60);
|
||||||
|
this.labelDuration.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0);
|
||||||
|
this.labelDuration.Name = "labelDuration";
|
||||||
|
this.labelDuration.Size = new System.Drawing.Size(47, 13);
|
||||||
|
this.labelDuration.TabIndex = 2;
|
||||||
|
this.labelDuration.Text = "Duration";
|
||||||
|
//
|
||||||
|
// labelTimer
|
||||||
|
//
|
||||||
|
this.labelTimer.AutoSize = true;
|
||||||
|
this.labelTimer.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelTimer.Location = new System.Drawing.Point(6, 370);
|
||||||
|
this.labelTimer.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
|
this.labelTimer.Name = "labelTimer";
|
||||||
|
this.labelTimer.Size = new System.Drawing.Size(48, 20);
|
||||||
|
this.labelTimer.TabIndex = 4;
|
||||||
|
this.labelTimer.Text = "Timer";
|
||||||
|
//
|
||||||
|
// labelMiscellaneous
|
||||||
|
//
|
||||||
|
this.labelMiscellaneous.AutoSize = true;
|
||||||
|
this.labelMiscellaneous.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelMiscellaneous.Location = new System.Drawing.Point(6, 561);
|
||||||
|
this.labelMiscellaneous.Margin = new System.Windows.Forms.Padding(0, 21, 0, 0);
|
||||||
|
this.labelMiscellaneous.Name = "labelMiscellaneous";
|
||||||
|
this.labelMiscellaneous.Size = new System.Drawing.Size(109, 20);
|
||||||
|
this.labelMiscellaneous.TabIndex = 6;
|
||||||
|
this.labelMiscellaneous.Text = "Miscellaneous";
|
||||||
|
//
|
||||||
|
// panelMiscellaneous
|
||||||
|
//
|
||||||
|
this.panelMiscellaneous.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelMiscellaneous.Controls.Add(this.labelScrollSpeedValue);
|
||||||
|
this.panelMiscellaneous.Controls.Add(this.trackBarScrollSpeed);
|
||||||
|
this.panelMiscellaneous.Controls.Add(this.checkNonIntrusive);
|
||||||
|
this.panelMiscellaneous.Controls.Add(this.labelScrollSpeed);
|
||||||
|
this.panelMiscellaneous.Location = new System.Drawing.Point(9, 584);
|
||||||
|
this.panelMiscellaneous.Name = "panelMiscellaneous";
|
||||||
|
this.panelMiscellaneous.Size = new System.Drawing.Size(322, 90);
|
||||||
|
this.panelMiscellaneous.TabIndex = 7;
|
||||||
|
//
|
||||||
// TabSettingsNotifications
|
// TabSettingsNotifications
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.Controls.Add(this.groupUserInterface);
|
this.Controls.Add(this.panelMiscellaneous);
|
||||||
this.Controls.Add(this.groupNotificationDuration);
|
this.Controls.Add(this.labelMiscellaneous);
|
||||||
this.Controls.Add(this.groupNotificationLocation);
|
this.Controls.Add(this.labelTimer);
|
||||||
|
this.Controls.Add(this.panelLocation);
|
||||||
|
this.Controls.Add(this.labelLocation);
|
||||||
|
this.Controls.Add(this.panelGeneral);
|
||||||
|
this.Controls.Add(this.labelGeneral);
|
||||||
|
this.Controls.Add(this.panelTimer);
|
||||||
this.Name = "TabSettingsNotifications";
|
this.Name = "TabSettingsNotifications";
|
||||||
this.Size = new System.Drawing.Size(478, 300);
|
this.Size = new System.Drawing.Size(340, 684);
|
||||||
this.ParentChanged += new System.EventHandler(this.TabSettingsNotifications_ParentChanged);
|
this.ParentChanged += new System.EventHandler(this.TabSettingsNotifications_ParentChanged);
|
||||||
this.groupNotificationLocation.ResumeLayout(false);
|
|
||||||
this.groupNotificationLocation.PerformLayout();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarEdgeDistance)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarEdgeDistance)).EndInit();
|
||||||
this.groupNotificationDuration.ResumeLayout(false);
|
|
||||||
this.tableLayoutDurationButtons.ResumeLayout(false);
|
this.tableLayoutDurationButtons.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.trackBarDuration)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.trackBarDuration)).EndInit();
|
||||||
this.groupUserInterface.ResumeLayout(false);
|
this.panelGeneral.ResumeLayout(false);
|
||||||
this.groupUserInterface.PerformLayout();
|
this.panelGeneral.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.trackBarScrollSpeed)).EndInit();
|
||||||
|
this.panelLocation.ResumeLayout(false);
|
||||||
|
this.panelLocation.PerformLayout();
|
||||||
|
this.panelTimer.ResumeLayout(false);
|
||||||
|
this.panelTimer.PerformLayout();
|
||||||
|
this.panelMiscellaneous.ResumeLayout(false);
|
||||||
|
this.panelMiscellaneous.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.GroupBox groupNotificationLocation;
|
|
||||||
private System.Windows.Forms.Label labelDisplay;
|
private System.Windows.Forms.Label labelDisplay;
|
||||||
private System.Windows.Forms.ComboBox comboBoxDisplay;
|
private System.Windows.Forms.ComboBox comboBoxDisplay;
|
||||||
private System.Windows.Forms.Label labelEdgeDistance;
|
private System.Windows.Forms.Label labelEdgeDistance;
|
||||||
@@ -433,8 +539,6 @@
|
|||||||
private System.Windows.Forms.RadioButton radioLocBL;
|
private System.Windows.Forms.RadioButton radioLocBL;
|
||||||
private System.Windows.Forms.RadioButton radioLocTR;
|
private System.Windows.Forms.RadioButton radioLocTR;
|
||||||
private System.Windows.Forms.RadioButton radioLocTL;
|
private System.Windows.Forms.RadioButton radioLocTL;
|
||||||
private System.Windows.Forms.GroupBox groupNotificationDuration;
|
|
||||||
private System.Windows.Forms.GroupBox groupUserInterface;
|
|
||||||
private System.Windows.Forms.ToolTip toolTip;
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
private System.Windows.Forms.Label labelEdgeDistanceValue;
|
private System.Windows.Forms.Label labelEdgeDistanceValue;
|
||||||
private System.Windows.Forms.Label labelDurationValue;
|
private System.Windows.Forms.Label labelDurationValue;
|
||||||
@@ -450,5 +554,17 @@
|
|||||||
private System.Windows.Forms.CheckBox checkSkipOnLinkClick;
|
private System.Windows.Forms.CheckBox checkSkipOnLinkClick;
|
||||||
private System.Windows.Forms.CheckBox checkTimerCountDown;
|
private System.Windows.Forms.CheckBox checkTimerCountDown;
|
||||||
private System.Windows.Forms.CheckBox checkNotificationTimer;
|
private System.Windows.Forms.CheckBox checkNotificationTimer;
|
||||||
|
private System.Windows.Forms.Label labelGeneral;
|
||||||
|
private System.Windows.Forms.Panel panelGeneral;
|
||||||
|
private System.Windows.Forms.Label labelLocation;
|
||||||
|
private System.Windows.Forms.Panel panelLocation;
|
||||||
|
private System.Windows.Forms.Panel panelTimer;
|
||||||
|
private System.Windows.Forms.Label labelTimer;
|
||||||
|
private System.Windows.Forms.Label labelScrollSpeedValue;
|
||||||
|
private System.Windows.Forms.TrackBar trackBarScrollSpeed;
|
||||||
|
private System.Windows.Forms.Label labelScrollSpeed;
|
||||||
|
private System.Windows.Forms.Label labelMiscellaneous;
|
||||||
|
private System.Windows.Forms.Panel panelMiscellaneous;
|
||||||
|
private System.Windows.Forms.Label labelDuration;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -53,7 +53,7 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
comboBoxDisplay.Items.Add("(Same As "+Program.BrandName+")");
|
comboBoxDisplay.Items.Add("(Same As "+Program.BrandName+")");
|
||||||
|
|
||||||
foreach(Screen screen in Screen.AllScreens){
|
foreach(Screen screen in Screen.AllScreens){
|
||||||
comboBoxDisplay.Items.Add(screen.DeviceName+" ("+screen.Bounds.Width+"x"+screen.Bounds.Height+")");
|
comboBoxDisplay.Items.Add(screen.DeviceName.TrimStart('\\', '.')+" ("+screen.Bounds.Width+"x"+screen.Bounds.Height+")");
|
||||||
}
|
}
|
||||||
|
|
||||||
comboBoxDisplay.SelectedIndex = Math.Min(comboBoxDisplay.Items.Count-1, Config.NotificationDisplay);
|
comboBoxDisplay.SelectedIndex = Math.Min(comboBoxDisplay.Items.Count-1, Config.NotificationDisplay);
|
||||||
@@ -65,6 +65,9 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
checkSkipOnLinkClick.Checked = Config.NotificationSkipOnLinkClick;
|
checkSkipOnLinkClick.Checked = Config.NotificationSkipOnLinkClick;
|
||||||
checkNonIntrusive.Checked = Config.NotificationNonIntrusiveMode;
|
checkNonIntrusive.Checked = Config.NotificationNonIntrusiveMode;
|
||||||
|
|
||||||
|
trackBarScrollSpeed.SetValueSafe(Config.NotificationScrollSpeed);
|
||||||
|
labelScrollSpeedValue.Text = trackBarScrollSpeed.Value.ToString(CultureInfo.InvariantCulture)+"%";
|
||||||
|
|
||||||
trackBarEdgeDistance.SetValueSafe(Config.NotificationEdgeDistance);
|
trackBarEdgeDistance.SetValueSafe(Config.NotificationEdgeDistance);
|
||||||
labelEdgeDistanceValue.Text = trackBarEdgeDistance.Value.ToString(CultureInfo.InvariantCulture)+" px";
|
labelEdgeDistanceValue.Text = trackBarEdgeDistance.Value.ToString(CultureInfo.InvariantCulture)+" px";
|
||||||
|
|
||||||
@@ -90,6 +93,7 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
checkNonIntrusive.CheckedChanged += checkNonIntrusive_CheckedChanged;
|
checkNonIntrusive.CheckedChanged += checkNonIntrusive_CheckedChanged;
|
||||||
|
|
||||||
comboBoxIdlePause.SelectedValueChanged += comboBoxIdlePause_SelectedValueChanged;
|
comboBoxIdlePause.SelectedValueChanged += comboBoxIdlePause_SelectedValueChanged;
|
||||||
|
trackBarScrollSpeed.ValueChanged += trackBarScrollSpeed_ValueChanged;
|
||||||
|
|
||||||
comboBoxDisplay.SelectedValueChanged += comboBoxDisplay_SelectedValueChanged;
|
comboBoxDisplay.SelectedValueChanged += comboBoxDisplay_SelectedValueChanged;
|
||||||
trackBarEdgeDistance.ValueChanged += trackBarEdgeDistance_ValueChanged;
|
trackBarEdgeDistance.ValueChanged += trackBarEdgeDistance_ValueChanged;
|
||||||
@@ -187,6 +191,13 @@ namespace TweetDuck.Core.Other.Settings{
|
|||||||
Config.NotificationIdlePauseSeconds = IdlePauseSeconds[comboBoxIdlePause.SelectedIndex];
|
Config.NotificationIdlePauseSeconds = IdlePauseSeconds[comboBoxIdlePause.SelectedIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void trackBarScrollSpeed_ValueChanged(object sender, EventArgs e){
|
||||||
|
if (trackBarScrollSpeed.AlignValueToTick()){
|
||||||
|
labelScrollSpeedValue.Text = trackBarScrollSpeed.Value.ToString(CultureInfo.InvariantCulture)+"%";
|
||||||
|
Config.NotificationScrollSpeed = trackBarScrollSpeed.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void comboBoxDisplay_SelectedValueChanged(object sender, EventArgs e){
|
private void comboBoxDisplay_SelectedValueChanged(object sender, EventArgs e){
|
||||||
Config.NotificationDisplay = comboBoxDisplay.SelectedIndex;
|
Config.NotificationDisplay = comboBoxDisplay.SelectedIndex;
|
||||||
notification.ShowNotificationForSettings(false);
|
notification.ShowNotificationForSettings(false);
|
||||||
|
69
Core/Other/Settings/TabSettingsSounds.Designer.cs
generated
69
Core/Other/Settings/TabSettingsSounds.Designer.cs
generated
@@ -25,31 +25,20 @@
|
|||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
this.groupCustomSound = new System.Windows.Forms.GroupBox();
|
|
||||||
this.btnPlaySound = new System.Windows.Forms.Button();
|
this.btnPlaySound = new System.Windows.Forms.Button();
|
||||||
this.btnResetSound = new System.Windows.Forms.Button();
|
this.btnResetSound = new System.Windows.Forms.Button();
|
||||||
this.btnBrowseSound = new System.Windows.Forms.Button();
|
this.btnBrowseSound = new System.Windows.Forms.Button();
|
||||||
this.tbCustomSound = new System.Windows.Forms.TextBox();
|
this.tbCustomSound = new System.Windows.Forms.TextBox();
|
||||||
this.groupCustomSound.SuspendLayout();
|
this.labelSoundNotification = new System.Windows.Forms.Label();
|
||||||
|
this.panelSoundNotification = new System.Windows.Forms.Panel();
|
||||||
|
this.panelSoundNotification.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupCustomSound
|
|
||||||
//
|
|
||||||
this.groupCustomSound.Controls.Add(this.btnPlaySound);
|
|
||||||
this.groupCustomSound.Controls.Add(this.btnResetSound);
|
|
||||||
this.groupCustomSound.Controls.Add(this.btnBrowseSound);
|
|
||||||
this.groupCustomSound.Controls.Add(this.tbCustomSound);
|
|
||||||
this.groupCustomSound.Location = new System.Drawing.Point(9, 9);
|
|
||||||
this.groupCustomSound.Name = "groupCustomSound";
|
|
||||||
this.groupCustomSound.Size = new System.Drawing.Size(372, 75);
|
|
||||||
this.groupCustomSound.TabIndex = 0;
|
|
||||||
this.groupCustomSound.TabStop = false;
|
|
||||||
this.groupCustomSound.Text = "Custom Sound Notification";
|
|
||||||
//
|
|
||||||
// btnPlaySound
|
// btnPlaySound
|
||||||
//
|
//
|
||||||
|
this.btnPlaySound.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnPlaySound.AutoSize = true;
|
this.btnPlaySound.AutoSize = true;
|
||||||
this.btnPlaySound.Location = new System.Drawing.Point(250, 45);
|
this.btnPlaySound.Location = new System.Drawing.Point(203, 29);
|
||||||
this.btnPlaySound.Name = "btnPlaySound";
|
this.btnPlaySound.Name = "btnPlaySound";
|
||||||
this.btnPlaySound.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnPlaySound.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnPlaySound.Size = new System.Drawing.Size(43, 23);
|
this.btnPlaySound.Size = new System.Drawing.Size(43, 23);
|
||||||
@@ -60,7 +49,7 @@
|
|||||||
// btnResetSound
|
// btnResetSound
|
||||||
//
|
//
|
||||||
this.btnResetSound.AutoSize = true;
|
this.btnResetSound.AutoSize = true;
|
||||||
this.btnResetSound.Location = new System.Drawing.Point(6, 45);
|
this.btnResetSound.Location = new System.Drawing.Point(3, 29);
|
||||||
this.btnResetSound.Name = "btnResetSound";
|
this.btnResetSound.Name = "btnResetSound";
|
||||||
this.btnResetSound.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnResetSound.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnResetSound.Size = new System.Drawing.Size(51, 23);
|
this.btnResetSound.Size = new System.Drawing.Size(51, 23);
|
||||||
@@ -70,8 +59,9 @@
|
|||||||
//
|
//
|
||||||
// btnBrowseSound
|
// btnBrowseSound
|
||||||
//
|
//
|
||||||
|
this.btnBrowseSound.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnBrowseSound.AutoSize = true;
|
this.btnBrowseSound.AutoSize = true;
|
||||||
this.btnBrowseSound.Location = new System.Drawing.Point(299, 45);
|
this.btnBrowseSound.Location = new System.Drawing.Point(252, 29);
|
||||||
this.btnBrowseSound.Name = "btnBrowseSound";
|
this.btnBrowseSound.Name = "btnBrowseSound";
|
||||||
this.btnBrowseSound.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
this.btnBrowseSound.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
||||||
this.btnBrowseSound.Size = new System.Drawing.Size(67, 23);
|
this.btnBrowseSound.Size = new System.Drawing.Size(67, 23);
|
||||||
@@ -81,31 +71,60 @@
|
|||||||
//
|
//
|
||||||
// tbCustomSound
|
// tbCustomSound
|
||||||
//
|
//
|
||||||
this.tbCustomSound.Location = new System.Drawing.Point(6, 19);
|
this.tbCustomSound.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.tbCustomSound.Location = new System.Drawing.Point(3, 3);
|
||||||
this.tbCustomSound.Name = "tbCustomSound";
|
this.tbCustomSound.Name = "tbCustomSound";
|
||||||
this.tbCustomSound.Size = new System.Drawing.Size(360, 20);
|
this.tbCustomSound.Size = new System.Drawing.Size(316, 20);
|
||||||
this.tbCustomSound.TabIndex = 0;
|
this.tbCustomSound.TabIndex = 0;
|
||||||
//
|
//
|
||||||
|
// labelSoundNotification
|
||||||
|
//
|
||||||
|
this.labelSoundNotification.AutoSize = true;
|
||||||
|
this.labelSoundNotification.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelSoundNotification.Location = new System.Drawing.Point(6, 8);
|
||||||
|
this.labelSoundNotification.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
|
||||||
|
this.labelSoundNotification.Name = "labelSoundNotification";
|
||||||
|
this.labelSoundNotification.Size = new System.Drawing.Size(198, 20);
|
||||||
|
this.labelSoundNotification.TabIndex = 1;
|
||||||
|
this.labelSoundNotification.Text = "Custom Sound Notification";
|
||||||
|
//
|
||||||
|
// panelSoundNotification
|
||||||
|
//
|
||||||
|
this.panelSoundNotification.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.panelSoundNotification.Controls.Add(this.btnPlaySound);
|
||||||
|
this.panelSoundNotification.Controls.Add(this.tbCustomSound);
|
||||||
|
this.panelSoundNotification.Controls.Add(this.btnResetSound);
|
||||||
|
this.panelSoundNotification.Controls.Add(this.btnBrowseSound);
|
||||||
|
this.panelSoundNotification.Location = new System.Drawing.Point(9, 31);
|
||||||
|
this.panelSoundNotification.Name = "panelSoundNotification";
|
||||||
|
this.panelSoundNotification.Size = new System.Drawing.Size(322, 56);
|
||||||
|
this.panelSoundNotification.TabIndex = 2;
|
||||||
|
//
|
||||||
// TabSettingsSounds
|
// TabSettingsSounds
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.Controls.Add(this.groupCustomSound);
|
this.Controls.Add(this.panelSoundNotification);
|
||||||
|
this.Controls.Add(this.labelSoundNotification);
|
||||||
this.Name = "TabSettingsSounds";
|
this.Name = "TabSettingsSounds";
|
||||||
this.Size = new System.Drawing.Size(478, 300);
|
this.Size = new System.Drawing.Size(340, 97);
|
||||||
this.groupCustomSound.ResumeLayout(false);
|
this.panelSoundNotification.ResumeLayout(false);
|
||||||
this.groupCustomSound.PerformLayout();
|
this.panelSoundNotification.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.ToolTip toolTip;
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
private System.Windows.Forms.GroupBox groupCustomSound;
|
|
||||||
private System.Windows.Forms.Button btnResetSound;
|
private System.Windows.Forms.Button btnResetSound;
|
||||||
private System.Windows.Forms.Button btnBrowseSound;
|
private System.Windows.Forms.Button btnBrowseSound;
|
||||||
private System.Windows.Forms.TextBox tbCustomSound;
|
private System.Windows.Forms.TextBox tbCustomSound;
|
||||||
private System.Windows.Forms.Button btnPlaySound;
|
private System.Windows.Forms.Button btnPlaySound;
|
||||||
|
private System.Windows.Forms.Label labelSoundNotification;
|
||||||
|
private System.Windows.Forms.Panel panelSoundNotification;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,16 +3,16 @@ using System.Drawing;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using TweetDuck.Core.Notification;
|
using TweetDuck.Core.Notification;
|
||||||
using TweetDuck.Core.Notification.Sound;
|
using TweetLib.Audio.Utils;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Other.Settings{
|
namespace TweetDuck.Core.Other.Settings{
|
||||||
partial class TabSettingsSounds : BaseTabSettings{
|
partial class TabSettingsSounds : BaseTabSettings{
|
||||||
private readonly ISoundNotificationPlayer soundNotification;
|
private readonly SoundNotification soundNotification;
|
||||||
|
|
||||||
public TabSettingsSounds(){
|
public TabSettingsSounds(){
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
soundNotification = SoundNotification.New();
|
soundNotification = new SoundNotification();
|
||||||
soundNotification.PlaybackError += sound_PlaybackError;
|
soundNotification.PlaybackError += sound_PlaybackError;
|
||||||
|
|
||||||
tbCustomSound.Text = Config.NotificationSoundPath;
|
tbCustomSound.Text = Config.NotificationSoundPath;
|
||||||
|
35
Plugins/Controls/PluginControl.Designer.cs
generated
35
Plugins/Controls/PluginControl.Designer.cs
generated
@@ -32,6 +32,7 @@
|
|||||||
this.labelWebsite = new System.Windows.Forms.Label();
|
this.labelWebsite = new System.Windows.Forms.Label();
|
||||||
this.labelVersion = new System.Windows.Forms.Label();
|
this.labelVersion = new System.Windows.Forms.Label();
|
||||||
this.btnOpenConfig = new System.Windows.Forms.Button();
|
this.btnOpenConfig = new System.Windows.Forms.Button();
|
||||||
|
this.labelType = new TweetDuck.Core.Controls.LabelVertical();
|
||||||
this.panelDescription.SuspendLayout();
|
this.panelDescription.SuspendLayout();
|
||||||
this.flowLayoutInfo.SuspendLayout();
|
this.flowLayoutInfo.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
@@ -39,7 +40,7 @@
|
|||||||
// btnToggleState
|
// btnToggleState
|
||||||
//
|
//
|
||||||
this.btnToggleState.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
this.btnToggleState.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnToggleState.Location = new System.Drawing.Point(459, 80);
|
this.btnToggleState.Location = new System.Drawing.Point(456, 80);
|
||||||
this.btnToggleState.Name = "btnToggleState";
|
this.btnToggleState.Name = "btnToggleState";
|
||||||
this.btnToggleState.Size = new System.Drawing.Size(65, 23);
|
this.btnToggleState.Size = new System.Drawing.Size(65, 23);
|
||||||
this.btnToggleState.TabIndex = 5;
|
this.btnToggleState.TabIndex = 5;
|
||||||
@@ -51,7 +52,7 @@
|
|||||||
//
|
//
|
||||||
this.labelName.AutoSize = true;
|
this.labelName.AutoSize = true;
|
||||||
this.labelName.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
this.labelName.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
this.labelName.Location = new System.Drawing.Point(7, 7);
|
this.labelName.Location = new System.Drawing.Point(24, 7);
|
||||||
this.labelName.Name = "labelName";
|
this.labelName.Name = "labelName";
|
||||||
this.labelName.Size = new System.Drawing.Size(61, 24);
|
this.labelName.Size = new System.Drawing.Size(61, 24);
|
||||||
this.labelName.TabIndex = 0;
|
this.labelName.TabIndex = 0;
|
||||||
@@ -65,9 +66,9 @@
|
|||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.panelDescription.AutoScroll = true;
|
this.panelDescription.AutoScroll = true;
|
||||||
this.panelDescription.Controls.Add(this.labelDescription);
|
this.panelDescription.Controls.Add(this.labelDescription);
|
||||||
this.panelDescription.Location = new System.Drawing.Point(11, 35);
|
this.panelDescription.Location = new System.Drawing.Point(28, 35);
|
||||||
this.panelDescription.Name = "panelDescription";
|
this.panelDescription.Name = "panelDescription";
|
||||||
this.panelDescription.Size = new System.Drawing.Size(513, 39);
|
this.panelDescription.Size = new System.Drawing.Size(493, 39);
|
||||||
this.panelDescription.TabIndex = 2;
|
this.panelDescription.TabIndex = 2;
|
||||||
this.panelDescription.Resize += new System.EventHandler(this.panelDescription_Resize);
|
this.panelDescription.Resize += new System.EventHandler(this.panelDescription_Resize);
|
||||||
//
|
//
|
||||||
@@ -101,9 +102,9 @@
|
|||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.flowLayoutInfo.Controls.Add(this.labelAuthor);
|
this.flowLayoutInfo.Controls.Add(this.labelAuthor);
|
||||||
this.flowLayoutInfo.Controls.Add(this.labelWebsite);
|
this.flowLayoutInfo.Controls.Add(this.labelWebsite);
|
||||||
this.flowLayoutInfo.Location = new System.Drawing.Point(11, 85);
|
this.flowLayoutInfo.Location = new System.Drawing.Point(28, 85);
|
||||||
this.flowLayoutInfo.Name = "flowLayoutInfo";
|
this.flowLayoutInfo.Name = "flowLayoutInfo";
|
||||||
this.flowLayoutInfo.Size = new System.Drawing.Size(368, 18);
|
this.flowLayoutInfo.Size = new System.Drawing.Size(348, 18);
|
||||||
this.flowLayoutInfo.TabIndex = 3;
|
this.flowLayoutInfo.TabIndex = 3;
|
||||||
this.flowLayoutInfo.WrapContents = false;
|
this.flowLayoutInfo.WrapContents = false;
|
||||||
//
|
//
|
||||||
@@ -128,7 +129,7 @@
|
|||||||
this.labelVersion.Location = new System.Drawing.Point(14, 12);
|
this.labelVersion.Location = new System.Drawing.Point(14, 12);
|
||||||
this.labelVersion.Margin = new System.Windows.Forms.Padding(3, 9, 3, 0);
|
this.labelVersion.Margin = new System.Windows.Forms.Padding(3, 9, 3, 0);
|
||||||
this.labelVersion.Name = "labelVersion";
|
this.labelVersion.Name = "labelVersion";
|
||||||
this.labelVersion.Size = new System.Drawing.Size(513, 13);
|
this.labelVersion.Size = new System.Drawing.Size(510, 13);
|
||||||
this.labelVersion.TabIndex = 1;
|
this.labelVersion.TabIndex = 1;
|
||||||
this.labelVersion.Text = "Version";
|
this.labelVersion.Text = "Version";
|
||||||
this.labelVersion.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
this.labelVersion.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
@@ -137,7 +138,7 @@
|
|||||||
// btnOpenConfig
|
// btnOpenConfig
|
||||||
//
|
//
|
||||||
this.btnOpenConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
this.btnOpenConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnOpenConfig.Location = new System.Drawing.Point(385, 80);
|
this.btnOpenConfig.Location = new System.Drawing.Point(382, 80);
|
||||||
this.btnOpenConfig.Name = "btnOpenConfig";
|
this.btnOpenConfig.Name = "btnOpenConfig";
|
||||||
this.btnOpenConfig.Size = new System.Drawing.Size(68, 23);
|
this.btnOpenConfig.Size = new System.Drawing.Size(68, 23);
|
||||||
this.btnOpenConfig.TabIndex = 4;
|
this.btnOpenConfig.TabIndex = 4;
|
||||||
@@ -145,20 +146,35 @@
|
|||||||
this.btnOpenConfig.UseVisualStyleBackColor = true;
|
this.btnOpenConfig.UseVisualStyleBackColor = true;
|
||||||
this.btnOpenConfig.Click += new System.EventHandler(this.btnOpenConfig_Click);
|
this.btnOpenConfig.Click += new System.EventHandler(this.btnOpenConfig_Click);
|
||||||
//
|
//
|
||||||
|
// labelType
|
||||||
|
//
|
||||||
|
this.labelType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.labelType.BackColor = System.Drawing.Color.DarkGray;
|
||||||
|
this.labelType.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||||
|
this.labelType.LineHeight = 9;
|
||||||
|
this.labelType.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.labelType.Name = "labelType";
|
||||||
|
this.labelType.Size = new System.Drawing.Size(18, 109);
|
||||||
|
this.labelType.TabIndex = 6;
|
||||||
|
this.labelType.Text = "TYPE";
|
||||||
|
//
|
||||||
// PluginControl
|
// PluginControl
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.labelType);
|
||||||
this.Controls.Add(this.btnOpenConfig);
|
this.Controls.Add(this.btnOpenConfig);
|
||||||
this.Controls.Add(this.flowLayoutInfo);
|
this.Controls.Add(this.flowLayoutInfo);
|
||||||
this.Controls.Add(this.panelDescription);
|
this.Controls.Add(this.panelDescription);
|
||||||
this.Controls.Add(this.labelName);
|
this.Controls.Add(this.labelName);
|
||||||
this.Controls.Add(this.btnToggleState);
|
this.Controls.Add(this.btnToggleState);
|
||||||
this.Controls.Add(this.labelVersion);
|
this.Controls.Add(this.labelVersion);
|
||||||
|
this.Margin = new System.Windows.Forms.Padding(0);
|
||||||
this.MaximumSize = new System.Drawing.Size(65535, 109);
|
this.MaximumSize = new System.Drawing.Size(65535, 109);
|
||||||
this.MinimumSize = new System.Drawing.Size(0, 61);
|
this.MinimumSize = new System.Drawing.Size(0, 61);
|
||||||
this.Name = "PluginControl";
|
this.Name = "PluginControl";
|
||||||
this.Padding = new System.Windows.Forms.Padding(3);
|
this.Padding = new System.Windows.Forms.Padding(3, 3, 6, 3);
|
||||||
this.Size = new System.Drawing.Size(530, 109);
|
this.Size = new System.Drawing.Size(530, 109);
|
||||||
this.panelDescription.ResumeLayout(false);
|
this.panelDescription.ResumeLayout(false);
|
||||||
this.panelDescription.PerformLayout();
|
this.panelDescription.PerformLayout();
|
||||||
@@ -180,5 +196,6 @@
|
|||||||
private System.Windows.Forms.Label labelWebsite;
|
private System.Windows.Forms.Label labelWebsite;
|
||||||
private System.Windows.Forms.Label labelVersion;
|
private System.Windows.Forms.Label labelVersion;
|
||||||
private System.Windows.Forms.Button btnOpenConfig;
|
private System.Windows.Forms.Button btnOpenConfig;
|
||||||
|
private Core.Controls.LabelVertical labelType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@ using System.Drawing;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using TweetDuck.Core.Utils;
|
using TweetDuck.Core.Utils;
|
||||||
|
using TweetDuck.Plugins.Enums;
|
||||||
|
|
||||||
namespace TweetDuck.Plugins.Controls{
|
namespace TweetDuck.Plugins.Controls{
|
||||||
partial class PluginControl : UserControl{
|
partial class PluginControl : UserControl{
|
||||||
@@ -30,7 +31,7 @@ namespace TweetDuck.Plugins.Controls{
|
|||||||
labelDescription.Visible = false;
|
labelDescription.Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
panelDescription_Resize(panelDescription, new EventArgs());
|
panelDescription_Resize(panelDescription, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void panelDescription_Resize(object sender, EventArgs e){
|
private void panelDescription_Resize(object sender, EventArgs e){
|
||||||
@@ -68,6 +69,15 @@ namespace TweetDuck.Plugins.Controls{
|
|||||||
labelAuthor.ForeColor = textColor;
|
labelAuthor.ForeColor = textColor;
|
||||||
labelWebsite.ForeColor = isEnabled ? Color.Blue : Color.FromArgb(90, 90, 249);
|
labelWebsite.ForeColor = isEnabled ? Color.Blue : Color.FromArgb(90, 90, 249);
|
||||||
|
|
||||||
|
if (plugin.Group == PluginGroup.Official){
|
||||||
|
labelType.Text = "OFFICIAL";
|
||||||
|
labelType.BackColor = isEnabled ? Color.FromArgb(154, 195, 217) : Color.FromArgb(185, 185, 185);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
labelType.Text = "CUSTOM";
|
||||||
|
labelType.BackColor = isEnabled ? Color.FromArgb(208, 154, 217) : Color.FromArgb(185, 185, 185);
|
||||||
|
}
|
||||||
|
|
||||||
if (plugin.CanRun){
|
if (plugin.CanRun){
|
||||||
labelName.ForeColor = textColor;
|
labelName.ForeColor = textColor;
|
||||||
labelDescription.ForeColor = textColor;
|
labelDescription.ForeColor = textColor;
|
||||||
|
@@ -5,9 +5,7 @@ using System.Text;
|
|||||||
using TweetDuck.Plugins.Events;
|
using TweetDuck.Plugins.Events;
|
||||||
|
|
||||||
namespace TweetDuck.Plugins{
|
namespace TweetDuck.Plugins{
|
||||||
[Serializable]
|
|
||||||
sealed class PluginConfig{
|
sealed class PluginConfig{
|
||||||
[field:NonSerialized]
|
|
||||||
public event EventHandler<PluginChangedStateEventArgs> InternalPluginChangedState; // should only be accessed from PluginManager
|
public event EventHandler<PluginChangedStateEventArgs> InternalPluginChangedState; // should only be accessed from PluginManager
|
||||||
|
|
||||||
public IEnumerable<string> DisabledPlugins => Disabled;
|
public IEnumerable<string> DisabledPlugins => Disabled;
|
||||||
@@ -18,14 +16,6 @@ namespace TweetDuck.Plugins{
|
|||||||
"official/reply-account"
|
"official/reply-account"
|
||||||
};
|
};
|
||||||
|
|
||||||
public void ImportLegacy(PluginConfig config){
|
|
||||||
Disabled.Clear();
|
|
||||||
|
|
||||||
foreach(string plugin in config.Disabled){
|
|
||||||
Disabled.Add(plugin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetEnabled(Plugin plugin, bool enabled){
|
public void SetEnabled(Plugin plugin, bool enabled){
|
||||||
if ((enabled && Disabled.Remove(plugin.Identifier)) || (!enabled && Disabled.Add(plugin.Identifier))){
|
if ((enabled && Disabled.Remove(plugin.Identifier)) || (!enabled && Disabled.Add(plugin.Identifier))){
|
||||||
InternalPluginChangedState?.Invoke(this, new PluginChangedStateEventArgs(plugin, enabled));
|
InternalPluginChangedState?.Invoke(this, new PluginChangedStateEventArgs(plugin, enabled));
|
||||||
|
@@ -42,29 +42,14 @@ namespace TweetDuck.Plugins{
|
|||||||
this.Config = new PluginConfig();
|
this.Config = new PluginConfig();
|
||||||
this.Bridge = new PluginBridge(this);
|
this.Bridge = new PluginBridge(this);
|
||||||
|
|
||||||
LoadConfig();
|
Config.Load(configPath);
|
||||||
|
|
||||||
Config.InternalPluginChangedState += Config_InternalPluginChangedState;
|
Config.InternalPluginChangedState += Config_InternalPluginChangedState;
|
||||||
Program.UserConfigReplaced += Program_UserConfigReplaced;
|
Program.UserConfigReplaced += Program_UserConfigReplaced;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadConfig(){
|
|
||||||
#pragma warning disable 612
|
|
||||||
if (Program.UserConfig.Plugins != null){
|
|
||||||
Config.ImportLegacy(Program.UserConfig.Plugins);
|
|
||||||
Config.Save(configPath);
|
|
||||||
|
|
||||||
Program.UserConfig.Plugins = null;
|
|
||||||
Program.UserConfig.Save();
|
|
||||||
}
|
|
||||||
#pragma warning restore 612
|
|
||||||
else{
|
|
||||||
Config.Load(configPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Program_UserConfigReplaced(object sender, EventArgs e){
|
private void Program_UserConfigReplaced(object sender, EventArgs e){
|
||||||
LoadConfig();
|
Config.Load(configPath);
|
||||||
Reload();
|
Reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,14 +62,6 @@ namespace TweetDuck.Plugins{
|
|||||||
return plugins.Any(plugin => plugin.Identifier.Equals(identifier));
|
return plugins.Any(plugin => plugin.Identifier.Equals(identifier));
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<Plugin> GetPluginsByGroup(PluginGroup group){
|
|
||||||
return plugins.Where(plugin => plugin.Group == group);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int CountPluginByGroup(PluginGroup group){
|
|
||||||
return plugins.Count(plugin => plugin.Group == group);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HasAnyPlugin(PluginEnvironment environment){
|
public bool HasAnyPlugin(PluginEnvironment environment){
|
||||||
return plugins.Any(plugin => plugin.Environments.HasFlag(environment));
|
return plugins.Any(plugin => plugin.Environments.HasFlag(environment));
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
using System.Text;
|
using System.Globalization;
|
||||||
using TweetDuck.Plugins.Enums;
|
using TweetDuck.Plugins.Enums;
|
||||||
|
|
||||||
namespace TweetDuck.Plugins{
|
namespace TweetDuck.Plugins{
|
||||||
@@ -8,22 +8,29 @@ namespace TweetDuck.Plugins{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static string GeneratePlugin(string pluginIdentifier, string pluginContents, int pluginToken, PluginEnvironment environment){
|
public static string GeneratePlugin(string pluginIdentifier, string pluginContents, int pluginToken, PluginEnvironment environment){
|
||||||
StringBuilder build = new StringBuilder(2*pluginIdentifier.Length+pluginContents.Length+165);
|
return PluginGen
|
||||||
|
.Replace("%params", environment.GetScriptVariables())
|
||||||
|
.Replace("%id", pluginIdentifier)
|
||||||
|
.Replace("%token", pluginToken.ToString(CultureInfo.InvariantCulture))
|
||||||
|
.Replace("%contents", pluginContents);
|
||||||
|
}
|
||||||
|
|
||||||
build.Append("(function(").Append(environment.GetScriptVariables()).Append("){");
|
private const string PluginGen = "(function(%params,$d){let tmp={id:'%id',obj:new class extends PluginBase{%contents}};$d(tmp.obj,'$id',{value:'%id'});$d(tmp.obj,'$token',{value:%token});window.TD_PLUGINS.install(tmp);})(%params,Object.defineProperty);";
|
||||||
|
|
||||||
build.Append("let tmp={");
|
/* PluginGen
|
||||||
build.Append("id:\"").Append(pluginIdentifier).Append("\",");
|
|
||||||
build.Append("obj:new class extends PluginBase{").Append(pluginContents).Append("}");
|
|
||||||
build.Append("};");
|
|
||||||
|
|
||||||
build.Append("tmp.obj.$id=\"").Append(pluginIdentifier).Append("\";");
|
(function(%params, $i, $d){
|
||||||
build.Append("tmp.obj.$token=").Append(pluginToken).Append(";");
|
let tmp = {
|
||||||
build.Append("window.TD_PLUGINS.install(tmp);");
|
id: '%id',
|
||||||
|
obj: new class extends PluginBase{%contents}
|
||||||
|
};
|
||||||
|
|
||||||
build.Append("})(").Append(environment.GetScriptVariables()).Append(");");
|
$d(tmp.obj, '$id', { value: '%id' });
|
||||||
|
$d(tmp.obj, '$token', { value: %token });
|
||||||
|
|
||||||
return build.ToString();
|
window.TD_PLUGINS.install(tmp);
|
||||||
}
|
})(%params, Object.defineProperty);
|
||||||
|
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,8 +20,8 @@ namespace TweetDuck{
|
|||||||
public const string BrandName = "TweetDuck";
|
public const string BrandName = "TweetDuck";
|
||||||
public const string Website = "https://tweetduck.chylex.com";
|
public const string Website = "https://tweetduck.chylex.com";
|
||||||
|
|
||||||
public const string VersionTag = "1.7.7";
|
public const string VersionTag = "1.8";
|
||||||
public const string VersionFull = "1.7.7.0";
|
public const string VersionFull = "1.8.0.0";
|
||||||
|
|
||||||
public static readonly Version Version = new Version(VersionTag);
|
public static readonly Version Version = new Version(VersionTag);
|
||||||
public static readonly bool IsPortable = File.Exists("makeportable");
|
public static readonly bool IsPortable = File.Exists("makeportable");
|
||||||
@@ -233,7 +233,7 @@ namespace TweetDuck{
|
|||||||
File.Delete(UserConfigFilePath);
|
File.Delete(UserConfigFilePath);
|
||||||
File.Delete(UserConfig.GetBackupFile(UserConfigFilePath));
|
File.Delete(UserConfig.GetBackupFile(UserConfigFilePath));
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
Reporter.HandleException("Configuration Reset Error", "Could not delete configuration files to reset the settings.", true, e);
|
Reporter.HandleException("Configuration Reset Error", "Could not delete configuration files to reset the options.", true, e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@ using TweetDuck;
|
|||||||
|
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
[assembly: NeutralResourcesLanguage("en")]
|
||||||
|
|
||||||
[assembly: CLSCompliant(false)]
|
[assembly: CLSCompliant(true)]
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("UnitTests")]
|
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("UnitTests")]
|
||||||
|
@@ -8,7 +8,7 @@ enabled(){
|
|||||||
|
|
||||||
if (e.keyCode === 115){
|
if (e.keyCode === 115){
|
||||||
this.isDebugging = !this.isDebugging;
|
this.isDebugging = !this.isDebugging;
|
||||||
$(".app-title").first().css("background-color", this.isDebugging ? "#5A6B75" : "#292F33");
|
$(".nav-user-info").first().css("background-color", this.isDebugging ? "#5A6B75" : "#292F33");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug mode handling
|
// Debug mode handling
|
||||||
|
@@ -8,7 +8,7 @@ Edit layout & design
|
|||||||
chylex
|
chylex
|
||||||
|
|
||||||
[version]
|
[version]
|
||||||
1.0
|
1.1.1
|
||||||
|
|
||||||
[website]
|
[website]
|
||||||
https://tweetduck.chylex.com
|
https://tweetduck.chylex.com
|
||||||
|
@@ -7,6 +7,7 @@ constructor(){
|
|||||||
enabled(){
|
enabled(){
|
||||||
// elements & data
|
// elements & data
|
||||||
this.css = null;
|
this.css = null;
|
||||||
|
this.icons = null;
|
||||||
this.htmlModal = null;
|
this.htmlModal = null;
|
||||||
this.config = null;
|
this.config = null;
|
||||||
|
|
||||||
@@ -18,11 +19,14 @@ enabled(){
|
|||||||
revertReplies: false,
|
revertReplies: false,
|
||||||
themeColorTweaks: true,
|
themeColorTweaks: true,
|
||||||
roundedScrollBars: false,
|
roundedScrollBars: false,
|
||||||
|
revertIcons: true,
|
||||||
smallComposeTextSize: false,
|
smallComposeTextSize: false,
|
||||||
optimizeAnimations: true,
|
optimizeAnimations: true,
|
||||||
avatarRadius: 10
|
avatarRadius: 10
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.firstTimeLoad = null;
|
||||||
|
|
||||||
// modal dialog loading
|
// modal dialog loading
|
||||||
$TDP.readFileRoot(this.$token, "modal.html").then(contents => {
|
$TDP.readFileRoot(this.$token, "modal.html").then(contents => {
|
||||||
this.htmlModal = contents;
|
this.htmlModal = contents;
|
||||||
@@ -32,30 +36,58 @@ enabled(){
|
|||||||
|
|
||||||
// configuration
|
// configuration
|
||||||
const configFile = "config.json";
|
const configFile = "config.json";
|
||||||
|
|
||||||
this.tmpConfig = null;
|
this.tmpConfig = null;
|
||||||
|
this.currentStage = 0;
|
||||||
|
|
||||||
var loadConfigObject = obj => {
|
this.onStageReady = () => {
|
||||||
this.tmpConfig = obj || {};
|
if (this.currentStage === 0){
|
||||||
|
this.currentStage = 1;
|
||||||
if (TD.ready){
|
|
||||||
this.onAppReady();
|
|
||||||
}
|
}
|
||||||
|
else if (this.tmpConfig !== null){
|
||||||
this.injectDeciderReplyHook(this.tmpConfig.revertReplies);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.onAppReady = () => {
|
|
||||||
if (this.tmpConfig !== null){
|
|
||||||
this.config = $.extend(this.defaultConfig, this.tmpConfig);
|
this.config = $.extend(this.defaultConfig, this.tmpConfig);
|
||||||
this.tmpConfig = null;
|
this.tmpConfig = null;
|
||||||
this.reinjectAll();
|
this.reinjectAll();
|
||||||
|
|
||||||
|
if (this.firstTimeLoad){
|
||||||
|
$TDP.writeFile(this.$token, configFile, JSON.stringify(this.config));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var loadConfigObject = obj => {
|
||||||
|
this.tmpConfig = obj || {};
|
||||||
|
this.firstTimeLoad = obj === null;
|
||||||
|
|
||||||
|
this.onStageReady();
|
||||||
|
this.injectDeciderReplyHook(obj && obj.revertReplies);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (this.$$wasLoadedBefore){
|
||||||
|
this.onStageReady();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$(document).one("dataSettingsValues", () => {
|
||||||
|
switch(TD.settings.getColumnWidth()){
|
||||||
|
case "wide": this.defaultConfig.columnWidth = "350px"; break;
|
||||||
|
case "narrow": this.defaultConfig.columnWidth = "270px"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(TD.settings.getFontSize()){
|
||||||
|
case "small": this.defaultConfig.fontSize = "13px"; break;
|
||||||
|
case "medium": this.defaultConfig.fontSize = "14px"; break;
|
||||||
|
case "large": this.defaultConfig.fontSize = "15px"; break;
|
||||||
|
case "largest": this.defaultConfig.fontSize = "16px"; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$$wasLoadedBefore = true;
|
||||||
|
this.onStageReady();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$TDP.checkFileExists(this.$token, configFile).then(exists => {
|
$TDP.checkFileExists(this.$token, configFile).then(exists => {
|
||||||
if (!exists){
|
if (!exists){
|
||||||
loadConfigObject(null);
|
loadConfigObject(null);
|
||||||
$TDP.writeFile(this.$token, configFile, JSON.stringify(this.defaultConfig));
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$TDP.readFile(this.$token, configFile, true).then(contents => {
|
$TDP.readFile(this.$token, configFile, true).then(contents => {
|
||||||
@@ -208,7 +240,7 @@ enabled(){
|
|||||||
_render: () => $(this.htmlModal),
|
_render: () => $(this.htmlModal),
|
||||||
destroy: function(){
|
destroy: function(){
|
||||||
if (this.reloadPage){
|
if (this.reloadPage){
|
||||||
location.reload();
|
window.TDPF_requestReload();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,7 +259,7 @@ enabled(){
|
|||||||
};
|
};
|
||||||
|
|
||||||
TD.decider.updateForGuestId();
|
TD.decider.updateForGuestId();
|
||||||
this.$pluginSettings.requiresPageReload = enable;
|
this.$requiresReload = enable;
|
||||||
};
|
};
|
||||||
|
|
||||||
// animation optimization
|
// animation optimization
|
||||||
@@ -282,13 +314,13 @@ enabled(){
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.onWindowFocusEvent = () => {
|
this.onWindowFocusEvent = () => {
|
||||||
if (this.config.optimizeAnimations){
|
if (this.config && this.config.optimizeAnimations){
|
||||||
injectOptimizations(true);
|
injectOptimizations(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.onWindowBlurEvent = () => {
|
this.onWindowBlurEvent = () => {
|
||||||
if (this.config.optimizeAnimations){
|
if (this.config && this.config.optimizeAnimations){
|
||||||
disableOptimizations();
|
disableOptimizations();
|
||||||
clearOptimizationTimer();
|
clearOptimizationTimer();
|
||||||
}
|
}
|
||||||
@@ -301,6 +333,11 @@ enabled(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.css = window.TDPF_createCustomStyle(this);
|
this.css = window.TDPF_createCustomStyle(this);
|
||||||
|
|
||||||
|
if (this.icons){
|
||||||
|
document.head.removeChild(this.icons);
|
||||||
|
this.icons = null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.reinjectAll = () => {
|
this.reinjectAll = () => {
|
||||||
@@ -338,8 +375,9 @@ enabled(){
|
|||||||
|
|
||||||
if (this.config.hideTweetActions){
|
if (this.config.hideTweetActions){
|
||||||
this.css.insert(".tweet-action { opacity: 0; }");
|
this.css.insert(".tweet-action { opacity: 0; }");
|
||||||
|
this.css.insert(".tweet-actions.is-visible .tweet-action { opacity: 0.5; }");
|
||||||
this.css.insert(".is-favorite .tweet-action, .is-retweet .tweet-action { opacity: 0.5; visibility: visible !important }");
|
this.css.insert(".is-favorite .tweet-action, .is-retweet .tweet-action { opacity: 0.5; visibility: visible !important }");
|
||||||
this.css.insert(".tweet:hover .tweet-action, .is-favorite .tweet-action[rel='favorite'], .is-retweet .tweet-action[rel='retweet'] { opacity: 1; visibility: visible !important }");
|
this.css.insert(".tweet:hover .tweet-action, .tweet-action.is-selected, .is-favorite .tweet-action[rel='favorite'], .is-retweet .tweet-action[rel='retweet'] { opacity: 1 !important; visibility: visible !important }");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.config.moveTweetActionsToRight){
|
if (this.config.moveTweetActionsToRight){
|
||||||
@@ -367,11 +405,109 @@ enabled(){
|
|||||||
this.css.insert(".activity-header + .tweet .tweet-context .obj-left { margin-right: 5px }");
|
this.css.insert(".activity-header + .tweet .tweet-context .obj-left { margin-right: 5px }");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.config.revertIcons){
|
||||||
|
this.icons = document.createElement("style");
|
||||||
|
this.icons.innerHTML = `
|
||||||
|
@font-face {
|
||||||
|
font-family: 'tweetdeckold';
|
||||||
|
src: url("https://ton.twimg.com/tweetdeck-web/web/assets/fonts/tweetdeck-regular-webfont.5f4ea87976.woff") format("woff");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-twitter-bird:before{content:"\\f000";font-family:tweetdeckold}
|
||||||
|
.icon-mention:before{content:"\\f001";font-family:tweetdeckold}
|
||||||
|
.icon-following:before{content:"\\f002";font-family:tweetdeckold}
|
||||||
|
.icon-message:before{content:"\\f003";font-family:tweetdeckold}
|
||||||
|
.icon-home:before{content:"\\f004";font-family:tweetdeckold}
|
||||||
|
.icon-hashtag:before{content:"\\f005";font-family:tweetdeckold}
|
||||||
|
.icon-reply:before{content:"\\f006";font-family:tweetdeckold}
|
||||||
|
.icon-favorite:before{content:"\\f055";font-family:tweetdeckold}
|
||||||
|
.icon-retweet:before{content:"\\f008";font-family:tweetdeckold}
|
||||||
|
.icon-drafts:before{content:"\\f009";font-family:tweetdeckold}
|
||||||
|
.icon-search:before{content:"\\f00a";font-family:tweetdeckold}
|
||||||
|
.icon-trash:before{content:"\\f00c";font-family:tweetdeckold}
|
||||||
|
.icon-close:before{content:"\\f00d";font-family:tweetdeckold}
|
||||||
|
.icon-arrow-r:before,.Icon--caretRight:before{content:"\\f00e";font-family:tweetdeckold}
|
||||||
|
.icon-arrow-l:before,.Icon--caretLeft:before{content:"\\f00f";font-family:tweetdeckold}
|
||||||
|
.icon-protected:before{content:"\\f013";font-family:tweetdeckold}
|
||||||
|
.icon-list:before{content:"\\f014";font-family:tweetdeckold}
|
||||||
|
.icon-camera:before{content:"\\f015";font-family:tweetdeckold}
|
||||||
|
.icon-more:before{content:"\\f016";font-family:tweetdeckold}
|
||||||
|
.icon-settings:before{content:"\\f018";font-family:tweetdeckold}
|
||||||
|
.icon-notifications:before{content:"\\f019";font-family:tweetdeckold}
|
||||||
|
.icon-user-dd:before{content:"\\f01a";font-family:tweetdeckold}
|
||||||
|
.icon-activity:before{content:"\\f01c";font-family:tweetdeckold}
|
||||||
|
.icon-trending:before{content:"\\f01d";font-family:tweetdeckold}
|
||||||
|
.icon-minus:before{content:"\\f01e";font-family:tweetdeckold}
|
||||||
|
.icon-plus:before{content:"\\f01f";font-family:tweetdeckold}
|
||||||
|
.icon-geo:before{content:"\\f020";font-family:tweetdeckold}
|
||||||
|
.icon-check:before{content:"\\f021";font-family:tweetdeckold}
|
||||||
|
.icon-schedule:before{content:"\\f022";font-family:tweetdeckold}
|
||||||
|
.icon-dot:before{content:"\\f023";font-family:tweetdeckold}
|
||||||
|
.icon-user:before{content:"\\f024";font-family:tweetdeckold}
|
||||||
|
.icon-content:before{content:"\\f025";font-family:tweetdeckold}
|
||||||
|
.icon-arrow-d:before,.Icon--caretDown:before{content:"\\f026";font-family:tweetdeckold}
|
||||||
|
.icon-arrow-u:before{content:"\\f027";font-family:tweetdeckold}
|
||||||
|
.icon-share:before{content:"\\f028";font-family:tweetdeckold}
|
||||||
|
.icon-info:before{content:"\\f029";font-family:tweetdeckold}
|
||||||
|
.icon-verified:before{content:"\\f02a";font-family:tweetdeckold}
|
||||||
|
.icon-translator:before{content:"\\f02b";font-family:tweetdeckold}
|
||||||
|
.icon-blocked:before{content:"\\f02c";font-family:tweetdeckold}
|
||||||
|
.icon-constrain:before{content:"\\f02d";font-family:tweetdeckold}
|
||||||
|
.icon-play-video:before{content:"\\f02e";font-family:tweetdeckold}
|
||||||
|
.icon-empty:before{content:"\\f02f";font-family:tweetdeckold}
|
||||||
|
.icon-clear-input:before{content:"\\f030";font-family:tweetdeckold}
|
||||||
|
.icon-compose:before{content:"\\f031";font-family:tweetdeckold}
|
||||||
|
.icon-mark-read:before{content:"\\f032";font-family:tweetdeckold}
|
||||||
|
.icon-arrow-r-double:before{content:"\\f033";font-family:tweetdeckold}
|
||||||
|
.icon-arrow-l-double:before{content:"\\f034";font-family:tweetdeckold}
|
||||||
|
.icon-follow:before{content:"\\f035";font-family:tweetdeckold}
|
||||||
|
.icon-image:before{content:"\\f036";font-family:tweetdeckold}
|
||||||
|
.icon-popout:before{content:"\\f037";font-family:tweetdeckold}
|
||||||
|
.icon-move:before{content:"\\f039";font-family:tweetdeckold}
|
||||||
|
.icon-compose-grid:before{content:"\\f03a";font-family:tweetdeckold}
|
||||||
|
.icon-compose-minigrid:before{content:"\\f03b";font-family:tweetdeckold}
|
||||||
|
.icon-compose-list:before{content:"\\f03c";font-family:tweetdeckold}
|
||||||
|
.icon-edit:before{content:"\\f040";font-family:tweetdeckold}
|
||||||
|
.icon-clear-timeline:before{content:"\\f041";font-family:tweetdeckold}
|
||||||
|
.icon-sliders:before{content:"\\f042";font-family:tweetdeckold}
|
||||||
|
.icon-custom-timeline:before{content:"\\f043";font-family:tweetdeckold}
|
||||||
|
.icon-compose-dm:before{content:"\\f044";font-family:tweetdeckold}
|
||||||
|
.icon-bg-dot:before{content:"\\f045";font-family:tweetdeckold}
|
||||||
|
.icon-user-team-mgr:before{content:"\\f046";font-family:tweetdeckold}
|
||||||
|
.icon-user-switch:before{content:"\\f047";font-family:tweetdeckold}
|
||||||
|
.icon-conversation:before{content:"\\f048";font-family:tweetdeckold}
|
||||||
|
.icon-dataminr:before{content:"\\f049";font-family:tweetdeckold}
|
||||||
|
.icon-link:before{content:"\\f04a";font-family:tweetdeckold}
|
||||||
|
.icon-flash:before{content:"\\f050";font-family:tweetdeckold}
|
||||||
|
.icon-pointer-u:before{content:"\\f051";font-family:tweetdeckold}
|
||||||
|
.icon-analytics:before{content:"\\f054";font-family:tweetdeckold}
|
||||||
|
.icon-heart:before{content:"\\f055";font-family:tweetdeckold}
|
||||||
|
.icon-calendar:before{content:"\\f056";font-family:tweetdeckold}
|
||||||
|
.icon-attachment:before{content:"\\f057";font-family:tweetdeckold}
|
||||||
|
.icon-play:before{content:"\\f058";font-family:tweetdeckold}
|
||||||
|
.icon-bookmark:before{content:"\\f059";font-family:tweetdeckold}
|
||||||
|
.icon-play-badge:before{content:"\\f060";font-family:tweetdeckold}
|
||||||
|
.icon-gif-badge:before{content:"\\f061";font-family:tweetdeckold}
|
||||||
|
.icon-poll:before{content:"\\f062";font-family:tweetdeckold}
|
||||||
|
|
||||||
|
.icon-heart-filled:before{content:"\\f055";font-family:tweetdeckold}
|
||||||
|
.icon-retweet-filled:before{content:"\\f008";font-family:tweetdeckold}
|
||||||
|
.icon-list-filled:before{content:"\\f014";font-family:tweetdeckold}
|
||||||
|
.icon-user-filled:before{content:"\\f035";font-family:tweetdeckold}
|
||||||
|
|
||||||
|
.column-header .column-type-icon { bottom: 26px !important }
|
||||||
|
.tweet-footer { margin-top: 6px !important }`;
|
||||||
|
|
||||||
|
document.head.appendChild(this.icons);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.config.columnWidth[0] === '/'){
|
if (this.config.columnWidth[0] === '/'){
|
||||||
let cols = this.config.columnWidth.slice(1);
|
let cols = this.config.columnWidth.slice(1);
|
||||||
|
|
||||||
this.css.insert(".column { width: calc((100vw - 205px) / "+cols+" - 8px) !important }");
|
this.css.insert(".column { width: calc((100vw - 205px) / "+cols+" - 6px) !important }");
|
||||||
this.css.insert(".is-condensed .column { width: calc((100vw - 55px) / "+cols+" - 8px) !important }");
|
this.css.insert(".is-condensed .column { width: calc((100vw - 55px) / "+cols+" - 6px) !important }");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
this.css.insert(".column { width: "+this.config.columnWidth+" !important }");
|
this.css.insert(".column { width: "+this.config.columnWidth+" !important }");
|
||||||
@@ -399,13 +535,26 @@ enabled(){
|
|||||||
default: TD.settings.setFontSize(parseInt(this.config.fontSize, 10) >= 16 ? "largest" : "smallest"); break;
|
default: TD.settings.setFontSize(parseInt(this.config.fontSize, 10) >= 16 ? "largest" : "smallest"); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$TDP.injectIntoNotificationsBefore(this.$token, "css", "</head>", [
|
$TDP.injectIntoNotificationsBefore(this.$token, "css", "</head>", `
|
||||||
"<style type='text/css'>",
|
<style type='text/css'>
|
||||||
".txt-base-smallest:not(.icon), .txt-base-largest:not(.icon) { font-size: "+this.config.fontSize+" !important }",
|
.txt-base-smallest:not(.icon), .txt-base-largest:not(.icon) { font-size: ${this.config.fontSize} !important }
|
||||||
".avatar { border-radius: "+this.config.avatarRadius+"% !important }",
|
.avatar { border-radius: ${this.config.avatarRadius}% !important }
|
||||||
(this.config.revertReplies ? ".activity-header + .tweet .tweet-context { margin-left: -35px } .activity-header + .tweet .tweet-context .obj-left { margin-right: 5px }" : ""),
|
|
||||||
"</style>"
|
${this.config.revertReplies ? `
|
||||||
].join(""));
|
.activity-header + .tweet .tweet-context { margin-left: -35px }
|
||||||
|
.activity-header + .tweet .tweet-context .obj-left { margin-right: 5px }
|
||||||
|
` : ``}
|
||||||
|
|
||||||
|
${this.config.revertIcons ? `
|
||||||
|
@font-face { font-family: 'tweetdeckold'; src: url(\"https://ton.twimg.com/tweetdeck-web/web/assets/fonts/tweetdeck-regular-webfont.5f4ea87976.woff\") format(\"woff\"); font-weight: normal; font-style: normal }
|
||||||
|
.icon-reply:before{content:"\\f006";font-family:tweetdeckold}
|
||||||
|
.icon-heart-filled:before{content:"\\f055";font-family:tweetdeckold}
|
||||||
|
.icon-retweet-filled:before{content:"\\f008";font-family:tweetdeckold}
|
||||||
|
.icon-list-filled:before{content:"\\f014";font-family:tweetdeckold}
|
||||||
|
.icon-user-filled:before{content:"\\f035";font-family:tweetdeckold}
|
||||||
|
.icon-user-dd:before{content:"\\f01a";font-family:tweetdeckold}
|
||||||
|
` : ``}
|
||||||
|
</style>`);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.uiShowActionsMenuEvent = () => {
|
this.uiShowActionsMenuEvent = () => {
|
||||||
@@ -416,21 +565,6 @@ enabled(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
ready(){
|
ready(){
|
||||||
// configuration
|
|
||||||
switch(TD.settings.getColumnWidth()){
|
|
||||||
case "wide": this.defaultConfig.columnWidth = "350px"; break;
|
|
||||||
case "narrow": this.defaultConfig.columnWidth = "270px"; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(TD.settings.getFontSize()){
|
|
||||||
case "small": this.defaultConfig.fontSize = "13px"; break;
|
|
||||||
case "medium": this.defaultConfig.fontSize = "14px"; break;
|
|
||||||
case "large": this.defaultConfig.fontSize = "15px"; break;
|
|
||||||
case "largest": this.defaultConfig.fontSize = "16px"; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.onAppReady();
|
|
||||||
|
|
||||||
// optimization events
|
// optimization events
|
||||||
$(window).on("focus", this.onWindowFocusEvent);
|
$(window).on("focus", this.onWindowFocusEvent);
|
||||||
$(window).on("blur", this.onWindowBlurEvent);
|
$(window).on("blur", this.onWindowBlurEvent);
|
||||||
@@ -448,6 +582,10 @@ disabled(){
|
|||||||
this.css.remove();
|
this.css.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.icons){
|
||||||
|
document.head.removeChild(this.icons);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.optimizations){
|
if (this.optimizations){
|
||||||
this.optimizations.remove();
|
this.optimizations.remove();
|
||||||
}
|
}
|
||||||
|
@@ -106,6 +106,10 @@
|
|||||||
<input data-td-key="roundedScrollBars" class="js-theme-checkbox touch-larger-label" type="checkbox">
|
<input data-td-key="roundedScrollBars" class="js-theme-checkbox touch-larger-label" type="checkbox">
|
||||||
Rounded scroll bars
|
Rounded scroll bars
|
||||||
</label>
|
</label>
|
||||||
|
<label class="checkbox">
|
||||||
|
<input data-td-key="revertIcons" class="js-theme-checkbox touch-larger-label" type="checkbox">
|
||||||
|
Revert icon design
|
||||||
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input data-td-key="smallComposeTextSize" class="js-theme-checkbox touch-larger-label" type="checkbox">
|
<input data-td-key="smallComposeTextSize" class="js-theme-checkbox touch-larger-label" type="checkbox">
|
||||||
Small compose tweet font size
|
Small compose tweet font size
|
||||||
|
@@ -9,7 +9,7 @@ Emoji keyboard
|
|||||||
chylex
|
chylex
|
||||||
|
|
||||||
[version]
|
[version]
|
||||||
1.0
|
1.1
|
||||||
|
|
||||||
[website]
|
[website]
|
||||||
https://tweetduck.chylex.com
|
https://tweetduck.chylex.com
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
enabled(){
|
enabled(){
|
||||||
this.selectedSkinTone = "";
|
this.selectedSkinTone = "";
|
||||||
|
this.currentKeywords = [];
|
||||||
|
|
||||||
this.skinToneList = [
|
this.skinToneList = [
|
||||||
"", "1F3FB", "1F3FC", "1F3FD", "1F3FE", "1F3FF"
|
"", "1F3FB", "1F3FC", "1F3FD", "1F3FE", "1F3FF"
|
||||||
@@ -18,11 +19,10 @@ enabled(){
|
|||||||
[ "1F3FF", "#8A6859" ],
|
[ "1F3FF", "#8A6859" ],
|
||||||
];
|
];
|
||||||
|
|
||||||
this.emojiURL = "https://ton.twimg.com/tweetdeck-web/web/assets/emoji/";
|
this.emojiData1 = []; // no skin tones, prepended
|
||||||
|
this.emojiData2 = {}; // contains emojis with skin tones
|
||||||
this.emojiHTML1 = ""; // no skin tones, prepended
|
this.emojiData3 = []; // no skin tones, appended
|
||||||
this.emojiHTML2 = {}; // contains emojis with skin tones
|
this.emojiNames = [];
|
||||||
this.emojiHTML3 = ""; // no skin tones, appended
|
|
||||||
|
|
||||||
var me = this;
|
var me = this;
|
||||||
|
|
||||||
@@ -33,6 +33,8 @@ enabled(){
|
|||||||
this.css.insert(".emoji-keyboard-list { height: 10.14em; padding: 0.1em; box-sizing: border-box; overflow-y: auto }");
|
this.css.insert(".emoji-keyboard-list { height: 10.14em; padding: 0.1em; box-sizing: border-box; overflow-y: auto }");
|
||||||
this.css.insert(".emoji-keyboard-list .separator { height: 26px }");
|
this.css.insert(".emoji-keyboard-list .separator { height: 26px }");
|
||||||
this.css.insert(".emoji-keyboard-list img { padding: 0.1em !important; width: 1em; height: 1em; vertical-align: -0.1em; cursor: pointer }");
|
this.css.insert(".emoji-keyboard-list img { padding: 0.1em !important; width: 1em; height: 1em; vertical-align: -0.1em; cursor: pointer }");
|
||||||
|
this.css.insert(".emoji-keyboard-search { height: auto; padding: 4px 10px 8px; background-color: #292f33; border-radius: 2px 2px 0 0 }");
|
||||||
|
this.css.insert(".emoji-keyboard-search input { width: 100%; border-radius: 1px; }");
|
||||||
this.css.insert(".emoji-keyboard-skintones { height: 1.3em; text-align: center; background-color: #292f33; border-radius: 0 0 2px 2px }");
|
this.css.insert(".emoji-keyboard-skintones { height: 1.3em; text-align: center; background-color: #292f33; border-radius: 0 0 2px 2px }");
|
||||||
this.css.insert(".emoji-keyboard-skintones div { width: 0.8em; height: 0.8em; margin: 0.25em 0.1em; border-radius: 50%; display: inline-block; box-sizing: border-box; cursor: pointer }");
|
this.css.insert(".emoji-keyboard-skintones div { width: 0.8em; height: 0.8em; margin: 0.25em 0.1em; border-radius: 50%; display: inline-block; box-sizing: border-box; cursor: pointer }");
|
||||||
this.css.insert(".emoji-keyboard-skintones .sel { border: 2px solid rgba(0, 0, 0, 0.35); box-shadow: 0 0 2px 0 rgba(255, 255, 255, 0.65), 0 0 1px 0 rgba(255, 255, 255, 0.4) inset }");
|
this.css.insert(".emoji-keyboard-skintones .sel { border: 2px solid rgba(0, 0, 0, 0.35); box-shadow: 0 0 2px 0 rgba(255, 255, 255, 0.65), 0 0 1px 0 rgba(255, 255, 255, 0.4) inset }");
|
||||||
@@ -54,26 +56,72 @@ enabled(){
|
|||||||
// keyboard generation
|
// keyboard generation
|
||||||
|
|
||||||
this.currentKeyboard = null;
|
this.currentKeyboard = null;
|
||||||
|
this.currentSpanner = null;
|
||||||
|
|
||||||
var hideKeyboard = () => {
|
var hideKeyboard = () => {
|
||||||
$(this.currentKeyboard).remove();
|
$(this.currentKeyboard).remove();
|
||||||
this.currentKeyboard = null;
|
this.currentKeyboard = null;
|
||||||
|
|
||||||
|
$(this.currentSpanner).remove();
|
||||||
|
this.currentSpanner = null;
|
||||||
|
|
||||||
|
this.currentKeywords = [];
|
||||||
|
|
||||||
|
this.composePanelScroller.trigger("scroll");
|
||||||
|
|
||||||
$(".emoji-keyboard-popup-btn").removeClass("is-selected");
|
$(".emoji-keyboard-popup-btn").removeClass("is-selected");
|
||||||
$(".js-compose-text").first().focus();
|
$(".js-compose-text").first().focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
var generateEmojiHTML = skinTone => {
|
var generateEmojiHTML = skinTone => {
|
||||||
return (this.emojiHTML1+this.emojiHTML2[skinTone]+this.emojiHTML3).replace(/u#/g, this.emojiURL);
|
let index = 0;
|
||||||
|
let html = [ "<p style='font-size:13px;color:#444;margin:4px;text-align:center'>Please, note that most emoji will not show up properly in the text box above, but they will display in the tweet.</p>" ];
|
||||||
|
|
||||||
|
for(let array of [ this.emojiData1, this.emojiData2[skinTone], this.emojiData3 ]){
|
||||||
|
for(let emoji of array){
|
||||||
|
if (emoji === "___"){
|
||||||
|
html.push("<div class='separator'></div>");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
html.push(TD.util.cleanWithEmoji(emoji).replace(' class="emoji" draggable="false"', ''));
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return html.join("");
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateFilters = () => {
|
||||||
|
let keywords = this.currentKeywords;
|
||||||
|
let container = $(this.currentKeyboard.children[1]);
|
||||||
|
|
||||||
|
let emoji = container.children("img");
|
||||||
|
let info = container.children("p:first");
|
||||||
|
let separators = container.children("div");
|
||||||
|
|
||||||
|
if (keywords.length === 0){
|
||||||
|
info.css("display", "block");
|
||||||
|
separators.css("display", "block");
|
||||||
|
emoji.css("display", "inline");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
info.css("display", "none");
|
||||||
|
separators.css("display", "none");
|
||||||
|
|
||||||
|
emoji.css("display", "none");
|
||||||
|
emoji.filter(index => keywords.every(kw => me.emojiNames[index].includes(kw))).css("display", "inline");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var selectSkinTone = skinTone => {
|
var selectSkinTone = skinTone => {
|
||||||
let selectedEle = this.currentKeyboard.children[1].querySelector("[data-tone='"+this.selectedSkinTone+"']");
|
let selectedEle = this.currentKeyboard.children[2].querySelector("[data-tone='"+this.selectedSkinTone+"']");
|
||||||
selectedEle && selectedEle.classList.remove("sel");
|
selectedEle && selectedEle.classList.remove("sel");
|
||||||
|
|
||||||
this.selectedSkinTone = skinTone;
|
this.selectedSkinTone = skinTone;
|
||||||
this.currentKeyboard.children[0].innerHTML = generateEmojiHTML(skinTone);
|
this.currentKeyboard.children[1].innerHTML = generateEmojiHTML(skinTone);
|
||||||
this.currentKeyboard.children[1].querySelector("[data-tone='"+this.selectedSkinTone+"']").classList.add("sel");
|
this.currentKeyboard.children[2].querySelector("[data-tone='"+this.selectedSkinTone+"']").classList.add("sel");
|
||||||
|
updateFilters();
|
||||||
};
|
};
|
||||||
|
|
||||||
this.generateKeyboard = (input, left, top) => {
|
this.generateKeyboard = (input, left, top) => {
|
||||||
@@ -103,10 +151,19 @@ enabled(){
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var search = document.createElement("div");
|
||||||
|
search.innerHTML = "<input type='text' placeholder='Search...'>";
|
||||||
|
search.classList.add("emoji-keyboard-search");
|
||||||
|
|
||||||
var skintones = document.createElement("div");
|
var skintones = document.createElement("div");
|
||||||
skintones.innerHTML = me.skinToneData.map(entry => "<div data-tone='"+entry[0]+"' style='background-color:"+entry[1]+"'></div>").join("");
|
skintones.innerHTML = me.skinToneData.map(entry => "<div data-tone='"+entry[0]+"' style='background-color:"+entry[1]+"'></div>").join("");
|
||||||
skintones.classList.add("emoji-keyboard-skintones");
|
skintones.classList.add("emoji-keyboard-skintones");
|
||||||
|
|
||||||
|
outer.appendChild(search);
|
||||||
|
outer.appendChild(keyboard);
|
||||||
|
outer.appendChild(skintones);
|
||||||
|
$(".js-app").append(outer);
|
||||||
|
|
||||||
skintones.addEventListener("click", function(e){
|
skintones.addEventListener("click", function(e){
|
||||||
if (e.target.hasAttribute("data-tone")){
|
if (e.target.hasAttribute("data-tone")){
|
||||||
selectSkinTone(e.target.getAttribute("data-tone") || "");
|
selectSkinTone(e.target.getAttribute("data-tone") || "");
|
||||||
@@ -115,23 +172,36 @@ enabled(){
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
outer.appendChild(keyboard);
|
search.addEventListener("click", function(e){
|
||||||
outer.appendChild(skintones);
|
e.stopPropagation();
|
||||||
document.body.appendChild(outer);
|
});
|
||||||
|
|
||||||
|
var searchInput = search.children[0];
|
||||||
|
searchInput.focus();
|
||||||
|
|
||||||
|
searchInput.addEventListener("input", function(e){
|
||||||
|
me.currentKeywords = e.target.value.split(" ").filter(kw => kw.length > 0).map(kw => kw.toLowerCase());
|
||||||
|
updateFilters();
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
|
||||||
|
searchInput.addEventListener("focus", function(){
|
||||||
|
$(this).select();
|
||||||
|
});
|
||||||
|
|
||||||
this.currentKeyboard = outer;
|
this.currentKeyboard = outer;
|
||||||
selectSkinTone(this.selectedSkinTone);
|
selectSkinTone(this.selectedSkinTone);
|
||||||
|
|
||||||
|
this.currentSpanner = document.createElement("div");
|
||||||
|
this.currentSpanner.style.height = ($(this.currentKeyboard).height()-10)+"px";
|
||||||
|
$(".emoji-keyboard-popup-btn").parent().after(this.currentSpanner);
|
||||||
|
|
||||||
|
this.composePanelScroller.trigger("scroll");
|
||||||
};
|
};
|
||||||
|
|
||||||
this.prevTryPasteImage = window.TDGF_tryPasteImage;
|
var getKeyboardTop = () => {
|
||||||
var prevTryPasteImageF = this.prevTryPasteImage;
|
let button = $(".emoji-keyboard-popup-btn");
|
||||||
|
return button.offset().top+button.outerHeight()+me.composePanelScroller.scrollTop()+8;
|
||||||
window.TDGF_tryPasteImage = function(){
|
|
||||||
if (me.currentKeyboard){
|
|
||||||
hideKeyboard();
|
|
||||||
}
|
|
||||||
|
|
||||||
return prevTryPasteImageF.apply(this, arguments);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// event handlers
|
// event handlers
|
||||||
@@ -139,18 +209,22 @@ enabled(){
|
|||||||
this.emojiKeyboardButtonClickEvent = function(e){
|
this.emojiKeyboardButtonClickEvent = function(e){
|
||||||
if (me.currentKeyboard){
|
if (me.currentKeyboard){
|
||||||
hideKeyboard();
|
hideKeyboard();
|
||||||
|
$(this).blur();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
var pos = $(this).offset();
|
me.generateKeyboard($(".js-compose-text").first(), $(this).offset().left, getKeyboardTop());
|
||||||
me.generateKeyboard($(".js-compose-text").first(), pos.left, pos.top+$(this).outerHeight()+8);
|
|
||||||
|
|
||||||
$(this).addClass("is-selected");
|
$(this).addClass("is-selected");
|
||||||
}
|
}
|
||||||
|
|
||||||
$(this).blur();
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.composerScrollEvent = function(e){
|
||||||
|
if (me.currentKeyboard){
|
||||||
|
me.currentKeyboard.style.marginTop = (-$(this).scrollTop())+"px";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
this.documentClickEvent = function(e){
|
this.documentClickEvent = function(e){
|
||||||
if (me.currentKeyboard && !e.target.classList.contains("js-compose-text")){
|
if (me.currentKeyboard && !e.target.classList.contains("js-compose-text")){
|
||||||
hideKeyboard();
|
hideKeyboard();
|
||||||
@@ -164,18 +238,21 @@ enabled(){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
this.uploadFilesEvent = function(e){
|
||||||
* TODO
|
if (me.currentKeyboard){
|
||||||
* ----
|
me.currentKeyboard.style.top = getKeyboardTop()+"px";
|
||||||
* add emoji search if I can be bothered
|
}
|
||||||
* lazy emoji loading
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ready(){
|
ready(){
|
||||||
|
this.composePanelScroller = $(".js-compose-scroller", ".js-docked-compose").first().children().first();
|
||||||
|
this.composePanelScroller.on("scroll", this.composerScrollEvent);
|
||||||
|
|
||||||
$(".emoji-keyboard-popup-btn").on("click", this.emojiKeyboardButtonClickEvent);
|
$(".emoji-keyboard-popup-btn").on("click", this.emojiKeyboardButtonClickEvent);
|
||||||
$(document).on("click", this.documentClickEvent);
|
$(document).on("click", this.documentClickEvent);
|
||||||
$(document).on("keydown", this.documentKeyEvent);
|
$(document).on("keydown", this.documentKeyEvent);
|
||||||
|
$(document).on("uiComposeImageAdded", this.uploadFilesEvent);
|
||||||
|
|
||||||
// HTML generation
|
// HTML generation
|
||||||
|
|
||||||
@@ -190,18 +267,14 @@ ready(){
|
|||||||
};
|
};
|
||||||
|
|
||||||
$TDP.readFileRoot(this.$token, "emoji-ordering.txt").then(contents => {
|
$TDP.readFileRoot(this.$token, "emoji-ordering.txt").then(contents => {
|
||||||
let generated1 = [];
|
|
||||||
let generated2 = {};
|
|
||||||
let generated3 = [];
|
|
||||||
|
|
||||||
for(let skinTone of this.skinToneList){
|
for(let skinTone of this.skinToneList){
|
||||||
generated2[skinTone] = [];
|
this.emojiData2[skinTone] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// declaration inserters
|
// declaration inserters
|
||||||
|
|
||||||
let addDeclaration1 = decl => {
|
let addDeclaration1 = decl => {
|
||||||
generated1.push(decl.split(" ").map(pt => convUnicode(parseInt(pt, 16))).join(""));
|
this.emojiData1.push(decl.split(" ").map(pt => convUnicode(parseInt(pt, 16))).join(""));
|
||||||
};
|
};
|
||||||
|
|
||||||
let addDeclaration2 = (tone, decl) => {
|
let addDeclaration2 = (tone, decl) => {
|
||||||
@@ -209,16 +282,16 @@ ready(){
|
|||||||
|
|
||||||
if (tone === null){
|
if (tone === null){
|
||||||
for(let skinTone of this.skinToneList){
|
for(let skinTone of this.skinToneList){
|
||||||
generated2[skinTone].push(gen);
|
this.emojiData2[skinTone].push(gen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
generated2[tone].push(gen);
|
this.emojiData2[tone].push(gen);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let addDeclaration3 = decl => {
|
let addDeclaration3 = decl => {
|
||||||
generated3.push(decl.split(" ").map(pt => convUnicode(parseInt(pt, 16))).join(""));
|
this.emojiData3.push(decl.split(" ").map(pt => convUnicode(parseInt(pt, 16))).join(""));
|
||||||
};
|
};
|
||||||
|
|
||||||
// line reading
|
// line reading
|
||||||
@@ -228,9 +301,9 @@ ready(){
|
|||||||
for(let line of contents.split("\n")){
|
for(let line of contents.split("\n")){
|
||||||
if (line[0] === '@'){
|
if (line[0] === '@'){
|
||||||
switch(skinToneState){
|
switch(skinToneState){
|
||||||
case 0: generated1.push("___"); break;
|
case 0: this.emojiData1.push("___"); break;
|
||||||
case 1: this.skinToneList.forEach(skinTone => generated2[skinTone].push("___")); break;
|
case 1: this.skinToneList.forEach(skinTone => this.emojiData2[skinTone].push("___")); break;
|
||||||
case 2: generated3.push("___"); break;
|
case 2: this.emojiData3.push("___"); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line[1] === '1'){
|
if (line[1] === '1'){
|
||||||
@@ -239,9 +312,15 @@ ready(){
|
|||||||
else if (line[1] === '2'){
|
else if (line[1] === '2'){
|
||||||
skinToneState = 2;
|
skinToneState = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else if (skinToneState === 1){
|
|
||||||
let decl = line.slice(0, line.indexOf(';'));
|
let semicolon = line.indexOf(';');
|
||||||
|
let decl = line.slice(0, semicolon);
|
||||||
|
let desc = line.slice(semicolon+1).toLowerCase();
|
||||||
|
|
||||||
|
if (skinToneState === 1){
|
||||||
let skinIndex = decl.indexOf('$');
|
let skinIndex = decl.indexOf('$');
|
||||||
|
|
||||||
if (skinIndex !== -1){
|
if (skinIndex !== -1){
|
||||||
@@ -249,35 +328,24 @@ ready(){
|
|||||||
let declPost = decl.slice(skinIndex+1);
|
let declPost = decl.slice(skinIndex+1);
|
||||||
|
|
||||||
for(let skinTone of this.skinToneNonDefaultList){
|
for(let skinTone of this.skinToneNonDefaultList){
|
||||||
generated2[skinTone].pop();
|
this.emojiData2[skinTone].pop();
|
||||||
addDeclaration2(skinTone, declPre+skinTone+declPost);
|
addDeclaration2(skinTone, declPre+skinTone+declPost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
addDeclaration2(null, decl);
|
addDeclaration2(null, decl);
|
||||||
|
this.emojiNames.push(desc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (skinToneState === 2){
|
else if (skinToneState === 2){
|
||||||
addDeclaration3(line.slice(0, line.indexOf(';')));
|
addDeclaration3(decl);
|
||||||
|
this.emojiNames.push(desc);
|
||||||
}
|
}
|
||||||
else if (skinToneState === 0){
|
else if (skinToneState === 0){
|
||||||
addDeclaration1(line.slice(0, line.indexOf(';')));
|
addDeclaration1(decl);
|
||||||
|
this.emojiNames.push(desc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// final processing
|
|
||||||
|
|
||||||
let urlRegex = new RegExp(this.emojiURL.replace(/\./g, "\\."), "g");
|
|
||||||
let process = str => TD.util.cleanWithEmoji(str).replace(/ class=\"emoji\" draggable=\"false\"/g, "").replace(urlRegex, "u#").replace(/___/g, "<div class='separator'></div>");
|
|
||||||
|
|
||||||
let start = "<p style='font-size:13px;color:#444;margin:4px;text-align:center'>Please, note that most emoji will not show up properly in the text box above, but they will display in the tweet.</p>";
|
|
||||||
this.emojiHTML1 = start+process(generated1.join(""));
|
|
||||||
|
|
||||||
for(let skinTone of this.skinToneList){
|
|
||||||
this.emojiHTML2[skinTone] = process(generated2[skinTone].join(""));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emojiHTML3 = process(generated3.join(""));
|
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
$TD.alert("error", "Problem loading emoji keyboard: "+err.message);
|
$TD.alert("error", "Problem loading emoji keyboard: "+err.message);
|
||||||
});
|
});
|
||||||
@@ -290,12 +358,17 @@ disabled(){
|
|||||||
$(this.currentKeyboard).remove();
|
$(this.currentKeyboard).remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
window.TDGF_tryPasteImage = this.prevTryPasteImage;
|
if (this.currentSpanner){
|
||||||
|
$(this.currentSpanner).remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.composePanelScroller.off("scroll", this.composerScrollEvent);
|
||||||
|
|
||||||
$(".emoji-keyboard-popup-btn").off("click", this.emojiKeyboardButtonClickEvent);
|
$(".emoji-keyboard-popup-btn").off("click", this.emojiKeyboardButtonClickEvent);
|
||||||
$(".emoji-keyboard-popup-btn").remove();
|
$(".emoji-keyboard-popup-btn").remove();
|
||||||
|
|
||||||
$(document).off("click", this.documentClickEvent);
|
$(document).off("click", this.documentClickEvent);
|
||||||
$(document).off("keydown", this.documentKeyEvent);
|
$(document).off("keydown", this.documentKeyEvent);
|
||||||
|
$(document).off("uiComposeImageAdded", this.uploadFilesEvent);
|
||||||
TD.mustaches["compose/docked_compose.mustache"] = this.prevComposeMustache;
|
TD.mustaches["compose/docked_compose.mustache"] = this.prevComposeMustache;
|
||||||
}
|
}
|
||||||
|
70
Resources/Plugins/emoji-keyboard/emoji-instructions.txt
Normal file
70
Resources/Plugins/emoji-keyboard/emoji-instructions.txt
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
Emoji list: http://unicode.org/emoji/charts/emoji-ordering.html
|
||||||
|
Emoji order: http://unicode.org/emoji/charts/emoji-ordering.txt
|
||||||
|
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
Remove unnecessary info:
|
||||||
|
|
||||||
|
Search: \s;.+?#.+?\s
|
||||||
|
Replace: ;
|
||||||
|
|
||||||
|
Search: U+
|
||||||
|
Replace:
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
Replace skin tone variations:
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
1F9D2;child
|
||||||
|
1F9D2 1F3FB; child: light skin tone
|
||||||
|
1F9D2 1F3FC; child: medium-light skin tone
|
||||||
|
1F9D2 1F3FD; child: medium skin tone
|
||||||
|
1F9D2 1F3FE; child: medium-dark skin tone
|
||||||
|
1F9D2 1F3FF; child: dark skin tone
|
||||||
|
|
||||||
|
1F9D2;child
|
||||||
|
1F9D2 $;child
|
||||||
|
|
||||||
|
TODO: Update this section with exact regexes
|
||||||
|
|
||||||
|
|
||||||
|
----------------
|
||||||
|
Move some emoji:
|
||||||
|
|
||||||
|
1F443 $;nose
|
||||||
|
> 1F91D;handshake
|
||||||
|
1F463;footprints
|
||||||
|
|
||||||
|
1F939 $ 200D 2640 FE0F;woman juggling
|
||||||
|
> 1F6CC;person in bed
|
||||||
|
> 1F6CC $;person in bed
|
||||||
|
> 1F6C0;person taking bath
|
||||||
|
> 1F6C0 $;person taking bath
|
||||||
|
1F46B;man and woman holding hands
|
||||||
|
|
||||||
|
|
||||||
|
------------------
|
||||||
|
Remove some emoji:
|
||||||
|
|
||||||
|
1F469 $ 200D 1F692;woman firefighter
|
||||||
|
> remove all non-gendered duplicates below here
|
||||||
|
|
||||||
|
3030;wavy dash
|
||||||
|
> remove copyright
|
||||||
|
> remove registered trademark
|
||||||
|
> remove trademark
|
||||||
|
0023 FE0F 20E3;keycap
|
||||||
|
|
||||||
|
1F441;eye
|
||||||
|
> remove eye in speech bubble
|
||||||
|
1F445;tongue
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
Add preprocessor symbols:
|
||||||
|
|
||||||
|
@ = group separator
|
||||||
|
@1 = enable skin tones below
|
||||||
|
@2 = disable skin tones below
|
File diff suppressed because it is too large
Load Diff
17
Resources/Plugins/templates/.meta
Normal file
17
Resources/Plugins/templates/.meta
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[name]
|
||||||
|
Templates
|
||||||
|
|
||||||
|
[description]
|
||||||
|
- Adds a templating system for tweets
|
||||||
|
|
||||||
|
[author]
|
||||||
|
chylex
|
||||||
|
|
||||||
|
[version]
|
||||||
|
1.0
|
||||||
|
|
||||||
|
[website]
|
||||||
|
https://tweetduck.chylex.com
|
||||||
|
|
||||||
|
[requires]
|
||||||
|
1.5.3
|
472
Resources/Plugins/templates/browser.js
Normal file
472
Resources/Plugins/templates/browser.js
Normal file
@@ -0,0 +1,472 @@
|
|||||||
|
enabled(){
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
// configuration
|
||||||
|
|
||||||
|
this.config = {
|
||||||
|
templates: {} // identifier: { name, contents }
|
||||||
|
};
|
||||||
|
|
||||||
|
const configFile = "config.json";
|
||||||
|
|
||||||
|
$TDP.checkFileExists(this.$token, configFile).then(exists => {
|
||||||
|
if (!exists){
|
||||||
|
$TDP.writeFile(this.$token, configFile, JSON.stringify(this.config));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$TDP.readFile(this.$token, configFile, true).then(contents => {
|
||||||
|
try{
|
||||||
|
$.extend(true, this.config, JSON.parse(contents));
|
||||||
|
}catch(err){
|
||||||
|
// why :(
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
$TD.alert("error", "Problem loading configuration for the template plugin: "+err.message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.saveConfig = () => {
|
||||||
|
$TDP.writeFile(this.$token, configFile, JSON.stringify(this.config)).catch(err => {
|
||||||
|
$TD.alert("error", "Problem saving configuration for the template plugin: "+err.message);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// button
|
||||||
|
|
||||||
|
var buttonHTML = '<button class="manage-templates-btn needsclick btn btn-on-blue full-width txt-left margin-b--12 padding-v--9"><i class="icon icon-bookmark"></i><span class="label padding-ls">Manage templates</span></button>';
|
||||||
|
|
||||||
|
this.prevComposeMustache = TD.mustaches["compose/docked_compose.mustache"];
|
||||||
|
TD.mustaches["compose/docked_compose.mustache"] = TD.mustaches["compose/docked_compose.mustache"].replace('<div class="js-tweet-type-button">', buttonHTML+'<div class="js-tweet-type-button">');
|
||||||
|
|
||||||
|
var dockedComposePanel = $(".js-docked-compose");
|
||||||
|
|
||||||
|
if (dockedComposePanel.length){
|
||||||
|
dockedComposePanel.find(".js-tweet-type-button").first().before(buttonHTML);
|
||||||
|
}
|
||||||
|
|
||||||
|
// css
|
||||||
|
|
||||||
|
this.css = window.TDPF_createCustomStyle(this);
|
||||||
|
this.css.insert(".manage-templates-btn.active { color: #fff; box-shadow: 0 0 2px 3px #50a5e6; outline: 0; }");
|
||||||
|
|
||||||
|
this.css.insert(".templates-modal-wrap { width: 100%; height: 100%; padding: 49px; position: absolute; z-index: 999; box-sizing: border-box; background-color: rgba(0, 0, 0, 0.5); }");
|
||||||
|
this.css.insert(".templates-modal { width: 100%; height: 100%; background-color: #fff; display: flex; }");
|
||||||
|
this.css.insert(".templates-modal > div { display: flex; flex-direction: column; }");
|
||||||
|
this.css.insert(".templates-modal-bottom { flex: 0 0 auto; padding: 16px; text-align: right; }");
|
||||||
|
this.css.insert(".templates-modal-bottom button { margin-left: 4px; }");
|
||||||
|
|
||||||
|
this.css.insert(".template-list { height: 100%; flex: 1 1 auto; }");
|
||||||
|
this.css.insert(".template-list ul { list-style-type: none; font-size: 24px; color: #222; flex: 1 1 auto; padding: 12px; overflow-y: auto; }");
|
||||||
|
this.css.insert(".template-list li { display: block; width: 100%; padding: 4px 8px; box-sizing: border-box; }");
|
||||||
|
this.css.insert(".template-list li[data-template] { cursor: pointer; }");
|
||||||
|
this.css.insert(".template-list li[data-template]:hover { background-color: #d8d8d8; }");
|
||||||
|
this.css.insert(".template-list li span { white-space: nowrap; }");
|
||||||
|
this.css.insert(".template-list li .icon { opacity: 0.6; margin-left: 4px; padding: 3px; }");
|
||||||
|
this.css.insert(".template-list li .icon:hover { opacity: 1; }");
|
||||||
|
this.css.insert(".template-list li .template-actions { float: right; }");
|
||||||
|
|
||||||
|
this.css.insert(".template-editor { height: 100%; flex: 0 0 auto; width: 25vw; min-width: 150px; max-width: 400px; background-color: #485865; }");
|
||||||
|
this.css.insert(".template-editor-form { flex: 1 1 auto; padding: 12px 16px; font-size: 14px; overflow-y: auto; }");
|
||||||
|
this.css.insert(".template-editor-form .compose-text-title { margin: 24px 0 9px; }");
|
||||||
|
this.css.insert(".template-editor-form .compose-text-title:first-child { margin-top: 0; }");
|
||||||
|
this.css.insert(".template-editor-form input, .template-editor-form textarea { color: #111; background-color: #fff; border: none; border-radius: 0; }");
|
||||||
|
this.css.insert(".template-editor-form input:focus, .template-editor-form textarea:focus { box-shadow: inset 0 1px 3px rgba(17, 17, 17, 0.1), 0 0 8px rgba(80, 165, 230, 0.6); }");
|
||||||
|
this.css.insert(".template-editor-form textarea { height: 146px; font-size: 14px; padding: 10px; resize: none; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips-button { cursor: pointer; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips-button .icon { font-size: 12px; vertical-align: -5%; margin-left: 4px; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips { display: none; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips p { margin: 10px 0; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips p:first-child { margin-top: 0; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips li:nth-child(2n+1) { margin-top: 5px; padding-left: 6px; font-family: monospace; }");
|
||||||
|
this.css.insert(".template-editor-form .template-editor-tips li:nth-child(2n) { margin-top: 1px; padding-left: 14px; opacity: 0.66; }");
|
||||||
|
|
||||||
|
this.css.insert(".invisible { display: none !important; }");
|
||||||
|
|
||||||
|
// template implementation
|
||||||
|
|
||||||
|
var readTemplateTokens = (contents, tokenData) => {
|
||||||
|
let startIndex = -1;
|
||||||
|
let endIndex = -1;
|
||||||
|
|
||||||
|
let data = [];
|
||||||
|
let tokenNames = Object.keys(tokenData);
|
||||||
|
|
||||||
|
for(let currentIndex = 0; currentIndex < contents.length; currentIndex++){
|
||||||
|
if (contents[currentIndex] === '\\'){
|
||||||
|
contents = contents.substring(0, currentIndex)+contents.substring(currentIndex+1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (contents[currentIndex] !== '{'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
startIndex = currentIndex+1;
|
||||||
|
|
||||||
|
for(; startIndex < contents.length; startIndex++){
|
||||||
|
if (!tokenNames.some(name => contents[startIndex] === name[startIndex-currentIndex-1])){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
endIndex = startIndex;
|
||||||
|
|
||||||
|
let token = contents.substring(currentIndex+1, startIndex);
|
||||||
|
let replacement = tokenData[token] || "";
|
||||||
|
|
||||||
|
let entry = [ token, currentIndex ];
|
||||||
|
|
||||||
|
if (contents[endIndex] === '#'){
|
||||||
|
++endIndex;
|
||||||
|
|
||||||
|
let bracketCount = 1;
|
||||||
|
|
||||||
|
for(; endIndex < contents.length; endIndex++){
|
||||||
|
if (contents[endIndex] === '{'){
|
||||||
|
++bracketCount;
|
||||||
|
}
|
||||||
|
else if (contents[endIndex] === '}'){
|
||||||
|
if (--bracketCount === 0){
|
||||||
|
entry.push(contents.substring(startIndex+1, endIndex));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (contents[endIndex] === '#'){
|
||||||
|
entry.push(contents.substring(startIndex+1, endIndex));
|
||||||
|
startIndex = endIndex;
|
||||||
|
}
|
||||||
|
else if (contents[endIndex] === '\\'){
|
||||||
|
contents = contents.substring(0, endIndex)+contents.substring(endIndex+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (contents[endIndex] !== '}'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.push(entry);
|
||||||
|
|
||||||
|
contents = contents.substring(0, currentIndex)+replacement+contents.substring(endIndex+1);
|
||||||
|
currentIndex += replacement.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [ contents, data ];
|
||||||
|
};
|
||||||
|
|
||||||
|
var doAjaxRequest = (index, url, evaluator) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (!url){
|
||||||
|
resolve([ index, "{ajax}" ]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.get(url, function(data){
|
||||||
|
if (evaluator){
|
||||||
|
resolve([ index, eval(evaluator.replace(/\$/g, "'"+data.replace(/(["'\\\n\r\u2028\u2029])/g, "\\$1")+"'"))]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
resolve([ index, data ]);
|
||||||
|
}
|
||||||
|
}, "text").fail(function(){
|
||||||
|
resolve([ index, "" ]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var useTemplate = (contents, append) => {
|
||||||
|
let ele = $(".js-compose-text");
|
||||||
|
if (ele.length === 0)return;
|
||||||
|
|
||||||
|
let value = append ? ele.val()+contents : contents;
|
||||||
|
let prevLength = value.length;
|
||||||
|
|
||||||
|
let tokens = null;
|
||||||
|
|
||||||
|
[value, tokens] = readTemplateTokens(value, {
|
||||||
|
"cursor": "",
|
||||||
|
"ajax": "(...)"
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.val(value);
|
||||||
|
ele.trigger("change");
|
||||||
|
ele.focus();
|
||||||
|
|
||||||
|
ele[0].selectionStart = ele[0].selectionEnd = value.length;
|
||||||
|
|
||||||
|
let promises = [];
|
||||||
|
let indexOffset = 0;
|
||||||
|
|
||||||
|
for(let token of tokens){
|
||||||
|
switch(token[0]){
|
||||||
|
case "cursor":
|
||||||
|
let [, index1, length ] = token;
|
||||||
|
ele[0].selectionStart = index1;
|
||||||
|
ele[0].selectionEnd = index1+(length | 0 || 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "ajax":
|
||||||
|
let [, index2, evaluator, url ] = token;
|
||||||
|
|
||||||
|
if (!url){
|
||||||
|
url = evaluator;
|
||||||
|
evaluator = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
promises.push(doAjaxRequest(index2, url, evaluator));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (promises.length > 0){
|
||||||
|
let selStart = ele[0].selectionStart;
|
||||||
|
let selEnd = ele[0].selectionEnd;
|
||||||
|
|
||||||
|
ele.prop("disabled", true);
|
||||||
|
|
||||||
|
Promise.all(promises).then(values => {
|
||||||
|
const placeholderLen = 5; // "(...)".length
|
||||||
|
let indexOffset = 0;
|
||||||
|
|
||||||
|
for(let value of values){
|
||||||
|
let diff = value[1].length-placeholderLen;
|
||||||
|
let realIndex = indexOffset+value[0];
|
||||||
|
|
||||||
|
let val = ele.val();
|
||||||
|
ele.val(val.substring(0, realIndex)+value[1]+val.substring(realIndex+placeholderLen));
|
||||||
|
|
||||||
|
indexOffset += diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
ele.prop("disabled", false);
|
||||||
|
ele.trigger("change");
|
||||||
|
ele.focus();
|
||||||
|
|
||||||
|
ele[0].selectionStart = selStart+indexOffset;
|
||||||
|
ele[0].selectionEnd = selEnd+indexOffset;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!append){
|
||||||
|
hideTemplateModal();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// modal dialog
|
||||||
|
|
||||||
|
this.editingTemplate = null;
|
||||||
|
|
||||||
|
var showTemplateModal = () => {
|
||||||
|
$(".manage-templates-btn").addClass("active");
|
||||||
|
|
||||||
|
let html = `
|
||||||
|
<div class="templates-modal-wrap">
|
||||||
|
<div class="templates-modal">
|
||||||
|
<div class="template-list">
|
||||||
|
<ul></ul>
|
||||||
|
|
||||||
|
<div class="templates-modal-bottom">
|
||||||
|
<button data-action="new-template" class="btn btn-positive"><i class="icon icon-plus icon-small padding-rs"></i><span class="label">New Template</span></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="template-editor invisible">
|
||||||
|
<div class="template-editor-form">
|
||||||
|
<div class="compose-text-title">Template Name</div>
|
||||||
|
<input name="template-name" type="text">
|
||||||
|
|
||||||
|
<div class="compose-text-title">Contents</div>
|
||||||
|
<textarea name="template-contents" class="compose-text scroll-v scroll-styled-v scroll-styled-h scroll-alt"></textarea>
|
||||||
|
|
||||||
|
<div class="compose-text-title template-editor-tips-button">Advanced <i class="icon icon-arrow-d"></i></div>
|
||||||
|
<div class="template-editor-tips">
|
||||||
|
<p>You can use the following tokens. All tokens except for <span style="font-family: monospace">{ajax}</span> can only be used once.</p>
|
||||||
|
<ul>
|
||||||
|
<li>{cursor}</li>
|
||||||
|
<li>Location where the cursor is placed</li>
|
||||||
|
<li>{cursor#<selectionlength>}</li>
|
||||||
|
<li>Places cursor and selects a set amount of characters</li>
|
||||||
|
<li>{ajax#<url>}</li>
|
||||||
|
<li>Replaced with the result of a cross-origin ajax request</li>
|
||||||
|
<li>{ajax#<eval>#<url>}</li>
|
||||||
|
<li>Allows parsing the ajax request using <span style="font-family: monospace">$</span> as the placeholder for the result<br>Example: <span style="font-family: monospace">$.substring(0,5)</span></li>
|
||||||
|
</ul>
|
||||||
|
<p>To use special characters in the tweet text, escape them with a backslash:
|
||||||
|
<br><span style="font-family: monospace"> \\{ \\} \\# \\\\</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="templates-modal-bottom">
|
||||||
|
<button data-action="editor-cancel" class="btn"><i class="icon icon-close icon-small padding-rs"></i><span class="label">Cancel</span></button>
|
||||||
|
<button data-action="editor-confirm" class="btn btn-positive"><i class="icon icon-check icon-small padding-rs"></i><span class="label">Confirm</span></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
/* TODO possibly implement this later
|
||||||
|
|
||||||
|
<li>{paste}</li>
|
||||||
|
<li>Paste text or an image from clipboard</li>
|
||||||
|
<li>{paste#text}</li>
|
||||||
|
<li>Paste only if clipboard has text</li>
|
||||||
|
<li>{paste#image}</li>
|
||||||
|
<li>Paste only if clipboard has an image</li>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(".js-app-content").prepend(html);
|
||||||
|
|
||||||
|
let ele = $(".templates-modal-wrap").first();
|
||||||
|
|
||||||
|
ele.on("click", "li[data-template]", function(e){
|
||||||
|
let template = me.config.templates[$(this).attr("data-template")];
|
||||||
|
useTemplate(template.contents, e.shiftKey);
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.on("click", "li[data-template] i[data-action]", function(e){
|
||||||
|
let identifier = $(this).closest("li").attr("data-template");
|
||||||
|
|
||||||
|
switch($(this).attr("data-action")){
|
||||||
|
case "edit-template":
|
||||||
|
let editor = $(".template-editor");
|
||||||
|
|
||||||
|
if (editor.hasClass("invisible")){
|
||||||
|
toggleEditor();
|
||||||
|
}
|
||||||
|
|
||||||
|
let template = me.config.templates[identifier];
|
||||||
|
$("[name='template-name']", editor).val(template.name);
|
||||||
|
$("[name='template-contents']", editor).val(template.contents);
|
||||||
|
|
||||||
|
me.editingTemplate = identifier;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "delete-template":
|
||||||
|
delete me.config.templates[identifier];
|
||||||
|
onTemplatesUpdated(true);
|
||||||
|
|
||||||
|
if (me.editingTemplate === identifier){
|
||||||
|
me.editingTemplate = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.on("click", ".template-editor-tips-button", function(e){
|
||||||
|
$(this).children(".icon").toggleClass("icon-arrow-d icon-arrow-u");
|
||||||
|
ele.find(".template-editor-tips").toggle();
|
||||||
|
});
|
||||||
|
|
||||||
|
ele.on("click", "button", function(e){
|
||||||
|
switch($(this).attr("data-action")){
|
||||||
|
case "new-template":
|
||||||
|
case "editor-cancel":
|
||||||
|
toggleEditor();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "editor-confirm":
|
||||||
|
let editor = $(".template-editor");
|
||||||
|
|
||||||
|
if (me.editingTemplate !== null){
|
||||||
|
delete me.config.templates[me.editingTemplate];
|
||||||
|
}
|
||||||
|
|
||||||
|
let name = $("[name='template-name']", editor).val();
|
||||||
|
let identifier = name.toLowerCase().replace(/[^a-z0-9]/g, "")+"-"+(Math.random().toString(36).substring(2, 7));
|
||||||
|
|
||||||
|
if (name.trim().length === 0){
|
||||||
|
alert("Please, include a name for your template.");
|
||||||
|
$("[name='template-name']", editor).focus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
me.config.templates[identifier] = {
|
||||||
|
name: name,
|
||||||
|
contents: $("[name='template-contents']", editor).val()
|
||||||
|
};
|
||||||
|
|
||||||
|
toggleEditor();
|
||||||
|
onTemplatesUpdated(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this).blur();
|
||||||
|
});
|
||||||
|
|
||||||
|
onTemplatesUpdated(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
var hideTemplateModal = function(){
|
||||||
|
$(".templates-modal-wrap").remove();
|
||||||
|
$(".manage-templates-btn").removeClass("active");
|
||||||
|
};
|
||||||
|
|
||||||
|
var toggleEditor = function(){
|
||||||
|
let editor = $(".template-editor");
|
||||||
|
$("[name]", editor).val("");
|
||||||
|
|
||||||
|
if ($("button[data-action='new-template']", ".template-list").add(editor).toggleClass("invisible").hasClass("invisible")){
|
||||||
|
me.editingTemplate = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var onTemplatesUpdated = (save) => {
|
||||||
|
let eles = [];
|
||||||
|
|
||||||
|
for(let identifier of Object.keys(this.config.templates)){
|
||||||
|
eles.push(`<li data-template="${identifier}">
|
||||||
|
<span class="template-name">${this.config.templates[identifier].name}</span>
|
||||||
|
<span class="template-actions"><i class="icon icon-edit" data-action="edit-template"></i><i class="icon icon-close" data-action="delete-template"></i></span>
|
||||||
|
</li>`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eles.length === 0){
|
||||||
|
eles.push("<li>No templates available</li>");
|
||||||
|
}
|
||||||
|
|
||||||
|
$(".template-list").children("ul").html(eles.join(""));
|
||||||
|
|
||||||
|
if (save){
|
||||||
|
this.saveConfig();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// event handlers
|
||||||
|
|
||||||
|
this.manageTemplatesButtonClickEvent = function(e){
|
||||||
|
if ($(".templates-modal-wrap").length){
|
||||||
|
hideTemplateModal();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
showTemplateModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this).blur();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.drawerToggleEvent = function(e, data){
|
||||||
|
if (data.activeDrawer === null){
|
||||||
|
hideTemplateModal();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ready(){
|
||||||
|
$(".manage-templates-btn").on("click", this.manageTemplatesButtonClickEvent);
|
||||||
|
$(document).on("uiDrawerActive", this.drawerToggleEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
disabled(){
|
||||||
|
this.css.remove();
|
||||||
|
|
||||||
|
$(".manage-templates-btn").remove();
|
||||||
|
$(".templates-modal-wrap").remove();
|
||||||
|
|
||||||
|
$(document).off("uiDrawerActive", this.drawerToggleEvent);
|
||||||
|
|
||||||
|
TD.mustaches["compose/docked_compose.mustache"] = this.prevComposeMustache;
|
||||||
|
}
|
@@ -2,14 +2,13 @@
|
|||||||
Polls in timelines
|
Polls in timelines
|
||||||
|
|
||||||
[description]
|
[description]
|
||||||
- Adds poll result display directly into timelines
|
- Adds poll results into timelines and quoted tweets
|
||||||
- Experimental, may be buggy or break when TweetDeck updates
|
|
||||||
|
|
||||||
[author]
|
[author]
|
||||||
chylex
|
chylex
|
||||||
|
|
||||||
[version]
|
[version]
|
||||||
1.0.1
|
1.1
|
||||||
|
|
||||||
[website]
|
[website]
|
||||||
https://tweetduck.chylex.com
|
https://tweetduck.chylex.com
|
||||||
|
@@ -1,25 +1,80 @@
|
|||||||
constructor(){
|
enabled(){
|
||||||
super({
|
this.reloadColumns = () => {
|
||||||
requiresPageReload: true
|
Object.values(TD.controller.columnManager.getAll()).forEach(column => column.reloadTweets());
|
||||||
});
|
};
|
||||||
|
|
||||||
|
// styles
|
||||||
|
|
||||||
|
this.css = window.TDPF_createCustomStyle(this);
|
||||||
|
this.css.insert("html[data-td-theme='dark'] .quoted-tweet .td-timeline-poll { color: #e1e8ed; }");
|
||||||
|
|
||||||
|
// utility functions
|
||||||
|
|
||||||
|
var hasPoll = function(tweet){
|
||||||
|
return tweet.hasPoll && tweet.hasPoll();
|
||||||
|
};
|
||||||
|
|
||||||
|
var renderTweetPoll = function(tweet){
|
||||||
|
return `<div class='td-timeline-poll'>${TD.ui.template.render("status/poll", $.extend({}, tweet, {
|
||||||
|
chirp: tweet
|
||||||
|
}))}</div>`;
|
||||||
|
};
|
||||||
|
|
||||||
|
var renderPollHook = function(tweet, html){
|
||||||
|
let ele = null;
|
||||||
|
|
||||||
|
if (hasPoll(tweet)){
|
||||||
|
(ele || (ele = $(html))).find(".js-tweet-body").first().children("div").last().after(renderTweetPoll(tweet));
|
||||||
}
|
}
|
||||||
|
|
||||||
enabled(){
|
if (tweet.quotedTweet && hasPoll(tweet.quotedTweet)){
|
||||||
// add a stylesheet
|
(ele || (ele = $(html))).find(".js-quoted-tweet-text").first().after(renderTweetPoll(tweet.quotedTweet));
|
||||||
window.TDPF_createCustomStyle(this).insert(".column-detail .timeline-poll-container { display: none }");
|
}
|
||||||
|
|
||||||
// setup layout injecting
|
if (ele){
|
||||||
var injectLayout = (mustache, onlyIfNotFound, search, replace) => {
|
ele.find(".js-card-container").css("display", "none");
|
||||||
if (TD.mustaches[mustache].indexOf(onlyIfNotFound) === -1){
|
return ele.prop("outerHTML");
|
||||||
TD.mustaches[mustache] = TD.mustaches[mustache].replace(search, replace);
|
}
|
||||||
|
else{
|
||||||
|
return html;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// add poll rendering to tweets
|
// hooks
|
||||||
injectLayout("status/tweet_single.mustache", "status/poll", "{{/quotedTweetMissing}} {{#translation}}", "{{/quotedTweetMissing}} <div class='timeline-poll-container td-screenshot-remove'>{{#poll}}{{>duck/tweet_single/poll}}{{/poll}}</div> {{#translation}}");
|
|
||||||
TD.mustaches["duck/tweet_single/poll.mustache"] = '<div class="js-poll margin-tl"> {{#poll}} <ul class="margin-b--12"> {{#choices}} <li class="position-rel margin-b--8 height-3"> <div class="poll-bar pin-top height-p--100 br-1 {{#isWinner}}poll-bar--winner{{/isWinner}} {{#hasTimeLeft}}br-left{{/hasTimeLeft}} width-p--{{percentage}}"/> <div class="poll-label position-rel padding-a--4"> <span class="txt-bold txt-right inline-block width-5 padding-r--4">{{percentage}}%</span> {{{label}}} {{#isSelectedChoice}} <i class="icon icon-check txt-size-variable--11"></i> {{/isSelectedChoice}} </div> </li> {{/choices}} </ul> <span class="inline-block txt-small padding-ls txt-seamful-deep-gray"> {{{prettyCount}}} · {{#hasTimeLeft}} {{{prettyTimeLeft}}} {{/hasTimeLeft}} {{^hasTimeLeft}} {{_i}}Final results{{/i}} {{/hasTimeLeft}} </span> {{/poll}} </div>';
|
var funcs = {
|
||||||
|
TwitterStatus: TD.services.TwitterStatus.prototype.render,
|
||||||
|
TwitterActionOnTweet: TD.services.TwitterActionOnTweet.prototype.render,
|
||||||
|
TweetDetailView: TD.components.TweetDetailView.prototype._renderChirp
|
||||||
|
};
|
||||||
|
|
||||||
|
TD.services.TwitterStatus.prototype.render = function(e){
|
||||||
|
return renderPollHook(this, funcs.TwitterStatus.apply(this, arguments));
|
||||||
|
};
|
||||||
|
|
||||||
|
TD.services.TwitterActionOnTweet.prototype.render = function(e){
|
||||||
|
return renderPollHook(this.targetTweet, funcs.TwitterActionOnTweet.apply(this, arguments));
|
||||||
|
};
|
||||||
|
|
||||||
|
TD.components.TweetDetailView.prototype._renderChirp = function(){
|
||||||
|
let result = funcs.TweetDetailView.apply(this, arguments);
|
||||||
|
|
||||||
|
if (this.mainChirp.quotedTweet && hasPoll(this.mainChirp.quotedTweet)){
|
||||||
|
$(this.$tweetDetail).find(".js-quoted-tweet-text").first().after(renderTweetPoll(this.mainChirp.quotedTweet));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.prevRenderFuncs = funcs;
|
||||||
|
this.reloadColumns();
|
||||||
}
|
}
|
||||||
|
|
||||||
disabled(){
|
disabled(){
|
||||||
// not needed, plugin reloads the page when enabled or disabled
|
TD.services.TwitterStatus.prototype.render = this.prevRenderFuncs.TwitterStatus;
|
||||||
|
TD.services.TwitterActionOnTweet.prototype.render = this.prevRenderFuncs.TwitterActionOnTweet;
|
||||||
|
TD.components.TweetDetailView.prototype._renderChirp = this.prevRenderFuncs.TweetDetailView;
|
||||||
|
|
||||||
|
this.css.remove();
|
||||||
|
this.reloadColumns();
|
||||||
}
|
}
|
@@ -148,7 +148,12 @@
|
|||||||
this.outerHTML = this.innerHTML;
|
this.outerHTML = this.innerHTML;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (tweet.getChirpType().includes("list_member")){
|
let type = tweet.getChirpType();
|
||||||
|
|
||||||
|
if (type === "follow"){
|
||||||
|
html.find(".js-user-actions-menu").parent().remove();
|
||||||
|
}
|
||||||
|
else if (type.includes("list_member")){
|
||||||
html.find(".activity-header").first().css("margin-top", "2px");
|
html.find(".activity-header").first().css("margin-top", "2px");
|
||||||
html.find(".avatar").first().css("margin-bottom", "0");
|
html.find(".avatar").first().css("margin-bottom", "0");
|
||||||
}
|
}
|
||||||
@@ -195,12 +200,18 @@
|
|||||||
$TD.loadFontSizeClass(name);
|
$TD.loadFontSizeClass(name);
|
||||||
});
|
});
|
||||||
|
|
||||||
TD.settings.setTheme = appendToFunction(TD.settings.setTheme, function(){
|
TD.settings.setTheme = appendToFunction(TD.settings.setTheme, function(name){
|
||||||
|
document.documentElement.setAttribute("data-td-theme", name);
|
||||||
|
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
$TD.loadNotificationHeadContents(getNotificationHeadContents());
|
$TD.loadNotificationHeadContents(getNotificationHeadContents());
|
||||||
}, 0);
|
}, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
onAppReady.push(function(){
|
||||||
|
document.documentElement.setAttribute("data-td-theme", TD.settings.getTheme());
|
||||||
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Enable popup notifications.
|
// Block: Enable popup notifications.
|
||||||
//
|
//
|
||||||
@@ -595,6 +606,26 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Make middle click on tweet reply icon open the compose drawer.
|
||||||
|
//
|
||||||
|
app.delegate(".js-reply-action", "mousedown", function(e){
|
||||||
|
if (e.which === 2){
|
||||||
|
if ($("[data-drawer='compose']").hasClass("is-hidden")){
|
||||||
|
$(document).trigger("uiDrawerShowDrawer", {
|
||||||
|
drawer: "compose",
|
||||||
|
withAnimation: true
|
||||||
|
});
|
||||||
|
|
||||||
|
window.setTimeout(() => $(this).trigger("click"), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Work around clipboard HTML formatting.
|
// Block: Work around clipboard HTML formatting.
|
||||||
//
|
//
|
||||||
@@ -617,6 +648,16 @@
|
|||||||
styleOfficial.sheet.insertRule(".app-navigator .tooltip { display: none !important; }", 0); // hide broken tooltips in the menu
|
styleOfficial.sheet.insertRule(".app-navigator .tooltip { display: none !important; }", 0); // hide broken tooltips in the menu
|
||||||
styleOfficial.sheet.insertRule(".account-inline .username { vertical-align: 10%; }", 0); // move usernames a bit higher
|
styleOfficial.sheet.insertRule(".account-inline .username { vertical-align: 10%; }", 0); // move usernames a bit higher
|
||||||
|
|
||||||
|
styleOfficial.sheet.insertRule(".btn-compose, .app-search-fake, .app-search-input { border-radius: 1px; }", 0); // use consistent menu button radius
|
||||||
|
styleOfficial.sheet.insertRule(".is-condensed .app-header-inner { padding-top: 10px !important; }", 0); // add extra padding to menu buttons when condensed
|
||||||
|
styleOfficial.sheet.insertRule(".is-condensed .btn-compose { padding: 8px !important; }", 0); // fix compose button icon when condensed
|
||||||
|
styleOfficial.sheet.insertRule(".app-header:not(.is-condensed) .nav-user-info { padding: 0 5px; }", 0); // add padding to user info
|
||||||
|
|
||||||
|
styleOfficial.sheet.insertRule(".app-title { display: none; }", 0); // hide TweetDeck logo
|
||||||
|
styleOfficial.sheet.insertRule(".nav-user-info { bottom: 10px !important; }", 0); // move user info
|
||||||
|
styleOfficial.sheet.insertRule(".app-navigator { bottom: 50px !important; }", 0); // move navigation
|
||||||
|
styleOfficial.sheet.insertRule(".column-navigator-overflow { bottom: 192px !important; }", 0); // move column list
|
||||||
|
|
||||||
styleOfficial.sheet.insertRule(".column .column-header { height: 49px !important; }", 0); // fix one pixel space below column header
|
styleOfficial.sheet.insertRule(".column .column-header { height: 49px !important; }", 0); // fix one pixel space below column header
|
||||||
styleOfficial.sheet.insertRule(".column:not(.is-options-open) .column-header { border-bottom: none; }", 0); // fix one pixel space below column header
|
styleOfficial.sheet.insertRule(".column:not(.is-options-open) .column-header { border-bottom: none; }", 0); // fix one pixel space below column header
|
||||||
|
|
||||||
@@ -641,6 +682,24 @@
|
|||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Let's make retweets lowercase again.
|
||||||
|
//
|
||||||
|
TD.mustaches["status/tweet_single.mustache"] = TD.mustaches["status/tweet_single.mustache"].replace("{{_i}} Retweeted{{/i}}", "{{_i}} retweeted{{/i}}");
|
||||||
|
|
||||||
|
if (ensurePropertyExists(TD, "services", "TwitterActionRetweet", "prototype", "generateText")){
|
||||||
|
TD.services.TwitterActionRetweet.prototype.generateText = appendToFunction(TD.services.TwitterActionRetweet.prototype.generateText, function(){
|
||||||
|
this.text = this.text.replace(" Retweeted", " retweeted");
|
||||||
|
this.htmlText = this.htmlText.replace(" Retweeted", " retweeted");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ensurePropertyExists(TD, "services", "TwitterActionRetweetedInteraction", "prototype", "generateText")){
|
||||||
|
TD.services.TwitterActionRetweetedInteraction.prototype.generateText = appendToFunction(TD.services.TwitterActionRetweetedInteraction.prototype.generateText, function(){
|
||||||
|
this.htmlText = this.htmlText.replace(" Retweeted", " retweeted").replace(" Retweet", " retweet");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Block: Setup unsupported video element hook.
|
// Block: Setup unsupported video element hook.
|
||||||
//
|
//
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
(function(){
|
(function(){
|
||||||
|
var isReloading = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Class: Abstract plugin base class.
|
// Class: Abstract plugin base class.
|
||||||
//
|
//
|
||||||
window.PluginBase = class{
|
window.PluginBase = class{
|
||||||
constructor(pluginSettings){
|
constructor(pluginSettings){
|
||||||
this.$pluginSettings = pluginSettings || {};
|
this.$requiresReload = !!(pluginSettings && pluginSettings.requiresPageReload);
|
||||||
}
|
}
|
||||||
|
|
||||||
enabled(){}
|
enabled(){}
|
||||||
@@ -49,11 +51,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
setState(plugin, enable){
|
setState(plugin, enable){
|
||||||
let reloading = plugin.obj.$pluginSettings.requiresPageReload;
|
let reloading = plugin.obj.$requiresReload;
|
||||||
|
|
||||||
if (enable && this.isDisabled(plugin)){
|
if (enable && this.isDisabled(plugin)){
|
||||||
if (reloading){
|
if (reloading){
|
||||||
location.reload();
|
window.TDPF_requestReload();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
this.disabled.splice(this.disabled.indexOf(plugin.id), 1);
|
this.disabled.splice(this.disabled.indexOf(plugin.id), 1);
|
||||||
@@ -63,11 +65,17 @@
|
|||||||
}
|
}
|
||||||
else if (!enable && !this.isDisabled(plugin)){
|
else if (!enable && !this.isDisabled(plugin)){
|
||||||
if (reloading){
|
if (reloading){
|
||||||
location.reload();
|
window.TDPF_requestReload();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
this.disabled.push(plugin.id);
|
this.disabled.push(plugin.id);
|
||||||
plugin.obj.disabled();
|
plugin.obj.disabled();
|
||||||
|
|
||||||
|
for(let key of Object.keys(plugin.obj)){
|
||||||
|
if (key[0] !== '$'){
|
||||||
|
delete plugin.obj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,4 +92,14 @@
|
|||||||
window.TDPF_setPluginState = function(identifier, enable){
|
window.TDPF_setPluginState = function(identifier, enable){
|
||||||
window.TD_PLUGINS.setState(window.TD_PLUGINS.findObject(identifier), enable);
|
window.TD_PLUGINS.setState(window.TD_PLUGINS.findObject(identifier), enable);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block: Setup global function to reload the page.
|
||||||
|
//
|
||||||
|
window.TDPF_requestReload = function(){
|
||||||
|
if (!isReloading){
|
||||||
|
window.setTimeout(() => location.reload(), 1);
|
||||||
|
isReloading = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
})();
|
})();
|
@@ -1,12 +1,8 @@
|
|||||||
(function(){
|
|
||||||
//
|
//
|
||||||
// Class: Abstract plugin base class.
|
// Class: Abstract plugin base class.
|
||||||
//
|
//
|
||||||
window.PluginBase = class{
|
window.PluginBase = class{
|
||||||
constructor(pluginSettings){
|
constructor(){}
|
||||||
this.$pluginSettings = pluginSettings || {};
|
|
||||||
}
|
|
||||||
|
|
||||||
run(){}
|
run(){}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -18,4 +14,3 @@
|
|||||||
plugin.obj.run();
|
plugin.obj.run();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})();
|
|
@@ -22,7 +22,7 @@
|
|||||||
//
|
//
|
||||||
// Constant: Fallback url in case the update installer file is missing.
|
// Constant: Fallback url in case the update installer file is missing.
|
||||||
//
|
//
|
||||||
const updateDownloadFallback = "https://tweetduck.chylex.com/#download";
|
const updateDownloadFallback = "https://tweetduck.chylex.com";
|
||||||
|
|
||||||
//
|
//
|
||||||
// Function: Creates the update notification element. Removes the old one if already exists.
|
// Function: Creates the update notification element. Removes the old one if already exists.
|
||||||
@@ -30,6 +30,66 @@
|
|||||||
var displayNotification = function(version, download){
|
var displayNotification = function(version, download){
|
||||||
var outdated = version === "unsupported";
|
var outdated = version === "unsupported";
|
||||||
|
|
||||||
|
var css = $("#tweetduck-update-css");
|
||||||
|
|
||||||
|
if (!css.length){
|
||||||
|
css = $(`
|
||||||
|
<style id='tweetduck-update-css'>
|
||||||
|
#tweetduck-update {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
width: 200px;
|
||||||
|
height: 170px;
|
||||||
|
z-index: 9999;
|
||||||
|
color: #fff;
|
||||||
|
background-color: rgb(32, 94, 138);
|
||||||
|
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tdu-title {
|
||||||
|
font-size: 17px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
letter-spacing: 0.2px;
|
||||||
|
margin: 8px auto 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tdu-info {
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
margin: 3px auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tdu-buttons button {
|
||||||
|
display: block;
|
||||||
|
margin: 7px auto 0;
|
||||||
|
padding: 4px 10px;
|
||||||
|
width: 80%;
|
||||||
|
height: 30px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 1px;
|
||||||
|
outline: none;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #fff;
|
||||||
|
background-color: #419de0;
|
||||||
|
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||||
|
box-shadow: 1px 1px 1px rgba(17, 17, 17, 0.5) !important;
|
||||||
|
transition: box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tdu-buttons button:hover {
|
||||||
|
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.75);
|
||||||
|
box-shadow: 1px 1px 1px rgba(17, 17, 17, 0.75), 0 -2px 0 rgba(17, 17, 17, 0.33) inset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tdu-buttons button.tdu-btn-ignore, .tdu-buttons button.tdu-btn-later {
|
||||||
|
background-color: #607a8e;
|
||||||
|
color: #dfdfdf;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
`).appendTo(document.head);
|
||||||
|
}
|
||||||
|
|
||||||
var ele = $("#tweetduck-update");
|
var ele = $("#tweetduck-update");
|
||||||
var existed = ele.length > 0;
|
var existed = ele.length > 0;
|
||||||
|
|
||||||
@@ -37,80 +97,36 @@
|
|||||||
ele.remove();
|
ele.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
var html = outdated ? [
|
ele = $(outdated ? `
|
||||||
"<div id='tweetduck-update'>",
|
<div id='tweetduck-update'>
|
||||||
"<p class='tdu-title'>Unsupported System</p>",
|
<p class='tdu-title'>Unsupported System</p>
|
||||||
"<p class='tdu-info'>You will not receive updates.</p>",
|
<p class='tdu-info'>You will not receive updates.</p>
|
||||||
"<div class='tdu-buttons'>",
|
<div class='tdu-buttons'>
|
||||||
"<button class='btn btn-positive tdu-btn-unsupported'><span class='label'>Read More</span></button>",
|
<button class='tdu-btn-unsupported'>Read more</button>
|
||||||
"<button class='btn btn-negative tdu-btn-dismiss'><span class='label'>Dismiss</span></button>",
|
<button class='tdu-btn-ignore'>Dismiss</button>
|
||||||
"</div>",
|
</div>
|
||||||
"</div>"
|
</div>
|
||||||
] : [
|
` : `
|
||||||
"<div id='tweetduck-update'>",
|
<div id='tweetduck-update'>
|
||||||
"<p class='tdu-title'>TweetDuck Update</p>",
|
<p class='tdu-title'>TweetDuck Update</p>
|
||||||
"<p class='tdu-info'>Version "+version+" is now available.</p>",
|
<p class='tdu-info'>Version ${version} is now available.</p>
|
||||||
"<div class='tdu-buttons'>",
|
<div class='tdu-buttons'>
|
||||||
"<button class='btn btn-positive tdu-btn-download'><span class='label'>Download</span></button>",
|
<button class='tdu-btn-download'>Update now</button>
|
||||||
"<button class='btn btn-negative tdu-btn-dismiss'><span class='label'>Dismiss</span></button>",
|
<button class='tdu-btn-later'>Remind me later</button>
|
||||||
"</div>",
|
<button class='tdu-btn-ignore'>Ignore this update</button>
|
||||||
"</div>"
|
</div>
|
||||||
];
|
</div>
|
||||||
|
`).appendTo(document.body).css("display", existed ? "block" : "none");
|
||||||
|
|
||||||
$(document.body).append(html.join(""));
|
var hide = function(){
|
||||||
|
ele.remove();
|
||||||
|
css.remove();
|
||||||
|
};
|
||||||
|
|
||||||
ele = $("#tweetduck-update");
|
var buttonDiv = ele.children(".tdu-buttons").first();
|
||||||
|
|
||||||
var buttonDiv = ele.children("div.tdu-buttons").first();
|
|
||||||
|
|
||||||
ele.css({
|
|
||||||
color: "#fff",
|
|
||||||
backgroundColor: "rgb(32,94,138)",
|
|
||||||
position: "absolute",
|
|
||||||
left: "4px",
|
|
||||||
bottom: "4px",
|
|
||||||
width: "192px",
|
|
||||||
height: "86px",
|
|
||||||
display: existed ? "block" : "none",
|
|
||||||
borderRadius: "2px",
|
|
||||||
zIndex: 9999
|
|
||||||
});
|
|
||||||
|
|
||||||
ele.children("p.tdu-title").first().css({
|
|
||||||
fontSize: "17px",
|
|
||||||
fontWeight: "bold",
|
|
||||||
textAlign: "center",
|
|
||||||
letterSpacing: "0.2px",
|
|
||||||
margin: "5px auto 2px"
|
|
||||||
});
|
|
||||||
|
|
||||||
ele.children("p.tdu-info").first().css({
|
|
||||||
fontSize: "12px",
|
|
||||||
textAlign: "center",
|
|
||||||
margin: "2px auto 6px"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.css({
|
|
||||||
textAlign: "center"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.children().css({
|
|
||||||
margin: "0 4px",
|
|
||||||
minHeight: "25px",
|
|
||||||
boxShadow: "1px 1px 1px rgba(17,17,17,0.5)"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.find("span").css({
|
|
||||||
verticalAlign: "baseline"
|
|
||||||
});
|
|
||||||
|
|
||||||
ele.find("span.tdu-data-tag").first().css({
|
|
||||||
cursor: "pointer",
|
|
||||||
textDecoration: "underline"
|
|
||||||
});
|
|
||||||
|
|
||||||
buttonDiv.children(".tdu-btn-download").click(function(){
|
buttonDiv.children(".tdu-btn-download").click(function(){
|
||||||
ele.remove();
|
hide();
|
||||||
|
|
||||||
if (download){
|
if (download){
|
||||||
$TDU.onUpdateAccepted();
|
$TDU.onUpdateAccepted();
|
||||||
@@ -120,13 +136,18 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
buttonDiv.children(".tdu-btn-later").click(function(){
|
||||||
|
clearTimeout(updateCheckTimeoutID);
|
||||||
|
ele.slideUp(hide);
|
||||||
|
});
|
||||||
|
|
||||||
buttonDiv.children(".tdu-btn-unsupported").click(function(){
|
buttonDiv.children(".tdu-btn-unsupported").click(function(){
|
||||||
$TDU.openBrowser("https://github.com/chylex/TweetDuck/wiki/Supported-Systems");
|
$TDU.openBrowser("https://github.com/chylex/TweetDuck/wiki/Supported-Systems");
|
||||||
});
|
});
|
||||||
|
|
||||||
buttonDiv.children(".tdu-btn-dismiss,.tdu-btn-unsupported").click(function(){
|
buttonDiv.children(".tdu-btn-ignore,.tdu-btn-unsupported").click(function(){
|
||||||
$TDU.onUpdateDismissed();
|
$TDU.onUpdateDismissed();
|
||||||
ele.slideUp(function(){ ele.remove(); });
|
ele.slideUp(hide);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!existed){
|
if (!existed){
|
||||||
|
@@ -80,15 +80,9 @@
|
|||||||
<Compile Include="Core\Controls\FlatProgressBar.cs">
|
<Compile Include="Core\Controls\FlatProgressBar.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Controls\TabButton.cs">
|
<Compile Include="Core\Controls\LabelVertical.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Controls\TabPanel.cs">
|
|
||||||
<SubType>UserControl</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Core\Controls\TabPanel.Designer.cs">
|
|
||||||
<DependentUpon>TabPanel.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Core\Handling\BrowserProcessHandler.cs" />
|
<Compile Include="Core\Handling\BrowserProcessHandler.cs" />
|
||||||
<Compile Include="Core\Handling\ContextMenuBase.cs" />
|
<Compile Include="Core\Handling\ContextMenuBase.cs" />
|
||||||
<Compile Include="Core\Handling\ContextMenuBrowser.cs" />
|
<Compile Include="Core\Handling\ContextMenuBrowser.cs" />
|
||||||
@@ -123,10 +117,6 @@
|
|||||||
<DependentUpon>FormNotificationTweet.cs</DependentUpon>
|
<DependentUpon>FormNotificationTweet.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Notification\SoundNotification.cs" />
|
<Compile Include="Core\Notification\SoundNotification.cs" />
|
||||||
<Compile Include="Core\Notification\Sound\SoundPlayerImplFallback.cs" />
|
|
||||||
<Compile Include="Core\Notification\Sound\SoundPlayerImplWMP.cs" />
|
|
||||||
<Compile Include="Core\Notification\Sound\ISoundNotificationPlayer.cs" />
|
|
||||||
<Compile Include="Core\Notification\Sound\PlaybackErrorEventArgs.cs" />
|
|
||||||
<Compile Include="Core\Notification\TweetNotification.cs" />
|
<Compile Include="Core\Notification\TweetNotification.cs" />
|
||||||
<Compile Include="Core\Other\FormAbout.cs">
|
<Compile Include="Core\Other\FormAbout.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
@@ -158,11 +148,11 @@
|
|||||||
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsCefArgs.Designer.cs">
|
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsCefArgs.Designer.cs">
|
||||||
<DependentUpon>DialogSettingsCefArgs.cs</DependentUpon>
|
<DependentUpon>DialogSettingsCefArgs.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsExport.cs">
|
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsManage.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsExport.Designer.cs">
|
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsManage.Designer.cs">
|
||||||
<DependentUpon>DialogSettingsExport.cs</DependentUpon>
|
<DependentUpon>DialogSettingsManage.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsRestart.cs">
|
<Compile Include="Core\Other\Settings\Dialogs\DialogSettingsRestart.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
@@ -208,7 +198,6 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Core\Notification\Screenshot\TweetScreenshotManager.cs" />
|
<Compile Include="Core\Notification\Screenshot\TweetScreenshotManager.cs" />
|
||||||
<Compile Include="Core\Utils\InjectedHTML.cs" />
|
<Compile Include="Core\Utils\InjectedHTML.cs" />
|
||||||
<Compile Include="Core\Utils\NativeCoreAudio.cs" />
|
|
||||||
<Compile Include="Core\Utils\TwoKeyDictionary.cs" />
|
<Compile Include="Core\Utils\TwoKeyDictionary.cs" />
|
||||||
<Compile Include="Core\Utils\WindowState.cs" />
|
<Compile Include="Core\Utils\WindowState.cs" />
|
||||||
<Compile Include="Core\Utils\WindowsUtils.cs" />
|
<Compile Include="Core\Utils\WindowsUtils.cs" />
|
||||||
@@ -340,17 +329,10 @@
|
|||||||
<Content Include="Resources\Scripts\update.js" />
|
<Content Include="Resources\Scripts\update.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<COMReference Include="WMPLib">
|
<ProjectReference Include="lib\TweetLib.Audio\TweetLib.Audio.csproj">
|
||||||
<Guid>{6BF52A50-394A-11D3-B153-00C04F79FAA6}</Guid>
|
<Project>{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}</Project>
|
||||||
<VersionMajor>1</VersionMajor>
|
<Name>TweetLib.Audio</Name>
|
||||||
<VersionMinor>0</VersionMinor>
|
</ProjectReference>
|
||||||
<Lcid>0</Lcid>
|
|
||||||
<WrapperTool>tlbimp</WrapperTool>
|
|
||||||
<Isolated>False</Isolated>
|
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
|
||||||
</COMReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="subprocess\TweetDuck.Browser.csproj">
|
<ProjectReference Include="subprocess\TweetDuck.Browser.csproj">
|
||||||
<Project>{b10b0017-819e-4f71-870f-8256b36a26aa}</Project>
|
<Project>{b10b0017-819e-4f71-870f-8256b36a26aa}</Project>
|
||||||
<Name>TweetDuck.Browser</Name>
|
<Name>TweetDuck.Browser</Name>
|
||||||
@@ -362,7 +344,7 @@
|
|||||||
xcopy "$(ProjectDir)LICENSE.md" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)LICENSE.md" "$(TargetDir)" /Y
|
||||||
del "$(TargetDir)LICENSE.txt"
|
del "$(TargetDir)LICENSE.txt"
|
||||||
ren "$(TargetDir)LICENSE.md" "LICENSE.txt"
|
ren "$(TargetDir)LICENSE.md" "LICENSE.txt"
|
||||||
xcopy "$(ProjectDir)Libraries\CEFSHARP-LICENSE.txt" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)bld\Resources\CEFSHARP-LICENSE.txt" "$(TargetDir)" /Y
|
||||||
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcp120.dll" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcp120.dll" "$(TargetDir)" /Y
|
||||||
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcr120.dll" "$(TargetDir)" /Y
|
xcopy "$(ProjectDir)packages\Microsoft.VC120.CRT.JetBrains.12.0.21005.2\DotFiles\msvcr120.dll" "$(TargetDir)" /Y
|
||||||
rmdir "$(TargetDir)scripts" /S /Q
|
rmdir "$(TargetDir)scripts" /S /Q
|
||||||
@@ -373,8 +355,8 @@ mkdir "$(TargetDir)plugins"
|
|||||||
mkdir "$(TargetDir)plugins\official"
|
mkdir "$(TargetDir)plugins\official"
|
||||||
mkdir "$(TargetDir)plugins\user"
|
mkdir "$(TargetDir)plugins\user"
|
||||||
xcopy "$(ProjectDir)Resources\Plugins\*" "$(TargetDir)plugins\official\" /E /Y
|
xcopy "$(ProjectDir)Resources\Plugins\*" "$(TargetDir)plugins\official\" /E /Y
|
||||||
rmdir "$(ProjectDir)\bin\Debug"
|
rmdir "$(ProjectDir)bin\Debug"
|
||||||
rmdir "$(ProjectDir)\bin\Release"
|
rmdir "$(ProjectDir)bin\Release"
|
||||||
|
|
||||||
rmdir "$(TargetDir)plugins\official\.debug" /S /Q
|
rmdir "$(TargetDir)plugins\official\.debug" /S /Q
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26430.6
|
VisualStudioVersion = 15.0.26430.12
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TweetDuck", "TweetDuck.csproj", "{2389A7CD-E0D3-4706-8294-092929A33A2D}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TweetDuck", "TweetDuck.csproj", "{2389A7CD-E0D3-4706-8294-092929A33A2D}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -8,6 +8,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TweetDuck.Browser", "subpro
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "tests\UnitTests.csproj", "{A958FA7A-4A2C-42A7-BFA0-159343483F4E}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "tests\UnitTests.csproj", "{A958FA7A-4A2C-42A7-BFA0-159343483F4E}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TweetLib.Audio", "lib\TweetLib.Audio\TweetLib.Audio.csproj", "{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
@@ -26,6 +28,10 @@ Global
|
|||||||
{A958FA7A-4A2C-42A7-BFA0-159343483F4E}.Debug|x86.ActiveCfg = Debug|x86
|
{A958FA7A-4A2C-42A7-BFA0-159343483F4E}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{A958FA7A-4A2C-42A7-BFA0-159343483F4E}.Debug|x86.Build.0 = Debug|x86
|
{A958FA7A-4A2C-42A7-BFA0-159343483F4E}.Debug|x86.Build.0 = Debug|x86
|
||||||
{A958FA7A-4A2C-42A7-BFA0-159343483F4E}.Release|x86.ActiveCfg = Release|x86
|
{A958FA7A-4A2C-42A7-BFA0-159343483F4E}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}.Release|x86.Build.0 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@@ -39,7 +39,7 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
|
|||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.xml,*.pdb,CefSharp.BrowserSubprocess.exe,devtools_resources.pak,d3dcompiler_43.dll,widevinecdmadapter.dll"
|
Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.xml,*.pdb,CefSharp.BrowserSubprocess.exe,devtools_resources.pak,widevinecdmadapter.dll"
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable
|
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable
|
||||||
@@ -48,13 +48,10 @@ Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks:
|
|||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent
|
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent
|
||||||
|
|
||||||
[InstallDelete]
|
|
||||||
Type: files; Name: "{app}\td-log.txt"
|
|
||||||
Type: filesandordirs; Name: "{app}\plugins\official\design-revert"
|
|
||||||
Type: filesandordirs; Name: "{localappdata}\TD_Plugins\official\design-revert"
|
|
||||||
|
|
||||||
[UninstallDelete]
|
[UninstallDelete]
|
||||||
Type: files; Name: "{app}\debug.log"
|
Type: files; Name: "{app}\*.*"
|
||||||
|
Type: filesandordirs; Name: "{app}\locales"
|
||||||
|
Type: filesandordirs; Name: "{app}\scripts"
|
||||||
Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\Cache"
|
Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\Cache"
|
||||||
Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\GPUCache"
|
Type: filesandordirs; Name: "{localappdata}\{#MyAppName}\GPUCache"
|
||||||
|
|
||||||
|
@@ -36,15 +36,11 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
|
|||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.xml,*.pdb,CefSharp.BrowserSubprocess.exe,devtools_resources.pak,d3dcompiler_43.dll,widevinecdmadapter.dll"
|
Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.xml,*.pdb,CefSharp.BrowserSubprocess.exe,devtools_resources.pak,widevinecdmadapter.dll"
|
||||||
|
|
||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent
|
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent
|
||||||
|
|
||||||
[InstallDelete]
|
|
||||||
Type: filesandordirs; Name: "{app}\plugins\official\design-revert"
|
|
||||||
Type: filesandordirs; Name: "{app}\portable\storage\TD_Plugins\official\design-revert"
|
|
||||||
|
|
||||||
[Code]
|
[Code]
|
||||||
var UpdatePath: String;
|
var UpdatePath: String;
|
||||||
|
|
||||||
|
@@ -29,9 +29,9 @@ Uninstallable=TDIsUninstallable
|
|||||||
UninstallDisplayName={#MyAppName}
|
UninstallDisplayName={#MyAppName}
|
||||||
UninstallDisplayIcon={app}\{#MyAppExeName}
|
UninstallDisplayIcon={app}\{#MyAppExeName}
|
||||||
PrivilegesRequired=lowest
|
PrivilegesRequired=lowest
|
||||||
Compression=lzma
|
Compression=lzma/normal
|
||||||
SolidCompression=yes
|
SolidCompression=True
|
||||||
InternalCompressLevel=max
|
InternalCompressLevel=normal
|
||||||
MinVersion=0,6.1
|
MinVersion=0,6.1
|
||||||
|
|
||||||
#include <idp.iss>
|
#include <idp.iss>
|
||||||
@@ -41,7 +41,10 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
|
|||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "..\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "*.xml,*.pdb,*.dll,*.pak,*.bin,*.dat,CefSharp.BrowserSubprocess.exe"
|
Source: "..\bin\x86\Release\TweetDuck.*"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "..\bin\x86\Release\TweetLib.*"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "..\bin\x86\Release\scripts\*.*"; DestDir: "{app}\scripts"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
|
Source: "..\bin\x86\Release\plugins\*.*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable
|
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable
|
||||||
@@ -49,17 +52,6 @@ Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUnin
|
|||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Parameters: "{code:TDGetRunArgs}"; Flags: nowait postinstall shellexec
|
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Parameters: "{code:TDGetRunArgs}"; Flags: nowait postinstall shellexec
|
||||||
|
|
||||||
[InstallDelete]
|
|
||||||
Type: files; Name: "{app}\*.xml"
|
|
||||||
Type: files; Name: "{app}\*.js"
|
|
||||||
Type: files; Name: "{app}\d3dcompiler_43.dll"
|
|
||||||
Type: files; Name: "{app}\widevinecdmadapter.dll"
|
|
||||||
Type: files; Name: "{app}\devtools_resources.pak"
|
|
||||||
Type: files; Name: "{app}\CefSharp.BrowserSubprocess.exe"
|
|
||||||
Type: files; Name: "{app}\td-log.txt"
|
|
||||||
Type: files; Name: "{app}\debug.log"
|
|
||||||
Type: files; Name: "{localappdata}\{#MyAppName}\ChromeDWriteFontCache"
|
|
||||||
|
|
||||||
[UninstallDelete]
|
[UninstallDelete]
|
||||||
Type: files; Name: "{app}\*.*"
|
Type: files; Name: "{app}\*.*"
|
||||||
Type: filesandordirs; Name: "{app}\locales"
|
Type: filesandordirs; Name: "{app}\locales"
|
||||||
|
37
lib/TweetLib.Audio/AudioPlayer.cs
Normal file
37
lib/TweetLib.Audio/AudioPlayer.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using TweetLib.Audio.Impl;
|
||||||
|
using TweetLib.Audio.Utils;
|
||||||
|
|
||||||
|
namespace TweetLib.Audio{
|
||||||
|
public abstract class AudioPlayer : IDisposable{
|
||||||
|
private static bool? IsWMPAvailable;
|
||||||
|
|
||||||
|
public static AudioPlayer New(){
|
||||||
|
if (IsWMPAvailable.HasValue){
|
||||||
|
if (IsWMPAvailable.Value){
|
||||||
|
return new SoundPlayerImplWMP();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return new SoundPlayerImplFallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
SoundPlayerImplWMP implWMP = new SoundPlayerImplWMP();
|
||||||
|
IsWMPAvailable = true;
|
||||||
|
return implWMP;
|
||||||
|
}catch(COMException){
|
||||||
|
IsWMPAvailable = false;
|
||||||
|
return new SoundPlayerImplFallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract string SupportedFormats { get; }
|
||||||
|
public abstract event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
||||||
|
|
||||||
|
public abstract void Play(string file);
|
||||||
|
public abstract void Stop();
|
||||||
|
public abstract void Dispose();
|
||||||
|
}
|
||||||
|
}
|
@@ -1,12 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Media;
|
using System.Media;
|
||||||
|
using TweetLib.Audio.Utils;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Notification.Sound{
|
namespace TweetLib.Audio.Impl{
|
||||||
sealed class SoundPlayerImplFallback : ISoundNotificationPlayer{
|
sealed class SoundPlayerImplFallback : AudioPlayer{
|
||||||
string ISoundNotificationPlayer.SupportedFormats => "*.wav";
|
public override string SupportedFormats => "*.wav";
|
||||||
|
|
||||||
public event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
public override event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
||||||
|
|
||||||
private readonly SoundPlayer player;
|
private readonly SoundPlayer player;
|
||||||
private bool ignorePlaybackError;
|
private bool ignorePlaybackError;
|
||||||
@@ -17,7 +18,7 @@ namespace TweetDuck.Core.Notification.Sound{
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISoundNotificationPlayer.Play(string file){
|
public override void Play(string file){
|
||||||
if (player.SoundLocation != file){
|
if (player.SoundLocation != file){
|
||||||
player.SoundLocation = file;
|
player.SoundLocation = file;
|
||||||
ignorePlaybackError = false;
|
ignorePlaybackError = false;
|
||||||
@@ -34,11 +35,11 @@ namespace TweetDuck.Core.Notification.Sound{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISoundNotificationPlayer.Stop(){
|
public override void Stop(){
|
||||||
player.Stop();
|
player.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void IDisposable.Dispose(){
|
public override void Dispose(){
|
||||||
player.Dispose();
|
player.Dispose();
|
||||||
}
|
}
|
||||||
|
|
@@ -1,13 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using TweetDuck.Core.Utils;
|
using TweetLib.Audio.Utils;
|
||||||
using WMPLib;
|
using WMPLib;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Notification.Sound{
|
namespace TweetLib.Audio.Impl{
|
||||||
sealed class SoundPlayerImplWMP : ISoundNotificationPlayer{
|
sealed class SoundPlayerImplWMP : AudioPlayer{
|
||||||
string ISoundNotificationPlayer.SupportedFormats => "*.wav;*.mp3;*.mp2;*.m4a;*.mid;*.midi;*.rmi;*.wma;*.aif;*.aifc;*.aiff;*.snd;*.au";
|
public override string SupportedFormats => "*.wav;*.mp3;*.mp2;*.m4a;*.mid;*.midi;*.rmi;*.wma;*.aif;*.aifc;*.aiff;*.snd;*.au";
|
||||||
|
|
||||||
public event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
public override event EventHandler<PlaybackErrorEventArgs> PlaybackError;
|
||||||
|
|
||||||
private readonly WindowsMediaPlayer player;
|
private readonly WindowsMediaPlayer player;
|
||||||
private bool wasTryingToPlay;
|
private bool wasTryingToPlay;
|
||||||
@@ -29,7 +29,7 @@ namespace TweetDuck.Core.Notification.Sound{
|
|||||||
player.MediaError += player_MediaError;
|
player.MediaError += player_MediaError;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISoundNotificationPlayer.Play(string file){
|
public override void Play(string file){
|
||||||
wasTryingToPlay = true;
|
wasTryingToPlay = true;
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@@ -48,7 +48,7 @@ namespace TweetDuck.Core.Notification.Sound{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISoundNotificationPlayer.Stop(){
|
public override void Stop(){
|
||||||
try{
|
try{
|
||||||
player.controls.stop();
|
player.controls.stop();
|
||||||
}catch{
|
}catch{
|
||||||
@@ -56,7 +56,7 @@ namespace TweetDuck.Core.Notification.Sound{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IDisposable.Dispose(){
|
public override void Dispose(){
|
||||||
player.close();
|
player.close();
|
||||||
Marshal.ReleaseComObject(player);
|
Marshal.ReleaseComObject(player);
|
||||||
}
|
}
|
35
lib/TweetLib.Audio/Properties/AssemblyInfo.cs
Normal file
35
lib/TweetLib.Audio/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("TweetDuck Audio Library")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("TweetDuck Audio Library")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("e9e1fd1b-f480-45b7-9970-be2ecfd309ac")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
50
lib/TweetLib.Audio/TweetLib.Audio.csproj
Normal file
50
lib/TweetLib.Audio/TweetLib.Audio.csproj
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{E9E1FD1B-F480-45B7-9970-BE2ECFD309AC}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>TweetLib.Audio</RootNamespace>
|
||||||
|
<AssemblyName>TweetLib.Audio</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<OutputPath>bin\x86\Release\</OutputPath>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="AudioPlayer.cs" />
|
||||||
|
<Compile Include="Utils\NativeCoreAudio.cs" />
|
||||||
|
<Compile Include="Utils\PlaybackErrorEventArgs.cs" />
|
||||||
|
<Compile Include="Impl\SoundPlayerImplFallback.cs" />
|
||||||
|
<Compile Include="Impl\SoundPlayerImplWMP.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<COMReference Include="WMPLib">
|
||||||
|
<Guid>{6BF52A50-394A-11D3-B153-00C04F79FAA6}</Guid>
|
||||||
|
<VersionMajor>1</VersionMajor>
|
||||||
|
<VersionMinor>0</VersionMinor>
|
||||||
|
<Lcid>0</Lcid>
|
||||||
|
<WrapperTool>tlbimp</WrapperTool>
|
||||||
|
<Isolated>False</Isolated>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</COMReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
@@ -4,7 +4,7 @@ using System.Diagnostics.CodeAnalysis;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Utils{
|
namespace TweetLib.Audio.Utils{
|
||||||
static class NativeCoreAudio{
|
static class NativeCoreAudio{
|
||||||
private const int EDATAFLOW_RENDER = 0;
|
private const int EDATAFLOW_RENDER = 0;
|
||||||
private const int EROLE_MULTIMEDIA = 1;
|
private const int EROLE_MULTIMEDIA = 1;
|
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace TweetDuck.Core.Notification.Sound{
|
namespace TweetLib.Audio.Utils{
|
||||||
sealed class PlaybackErrorEventArgs : EventArgs{
|
public sealed class PlaybackErrorEventArgs : EventArgs{
|
||||||
public string Message { get; }
|
public string Message { get; }
|
||||||
public bool Ignore { get; set; }
|
public bool Ignore { get; set; }
|
||||||
|
|
@@ -14,7 +14,6 @@ namespace UnitTests.Core.Utils{
|
|||||||
foreach(var pos in Positions){
|
foreach(var pos in Positions){
|
||||||
Assert.AreEqual(string.Empty, new InjectedHTML(pos, "b", "b").Inject(string.Empty));
|
Assert.AreEqual(string.Empty, new InjectedHTML(pos, "b", "b").Inject(string.Empty));
|
||||||
Assert.AreEqual("aaaa", new InjectedHTML(pos, "b", "b").Inject("aaaa"));
|
Assert.AreEqual("aaaa", new InjectedHTML(pos, "b", "b").Inject("aaaa"));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user