fixed merge

This commit is contained in:
abdelkader
2025-05-30 14:23:51 -04:00
22 changed files with 139 additions and 289 deletions

View File

@@ -15,6 +15,7 @@ namespace VCFEditor.Model
NotifyPropertyChanged("Name");
}
}
[DisplayName("F.Name")]
public string FamilyName
{
@@ -27,12 +28,10 @@ namespace VCFEditor.Model
get {
if (card.Phones.GetFirstChoice(vCardPhoneTypes.Cellular) != null)
return card.Phones.GetFirstChoice(vCardPhoneTypes.Cellular).FullNumber;
return string.Empty;
}
}
[Browsable(false)]
public vCard card { get; set; }
@@ -48,7 +47,6 @@ namespace VCFEditor.Model
[Browsable(false)]
public string path { get; set; }
public Contact()
{
card = new vCard();

View File

@@ -16,10 +16,9 @@ namespace vCardEditor.Model
get { return _size; }
set { _size = value; }
}
public FixedList() : this(5)
{
}
public FixedList() : this(5) { }
public FixedList(int size)
{
this._size = size;

View File

@@ -1,12 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Thought.vCards;
using VCFEditor.View;
using vCardEditor.Model;
using vCardEditor.Repository;
using vCardEditor.View.Customs;
using VCFEditor.Repository;
using vCardEditor.Repository;
using vCardEditor.Model;
using System.Linq;
using System.Collections.Generic;
using VCFEditor.View;
namespace VCFEditor.Presenter
{
@@ -15,7 +15,6 @@ namespace VCFEditor.Presenter
private readonly IMainView _view;
private readonly IContactRepository _repository;
public MainPresenter(IMainView view, IContactRepository repository)
{
_view = view;
@@ -44,9 +43,6 @@ namespace VCFEditor.Presenter
_view.BatchExportImagesEvent += _view_BatchExportImagesEvent;
_view.SplitFileEvent += SaveSplittedFileHandler;
_view.OpenFolderEvent += OpenNewFolderHandler;
}
private void OpenNewFolderHandler(object sender, EventArg<string> e)
@@ -59,7 +55,7 @@ namespace VCFEditor.Presenter
if (!string.IsNullOrEmpty(path))
{
var Loaded =_repository.LoadMultipleFilesContact(path);
bool Loaded =_repository.LoadMultipleFilesContact(path);
if (!Loaded)
{
_view.DisplayMessage("No file loaded!", "Error");
@@ -69,7 +65,6 @@ namespace VCFEditor.Presenter
AddPathToMostRecentUsedFiles(path);
_view.DisplayContacts(_repository.Contacts);
}
}
public void OpenNewFileHandler(object sender, EventArg<string> e)
@@ -89,7 +84,6 @@ namespace VCFEditor.Presenter
return;
}
if (!_repository.LoadContacts(path))
_view.DisplayMessage("File seems missing or corrupted!", "Error");
else
@@ -98,9 +92,8 @@ namespace VCFEditor.Presenter
AddPathToMostRecentUsedFiles(path);
}
}
}
private void AddPathToMostRecentUsedFiles(string path)
{
FixedList MostRecentUsedFiles = ConfigRepository.Instance.Paths;
@@ -110,6 +103,7 @@ namespace VCFEditor.Presenter
_view.UpdateMRUMenu(MostRecentUsedFiles);
}
}
private void _view_BatchExportImagesEvent(object sender, EventArgs e)
{
if (_repository.Contacts == null || _repository.Contacts.Count == 0)
@@ -122,7 +116,6 @@ namespace VCFEditor.Presenter
{
count++;
SaveCardPhoto(_repository.Contacts[i].card, i);
}
}
@@ -151,7 +144,6 @@ namespace VCFEditor.Presenter
}
}
if (count > 0)
_view.DisplayMessage($"{count} contact(s) processed!", "Photo Count");
else
@@ -163,7 +155,7 @@ namespace VCFEditor.Presenter
if (_repository.Contacts == null)
return;
var count = _repository.Contacts.Count(x => x.card.Photos.Count > 0);
int count = _repository.Contacts.Count(x => x.card.Photos.Count > 0);
if (count > 0)
_view.DisplayMessage($"{count} contact(s) containing a picture = ", "Photo Count");
else
@@ -187,19 +179,18 @@ namespace VCFEditor.Presenter
_view.SendTextToClipBoard(SerializedCard);
_view.DisplayMessage("vCard copied to clipboard!", "Information");
}
private void LoadFormHandler(object sender, EventArg<FormState> e)
{
_view.LoadIntialState(ConfigRepository.Instance.FormState);
var paths = Environment.GetCommandLineArgs();
string[] paths = Environment.GetCommandLineArgs();
if (paths.Length > 1)
{
var evt = new EventArg<string>(paths[1]);
OpenNewFileHandler(sender, evt);
}
}
private void AddressRemovedHandler(object sender, EventArg<int> e)
{
var contact = _repository.Contacts[_view.SelectedContactIndex];
@@ -224,13 +215,13 @@ namespace VCFEditor.Presenter
contact.card.DeliveryAddresses.Clear();
contact.card.DeliveryAddresses.Add(new vCardDeliveryAddress(e.Data));
}
private void ExportImageHandler(object sender, EventArgs e)
{
if (_view.SelectedContactIndex > -1)
{
//TODO: image can be url, or file location.
var card = _repository.Contacts[_view.SelectedContactIndex].card;
vCard card = _repository.Contacts[_view.SelectedContactIndex].card;
SaveCardPhoto(card, _view.SelectedContactIndex, true);
}
}
@@ -238,12 +229,11 @@ namespace VCFEditor.Presenter
private void SaveCardPhoto(vCard card, int index, bool askUser = false)
{
//TODO: Save every image for a vCard.
var image = card.Photos.FirstOrDefault();
vCardPhoto image = card.Photos.FirstOrDefault();
if (image != null)
{
var newPath = _repository.GenerateFileName(_repository.fileName, index, image.Extension);
string newPath = _repository.GenerateFileName(_repository.fileName, index, image.Extension);
//string ImagePath = string.Empty;
//if (askUser)
@@ -255,10 +245,9 @@ namespace VCFEditor.Presenter
private void ExportQRHandler(object sender, EventArgs e)
{
if (_view.SelectedContactIndex > -1)
{
var card = _repository.Contacts[_view.SelectedContactIndex].card;
vCard card = _repository.Contacts[_view.SelectedContactIndex].card;
string content = _repository.GenerateStringFromVCard(card);
_view.DisplayQRCode(content);
@@ -267,14 +256,13 @@ namespace VCFEditor.Presenter
private void ModifyImageHandler(object sender, EventArg<string> e)
{
if (!string.IsNullOrEmpty(e.Data) )
if (!string.IsNullOrEmpty(e.Data))
{
vCardPhoto photo = new vCardPhoto(e.Data);
_repository.ModifyImage(_view.SelectedContactIndex, photo);
}
else
_repository.ModifyImage(_view.SelectedContactIndex, null);
}
void CloseFormHandler(object sender, EventArg<bool> e)
@@ -284,12 +272,12 @@ namespace VCFEditor.Presenter
if (!e.Data)
{
var state = _view.GetFormState();
FormState state = _view.GetFormState();
ConfigRepository.Instance.FormState = state;
ConfigRepository.Instance.SaveConfig();
}
}
public void BeforeLeavingContactHandler(object sender, EventArg<vCard> e)
{
_repository.SaveDirtyVCard(_view.SelectedContactIndex, e.Data);
@@ -297,10 +285,9 @@ namespace VCFEditor.Presenter
public void TextBoxValueChangedHandler(object sender, EventArgs e)
{
var tb = sender as StateTextBox;
StateTextBox tb = sender as StateTextBox;
if (tb != null && tb.oldText != tb.Text)
_repository.SetDirtyFlag(_view.SelectedContactIndex);
}
public void FilterTextChangedHandler(object sender, EventArg<string> e)
@@ -328,10 +315,7 @@ namespace VCFEditor.Presenter
else
filename = _view.DisplaySaveDialog("");
_repository.SaveContactsToFile(filename);
}
private void SaveSplittedFileHandler(object sender, EventArgs e)
@@ -345,7 +329,6 @@ namespace VCFEditor.Presenter
int count = _repository.SaveSplittedFiles(Path);
_view.DisplayMessage(string.Format("{0} contact(s) processed!", count), "Information");
}
}
private void BeforeOpeningNewFileHandler()
@@ -356,13 +339,10 @@ namespace VCFEditor.Presenter
SaveContactsHandler(null, null);
//_repository.SaveContactsToFile(_repository.fileName);
}
}
public void ChangeContactSelectedHandler(object sender, EventArgs e)
{
if (_view.SelectedContactIndex > -1)
{
vCard card = _repository.Contacts[_view.SelectedContactIndex].card;
@@ -374,8 +354,6 @@ namespace VCFEditor.Presenter
}
else
_view.ClearContactDetail();
}
}
}

