[log] hurray for clicable links
This commit is contained in:
parent
d908e25ac8
commit
f655649840
|
@ -32,6 +32,8 @@ namespace SparkleLib {
|
||||||
public static string SparkleTmpPath = Path.Combine (SparklePath, ".tmp");
|
public static string SparkleTmpPath = Path.Combine (SparklePath, ".tmp");
|
||||||
|
|
||||||
public static string SparkleConfigPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare");
|
public static string SparkleConfigPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare");
|
||||||
|
|
||||||
|
public static string SparkleKeysPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare");
|
||||||
|
|
||||||
public static string SparkleInstallPath = SparkleHelpers.CombineMore (Defines.PREFIX, "sparkleshare");
|
public static string SparkleInstallPath = SparkleHelpers.CombineMore (Defines.PREFIX, "sparkleshare");
|
||||||
|
|
||||||
|
|
|
@ -658,6 +658,7 @@ namespace SparkleLib {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: this is ugly. refactor.
|
||||||
// Creates a pretty commit message based on what has changed
|
// Creates a pretty commit message based on what has changed
|
||||||
private string FormatCommitMessage ()
|
private string FormatCommitMessage ()
|
||||||
{
|
{
|
||||||
|
@ -673,9 +674,9 @@ namespace SparkleLib {
|
||||||
|
|
||||||
Process.StartInfo.Arguments = "status";
|
Process.StartInfo.Arguments = "status";
|
||||||
Process.Start ();
|
Process.Start ();
|
||||||
string Output = Process.StandardOutput.ReadToEnd ();
|
string output = Process.StandardOutput.ReadToEnd ();
|
||||||
|
|
||||||
foreach (string line in Regex.Split (Output, "\n")) {
|
foreach (string line in Regex.Split (output, "\n")) {
|
||||||
if (line.IndexOf ("new file:") > -1)
|
if (line.IndexOf ("new file:") > -1)
|
||||||
FilesAdded++;
|
FilesAdded++;
|
||||||
if (line.IndexOf ("modified:") > -1)
|
if (line.IndexOf ("modified:") > -1)
|
||||||
|
@ -686,7 +687,7 @@ namespace SparkleLib {
|
||||||
FilesDeleted++;
|
FilesDeleted++;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (string line in Regex.Split (Output, "\n")) {
|
foreach (string line in Regex.Split (output, "\n")) {
|
||||||
|
|
||||||
// Format message for when files are added,
|
// Format message for when files are added,
|
||||||
// example: "added 'file' and 3 more."
|
// example: "added 'file' and 3 more."
|
||||||
|
|
|
@ -12,6 +12,7 @@ SOURCES = \
|
||||||
SparkleEntry.cs \
|
SparkleEntry.cs \
|
||||||
SparkleIntro.cs \
|
SparkleIntro.cs \
|
||||||
SparkleInvitation.cs \
|
SparkleInvitation.cs \
|
||||||
|
SparkleLink.cs \
|
||||||
SparkleLog.cs \
|
SparkleLog.cs \
|
||||||
SparkleShare.cs \
|
SparkleShare.cs \
|
||||||
SparkleSpinner.cs \
|
SparkleSpinner.cs \
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
using Gtk;
|
using Gtk;
|
||||||
using Notifications;
|
using Notifications;
|
||||||
|
|
|
@ -91,7 +91,7 @@ namespace SparkleShare {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
EmailEntry = new Entry (GetUserEmail ());
|
EmailEntry = new Entry (SparkleShare.UserEmail);
|
||||||
EmailEntry.Changed += delegate {
|
EmailEntry.Changed += delegate {
|
||||||
CheckAccountForm ();
|
CheckAccountForm ();
|
||||||
};
|
};
|
||||||
|
@ -734,42 +734,12 @@ namespace SparkleShare {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Gets the email address if the user alreasy has a SparkleShare key installed
|
|
||||||
private string GetUserEmail ()
|
|
||||||
{
|
|
||||||
|
|
||||||
string user_email = "";
|
|
||||||
string keys_path = System.IO.Path.Combine (SparklePaths.HomePath, ".ssh");
|
|
||||||
|
|
||||||
if (!Directory.Exists (keys_path))
|
|
||||||
return "";
|
|
||||||
|
|
||||||
foreach (string file_path in Directory.GetFiles (keys_path)) {
|
|
||||||
|
|
||||||
string file_name = System.IO.Path.GetFileName (file_path);
|
|
||||||
|
|
||||||
if (file_name.StartsWith ("sparkleshare.") && file_name.EndsWith (".key")) {
|
|
||||||
|
|
||||||
user_email = file_name.Substring (file_name.IndexOf (".") + 1);
|
|
||||||
user_email = user_email.Substring (0, user_email.LastIndexOf ("."));
|
|
||||||
|
|
||||||
return user_email;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return "";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Generates and installs an RSA keypair to identify this system
|
// Generates and installs an RSA keypair to identify this system
|
||||||
private void GenerateKeyPair ()
|
private void GenerateKeyPair ()
|
||||||
{
|
{
|
||||||
|
|
||||||
string user_email = EmailEntry.Text;
|
string user_email = EmailEntry.Text;
|
||||||
string keys_path = System.IO.Path.Combine (SparklePaths.HomePath, ".ssh");
|
string keys_path = SparklePaths.SparkleKeysPath;
|
||||||
string key_file_name = "sparkleshare." + user_email + ".key";
|
string key_file_name = "sparkleshare." + user_email + ".key";
|
||||||
|
|
||||||
Process process = new Process () {
|
Process process = new Process () {
|
||||||
|
|
72
SparkleShare/SparkleLink.cs
Normal file
72
SparkleShare/SparkleLink.cs
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
// SparkleShare, an instant update workflow to Git.
|
||||||
|
// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
using Gtk;
|
||||||
|
using System.IO;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace SparkleShare {
|
||||||
|
|
||||||
|
public class SparkleLink : EventBox {
|
||||||
|
|
||||||
|
private Label Label;
|
||||||
|
|
||||||
|
public SparkleLink (string title, string url) : base ()
|
||||||
|
{
|
||||||
|
|
||||||
|
Label = new Label (title) {
|
||||||
|
Ellipsize = Pango.EllipsizeMode.Middle,
|
||||||
|
UseMarkup = true,
|
||||||
|
Xalign = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
Add (Label);
|
||||||
|
|
||||||
|
if (!File.Exists (url))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Gdk.Color color = new Gdk.Color ();
|
||||||
|
Gdk.Color.Parse ("#3465a4", ref color);
|
||||||
|
Label.ModifyFg (StateType.Normal, color);
|
||||||
|
|
||||||
|
ButtonPressEvent += delegate {
|
||||||
|
|
||||||
|
Process process = new Process ();
|
||||||
|
process.StartInfo.FileName = "xdg-open";
|
||||||
|
process.StartInfo.Arguments = url.Replace (" ", "\\ "); // Escape space-characters
|
||||||
|
process.Start ();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
EnterNotifyEvent += delegate {
|
||||||
|
|
||||||
|
Label.Markup = "<u>" + title + "</u>";
|
||||||
|
ShowAll ();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
LeaveNotifyEvent += delegate {
|
||||||
|
|
||||||
|
Label.Markup = title;
|
||||||
|
ShowAll ();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -45,6 +45,7 @@ namespace SparkleShare {
|
||||||
|
|
||||||
string name = System.IO.Path.GetFileName (LocalPath);
|
string name = System.IO.Path.GetFileName (LocalPath);
|
||||||
SetSizeRequest (540, 640);
|
SetSizeRequest (540, 640);
|
||||||
|
|
||||||
SetPosition (WindowPosition.Center);
|
SetPosition (WindowPosition.Center);
|
||||||
BorderWidth = 12;
|
BorderWidth = 12;
|
||||||
|
|
||||||
|
@ -61,7 +62,9 @@ namespace SparkleShare {
|
||||||
BorderWidth = 0
|
BorderWidth = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
Button open_folder_button = new Button (_("Open Folder"));
|
Button open_folder_button = new Button (_("_Open Folder")) {
|
||||||
|
UseUnderline = true
|
||||||
|
};
|
||||||
|
|
||||||
open_folder_button.Clicked += delegate (object o, EventArgs args) {
|
open_folder_button.Clicked += delegate (object o, EventArgs args) {
|
||||||
|
|
||||||
|
@ -206,72 +209,22 @@ namespace SparkleShare {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VBox layout_vertical = new VBox (false, 0);
|
VBox layout_vertical = new VBox (false, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TreeView tree_view = new TreeView ();
|
||||||
foreach (ActivityDay activity_day in activity_days) {
|
foreach (ActivityDay activity_day in activity_days) {
|
||||||
|
|
||||||
TreeIter iter = new TreeIter ();
|
|
||||||
ListStore list_store = new ListStore (typeof (Gdk.Pixbuf),
|
|
||||||
typeof (string),
|
|
||||||
typeof (string));
|
|
||||||
|
|
||||||
Gdk.Color color = Style.Foreground (StateType.Insensitive);
|
|
||||||
string secondary_text_color = GdkColorToHex (color);
|
|
||||||
|
|
||||||
foreach (ChangeSet change_set in activity_day) {
|
|
||||||
|
|
||||||
iter = list_store.Append ();
|
|
||||||
|
|
||||||
|
|
||||||
string edited_files = "";
|
|
||||||
foreach (string file_path in change_set.Edited)
|
|
||||||
edited_files += "\n" + file_path;
|
|
||||||
|
|
||||||
string added_files = "";
|
|
||||||
foreach (string file_path in change_set.Added)
|
|
||||||
added_files += "\n" + file_path;
|
|
||||||
|
|
||||||
string deleted_files = "";
|
|
||||||
foreach (string file_path in change_set.Deleted)
|
|
||||||
deleted_files += "\n" + file_path;
|
|
||||||
|
|
||||||
|
|
||||||
string log_entry = "<b>" + change_set.UserName + "</b>\n" +
|
|
||||||
"<span fgcolor='" + secondary_text_color +"'><small>" +
|
|
||||||
"at " + change_set.DateTime.ToString ("HH:mm") +
|
|
||||||
"</small></span>";
|
|
||||||
|
|
||||||
if (!edited_files.Equals ("")) {
|
|
||||||
|
|
||||||
log_entry += "\n\n<span fgcolor='" + secondary_text_color +"'><small>Edited</small></span>" +
|
|
||||||
edited_files;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!added_files.Equals ("")) {
|
|
||||||
|
|
||||||
log_entry += "\n\n<span fgcolor='" + secondary_text_color +"'><small>Added</small></span>" +
|
|
||||||
added_files;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!deleted_files.Equals ("")) {
|
|
||||||
|
|
||||||
log_entry += "\n\n<span fgcolor='" + secondary_text_color +"'><small>Deleted</small></span>" +
|
|
||||||
deleted_files;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
list_store.SetValue (iter, 0, SparkleHelpers.GetAvatar (change_set.UserEmail , 32));
|
|
||||||
list_store.SetValue (iter, 1, log_entry);
|
|
||||||
list_store.SetValue (iter, 2, change_set.UserEmail);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Label date_label = new Label ("") {
|
Label date_label = new Label ("") {
|
||||||
UseMarkup = true,
|
UseMarkup = true,
|
||||||
Xalign = 0,
|
|
||||||
Xpad = 9,
|
Xpad = 9,
|
||||||
Ypad = 9
|
Ypad = 9
|
||||||
};
|
};
|
||||||
|
@ -297,28 +250,94 @@ namespace SparkleShare {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
layout_vertical.PackStart (date_label, false, false, 0);
|
layout_vertical.PackStart (date_label, true, true, 0);
|
||||||
|
|
||||||
IconView icon_view = new IconView (list_store) {
|
|
||||||
ItemWidth = 470,
|
|
||||||
MarkupColumn = 1,
|
|
||||||
Orientation = Orientation.Horizontal,
|
|
||||||
PixbufColumn = 0,
|
|
||||||
Spacing = 9,
|
|
||||||
Columns = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
icon_view.SelectionChanged += delegate {
|
|
||||||
icon_view.UnselectAll ();
|
|
||||||
};
|
|
||||||
|
|
||||||
layout_vertical.PackStart (icon_view, false, false, 0);
|
Gdk.Color color = Style.Foreground (StateType.Insensitive);
|
||||||
|
string secondary_text_color = GdkColorToHex (color);
|
||||||
|
|
||||||
|
foreach (ChangeSet change_set in activity_day) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VBox log_entry = new VBox (false, 0);
|
||||||
|
VBox deleted_files = new VBox (false, 0);
|
||||||
|
VBox edited_files = new VBox (false, 0);
|
||||||
|
VBox added_files = new VBox (false, 0);
|
||||||
|
|
||||||
|
|
||||||
|
foreach (string file_path in change_set.Edited){
|
||||||
|
SparkleLink link = new SparkleLink (file_path, SparkleHelpers.CombineMore (LocalPath, file_path));
|
||||||
|
edited_files.PackStart (link, false, false, 0);
|
||||||
|
|
||||||
|
link.ModifyBg (StateType.Normal, tree_view.Style.Base (StateType.Normal));
|
||||||
|
|
||||||
|
}
|
||||||
|
// TODO: add close delegate
|
||||||
|
foreach (string file_path in change_set.Added)
|
||||||
|
added_files.PackStart (new SparkleLink (file_path, SparkleHelpers.CombineMore (LocalPath, file_path)), false, false, 0);
|
||||||
|
|
||||||
|
foreach (string file_path in change_set.Deleted)
|
||||||
|
deleted_files.PackStart (new SparkleLink (file_path, SparkleHelpers.CombineMore (LocalPath, file_path)), false, false, 0);
|
||||||
|
|
||||||
|
|
||||||
|
log_entry.PackStart(new Label ("<b>" + change_set.UserName + "</b>\n" +
|
||||||
|
"<span fgcolor='" + secondary_text_color +"'><small>" +
|
||||||
|
"at " + change_set.DateTime.ToString ("HH:mm") +
|
||||||
|
"</small></span>") { UseMarkup = true, Xalign = 0});
|
||||||
|
|
||||||
|
if (edited_files.Children.Length > 0) {
|
||||||
|
|
||||||
|
log_entry.PackStart (new Label ("\n<span fgcolor='" + secondary_text_color +"'><small>Edited</small></span>") { UseMarkup=true, Xalign = 0}, false, false, 0);
|
||||||
|
log_entry.PackStart (edited_files, false, false, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (added_files.Children.Length > 0) {
|
||||||
|
|
||||||
|
log_entry.PackStart (new Label ("\n<span fgcolor='" + secondary_text_color +"'><small>Added</small></span>") { UseMarkup=true, Xalign = 0}, false, false, 0);
|
||||||
|
log_entry.PackStart (added_files, false, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deleted_files.Children.Length > 0) {
|
||||||
|
|
||||||
|
log_entry.PackStart (new Label ("\n<span fgcolor='" + secondary_text_color +"'><small>Deleted</small></span>") { UseMarkup=true, Xalign = 0}, false, false, 0);
|
||||||
|
log_entry.PackStart (deleted_files, false, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HBox hbox = new HBox (false, 0);
|
||||||
|
|
||||||
|
Image i = new Image (SparkleHelpers.GetAvatar (change_set.UserEmail, 32)) {
|
||||||
|
Yalign = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
hbox.PackStart (i, false, false, 18);
|
||||||
|
VBox vbox = new VBox (false, 0);
|
||||||
|
|
||||||
|
vbox.PackStart (log_entry, true, true, 0);
|
||||||
|
hbox.PackStart (vbox, true, true, 0);
|
||||||
|
hbox.PackStart (new Label (""), false, false, 12);
|
||||||
|
|
||||||
|
layout_vertical.PackStart (hbox, true, true, 24);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// layout_vertical.PackStart (icon_view, false, false, 0);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrolledWindow = new ScrolledWindow ();
|
ScrolledWindow = new ScrolledWindow ();
|
||||||
ScrolledWindow.ShadowType = ShadowType.None;
|
ScrolledWindow.ShadowType = ShadowType.None;
|
||||||
ScrolledWindow.AddWithViewport (layout_vertical);
|
EventBox wrapper = new EventBox ();
|
||||||
|
wrapper.ModifyBg (StateType.Normal, tree_view.Style.Base (StateType.Normal));
|
||||||
|
wrapper.Add (layout_vertical);
|
||||||
|
ScrolledWindow.AddWithViewport (wrapper);
|
||||||
|
|
||||||
return ScrolledWindow;
|
return ScrolledWindow;
|
||||||
|
|
||||||
|
|
|
@ -160,20 +160,51 @@ namespace SparkleShare {
|
||||||
public static string GetUserEmail ()
|
public static string GetUserEmail ()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
string email = "";
|
||||||
string global_config_file_path = SparkleHelpers.CombineMore (SparklePaths.SparkleConfigPath, "config");
|
string global_config_file_path = SparkleHelpers.CombineMore (SparklePaths.SparkleConfigPath, "config");
|
||||||
|
|
||||||
StreamReader reader = new StreamReader (global_config_file_path);
|
// Look in the global config file first
|
||||||
|
if (File.Exists (global_config_file_path)) {
|
||||||
|
|
||||||
// Discard the first two lines
|
StreamReader reader = new StreamReader (global_config_file_path);
|
||||||
reader.ReadLine ();
|
|
||||||
reader.ReadLine ();
|
|
||||||
|
|
||||||
string line = reader.ReadLine ();
|
// Discard the first two lines
|
||||||
reader.Close ();
|
reader.ReadLine ();
|
||||||
|
reader.ReadLine ();
|
||||||
|
|
||||||
string email = line.Substring (line.IndexOf ("=") + 2);
|
string line = reader.ReadLine ();
|
||||||
|
reader.Close ();
|
||||||
|
|
||||||
return email;
|
email = line.Substring (line.IndexOf ("=") + 2);
|
||||||
|
|
||||||
|
return email;
|
||||||
|
|
||||||
|
// Secondly, look at the user's private key file name
|
||||||
|
} else {
|
||||||
|
|
||||||
|
string keys_path = SparklePaths.SparkleKeysPath;
|
||||||
|
|
||||||
|
if (!Directory.Exists (keys_path))
|
||||||
|
return "";
|
||||||
|
|
||||||
|
foreach (string file_path in Directory.GetFiles (keys_path)) {
|
||||||
|
|
||||||
|
string file_name = System.IO.Path.GetFileName (file_path);
|
||||||
|
|
||||||
|
if (file_name.StartsWith ("sparkleshare.") && file_name.EndsWith (".key")) {
|
||||||
|
|
||||||
|
email = file_name.Substring (file_name.IndexOf (".") + 1);
|
||||||
|
email = email.Substring (0, email.LastIndexOf ("."));
|
||||||
|
|
||||||
|
return email;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +214,7 @@ namespace SparkleShare {
|
||||||
public static void AddKey ()
|
public static void AddKey ()
|
||||||
{
|
{
|
||||||
|
|
||||||
string keys_path = Path.Combine (SparklePaths.HomePath, ".ssh");
|
string keys_path = SparklePaths.SparkleKeysPath;
|
||||||
string key_file_name = "sparkleshare." + UserEmail + ".key";
|
string key_file_name = "sparkleshare." + UserEmail + ".key";
|
||||||
|
|
||||||
Process process = new Process ();
|
Process process = new Process ();
|
||||||
|
|
|
@ -120,6 +120,7 @@ namespace SparkleShare {
|
||||||
|
|
||||||
SparkleLog log = new SparkleLog (path);
|
SparkleLog log = new SparkleLog (path);
|
||||||
log.ShowAll ();
|
log.ShowAll ();
|
||||||
|
log.Present ();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -228,9 +229,6 @@ namespace SparkleShare {
|
||||||
|
|
||||||
if (repo.Description != null)
|
if (repo.Description != null)
|
||||||
menu_item.TooltipText = repo.Description;
|
menu_item.TooltipText = repo.Description;
|
||||||
else
|
|
||||||
|
|
||||||
menu_item.TooltipText = _("No description");
|
|
||||||
|
|
||||||
Menu.Add (menu_item);
|
Menu.Add (menu_item);
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,14 @@ namespace SparkleShare {
|
||||||
ShowAll ();
|
ShowAll ();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new public void ShowAll ()
|
||||||
|
{
|
||||||
|
|
||||||
|
Present ();
|
||||||
|
base.ShowAll ();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue