Merge branch 'master' into tweaks

This commit is contained in:
Michael Delpach 2020-06-13 00:57:47 +08:00
commit e0f2812f3d
17 changed files with 588 additions and 168 deletions

View file

@ -38,13 +38,7 @@ public class GradientInfo
public List<GradientStop> Colors { get; set; }
public bool IsValid
{
get
{
return Colors != null && Colors.Count >= 2 && Colors.Any(x => x.Location == 0f) && Colors.Any(x => x.Location == 100f);
}
}
public bool IsValid => Colors != null && Colors.Count > 0;
public GradientInfo()
{
@ -52,6 +46,21 @@ public GradientInfo()
Colors = new List<GradientStop>();
}
public void Sort()
{
Colors.Sort((x, y) => x.Location.CompareTo(y.Location));
}
public void Reverse()
{
Colors.Reverse();
foreach (GradientStop color in Colors)
{
color.Location = 100 - color.Location;
}
}
public void Draw(Graphics g, Rectangle rect)
{
if (IsValid)
@ -71,10 +80,21 @@ public void Draw(Graphics g, Rectangle rect)
public ColorBlend GetColorBlend()
{
List<GradientStop> colors = new List<GradientStop>(Colors.OrderBy(x => x.Location));
if (!colors.Any(x => x.Location == 0))
{
colors.Insert(0, new GradientStop(colors[0].Color, 0f));
}
if (!colors.Any(x => x.Location == 100))
{
colors.Add(new GradientStop(colors[colors.Count - 1].Color, 100f));
}
ColorBlend colorBlend = new ColorBlend();
IEnumerable<GradientStop> gradient = Colors.OrderBy(x => x.Location);
colorBlend.Colors = gradient.Select(x => x.Color).ToArray();
colorBlend.Positions = gradient.Select(x => x.Location / 100).ToArray();
colorBlend.Colors = colors.Select(x => x.Color).ToArray();
colorBlend.Positions = colors.Select(x => x.Location / 100).ToArray();
return colorBlend;
}

View file

@ -32,7 +32,7 @@ namespace ShareX.HelpersLib
public class GradientStop
{
[DefaultValue(typeof(Color), "Black"), Editor(typeof(MyColorEditor), typeof(UITypeEditor)), TypeConverter(typeof(MyColorConverter))]
public Color Color { get; set; }
public Color Color { get; set; } = Color.Black;
private float location;
@ -51,7 +51,6 @@ public float Location
public GradientStop()
{
this.ApplyDefaultPropertyValues();
}
public GradientStop(Color color, float offset)

View file

@ -28,9 +28,11 @@ protected override void Dispose(bool disposing)
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GradientPickerForm));
this.lvGradientPoints = new System.Windows.Forms.ListView();
this.chLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ilColors = new System.Windows.Forms.ImageList(this.components);
this.btnAdd = new System.Windows.Forms.Button();
this.btnRemove = new System.Windows.Forms.Button();
this.nudLocation = new System.Windows.Forms.NumericUpDown();
@ -41,6 +43,7 @@ private void InitializeComponent()
this.btnCancel = new System.Windows.Forms.Button();
this.pbPreview = new System.Windows.Forms.PictureBox();
this.lblPreview = new System.Windows.Forms.Label();
this.btnReverse = new System.Windows.Forms.Button();
this.cbtnCurrentColor = new ShareX.HelpersLib.ColorButton();
((System.ComponentModel.ISupportInitialize)(this.nudLocation)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbPreview)).BeginInit();
@ -55,6 +58,7 @@ private void InitializeComponent()
this.lvGradientPoints.HideSelection = false;
resources.ApplyResources(this.lvGradientPoints, "lvGradientPoints");
this.lvGradientPoints.Name = "lvGradientPoints";
this.lvGradientPoints.SmallImageList = this.ilColors;
this.lvGradientPoints.UseCompatibleStateImageBehavior = false;
this.lvGradientPoints.View = System.Windows.Forms.View.Details;
this.lvGradientPoints.SelectedIndexChanged += new System.EventHandler(this.lvGradientPoints_SelectedIndexChanged);
@ -64,6 +68,12 @@ private void InitializeComponent()
//
resources.ApplyResources(this.chLocation, "chLocation");
//
// ilColors
//
this.ilColors.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
resources.ApplyResources(this.ilColors, "ilColors");
this.ilColors.TransparentColor = System.Drawing.Color.Transparent;
//
// btnAdd
//
resources.ApplyResources(this.btnAdd, "btnAdd");
@ -130,6 +140,13 @@ private void InitializeComponent()
resources.ApplyResources(this.lblPreview, "lblPreview");
this.lblPreview.Name = "lblPreview";
//
// btnReverse
//
resources.ApplyResources(this.btnReverse, "btnReverse");
this.btnReverse.Name = "btnReverse";
this.btnReverse.UseVisualStyleBackColor = true;
this.btnReverse.Click += new System.EventHandler(this.btnReverse_Click);
//
// cbtnCurrentColor
//
this.cbtnCurrentColor.Color = System.Drawing.Color.White;
@ -144,6 +161,7 @@ private void InitializeComponent()
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.btnCancel;
this.Controls.Add(this.btnReverse);
this.Controls.Add(this.pbPreview);
this.Controls.Add(this.lblPreview);
this.Controls.Add(this.btnCancel);
@ -181,5 +199,7 @@ private void InitializeComponent()
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.PictureBox pbPreview;
private System.Windows.Forms.Label lblPreview;
private System.Windows.Forms.Button btnReverse;
private System.Windows.Forms.ImageList ilColors;
}
}