View File

@@ -1,12 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using vCardEditor.Repository;
using vCardEditor.View;
using VCFEditor.Presenter;
using VCFEditor;
using VCFEditor.Repository;
using vCardEditor.Repository;
namespace vCardEditor
{
@@ -21,8 +18,8 @@ namespace vCardEditor
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var fileHandler = new FileHandler();
var mainForm = new MainForm();
FileHandler fileHandler = new FileHandler();
MainForm mainForm = new MainForm();
new MainPresenter(mainForm, new ContactRepository(fileHandler));
Application.Run(mainForm);

View File

@@ -17,6 +17,7 @@ namespace vCardEditor.Repository
private const int MAX_RECENT_FILES = 5;
private static ConfigRepository instance = null;
[XmlIgnore]
public static ConfigRepository Instance
{
@@ -31,6 +32,7 @@ namespace vCardEditor.Repository
[Description("Overwrite the file when saving")]
public bool Overwrite { get; set; }
[Description("Maximum entries for MRU ")]
public int Maximum { get; set; }
@@ -45,14 +47,12 @@ namespace vCardEditor.Repository
private ConfigRepository() { }
/// <summary>
/// save config file
/// </summary>
public void SaveConfig()
{
var ns = new XmlSerializerNamespaces();
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer xsSubmit = new XmlSerializer(typeof(ConfigRepository));
@@ -82,7 +82,6 @@ namespace vCardEditor.Repository
configData = (ConfigRepository)deserializer.Deserialize(reader);
configData.Paths.Size = configData.Maximum;
}
}
catch (Exception)
{
@@ -94,10 +93,7 @@ namespace vCardEditor.Repository
};
}
return configData;
}
}
}

View File

