mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-08-16 06:31:42 +02:00
Configuration
Core
Bridge
Controls
Handling
Management
Notification
Other
Analytics
Settings
FormAbout.Designer.cs
FormAbout.cs
FormGuide.Designer.cs
FormGuide.cs
FormMessage.Designer.cs
FormMessage.cs
FormPlugins.Designer.cs
FormPlugins.cs
FormSettings.Designer.cs
FormSettings.cs
TrayIcon.Designer.cs
TrayIcon.cs
Utils
FormBrowser.Designer.cs
FormBrowser.cs
FormBrowser.resx
FormManager.cs
TweetDeckBrowser.cs
Data
Plugins
Properties
Resources
Updates
bld
lib
subprocess
video
.gitattributes
.gitignore
LICENSE.md
Program.cs
README.md
Reporter.cs
TweetDuck.csproj
TweetDuck.sln
TweetDuck.sln.DotSettings
packages.config
113 lines
4.0 KiB
C#
113 lines
4.0 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using TweetDuck.Configuration;
|
|
using TweetDuck.Plugins;
|
|
using TweetDuck.Plugins.Controls;
|
|
|
|
namespace TweetDuck.Core.Other{
|
|
sealed partial class FormPlugins : Form, FormManager.IAppDialog{
|
|
private static UserConfig Config => Program.Config.User;
|
|
|
|
private readonly PluginManager pluginManager;
|
|
|
|
public FormPlugins(){
|
|
InitializeComponent();
|
|
|
|
Text = Program.BrandName+" Plugins";
|
|
}
|
|
|
|
public FormPlugins(PluginManager pluginManager) : this(){
|
|
this.pluginManager = pluginManager;
|
|
|
|
if (!Config.PluginsWindowSize.IsEmpty){
|
|
Size targetSize = Config.PluginsWindowSize;
|
|
Size = new Size(Math.Max(MinimumSize.Width, targetSize.Width), Math.Max(MinimumSize.Height, targetSize.Height));
|
|
}
|
|
|
|
Shown += (sender, args) => {
|
|
ReloadPluginList();
|
|
};
|
|
|
|
FormClosed += (sender, args) => {
|
|
Config.PluginsWindowSize = Size;
|
|
Config.Save();
|
|
};
|
|
|
|
ResizeEnd += (sender, args) => {
|
|
timerLayout.Start();
|
|
};
|
|
}
|
|
|
|
private int GetPluginOrderIndex(Plugin plugin){
|
|
return !plugin.CanRun ? 0 : pluginManager.Config.IsEnabled(plugin) ? 1 : 2;
|
|
}
|
|
|
|
private void ReloadPluginList(){
|
|
flowLayoutPlugins.Controls.Clear();
|
|
flowLayoutPlugins.SuspendLayout();
|
|
|
|
foreach(Plugin plugin in pluginManager.Plugins.OrderBy(GetPluginOrderIndex).ThenBy(plugin => plugin.Name)){
|
|
flowLayoutPlugins.Controls.Add(new PluginControl(pluginManager, plugin));
|
|
|
|
flowLayoutPlugins.Controls.Add(new Panel{
|
|
BackColor = Color.DimGray,
|
|
Margin = new Padding(0),
|
|
Size = new Size(1, 1)
|
|
});
|
|
}
|
|
|
|
flowLayoutPlugins.ResumeLayout(true);
|
|
|
|
timerLayout_Tick(null, EventArgs.Empty);
|
|
timerLayout.Start();
|
|
}
|
|
|
|
private void timerLayout_Tick(object sender, EventArgs e){
|
|
timerLayout.Stop();
|
|
|
|
// stupid WinForms scrollbars and panels
|
|
Padding = new Padding(Padding.Left, Padding.Top, Padding.Right+1, Padding.Bottom+1);
|
|
Padding = new Padding(Padding.Left, Padding.Top, Padding.Right-1, Padding.Bottom-1);
|
|
}
|
|
|
|
public void flowLayoutPlugins_Resize(object sender, EventArgs e){
|
|
Control lastPlugin = flowLayoutPlugins.Controls.OfType<PluginControl>().LastOrDefault();
|
|
|
|
if (lastPlugin == null){
|
|
return;
|
|
}
|
|
|
|
bool showScrollBar = lastPlugin.Location.Y+lastPlugin.Height+1 >= flowLayoutPlugins.Height;
|
|
int horizontalOffset = showScrollBar ? SystemInformation.VerticalScrollBarWidth : 0;
|
|
|
|
flowLayoutPlugins.AutoScroll = showScrollBar;
|
|
flowLayoutPlugins.VerticalScroll.Visible = showScrollBar;
|
|
|
|
foreach(Control control in flowLayoutPlugins.Controls){
|
|
control.Width = flowLayoutPlugins.Width-control.Margin.Horizontal-horizontalOffset;
|
|
}
|
|
|
|
flowLayoutPlugins.Controls[flowLayoutPlugins.Controls.Count-1].Visible = !showScrollBar;
|
|
flowLayoutPlugins.Focus();
|
|
}
|
|
|
|
private void btnOpenFolder_Click(object sender, EventArgs e){
|
|
using(Process.Start("explorer.exe", '"'+pluginManager.PathCustomPlugins+'"')){}
|
|
}
|
|
|
|
private void btnReload_Click(object sender, EventArgs e){
|
|
if (FormMessage.Warning("Reloading Plugins", "This will also reload the browser window. Do you want to proceed?", FormMessage.Yes, FormMessage.No)){
|
|
pluginManager.Reload();
|
|
ReloadPluginList();
|
|
}
|
|
}
|
|
|
|
private void btnClose_Click(object sender, EventArgs e){
|
|
Close();
|
|
}
|
|
}
|
|
}
|