View file

@ -45,10 +45,20 @@ public GradientPickerForm(GradientInfo gradient)
cbGradientType.Items.AddRange(Helpers.GetEnumNamesProper<LinearGradientMode>());
cbGradientType.SelectedIndex = (int)Gradient.Type;
UpdateGradientList();
}
private void UpdateGradientList()
{
Gradient.Sort();
isReady = false;
lvGradientPoints.Items.Clear();
foreach (GradientStop gradientStop in Gradient.Colors)
{
AddGradientStop(gradientStop);
}
isReady = true;
UpdatePreview();
}
@ -73,77 +83,141 @@ private void UpdatePreview()
}
}
private void AddGradientStop(GradientStop gradientStop)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = string.Format(" {0:0.##}%", gradientStop.Location);
UpdateListViewItemColor(lvi, gradientStop.Color);
lvi.Tag = gradientStop;
lvGradientPoints.Items.Add(lvi);
}
private void UpdateListViewItemColor(ListViewItem lvi, Color color)
{
string argb = color.ToArgb().ToString();
if (!ilColors.Images.ContainsKey(argb))
{
ilColors.Images.Add(argb, ImageHelpers.CreateColorPickerIcon(color, new Rectangle(0, 0, 16, 16)));
}
lvi.ImageKey = argb;
}
private GradientStop GetSelectedGradientStop()
{
return GetSelectedGradientStop(out _);
}
private GradientStop GetSelectedGradientStop(out ListViewItem lvi)
{
if (lvGradientPoints.SelectedItems.Count > 0)
{
lvi = lvGradientPoints.SelectedItems[0];
return lvi.Tag as GradientStop;
}
lvi = null;
return null;
}
private ListViewItem FindListViewItem(GradientStop gradientStop)
{
foreach (ListViewItem lvi in lvGradientPoints.Items)
{
GradientStop itemGradientstop = lvi.Tag as GradientStop;
if (itemGradientstop == gradientStop)
{
return lvi;
}
}
return null;
}
private ListViewItem SelectGradientStop(GradientStop gradientStop)
{
ListViewItem lvi = FindListViewItem(gradientStop);
if (lvi != null)
{
lvi.Selected = true;
}
return lvi;
}
private void cbGradientType_SelectedIndexChanged(object sender, EventArgs e)
{
Gradient.Type = (LinearGradientMode)cbGradientType.SelectedIndex;
UpdatePreview();
}
private void AddGradientStop(GradientStop gradientStop)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = string.Format(" {0:0.##}%", gradientStop.Location);
lvi.BackColor = gradientStop.Color;
lvi.ForeColor = ColorHelpers.VisibleColor(gradientStop.Color);
lvi.Tag = gradientStop;
lvGradientPoints.Items.Add(lvi);
}
private void btnAdd_Click(object sender, EventArgs e)
{
Color color = cbtnCurrentColor.Color;
float offset = (float)(nudLocation.Value / 100);
float offset = (float)nudLocation.Value;
GradientStop gradientStop = new GradientStop(color, offset);
Gradient.Colors.Add(gradientStop);
AddGradientStop(gradientStop);
UpdatePreview();
UpdateGradientList();
SelectGradientStop(gradientStop);
}
private void btnRemove_Click(object sender, EventArgs e)
{
if (lvGradientPoints.SelectedItems.Count > 0)
GradientStop gradientStop = GetSelectedGradientStop();
if (gradientStop != null)
{
ListViewItem lvi = lvGradientPoints.SelectedItems[0];
GradientStop gradientStop = (GradientStop)lvi.Tag;
Gradient.Colors.Remove(gradientStop);
lvGradientPoints.Items.Remove(lvi);
UpdatePreview();
UpdateGradientList();
}
}
private void btnReverse_Click(object sender, EventArgs e)
{
if (Gradient.IsValid)
{
Gradient.Reverse();
UpdateGradientList();
}
}
private void cbtnCurrentColor_ColorChanged(Color color)
{
if (lvGradientPoints.SelectedItems.Count > 0)
GradientStop gradientStop = GetSelectedGradientStop(out ListViewItem lvi);
if (gradientStop != null)
{
ListViewItem lvi = lvGradientPoints.SelectedItems[0];
GradientStop gradientStop = (GradientStop)lvi.Tag;
gradientStop.Color = color;
lvi.BackColor = gradientStop.Color;
lvi.ForeColor = ColorHelpers.VisibleColor(gradientStop.Color);
UpdateListViewItemColor(lvi, gradientStop.Color);
UpdatePreview();
}
}
private void nudLocation_ValueChanged(object sender, EventArgs e)
{
if (lvGradientPoints.SelectedItems.Count > 0)
if (isReady)
{
ListViewItem lvi = lvGradientPoints.SelectedItems[0];
GradientStop gradientStop = (GradientStop)lvi.Tag;
gradientStop.Location = (float)nudLocation.Value;
lvi.Text = string.Format(" {0:0.##}%", gradientStop.Location);
UpdatePreview();
GradientStop gradientStop = GetSelectedGradientStop(out ListViewItem lvi);
if (gradientStop != null)
{
gradientStop.Location = (float)nudLocation.Value;
UpdateGradientList();
SelectGradientStop(gradientStop);
}
}
}
private void lvGradientPoints_SelectedIndexChanged(object sender, EventArgs e)
{
if (lvGradientPoints.SelectedItems.Count > 0)
GradientStop gradientStop = GetSelectedGradientStop();
if (gradientStop != null)
{
ListViewItem lvi = lvGradientPoints.SelectedItems[0];
GradientStop gradientStop = (GradientStop)lvi.Tag;
isReady = false;
cbtnCurrentColor.Color = gradientStop.Color;
nudLocation.SetValue((decimal)gradientStop.Location);
isReady = true;
}
}