@@ -3,9 +3,9 @@ using System.IO;
using System.Linq;
using System.Text;
using Thought.vCards;
using VCFEditor.Model;
using vCardEditor.Repository;
using vCardEditor.View;
using VCFEditor.Model;
namespace VCFEditor.Repository
{
@@ -13,16 +13,13 @@ namespace VCFEditor.Repository
{
public string fileName { get; set; }
private IFileHandler _fileHandler;
/// <summary>
/// Formatted name.
/// </summary>
public const string KeyName = "FN";
/// <summary>
/// Keep a copy of contact list when filtering
/// </summary>
private SortableBindingList<Contact> OriginalContactList = null;
private SortableBindingList<Contact> _contacts;
public SortableBindingList<Contact> Contacts
{
get
@@ -43,6 +40,7 @@ namespace VCFEditor.Repository
get { return (_contacts != null && _contacts.Any(x => x.isDirty)) || _dirty; }
set { _dirty = true; }
}
public ContactRepository(IFileHandler fileHandler)
{
_fileHandler = fileHandler;
@@ -106,6 +104,7 @@ namespace VCFEditor.Repository
return ListOfContacts;
}
private vCard ParseRawContent(StringBuilder rawContent)
{
vCard card = null;
@@ -181,13 +180,10 @@ namespace VCFEditor.Repository
_dirty = true;
_contacts.RemoveAt(i);
}
}
}
}
public SortableBindingList<Contact> FilterContacts(string filter)
{
var list = OriginalContactList.Where(i => (i.Name.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0) &&
@@ -196,7 +192,6 @@ namespace VCFEditor.Repository
return Contacts;
}
public void SetDirtyFlag(int index)
{
if (index > -1)
@@ -229,7 +224,6 @@ namespace VCFEditor.Repository
card.Phones.Clear();
foreach (var item in newCard.Phones)
card.Phones.Add(new vCardPhone(item.FullNumber, item.PhoneType));
}
private void SaveExtraField(vCard newCard, vCard card)
@@ -259,7 +253,6 @@ namespace VCFEditor.Repository
else
card.DeliveryAddresses.Add(new vCardDeliveryAddress(item.Street, item.City, item.Region, item.Country,
item.PostalCode, item.AddressType.FirstOrDefault()));
}
}
@@ -277,7 +270,6 @@ namespace VCFEditor.Repository
{
if (card.Phones.GetFirstChoice(vCardPhoneTypes.Home) != null)
card.Phones.GetFirstChoice(vCardPhoneTypes.Home).FullNumber = string.Empty;
}
@@ -293,7 +285,6 @@ namespace VCFEditor.Repository
{
if (card.Phones.GetFirstChoice(vCardPhoneTypes.Cellular) != null)
card.Phones.GetFirstChoice(vCardPhoneTypes.Cellular).FullNumber = string.Empty;
}
//Work
@@ -308,7 +299,6 @@ namespace VCFEditor.Repository
{
if (card.Phones.GetFirstChoice(vCardPhoneTypes.Work) != null)
card.Phones.GetFirstChoice(vCardPhoneTypes.Work).FullNumber = string.Empty;
}
}
@@ -328,9 +318,7 @@ namespace VCFEditor.Repository
{
if (card.EmailAddresses.GetFirstChoice(vCardEmailAddressType.Internet) != null)
card.EmailAddresses.GetFirstChoice(vCardEmailAddressType.Internet).Address = string.Empty;
}
}
private void SaveWebUrl(vCard NewCard, vCard card)
@@ -347,7 +335,6 @@ namespace VCFEditor.Repository
{
if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Personal) != null)
card.Websites.GetFirstChoice(vCardWebsiteTypes.Personal).Url = string.Empty;
}
@@ -362,7 +349,6 @@ namespace VCFEditor.Repository
{
if (card.Websites.GetFirstChoice(vCardWebsiteTypes.Work) != null)
card.Websites.GetFirstChoice(vCardWebsiteTypes.Work).Url = string.Empty;
}
}
@@ -415,7 +401,7 @@ namespace VCFEditor.Repository
int count;
for (count = 0; count < contactsToSave.Count(); count++)
{
var entry = contactsToSave[count];
Contact entry = contactsToSave[count];
string SerializedCard = GenerateStringFromVCard(entry.card);
//Check if filename for the card is empty, and generate one if empty
@@ -426,7 +412,6 @@ namespace VCFEditor.Repository
//Clean the flag for every contact, even the deleted ones.
entry.isDirty = false;
}
//Clean the global flag for the entire vCard Catalog.

View File

@@ -24,7 +24,6 @@ namespace vCardEditor.Repository
{
if (File.Exists(newFilename))
File.Move(newFilename, oldFilename);
}
public string[] ReadAllLines(string filename)
@@ -39,9 +38,9 @@ namespace vCardEditor.Repository
public void WriteBytesToFile(string imageFile, byte[] image)
{
using (var ms = new MemoryStream(image))
using (MemoryStream ms = new MemoryStream(image))
{
using (var fs = new FileStream(imageFile, FileMode.Create))
using (FileStream fs = new FileStream(imageFile, FileMode.Create))
ms.WriteTo(fs);
}
}
@@ -61,6 +60,5 @@ namespace vCardEditor.Repository
string[] filePaths = Directory.GetFiles(path, ext,SearchOption.TopDirectoryOnly);
return filePaths;
}
}
}

View File

