126 lines
4.2 KiB
C#
126 lines
4.2 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.Collections.Generic;
|
|
|
|
namespace StarfaceOutlookSync.UI
|
|
{
|
|
public class OutlookFolderBrowserForm : Form
|
|
{
|
|
private TreeView _tree;
|
|
private Button _btnOk, _btnCancel;
|
|
public string SelectedFolderPath { get; private set; } = "";
|
|
public string SelectedFolderName { get; private set; } = "";
|
|
|
|
public OutlookFolderBrowserForm(List<string> folderPaths, string currentSelection)
|
|
{
|
|
InitializeComponent();
|
|
BuildTree(folderPaths, currentSelection);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
Text = "Outlook-Ordner waehlen";
|
|
Size = new Size(400, 450);
|
|
FormBorderStyle = FormBorderStyle.FixedDialog;
|
|
MaximizeBox = false;
|
|
MinimizeBox = false;
|
|
StartPosition = FormStartPosition.CenterParent;
|
|
Font = new Font("Segoe UI", 9);
|
|
|
|
var lblInfo = new Label
|
|
{
|
|
Text = "Bitte waehlen Sie den Outlook-Kontaktordner fuer die Synchronisation:",
|
|
Left = 12, Top = 12, Width = 360, Height = 36
|
|
};
|
|
|
|
_tree = new TreeView
|
|
{
|
|
Left = 12, Top = 52, Width = 360, Height = 310,
|
|
HideSelection = false,
|
|
ShowLines = true,
|
|
ShowPlusMinus = true,
|
|
ShowRootLines = true
|
|
};
|
|
_tree.DoubleClick += (s, e) => { if (_tree.SelectedNode?.Tag != null) SelectAndClose(); };
|
|
|
|
_btnOk = new Button
|
|
{
|
|
Text = "OK", Left = 210, Top = 372, Width = 75, Height = 28,
|
|
DialogResult = DialogResult.None
|
|
};
|
|
_btnOk.Click += (s, e) => SelectAndClose();
|
|
|
|
_btnCancel = new Button
|
|
{
|
|
Text = "Abbrechen", Left = 292, Top = 372, Width = 80, Height = 28,
|
|
DialogResult = DialogResult.Cancel
|
|
};
|
|
|
|
Controls.AddRange(new Control[] { lblInfo, _tree, _btnOk, _btnCancel });
|
|
AcceptButton = _btnOk;
|
|
CancelButton = _btnCancel;
|
|
}
|
|
|
|
private void BuildTree(List<string> folderPaths, string currentSelection)
|
|
{
|
|
_tree.Nodes.Clear();
|
|
var nodeMap = new Dictionary<string, TreeNode>();
|
|
|
|
foreach (var path in folderPaths)
|
|
{
|
|
// Pfad: \\Store\Kontakte\Unterordner
|
|
var parts = path.TrimStart('\\').Split('\\');
|
|
string runningPath = "";
|
|
TreeNode parent = null;
|
|
|
|
for (int i = 0; i < parts.Length; i++)
|
|
{
|
|
runningPath += "\\" + parts[i];
|
|
|
|
if (!nodeMap.ContainsKey(runningPath))
|
|
{
|
|
var node = new TreeNode(parts[i]);
|
|
// Nur Blatt-Knoten oder bekannte Pfade sind waehlbar
|
|
if (i == parts.Length - 1)
|
|
node.Tag = path; // Vollstaendiger Pfad
|
|
|
|
if (parent == null)
|
|
_tree.Nodes.Add(node);
|
|
else
|
|
parent.Nodes.Add(node);
|
|
|
|
nodeMap[runningPath] = node;
|
|
|
|
// Aktuellen Ordner vorauswaehlen
|
|
if (path == currentSelection)
|
|
{
|
|
_tree.SelectedNode = node;
|
|
node.EnsureVisible();
|
|
}
|
|
}
|
|
|
|
parent = nodeMap[runningPath];
|
|
}
|
|
}
|
|
|
|
_tree.ExpandAll();
|
|
}
|
|
|
|
private void SelectAndClose()
|
|
{
|
|
if (_tree.SelectedNode?.Tag == null)
|
|
{
|
|
MessageBox.Show("Bitte einen Kontaktordner waehlen.", "Hinweis",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
return;
|
|
}
|
|
|
|
SelectedFolderPath = _tree.SelectedNode.Tag.ToString();
|
|
SelectedFolderName = _tree.SelectedNode.Text;
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
}
|
|
}
|
|
}
|