View file

@ -126,13 +126,19 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lvGradientPoints.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 112</value>
<value>128, 8</value>
</data>
<data name="lvGradientPoints.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 160</value>
</data>
<metadata name="ilColors.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="ilColors.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="lvGradientPoints.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>8</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Name" xml:space="preserve">
<value>lvGradientPoints</value>
@ -144,16 +150,20 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lvGradientPoints.ZOrder" xml:space="preserve">
<value>11</value>
<value>12</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnAdd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnAdd.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 112</value>
<value>8, 8</value>
</data>
<data name="btnAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 23</value>
</data>
<data name="btnAdd.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>2</value>
</data>
<data name="btnAdd.Text" xml:space="preserve">
<value>Add</value>
@ -168,16 +178,19 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnAdd.ZOrder" xml:space="preserve">
<value>9</value>
<value>10</value>
</data>
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 136</value>
<value>8, 32</value>
</data>
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 23</value>
</data>
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>3</value>
</data>
<data name="btnRemove.Text" xml:space="preserve">
<value>Remove</value>
@ -192,18 +205,17 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnRemove.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="nudLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>64, 188</value>
<value>8, 144</value>
</data>
<data name="nudLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 20</value>
<value>112, 20</value>
</data>
<data name="nudLocation.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>7</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="nudLocation.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
@ -217,13 +229,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;nudLocation.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="lblLocation.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblLocation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 192</value>
<value>5, 128</value>
</data>
<data name="lblLocation.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 13</value>
@ -244,16 +259,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblLocation.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="cbGradientType.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 84</value>
<value>88, 176</value>
</data>
<data name="cbGradientType.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 21</value>
</data>
<data name="cbGradientType.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<value>10</value>
</data>
<data name="&gt;&gt;cbGradientType.Name" xml:space="preserve">
<value>cbGradientType</value>
@ -265,19 +280,22 @@
<value>$this</value>
</data>
<data name="&gt;&gt;cbGradientType.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="lblGradientType.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblGradientType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblGradientType.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 88</value>
<value>5, 180</value>
</data>
<data name="lblGradientType.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 13</value>
</data>
<data name="lblGradientType.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<value>9</value>
</data>
<data name="lblGradientType.Text" xml:space="preserve">
<value>Gradient type:</value>
@ -292,7 +310,10 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblGradientType.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 280</value>
@ -301,7 +322,7 @@
<value>96, 23</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
<value>0</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>OK</value>
@ -316,7 +337,10 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="btnCancel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 280</value>
@ -325,7 +349,7 @@
<value>96, 23</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
<value>1</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
@ -340,10 +364,13 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="pbPreview.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pbPreview.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 26</value>
<value>8, 224</value>
</data>
<data name="pbPreview.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 50</value>
@ -361,19 +388,22 @@
<value>$this</value>
</data>
<data name="&gt;&gt;pbPreview.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="lblPreview.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblPreview.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblPreview.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 8</value>
<value>5, 206</value>
</data>
<data name="lblPreview.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 13</value>
</data>
<data name="lblPreview.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
<value>11</value>
</data>
<data name="lblPreview.Text" xml:space="preserve">
<value>Preview:</value>
@ -388,16 +418,46 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblPreview.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="btnReverse.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnReverse.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 56</value>
</data>
<data name="btnReverse.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 23</value>
</data>
<data name="btnReverse.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="btnReverse.Text" xml:space="preserve">
<value>Reverse</value>
</data>
<data name="&gt;&gt;btnReverse.Name" xml:space="preserve">
<value>btnReverse</value>
</data>
<data name="&gt;&gt;btnReverse.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnReverse.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnReverse.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cbtnCurrentColor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbtnCurrentColor.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 160</value>
<value>8, 96</value>
</data>
<data name="cbtnCurrentColor.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 24</value>
</data>
<data name="cbtnCurrentColor.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>5</value>
</data>
<data name="cbtnCurrentColor.Text" xml:space="preserve">
<value>Color</value>
@ -406,13 +466,13 @@
<value>cbtnCurrentColor</value>
</data>
<data name="&gt;&gt;cbtnCurrentColor.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ColorButton, ShareX.HelpersLib, Version=13.0.2.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.ColorButton, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;cbtnCurrentColor.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;cbtnCurrentColor.ZOrder" xml:space="preserve">
<value>10</value>
<value>11</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
@ -435,6 +495,12 @@
<data name="&gt;&gt;chLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ilColors.Name" xml:space="preserve">
<value>ilColors</value>
</data>
<data name="&gt;&gt;ilColors.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>GradientPickerForm</value>
</data>

View file