@@ -1,12 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;
using vCardEditor.Repository;
@@ -40,7 +35,7 @@ namespace vCardEditor.View
return titleAttribute.Title;
}
}
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
return Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
}
}
@@ -109,10 +104,10 @@ namespace vCardEditor.View
{
try
{
using (var client = new WebClient())
using (WebClient client = new WebClient())
{
string result = await client.DownloadStringTaskAsync(ConfigRepository.Instance.VersionUrl);
using (var reader = new StringReader(result))
using (StringReader reader = new StringReader(result))
{
string InternetVersion = reader.ReadLine();
string AssemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
@@ -126,11 +121,11 @@ namespace vCardEditor.View
}
}
}
catch (WebException )
catch (WebException)
{
MessageBox.Show("Could not download version information from GitHub.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception )
catch (Exception)
{
MessageBox.Show("Error processing version information.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

View File

@@ -1,7 +1,5 @@
using System;
using System.Windows.Forms;
using System.Windows.Forms;
using vCardEditor.Repository;
using vCardEditor.Model;
namespace vCardEditor.View
{

View File

@@ -26,9 +26,7 @@ namespace vCardEditor.View.Customs
Addresses = addressCollection;
_checkBoxes = Controls.OfType<CheckBox>().ToList();
foreach (var item in addressCollection)
foreach (vCardDeliveryAddressTypes item in addressCollection)
{
switch (item.ToString())
{
@@ -53,9 +51,7 @@ namespace vCardEditor.View.Customs
case "International":
cbInternational.Checked = true;
break;
}
}
}
@@ -71,13 +67,11 @@ namespace vCardEditor.View.Customs
}
Addresses.Clear();
foreach (var item in checkedItems)
foreach (CheckBox item in checkedItems)
{
var enumType = (vCardDeliveryAddressTypes)Enum.Parse(typeof(vCardDeliveryAddressTypes), item.Text, true);
vCardDeliveryAddressTypes enumType = (vCardDeliveryAddressTypes)Enum.Parse(typeof(vCardDeliveryAddressTypes), item.Text, true);
Addresses.Add(enumType);
}
}
}
}

View File

@@ -8,8 +8,8 @@ namespace vCardEditor.View.Customs
public partial class AddressBox : UserControl
{
public event EventHandler TextChangedEvent;
public List<vCardDeliveryAddressTypes> AddressType { get; set; }
public List<vCardDeliveryAddressTypes> AddressType { get; set; }
public AddressBox(string street, string city, string region, string country, string postalCode,
string extendedAddress, string postOfficeBox, List<vCardDeliveryAddressTypes> addressType)
@@ -46,7 +46,7 @@ namespace vCardEditor.View.Customs
public vCardDeliveryAddress getDeliveryAddress()
{
var deliveryAddress = new vCardDeliveryAddress
vCardDeliveryAddress deliveryAddress = new vCardDeliveryAddress
{
City = CityValue.Text,
Country = CountryValue.Text,
@@ -57,9 +57,7 @@ namespace vCardEditor.View.Customs
PostOfficeBox = POBoxValue.Text,
AddressType = AddressType
};
return deliveryAddress;
}
}
}

View File