@ -54,6 +54,8 @@ private void InitializeComponent()
this.btnOK = new System.Windows.Forms.Button();
this.btnUploadImage = new System.Windows.Forms.Button();
this.btnRefresh = new System.Windows.Forms.Button();
this.btnDuplicatePreset = new System.Windows.Forms.Button();
this.lblPresets = new System.Windows.Forms.Label();
this.cmsLoadImage.SuspendLayout();
this.SuspendLayout();
//
@ -131,6 +133,7 @@ private void InitializeComponent()
this.eiImageEffects.DefaultFileName = null;
this.eiImageEffects.Name = "eiImageEffects";
this.eiImageEffects.ObjectType = null;
this.eiImageEffects.SerializationBinder = null;
this.eiImageEffects.ExportRequested += new ShareX.HelpersLib.ExportImportControl.ExportEventHandler(this.eiImageEffects_ExportRequested);
this.eiImageEffects.ImportRequested += new ShareX.HelpersLib.ExportImportControl.ImportEventHandler(this.eiImageEffects_ImportRequested);
//
@ -244,12 +247,26 @@ private void InitializeComponent()
this.btnRefresh.UseVisualStyleBackColor = true;
this.btnRefresh.Click += new System.EventHandler(this.BtnRefresh_Click);
//
// btnDuplicatePreset
//
resources.ApplyResources(this.btnDuplicatePreset, "btnDuplicatePreset");
this.btnDuplicatePreset.Name = "btnDuplicatePreset";
this.btnDuplicatePreset.UseVisualStyleBackColor = true;
this.btnDuplicatePreset.Click += new System.EventHandler(this.btnDuplicatePreset_Click);
//
// lblPresets
//
resources.ApplyResources(this.lblPresets, "lblPresets");
this.lblPresets.Name = "lblPresets";
//
// ImageEffectsForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.btnClose;
this.Controls.Add(this.lblPresets);
this.Controls.Add(this.btnDuplicatePreset);
this.Controls.Add(this.btnRefresh);
this.Controls.Add(this.btnUploadImage);
this.Controls.Add(this.btnOK);
@ -264,11 +281,11 @@ private void InitializeComponent()
this.Controls.Add(this.btnSaveImage);
this.Controls.Add(this.btnDuplicate);
this.Controls.Add(this.btnClear);
this.Controls.Add(this.pbResult);
this.Controls.Add(this.btnRemove);
this.Controls.Add(this.btnAdd);
this.Controls.Add(this.pgSettings);
this.Controls.Add(this.lvEffects);
this.Controls.Add(this.pbResult);
this.Name = "ImageEffectsForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.Shown += new System.EventHandler(this.ImageEffectsForm_Shown);
@ -304,6 +321,8 @@ private void InitializeComponent()
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnUploadImage;
private System.Windows.Forms.Button btnRefresh;
private System.Windows.Forms.Button btnDuplicatePreset;
private System.Windows.Forms.Label lblPresets;
}
}

View file