@@ -26,7 +26,6 @@ namespace vCardEditor.View.Customs
Selecting += tbcAddress_Selecting;
HandleCreated += tbcAddress_HandleCreated;
MouseDoubleClick += AddressTabControl_MouseDoubleClick;
}
public void getDeliveryAddress(vCard card)
@@ -51,9 +50,9 @@ namespace vCardEditor.View.Customs
{
if (GetTabRect(i).Contains(e.Location))
{
var AddressBox = TabPages[i].Controls[0] as AddressBox;
AddressBox AddressBox = TabPages[i].Controls[0] as AddressBox;
var diag = new AddAddressDialog(AddressBox.AddressType);
AddAddressDialog diag = new AddAddressDialog(AddressBox.AddressType);
if (diag.ShowDialog() == DialogResult.OK)
{
@@ -66,10 +65,8 @@ namespace vCardEditor.View.Customs
break;
}
}
}
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
private const int TCM_SETMINTABWIDTH = 0x1300 + 49;
@@ -78,20 +75,18 @@ namespace vCardEditor.View.Customs
SendMessage(Handle, TCM_SETMINTABWIDTH, IntPtr.Zero, (IntPtr)16);
}
private void tbcAddress_Selecting(object sender, TabControlCancelEventArgs e)
{
if (e.TabPageIndex == TabCount - 1)
e.Cancel = true;
}
private void tbcAddress_MouseDown(object sender, MouseEventArgs e)
{
var lastIndex = TabCount - 1;
int lastIndex = TabCount - 1;
if (GetTabRect(lastIndex).Contains(e.Location))
{
var diag = new AddAddressDialog();
AddAddressDialog diag = new AddAddressDialog();
if (diag.ShowDialog() == DialogResult.OK)
{
vCardDeliveryAddress da = new vCardDeliveryAddress();
@@ -100,16 +95,15 @@ namespace vCardEditor.View.Customs
AddTab?.Invoke(sender, new EventArg<List<vCardDeliveryAddressTypes>>(diag.Addresses));
SelectedIndex = TabCount - 2;
}
}
else
{
for (var i = 0; i < TabPages.Count; i++)
for (int i = 0; i < TabPages.Count; i++)
{
var tabRect = GetTabRect(i);
Rectangle tabRect = GetTabRect(i);
tabRect.Inflate(-2, -2);
var closeImage = Properties.Resources.Close;
var imageRect = new Rectangle(
Bitmap closeImage = Properties.Resources.Close;
Rectangle imageRect = new Rectangle(
(tabRect.Right - closeImage.Width),
tabRect.Top + (tabRect.Height - closeImage.Height) / 2,
closeImage.Width, closeImage.Height);
@@ -122,12 +116,9 @@ namespace vCardEditor.View.Customs
SelectedIndex = 0;
RemoveTab?.Invoke(sender, new EventArg<int>(i));
}
return;
}
}
}
}
@@ -136,19 +127,19 @@ namespace vCardEditor.View.Customs
if (e.Index > TabCount - 1)
return;
var tabRect = GetTabRect(e.Index);
Rectangle tabRect = GetTabRect(e.Index);
tabRect.Inflate(-2, -2);
if (e.Index == TabCount - 1)
{
var addImage = Properties.Resources.Add;
Bitmap addImage = Properties.Resources.Add;
e.Graphics.DrawImage(addImage,
tabRect.Left + (tabRect.Width - addImage.Width) / 2,
tabRect.Top + (tabRect.Height - addImage.Height) / 2);
}
else
{
var closeImage = Properties.Resources.Close;
Bitmap closeImage = Properties.Resources.Close;
e.Graphics.DrawImage(closeImage,
(tabRect.Right - closeImage.Width),
tabRect.Top + (tabRect.Height - closeImage.Height) / 2);
@@ -172,8 +163,6 @@ namespace vCardEditor.View.Customs
TextBrush.Dispose();
}
}
public void SetAddresses(vCard card)
@@ -184,7 +173,7 @@ namespace vCardEditor.View.Customs
private void AddTabForEveryAddress(vCard card)
{
foreach (var item in card.DeliveryAddresses)
foreach (vCardDeliveryAddress item in card.DeliveryAddresses)
AddtabForAddress(item);
SelectedIndex = 0;
}
@@ -193,36 +182,32 @@ namespace vCardEditor.View.Customs
{
string title = GetTabTitle(da.AddressType);
var page = new TabPage($" {title} ");
TabPage page = new TabPage($" {title} ");
TabPages.Insert(TabCount - 1, page);
var ab = new AddressBox(da.Street, da.City, da.Region, da.Country,
AddressBox ab = new AddressBox(da.Street, da.City, da.Region, da.Country,
da.PostalCode, da.ExtendedAddress, da.PostOfficeBox, da.AddressType);
ab.TextChangedEvent += (s, e) => TextChangedEvent?.Invoke(s, e);
ab.Dock = DockStyle.Fill;
page.Controls.Add(ab);
page.ToolTipText = string.Join(",", da.AddressType.ConvertAll(f => f.ToString()));
}
private string GetTabTitle(List<vCardDeliveryAddressTypes> addressTypes)
{
var title = string.Empty;
string title = string.Empty;
if (addressTypes.Count > 0)
{
title = addressTypes[0].ToString();
if (addressTypes.Count > 1)
title += "...";
}
return title;
}
private void ClearTabs()
{
//Remove every tab (except "+"). We don't call Clear() as it doesn't free memory.
while (TabCount > 1)
TabPages[0].Dispose();

View File

@@ -18,7 +18,7 @@ namespace vCardEditor.View.Customs
_checkBoxes = Controls.OfType<CheckBox>().ToList();
Columns = columns;
foreach (var item in columns)
foreach (Column item in columns)
{
switch (item)
{
@@ -36,13 +36,9 @@ namespace vCardEditor.View.Customs
private void btnOK_Click(object sender, EventArgs e)
{
Columns.Clear();
var total = _checkBoxes
.Where(checkBox => checkBox.Checked);
foreach (var item in total)
foreach (CheckBox item in _checkBoxes.Where(checkBox => checkBox.Checked))
{
var enumType = (Column)Enum.Parse(typeof(Column), item.Text, true);
Column enumType = (Column)Enum.Parse(typeof(Column), item.Text, true);
Columns.Add(enumType);
}
}

View File

@@ -1,7 +1,7 @@

namespace vCardEditor.View.Customs
{
partial class CustumInputDialog
partial class CustomInputDialog
{
/// <summary>
/// Required designer variable.

View File

@@ -2,9 +2,9 @@
namespace vCardEditor.View.Customs
{
public partial class CustumInputDialog : Form
public partial class CustomInputDialog : Form
{
public CustumInputDialog()
public CustomInputDialog()
{
InitializeComponent();
}
@@ -15,7 +15,5 @@ namespace vCardEditor.View.Customs
{
input = tbInput.Text;
}
}
}

View File

@@ -6,7 +6,6 @@ using Thought.vCards;
namespace vCardEditor.View.Customs
{
public partial class ExtendedPanel : UserControl
{
public ExtendedPanel()
@@ -35,8 +34,8 @@ namespace vCardEditor.View.Customs
//{
// AddControl(custom.input, string.Empty);
//}
}
public event EventHandler ContentTextChanged;
public string Caption
@@ -48,12 +47,11 @@ namespace vCardEditor.View.Customs
public PanelType panelType { get; set; }
private void MenuItemClickHandlers(object sender, EventArgs e)
{
var tag = (sender as ToolStripMenuItem).Tag;
object tag = (sender as ToolStripMenuItem).Tag;
if (tag != null && tag is vCardRoot)
AddControl(tag as vCardRoot);
}
private void btnAddExtraText_Click(object sender, EventArgs e)
{
Button btnSender = (Button)sender;
@@ -71,35 +69,31 @@ namespace vCardEditor.View.Customs
default:
break;
}
}
public void AddControl(vCardRoot card)
{
Point pt = GetCoordinatesForNewControl();
RemovableTextBox ctl = new RemovableTextBox(card);
RemovableTextBox ctl = new RemovableTextBox(card)
{
Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left,
Location = pt,
Width = PanelContent.Width - 20 //TODO : Calculte the right size of the scrollbar!
};
ctl.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left;
ctl.Location = pt;
ctl.Width = PanelContent.Width - 20; //TODO : Calculte the right size of the scrollbar!
ctl.BoutonRemoveClicked += RemoveControl;
ctl.ButtonRemoveClicked += RemoveControl;
ctl.ContentTextChanged += (s, e) => ContentTextChanged?.Invoke(s, e);
PanelContent.Controls.Add(ctl);
}
public List<vCardRoot> GetExtraFields()
{
List<vCardRoot> result = new List<vCardRoot>();
foreach (var item in PanelContent.Controls)
foreach (Control item in PanelContent.Controls)
{
var ctl = item as RemovableTextBox;
result.Add(ctl.Tag as vCardRoot);
result.Add((item as RemovableTextBox).Tag as vCardRoot);
}
return result;
@@ -126,20 +120,16 @@ namespace vCardEditor.View.Customs
{
for (int i = 0; i < PanelContent.Controls.Count; i++)
{
var ctl = PanelContent.Controls[i];
ctl.Location = new Point(5, (i * 30) + 10);
PanelContent.Controls[i].Location = new Point(5, (i * 30) + 10);
}
}
private Point GetCoordinatesForNewControl()
{
Point pt;
if (PanelContent.Controls.Count > 0)
{
var LastControl = PanelContent.Controls[PanelContent.Controls.Count - 1];
Control LastControl = PanelContent.Controls[PanelContent.Controls.Count - 1];
pt = LastControl.Location;
pt.Y += 30;
}
@@ -148,8 +138,5 @@ namespace vCardEditor.View.Customs
return pt;
}
}
}

View File

@@ -6,12 +6,13 @@ namespace vCardEditor.View.Customs
{
public partial class RemovableTextBox : UserControl
{
public event EventHandler BoutonRemoveClicked;
public event EventHandler ButtonRemoveClicked;
public event EventHandler ContentTextChanged;
public RemovableTextBox()
{
InitializeComponent();
btnRemove.Click += (s, e) => BoutonRemoveClicked?.Invoke(s, e);
btnRemove.Click += (s, e) => ButtonRemoveClicked?.Invoke(s, e);
// Bubble up to set the dirty flag from the parent.
ContentTextBox.LostFocus += (s, e) => ContentTextChanged?.Invoke(s, e);
ContentTextBox.Validated += (s, e) => ContentTextChanged?.Invoke(s, e);
@@ -22,7 +23,7 @@ namespace vCardEditor.View.Customs
private void ContentTextBox_Validated(object sender, EventArgs e)
{
var card = this.Tag as vCardRoot;
vCardRoot card = this.Tag as vCardRoot;
card.ChangeContent(Content);
}
@@ -33,7 +34,6 @@ namespace vCardEditor.View.Customs
Content = cardType.ToString();
}
public string Title
{
get { return TitleLabel.Text; }
@@ -45,6 +45,5 @@ namespace vCardEditor.View.Customs
get { return ContentTextBox.Text; }
set { ContentTextBox.Text = value; }
}
}
}

View File

@@ -1,16 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using VCFEditor.View;
using VCFEditor.Model;
using Thought.vCards;
using vCardEditor.Repository;
using vCardEditor.Model;
using System.Drawing;
using System.Collections.Generic;
using vCardEditor.Repository;
using vCardEditor.View.Customs;
using vCardEditor.View.UIToolbox;
using VCFEditor.Model;
using VCFEditor.View;
namespace vCardEditor.View
{
@@ -40,9 +40,6 @@ namespace vCardEditor.View
public event EventHandler<EventArg<string>> OpenFolderEvent;
public event EventHandler SplitFileEvent;
ComponentResourceManager resources;
private int LastRowIndex = -1;
@@ -56,13 +53,10 @@ namespace vCardEditor.View
else
return -1;
}
}
public MainForm()
{
InitializeComponent();
resources = new ComponentResourceManager(typeof(MainForm));
@@ -74,7 +68,6 @@ namespace vCardEditor.View
extendedPanelPhones.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
extendedPanelWeb.ContentTextChanged += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
BuildMRUMenu();
}
private void tbsOpen_Click(object sender, EventArgs e)
@@ -82,7 +75,6 @@ namespace vCardEditor.View
OpenFile(sender, string.Empty);
}
private void OpenFile(object sender, string filename)
{
var evt = new EventArg<string>(filename);
@@ -98,7 +90,6 @@ namespace vCardEditor.View
bsContacts.DataSource = null;
if (contacts != null)
bsContacts.DataSource = contacts;
}
private void tbsSave_Click(object sender, EventArgs e)
@@ -116,7 +107,6 @@ namespace vCardEditor.View
SaveContactsSelected(sender, e);
}
}
private void tbsNew_Click(object sender, EventArgs e)
@@ -129,7 +119,6 @@ namespace vCardEditor.View
if (dgContacts.CurrentCell == null)
return;
//Weired, the selection is fired multiple times...
int RowIndex = dgContacts.CurrentCell.RowIndex;
if (LastRowIndex != RowIndex)
@@ -154,7 +143,6 @@ namespace vCardEditor.View
public void DisplayContactDetail(vCard card, string FileName)
{
if (card == null)
throw new ArgumentException("vCard must be valid!");
@@ -176,34 +164,29 @@ namespace vCardEditor.View
SetExtraInfos(card);
SetExtraTabFields(card);
}
private void SetExtraInfos(vCard card)
{
foreach (var item in card.EmailAddresses)
foreach (vCardEmailAddress item in card.EmailAddresses)
extendedPanelWeb.AddControl(item);
foreach (var item in card.Websites)
foreach (vCardWebsite item in card.Websites)
extendedPanelWeb.AddControl(item);
foreach (var item in card.Phones)
foreach (vCardPhone item in card.Phones)
extendedPanelPhones.AddControl(item);
}
private void SetExtraTabFields(vCard card)
{
foreach (var note in card.Notes)
foreach (vCardNote note in card.Notes)
AddExtraTextGroup(vCardPropeties.NOTE, note.Text);
if (!string.IsNullOrEmpty(card.Organization))
{
AddExtraTextGroup(vCardPropeties.ORG, card.Organization);
}
}
public void AddExtraTextGroup(vCardPropeties type, string content)
@@ -215,12 +198,11 @@ namespace vCardEditor.View
etg.TextChangedEvent += (sender, e) => TextBoxValueChanged?.Invoke(sender, e);
etg.ControlDeleted += (sender, e) =>
{
var send = sender as Control;
Control send = sender as Control;
panelTabExtra.Controls.Remove(send.Parent);
};
etg.Dock = DockStyle.Top;
panelTabExtra.Controls.Add(etg);
}
@@ -255,7 +237,7 @@ namespace vCardEditor.View
{
if (photos.Any())
{
var photo = photos[0];
vCardPhoto photo = photos[0];
try
{
// Get the bytes of the photo if it has not already been loaded.
@@ -272,8 +254,8 @@ namespace vCardEditor.View
}
else
PhotoBox.Image = (Image)resources.GetObject("PhotoBox.Image");
}
private void SetAddressesValues(vCard card)
{
tbcAddress.SetAddresses(card);
@@ -306,19 +288,15 @@ namespace vCardEditor.View
textBoxFilter.Focus();
}
private vCard GetvCardFromWindow()
{
vCard card = new vCard
{
Title = FormattedTitleValue.Text,
FormattedName = FormattedNameValue.Text,
GivenName = firstNameValue.Text,
AdditionalNames = middleNameValue.Text,
FamilyName = lastNameValue.Text,
};
tbcAddress.getDeliveryAddress(card);
@@ -331,7 +309,7 @@ namespace vCardEditor.View
private void getExtraPhones(vCard card)
{
card.Phones.Clear();
foreach (var item in extendedPanelPhones.GetExtraFields())
foreach (vCardRoot item in extendedPanelPhones.GetExtraFields())
{
if (item is vCardPhone)
{
@@ -339,40 +317,34 @@ namespace vCardEditor.View
card.Phones.Add(phone);
}
}
}
private void getExtraWeb(vCard card)
{
card.Websites.Clear();
card.EmailAddresses.Clear();
foreach (var item in extendedPanelWeb.GetExtraFields())
foreach (vCardRoot item in extendedPanelWeb.GetExtraFields())
{
switch (item)
{
case vCardEmailAddress email:
card.EmailAddresses.Add(email);
break;
case vCardWebsite website:
card.Websites.Add(website);
break;
default:
break;
}
}
}
private void getExtraData(vCard card)
{
foreach (var item in panelTabExtra.Controls)
foreach (object item in panelTabExtra.Controls)
{
var tbc = item as ExtraTextGroup;
ExtraTextGroup tbc = item as ExtraTextGroup;
switch (tbc.CardProp)
{
case vCardPropeties.NOTE:
@@ -398,12 +370,12 @@ namespace vCardEditor.View
Close();
}
private void MainForm_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
}
private void MainForm_DragDrop(object sender, DragEventArgs e)
{
string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
@@ -416,14 +388,11 @@ namespace vCardEditor.View
OpenFile(sender, FileList[0]);
}
private void BuildMRUMenu()
{
//TODO: Open File or Folder.
recentFilesMenuItem.DropDownItemClicked += (s, e) => OpenFile(s, e.ClickedItem.Text);
UpdateMRUMenu(ConfigRepository.Instance.Paths);
}
public void UpdateMRUMenu(FixedList MostRecentFilesList)
@@ -434,7 +403,6 @@ namespace vCardEditor.View
recentFilesMenuItem.DropDownItems.Clear();
for (int i = 0; i < MostRecentFilesList._innerList.Count; i++)
recentFilesMenuItem.DropDownItems.Add(MostRecentFilesList[i]);
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
@@ -443,7 +411,6 @@ namespace vCardEditor.View
CloseForm?.Invoke(sender, evt);
e.Cancel = evt.Data;
}
public bool AskMessage(string msg, string caption)
@@ -467,6 +434,7 @@ namespace vCardEditor.View
{
MessageBox.Show(msg, caption);
}
public string DisplayOpenFileDialog(string filter = "")
{
string filename = string.Empty;
@@ -481,8 +449,7 @@ namespace vCardEditor.View
public string DisplaySaveDialog(string filename)
{
var saveFileDialog = new SaveFileDialog
SaveFileDialog saveFileDialog = new SaveFileDialog
{
FileName = filename
};
@@ -493,11 +460,12 @@ namespace vCardEditor.View
return filename;
}
private void PhotoBox_Click(object sender, EventArgs e)
{
if (ModifyImage != null)
{
var fileName = DisplayOpenFileDialog();
string fileName = DisplayOpenFileDialog();
if (!string.IsNullOrEmpty(fileName))
{
try
@@ -510,11 +478,8 @@ namespace vCardEditor.View
{
MessageBox.Show($"Invalid file! : {fileName}");
}
}
}
}
public void ClearImageFromForm()
@@ -544,26 +509,23 @@ namespace vCardEditor.View
Clipboard.SetText(text);
}
private void dgContacts_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
if (e.RowIndex == -1)
{
e.ContextMenuStrip = contextMenuStrip1;
}
}
private void modifiyColumnsToolStripMenuItem_Click(object sender, EventArgs e)
{
List<Column> Columns = GetListColumnsForDataGrid();
var dialog = new ColumnsDialog(Columns);
ColumnsDialog dialog = new ColumnsDialog(Columns);
if (dialog.ShowDialog() == DialogResult.OK)
{
ToggleAllColumnsToInvisible();
ToggleOnlySelected(dialog.Columns);
}
}
@@ -574,19 +536,17 @@ namespace vCardEditor.View
{
if (dgContacts.Columns[i].Visible)
{
var name = dgContacts.Columns[i].Name;
var enumType = (Column)Enum.Parse(typeof(Column), name, true);
string name = dgContacts.Columns[i].Name;
Column enumType = (Column)Enum.Parse(typeof(Column), name, true);
Columns.Add(enumType);
}
}
return Columns;
}
private void ToggleOnlySelected(List<Column> columns)
{
foreach (var item in columns)
foreach (Column item in columns)
{
switch (item)
{
@@ -610,7 +570,6 @@ namespace vCardEditor.View
public FormState GetFormState()
{
return new FormState
{
Columns = GetListColumnsForDataGrid(),
@@ -626,7 +585,6 @@ namespace vCardEditor.View
{
var evt = new EventArg<FormState>(new FormState());
LoadForm?.Invoke(sender, evt);
}
public void LoadIntialState(FormState state)
@@ -642,6 +600,7 @@ namespace vCardEditor.View
}
}
}
private void tbsQR_Click(object sender, EventArgs e)
{
ExportQR?.Invoke(sender, e);
@@ -653,7 +612,6 @@ namespace vCardEditor.View
qr.ShowDialog();
}
private void addNotesToolStripMenuItem_Click(object sender, EventArgs e)
{
var evt = new EventArg<vCardPropeties>(vCardPropeties.NOTE);
@@ -674,7 +632,6 @@ namespace vCardEditor.View
menuExtraField.Show(ptLowerLeft);
}
private void miNote_Click(object sender, EventArgs e)
{
var evt = new EventArg<vCardPropeties>(vCardPropeties.NOTE);

View File

@@ -29,8 +29,6 @@ namespace vCardEditor.View
pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20, Color.Black, Color.White, null, 1);
pictureBoxQRCode.Size = new Size(pictureBoxQRCode.Width, pictureBoxQRCode.Height);
pictureBoxQRCode.SizeMode = PictureBoxSizeMode.StretchImage;
}
}
@@ -61,10 +59,8 @@ namespace vCardEditor.View
}
else
{
using (FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile())
using (FileStream fs = (FileStream)saveFileDialog1.OpenFile())
{
ImageFormat imageFormat = null;
switch (saveFileDialog1.FilterIndex)
{
@@ -84,7 +80,6 @@ namespace vCardEditor.View
throw new NotSupportedException("File extension is not supported");
}
pictureBoxQRCode.BackgroundImage.Save(fs, imageFormat);
}
}
}