@ -87,10 +87,7 @@ public void EditorMode()
protected void OnImageProcessRequested(Bitmap bmp)
{
if (ImageProcessRequested != null)
{
ImageProcessRequested(bmp);
}
ImageProcessRequested?.Invoke(bmp);
}
private void AddAllEffectsToContextMenu()
@ -260,7 +257,7 @@ private void UpdatePreview()
private void UpdateControlStates()
{
btnRemovePreset.Enabled = cbPresets.Enabled = txtPresetName.Enabled = btnAdd.Enabled = cbPresets.SelectedIndex > -1;
btnRemovePreset.Enabled = btnDuplicatePreset.Enabled = cbPresets.Enabled = txtPresetName.Enabled = btnAdd.Enabled = cbPresets.SelectedIndex > -1;
btnRemove.Enabled = btnDuplicate.Enabled = lvEffects.SelectedItems.Count > 0;
btnClear.Enabled = lvEffects.Items.Count > 0;
}
@ -452,6 +449,17 @@ private void btnRemovePreset_Click(object sender, EventArgs e)
}
}
private void btnDuplicatePreset_Click(object sender, EventArgs e)
{
ImageEffectPreset preset = GetSelectedPreset();
if (preset != null)
{
ImageEffectPreset presetClone = preset.Copy();
AddPreset(presetClone);
}
}
private void cbPresets_SelectedIndexChanged(object sender, EventArgs e)
{
if (!ignorePresetsSelectedIndexChanged)

View file

@ -130,7 +130,7 @@
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pgSettings.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
<value>15</value>
</data>
<data name="&gt;&gt;pgSettings.Name" xml:space="preserve">
<value>pgSettings</value>
@ -142,16 +142,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;pgSettings.ZOrder" xml:space="preserve">
<value>19</value>
<value>20</value>
</data>
<data name="btnAdd.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 40</value>
<value>408, 40</value>
</data>
<data name="btnAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 24</value>
</data>
<data name="btnAdd.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<value>9</value>
</data>
<data name="btnAdd.Text" xml:space="preserve">
<value>Add</value>
@ -166,7 +166,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnAdd.ZOrder" xml:space="preserve">
<value>18</value>
<value>19</value>
</data>
<data name="lvEffects.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left</value>
@ -181,28 +181,28 @@
<value>168, 424</value>
</data>
<data name="lvEffects.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
<value>14</value>
</data>
<data name="&gt;&gt;lvEffects.Name" xml:space="preserve">
<value>lvEffects</value>
</data>
<data name="&gt;&gt;lvEffects.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvEffects.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvEffects.ZOrder" xml:space="preserve">
<value>20</value>
<value>21</value>
</data>
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>120, 40</value>
<value>520, 40</value>
</data>
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 24</value>
</data>
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<value>10</value>
</data>
<data name="btnRemove.Text" xml:space="preserve">
<value>Remove</value>
@ -217,16 +217,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnRemove.ZOrder" xml:space="preserve">
<value>17</value>
<value>18</value>
</data>
<data name="btnClear.Location" type="System.Drawing.Point, System.Drawing">
<value>344, 40</value>
<value>744, 40</value>
</data>
<data name="btnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 24</value>
</data>
<data name="btnClear.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
<value>12</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>Clear</value>
@ -241,16 +241,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnClear.ZOrder" xml:space="preserve">
<value>15</value>
<value>17</value>
</data>
<data name="btnDuplicate.Location" type="System.Drawing.Point, System.Drawing">
<value>232, 40</value>
<value>632, 40</value>
</data>
<data name="btnDuplicate.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 24</value>
</data>
<data name="btnDuplicate.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
<value>11</value>
</data>
<data name="btnDuplicate.Text" xml:space="preserve">
<value>Duplicate</value>
@ -265,7 +265,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnDuplicate.ZOrder" xml:space="preserve">
<value>14</value>
<value>16</value>
</data>
<data name="btnSaveImage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@ -280,7 +280,7 @@
<value>120, 24</value>
</data>
<data name="btnSaveImage.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
<value>19</value>
</data>
<data name="btnSaveImage.Text" xml:space="preserve">
<value>Save image...</value>
@ -298,7 +298,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnSaveImage.ZOrder" xml:space="preserve">
<value>13</value>
<value>15</value>
</data>
<data name="eiImageEffects.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@ -310,19 +310,19 @@
<value>192, 24</value>
</data>
<data name="eiImageEffects.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
<value>17</value>
</data>
<data name="&gt;&gt;eiImageEffects.Name" xml:space="preserve">
<value>eiImageEffects</value>
</data>
<data name="&gt;&gt;eiImageEffects.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=13.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;eiImageEffects.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;eiImageEffects.ZOrder" xml:space="preserve">
<value>12</value>
<value>14</value>
</data>
<data name="pbResult.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
@ -334,19 +334,19 @@
<value>432, 424</value>
</data>
<data name="pbResult.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
<value>16</value>
</data>
<data name="&gt;&gt;pbResult.Name" xml:space="preserve">
<value>pbResult</value>
</data>
<data name="&gt;&gt;pbResult.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyPictureBox, ShareX.HelpersLib, Version=13.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MyPictureBox, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pbResult.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pbResult.ZOrder" xml:space="preserve">
<value>16</value>
<value>22</value>
</data>
<metadata name="cmsEffects.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
@ -394,7 +394,7 @@
<value>120, 24</value>
</data>
<data name="mbLoadImage.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
<value>18</value>
</data>
<data name="mbLoadImage.Text" xml:space="preserve">
<value>Load image</value>
@ -406,22 +406,22 @@
<value>mbLoadImage</value>
</data>
<data name="&gt;&gt;mbLoadImage.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=13.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.MenuButton, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;mbLoadImage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;mbLoadImage.ZOrder" xml:space="preserve">
<value>11</value>
<value>13</value>
</data>
<data name="btnAddPreset.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
<value>408, 8</value>
</data>
<data name="btnAddPreset.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 23</value>
<value>136, 24</value>
</data>
<data name="btnAddPreset.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>4</value>
</data>
<data name="btnAddPreset.Text" xml:space="preserve">
<value>New preset</value>
@ -436,16 +436,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnAddPreset.ZOrder" xml:space="preserve">
<value>10</value>
<value>12</value>
</data>
<data name="btnRemovePreset.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 8</value>
<value>552, 8</value>
</data>
<data name="btnRemovePreset.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 23</value>
<value>136, 24</value>
</data>
<data name="btnRemovePreset.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>5</value>
</data>
<data name="btnRemovePreset.Text" xml:space="preserve">
<value>Remove preset</value>
@ -460,16 +460,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnRemovePreset.ZOrder" xml:space="preserve">
<value>9</value>
<value>11</value>
</data>
<data name="cbPresets.Location" type="System.Drawing.Point, System.Drawing">
<value>296, 9</value>
<value>104, 10</value>
</data>
<data name="cbPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 21</value>
<value>296, 21</value>
</data>
<data name="cbPresets.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>3</value>
</data>
<data name="&gt;&gt;cbPresets.Name" xml:space="preserve">
<value>cbPresets</value>
@ -481,19 +481,19 @@
<value>$this</value>
</data>
<data name="&gt;&gt;cbPresets.ZOrder" xml:space="preserve">
<value>8</value>
<value>10</value>
</data>
<data name="lblPresetName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblPresetName.Location" type="System.Drawing.Point, System.Drawing">
<value>608, 13</value>
<value>5, 46</value>
</data>
<data name="lblPresetName.Size" type="System.Drawing.Size, System.Drawing">
<value>38, 13</value>
</data>
<data name="lblPresetName.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>7</value>
</data>
<data name="lblPresetName.Text" xml:space="preserve">
<value>Name:</value>
@ -508,19 +508,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblPresetName.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="txtPresetName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
<value>9</value>
</data>
<data name="txtPresetName.Location" type="System.Drawing.Point, System.Drawing">
<value>672, 9</value>
<value>104, 42</value>
</data>
<data name="txtPresetName.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 20</value>
<value>296, 20</value>
</data>
<data name="txtPresetName.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
<value>8</value>
</data>
<data name="&gt;&gt;txtPresetName.Name" xml:space="preserve">
<value>txtPresetName</value>
@ -532,7 +529,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtPresetName.ZOrder" xml:space="preserve">
<value>6</value>
<value>8</value>
</data>
<data name="btnClose.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
@ -559,7 +556,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>5</value>
<value>7</value>
</data>
<data name="btnOK.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
@ -589,7 +586,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>4</value>
<value>6</value>
</data>
<data name="btnUploadImage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@ -601,7 +598,7 @@
<value>120, 24</value>
</data>
<data name="btnUploadImage.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
<value>20</value>
</data>
<data name="btnUploadImage.Text" xml:space="preserve">
<value>Upload image</value>
@ -619,16 +616,16 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnUploadImage.ZOrder" xml:space="preserve">
<value>3</value>
<value>5</value>
</data>
<data name="btnRefresh.Location" type="System.Drawing.Point, System.Drawing">
<value>456, 40</value>
<value>856, 40</value>
</data>
<data name="btnRefresh.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 24</value>
</data>
<data name="btnRefresh.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
<value>13</value>
</data>
<data name="btnRefresh.Text" xml:space="preserve">
<value>Refresh</value>
@ -643,7 +640,58 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnRefresh.ZOrder" xml:space="preserve">
<value>0</value>
<value>4</value>
</data>
<data name="btnDuplicatePreset.Location" type="System.Drawing.Point, System.Drawing">
<value>696, 8</value>
</data>
<data name="btnDuplicatePreset.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 24</value>
</data>
<data name="btnDuplicatePreset.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="btnDuplicatePreset.Text" xml:space="preserve">
<value>Duplicate preset</value>
</data>
<data name="&gt;&gt;btnDuplicatePreset.Name" xml:space="preserve">
<value>btnDuplicatePreset</value>
</data>
<data name="&gt;&gt;btnDuplicatePreset.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnDuplicatePreset.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnDuplicatePreset.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="lblPresets.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblPresets.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 14</value>
</data>
<data name="lblPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 13</value>
</data>
<data name="lblPresets.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblPresets.Text" xml:space="preserve">
<value>Presets:</value>
</data>
<data name="&gt;&gt;lblPresets.Name" xml:space="preserve">
<value>lblPresets</value>
</data>
<data name="&gt;&gt;lblPresets.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblPresets.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lblPresets.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>

View file

@ -52,7 +52,8 @@ public override GenericUploader CreateUploader(UploadersConfig config, TaskRefer
{
IsPublic = config.GoogleDriveIsPublic,
DirectLink = config.GoogleDriveDirectLink,
FolderID = config.GoogleDriveUseFolder ? config.GoogleDriveFolderID : null
FolderID = config.GoogleDriveUseFolder ? config.GoogleDriveFolderID : null,
DriveID = config.GoogleDriveSelectedDrive?.id
};
}
@ -75,6 +76,13 @@ public sealed class GoogleDrive : FileUploader, IOAuth2
public bool IsPublic { get; set; }
public bool DirectLink { get; set; }
public string FolderID { get; set; }
public string DriveID { get; set; }
public static GoogleDriveSharedDrive MyDrive = new GoogleDriveSharedDrive
{
id = "", // empty defaults to user drive
name = Resources.GoogleDrive_MyDrive_My_drive
};
public GoogleDrive(OAuth2Info oauth)
{
@ -106,15 +114,22 @@ public bool GetAccessToken(string code)
return GoogleAuth.GetAccessToken(code);
}
private string GetMetadata(string name, string parentID)
private string GetMetadata(string name, string parentID, string driveID = "")
{
object metadata;
// If there's no parent folder, the drive behaves as parent
if (string.IsNullOrEmpty(parentID))
{
parentID = driveID;
}
if (!string.IsNullOrEmpty(parentID))
{
metadata = new
{
name = name,
driveId = driveID,
parents = new[]
{
parentID
@ -148,7 +163,7 @@ private void SetPermissions(string fileID, GoogleDrivePermissionRole role, Googl
string response = SendRequest(HttpMethod.POST, url, json, RequestHelpers.ContentTypeJSON, null, GoogleAuth.GetAuthHeaders());
}
public List<GoogleDriveFile> GetFolders(bool trashed = false, bool writer = true)
public List<GoogleDriveFile> GetFolders(string driveID = "", bool trashed = false, bool writer = true)
{
if (!CheckAuthorization()) return null;
@ -159,7 +174,7 @@ public List<GoogleDriveFile> GetFolders(bool trashed = false, bool writer = true
query += " and trashed = false";
}
if (writer)
if (writer && string.IsNullOrEmpty(driveID))
{
query += " and 'me' in writers";
}
@ -167,6 +182,13 @@ public List<GoogleDriveFile> GetFolders(bool trashed = false, bool writer = true
Dictionary<string, string> args = new Dictionary<string, string>();
args.Add("q", query);
args.Add("fields", "nextPageToken,files(id,name,description)");
if (!string.IsNullOrEmpty(driveID))
{
args.Add("driveId", driveID);
args.Add("corpora", "drive");
args.Add("supportsAllDrives", "true");
args.Add("includeItemsFromAllDrives", "true");
}
List<GoogleDriveFile> folders = new List<GoogleDriveFile>();
string pageToken = "";
@ -194,14 +216,45 @@ public List<GoogleDriveFile> GetFolders(bool trashed = false, bool writer = true
return folders;
}
public List<GoogleDriveSharedDrive> GetDrives()
{
if (!CheckAuthorization()) return null;
Dictionary<string, string> args = new Dictionary<string, string>();
List<GoogleDriveSharedDrive> drives = new List<GoogleDriveSharedDrive>();
string pageToken = "";
// Make sure we get all the pages of results
do
{
args["pageToken"] = pageToken;
string response = SendRequest(HttpMethod.GET, "https://www.googleapis.com/drive/v3/drives", args, GoogleAuth.GetAuthHeaders());
pageToken = "";
if (!string.IsNullOrEmpty(response))
{
GoogleDriveSharedDriveList driveList = JsonConvert.DeserializeObject<GoogleDriveSharedDriveList>(response);
if (driveList != null)
{
drives.AddRange(driveList.drives);
pageToken = driveList.nextPageToken;
}
}
}
while (!string.IsNullOrEmpty(pageToken));
return drives;
}
public override UploadResult Upload(Stream stream, string fileName)
{
if (!CheckAuthorization()) return null;
string metadata = GetMetadata(fileName, FolderID);
string metadata = GetMetadata(fileName, FolderID, DriveID);
UploadResult result = SendRequestFile("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,webViewLink,webContentLink", stream, fileName,
"file", headers: GoogleAuth.GetAuthHeaders(), contentType: "multipart/related", relatedData: metadata);
UploadResult result = SendRequestFile("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,webViewLink,webContentLink&supportsAllDrives=true",
stream, fileName, "file", headers: GoogleAuth.GetAuthHeaders(), contentType: "multipart/related", relatedData: metadata);
if (!string.IsNullOrEmpty(result.Response))
{
@ -252,4 +305,21 @@ public class GoogleDriveFileList
public List<GoogleDriveFile> files { get; set; }
public string nextPageToken { get; set; }
}
public class GoogleDriveSharedDrive
{
public string id { get; set; }
public string name { get; set; }
public override string ToString()
{
return name;
}
}
public class GoogleDriveSharedDriveList
{
public List<GoogleDriveSharedDrive> drives { get; set; }
public string nextPageToken { get; set; }
}
}

View file

@ -189,6 +189,7 @@ private void InitializeComponent()
this.cbOneDriveCreateShareableLink = new System.Windows.Forms.CheckBox();
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
this.tpGoogleDrive = new System.Windows.Forms.TabPage();
this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox();
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
this.cbGoogleDriveUseFolder = new System.Windows.Forms.CheckBox();
this.txtGoogleDriveFolderID = new System.Windows.Forms.TextBox();
@ -1727,6 +1728,7 @@ private void InitializeComponent()
// tpGoogleDrive
//
this.tpGoogleDrive.BackColor = System.Drawing.SystemColors.Window;
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveSharedDrive);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveUseFolder);
this.tpGoogleDrive.Controls.Add(this.txtGoogleDriveFolderID);
@ -1738,6 +1740,14 @@ private void InitializeComponent()
resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive");
this.tpGoogleDrive.Name = "tpGoogleDrive";
//
// cbGoogleDriveSharedDrive
//
this.cbGoogleDriveSharedDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbGoogleDriveSharedDrive.FormattingEnabled = true;
resources.ApplyResources(this.cbGoogleDriveSharedDrive, "cbGoogleDriveSharedDrive");
this.cbGoogleDriveSharedDrive.Name = "cbGoogleDriveSharedDrive";
this.cbGoogleDriveSharedDrive.SelectedIndexChanged += new System.EventHandler(this.cbGoogleDriveSharedDrive_SelectedIndexChanged);
//
// cbGoogleDriveDirectLink
//
resources.ApplyResources(this.cbGoogleDriveDirectLink, "cbGoogleDriveDirectLink");
@ -5651,5 +5661,6 @@ private void InitializeComponent()
private System.Windows.Forms.CheckBox cbGoogleCloudStorageStripExtensionImage;
private System.Windows.Forms.Label lblB2UrlPreview;
private HelpersLib.TabToTreeView tttvMain;
private System.Windows.Forms.ComboBox cbGoogleDriveSharedDrive;
}
}

View file

@ -386,6 +386,13 @@ private void LoadFileUploaderSettings()
#region Google Drive
cbGoogleDriveSharedDrive.Items.Clear();
cbGoogleDriveSharedDrive.Items.Add(GoogleDrive.MyDrive);
if (Config.GoogleDriveSelectedDrive?.id != GoogleDrive.MyDrive.id)
{
cbGoogleDriveSharedDrive.Items.Add(Config.GoogleDriveSelectedDrive);
}
if (OAuth2Info.CheckOAuth(Config.GoogleDriveOAuth2Info))
{
oauth2GoogleDrive.Status = OAuthLoginStatus.LoginSuccessful;
@ -397,6 +404,7 @@ private void LoadFileUploaderSettings()
cbGoogleDriveUseFolder.Checked = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Text = Config.GoogleDriveFolderID;
GoogleDriveSelectConfigDrive();
#endregion Google Drive
@ -1759,6 +1767,7 @@ private void txtGoogleDriveFolderID_TextChanged(object sender, EventArgs e)
private void btnGoogleDriveRefreshFolders_Click(object sender, EventArgs e)
{
GoogleDriveRefreshFolders();
GoogleDriveRefreshDrives();
}
private void lvGoogleDriveFoldersList_SelectedIndexChanged(object sender, EventArgs e)
@ -1774,6 +1783,12 @@ private void lvGoogleDriveFoldersList_SelectedIndexChanged(object sender, EventA
}
}
private void cbGoogleDriveSharedDrive_SelectedIndexChanged(object sender, EventArgs e)
{
GoogleDriveSharedDrive selectedDrive = cbGoogleDriveSharedDrive.SelectedItem as GoogleDriveSharedDrive;
Config.GoogleDriveSelectedDrive = selectedDrive;
}
#endregion Google Drive
#region puush

View file

@ -3572,6 +3572,27 @@ when you made the application key.</value>
<data name="&gt;&gt;tpOneDrive.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cbGoogleDriveSharedDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>352, 16</value>
</data>
<data name="cbGoogleDriveSharedDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 21</value>
</data>
<data name="cbGoogleDriveSharedDrive.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.Name" xml:space="preserve">
<value>cbGoogleDriveSharedDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.Parent" xml:space="preserve">
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cbGoogleDriveDirectLink.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -3585,7 +3606,7 @@ when you made the application key.</value>
<value>93, 17</value>
</data>
<data name="cbGoogleDriveDirectLink.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
<value>2</value>
</data>
<data name="cbGoogleDriveDirectLink.Text" xml:space="preserve">
<value>Use direct link</value>
@ -3600,7 +3621,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="cbGoogleDriveUseFolder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3609,13 +3630,13 @@ when you made the application key.</value>
<value>NoControl</value>
</data>
<data name="cbGoogleDriveUseFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>352, 16</value>
<value>352, 47</value>
</data>
<data name="cbGoogleDriveUseFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 17</value>
</data>
<data name="cbGoogleDriveUseFolder.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
<value>5</value>
</data>
<data name="cbGoogleDriveUseFolder.Text" xml:space="preserve">
<value>Upload files to selected folder</value>
@ -3630,16 +3651,16 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveUseFolder.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="txtGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
<value>352, 88</value>
</data>
<data name="txtGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 20</value>
<value>432, 20</value>
</data>
<data name="txtGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
<value>7</value>
</data>
<data name="&gt;&gt;txtGoogleDriveFolderID.Name" xml:space="preserve">
<value>txtGoogleDriveFolderID</value>
@ -3651,7 +3672,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;txtGoogleDriveFolderID.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="lblGoogleDriveFolderID.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3666,7 +3687,7 @@ when you made the application key.</value>
<value>53, 13</value>
</data>
<data name="lblGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<value>6</value>
</data>
<data name="lblGoogleDriveFolderID.Text" xml:space="preserve">
<value>Folder ID:</value>
@ -3681,7 +3702,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;lblGoogleDriveFolderID.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="chGoogleDriveTitle.Text" xml:space="preserve">
<value>Title</value>
@ -3702,7 +3723,7 @@ when you made the application key.</value>
<value>432, 352</value>
</data>
<data name="lvGoogleDriveFoldersList.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
<value>8</value>
</data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Name" xml:space="preserve">
<value>lvGoogleDriveFoldersList</value>
@ -3714,7 +3735,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
@ -3723,13 +3744,13 @@ when you made the application key.</value>
<value>NoControl</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Location" type="System.Drawing.Point, System.Drawing">
<value>352, 40</value>
<value>616, 15</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 23</value>
</data>
<data name="btnGoogleDriveRefreshFolders.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
<value>4</value>
</data>
<data name="btnGoogleDriveRefreshFolders.Text" xml:space="preserve">
<value>Refresh folders list</value>
@ -3744,7 +3765,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;btnGoogleDriveRefreshFolders.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="cbGoogleDriveIsPublic.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3774,7 +3795,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;cbGoogleDriveIsPublic.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="oauth2GoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
@ -3795,7 +3816,7 @@ when you made the application key.</value>
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;oauth2GoogleDrive.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="tpGoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 238</value>

View file

@ -323,7 +323,7 @@ private void GoogleDriveRefreshFolders()
if (OAuth2Info.CheckOAuth(Config.GoogleDriveOAuth2Info))
{
List<GoogleDriveFile> folders = new GoogleDrive(Config.GoogleDriveOAuth2Info).GetFolders();
List<GoogleDriveFile> folders = new GoogleDrive(Config.GoogleDriveOAuth2Info).GetFolders(Config.GoogleDriveSelectedDrive.id);
if (folders != null)
{
@ -343,6 +343,42 @@ private void GoogleDriveRefreshFolders()
}
}
private void GoogleDriveRefreshDrives()
{
try
{
if (OAuth2Info.CheckOAuth(Config.GoogleDriveOAuth2Info))
{
List<GoogleDriveSharedDrive> drives = new GoogleDrive(Config.GoogleDriveOAuth2Info).GetDrives();
if (drives != null)
{
cbGoogleDriveSharedDrive.Items.Clear();
cbGoogleDriveSharedDrive.Items.Add(GoogleDrive.MyDrive);
foreach (GoogleDriveSharedDrive drive in drives)
{
cbGoogleDriveSharedDrive.Items.Add(drive);
}
GoogleDriveSelectConfigDrive();
}
}
}
catch (Exception ex)
{
ex.ShowError();
}
}
private void GoogleDriveSelectConfigDrive()
{
string driveID = Config.GoogleDriveSelectedDrive?.id;
cbGoogleDriveSharedDrive.SelectedItem = cbGoogleDriveSharedDrive.Items
.OfType<GoogleDriveSharedDrive>()
.Where(x => x.id == driveID)
.FirstOrDefault();
}
#endregion Google Drive
#region Box

View file

@ -285,6 +285,15 @@ internal class Resources {
}
}
/// <summary>
/// Looks up a localized string similar to My drive.
/// </summary>
internal static string GoogleDrive_MyDrive_My_drive {
get {
return ResourceManager.GetString("GoogleDrive_MyDrive_My_drive", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>

View file

@ -404,4 +404,7 @@ Created folders:</value>
<data name="navigation_270_button_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\navigation-270-button-white.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="GoogleDrive_MyDrive_My_drive" xml:space="preserve">
<value>My drive</value>
</data>
</root>

View file

@ -198,6 +198,7 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
public bool GoogleDriveDirectLink { get; set; } = false;
public bool GoogleDriveUseFolder { get; set; } = false;
public string GoogleDriveFolderID { get; set; } = "";
public GoogleDriveSharedDrive GoogleDriveSelectedDrive { get; set; } = GoogleDrive.MyDrive;
#endregion Google Drive

View file

@ -121,7 +121,7 @@
<value>ShareX - 螢幕錄製</value>
</data>
<data name="btnAbort.Text" xml:space="preserve">
<value>止</value>
<value>止</value>
</data>
<data name="btnStart.Text" xml:space="preserve">
<value>開始</value>