View File

@@ -104,7 +104,7 @@ namespace vCardEditor.View
// Remember the current setting for RaiseListChangedEvents
// (if it was already deactivated, we shouldn't activate it after adding!).
var oldRaiseEventsValue = RaiseListChangedEvents;
bool oldRaiseEventsValue = RaiseListChangedEvents;
try
{
@@ -122,9 +122,6 @@ namespace vCardEditor.View
if (RaiseListChangedEvents)
ResetBindings();
}
}
}
}

View File

@@ -176,11 +176,11 @@
<Compile Include="View\Customs\ColumnsDialog.Designer.cs">
<DependentUpon>ColumnsDialog.cs</DependentUpon>
</Compile>
<Compile Include="View\Customs\CustumInputDialog.cs">
<Compile Include="View\Customs\CustomInputDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="View\Customs\CustumInputDialog.Designer.cs">
<DependentUpon>CustumInputDialog.cs</DependentUpon>
<Compile Include="View\Customs\CustomInputDialog.Designer.cs">
<DependentUpon>CustomInputDialog.cs</DependentUpon>
</Compile>
<Compile Include="View\Customs\ExtendedPanel.cs">
<SubType>UserControl</SubType>
@@ -244,8 +244,8 @@
<EmbeddedResource Include="View\Customs\ColumnsDialog.resx">
<DependentUpon>ColumnsDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="View\Customs\CustumInputDialog.resx">
<DependentUpon>CustumInputDialog.cs</DependentUpon>
<EmbeddedResource Include="View\Customs\CustomInputDialog.resx">
<DependentUpon>CustomInputDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="View\Customs\ExtendedPanel.resx">
<DependentUpon>ExtendedPanel.cs</DependentUpon>