Compare commits
2 Commits
2b9ad5bf3c
...
36aca2c04d
| Author | SHA1 | Date | |
|---|---|---|---|
| 36aca2c04d | |||
| 4f56f28ccb |
@@ -0,0 +1,108 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
|
||||||
|
namespace StarfaceOutlookSync.UI
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Generiert das App-Icon programmatisch (Kontakt-Symbol mit Sync-Pfeilen).
|
||||||
|
/// Kein externes ICO-File noetig.
|
||||||
|
/// </summary>
|
||||||
|
public static class AppIcon
|
||||||
|
{
|
||||||
|
private static Icon _icon;
|
||||||
|
|
||||||
|
public static Icon GetIcon()
|
||||||
|
{
|
||||||
|
if (_icon != null) return _icon;
|
||||||
|
_icon = CreateIcon(32);
|
||||||
|
return _icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Icon GetSmallIcon()
|
||||||
|
{
|
||||||
|
return CreateIcon(16);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Icon CreateIcon(int size)
|
||||||
|
{
|
||||||
|
using (var bmp = new Bitmap(size, size))
|
||||||
|
using (var g = Graphics.FromImage(bmp))
|
||||||
|
{
|
||||||
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||||
|
g.Clear(Color.Transparent);
|
||||||
|
|
||||||
|
if (size >= 32)
|
||||||
|
DrawIcon32(g);
|
||||||
|
else
|
||||||
|
DrawIcon16(g);
|
||||||
|
|
||||||
|
return Icon.FromHandle(bmp.GetHicon());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void DrawIcon32(Graphics g)
|
||||||
|
{
|
||||||
|
// Hintergrund: abgerundetes Quadrat
|
||||||
|
using (var bgBrush = new SolidBrush(Color.FromArgb(0, 120, 212)))
|
||||||
|
{
|
||||||
|
FillRoundedRect(g, bgBrush, 0, 0, 31, 31, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Person (Kopf)
|
||||||
|
using (var whiteBrush = new SolidBrush(Color.White))
|
||||||
|
{
|
||||||
|
g.FillEllipse(whiteBrush, 11, 4, 10, 10);
|
||||||
|
// Person (Koerper)
|
||||||
|
g.FillPie(whiteBrush, 6, 14, 20, 18, 180, 180);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sync-Pfeile unten rechts
|
||||||
|
using (var arrowPen = new Pen(Color.FromArgb(120, 255, 120), 2f))
|
||||||
|
{
|
||||||
|
arrowPen.StartCap = LineCap.Round;
|
||||||
|
arrowPen.EndCap = LineCap.ArrowAnchor;
|
||||||
|
// Pfeil rechts
|
||||||
|
g.DrawArc(arrowPen, 20, 22, 10, 8, 200, 140);
|
||||||
|
arrowPen.Color = Color.FromArgb(255, 200, 80);
|
||||||
|
// Pfeil links
|
||||||
|
g.DrawArc(arrowPen, 20, 22, 10, 8, 20, 140);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void DrawIcon16(Graphics g)
|
||||||
|
{
|
||||||
|
// Hintergrund
|
||||||
|
using (var bgBrush = new SolidBrush(Color.FromArgb(0, 120, 212)))
|
||||||
|
{
|
||||||
|
FillRoundedRect(g, bgBrush, 0, 0, 15, 15, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Person (vereinfacht)
|
||||||
|
using (var whiteBrush = new SolidBrush(Color.White))
|
||||||
|
{
|
||||||
|
g.FillEllipse(whiteBrush, 4, 1, 7, 7);
|
||||||
|
g.FillPie(whiteBrush, 2, 8, 12, 10, 180, 180);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kleiner Sync-Indikator
|
||||||
|
using (var dotBrush = new SolidBrush(Color.FromArgb(120, 255, 120)))
|
||||||
|
{
|
||||||
|
g.FillEllipse(dotBrush, 11, 11, 4, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void FillRoundedRect(Graphics g, Brush brush, int x, int y, int w, int h, int r)
|
||||||
|
{
|
||||||
|
using (var path = new GraphicsPath())
|
||||||
|
{
|
||||||
|
path.AddArc(x, y, r * 2, r * 2, 180, 90);
|
||||||
|
path.AddArc(x + w - r * 2, y, r * 2, r * 2, 270, 90);
|
||||||
|
path.AddArc(x + w - r * 2, y + h - r * 2, r * 2, r * 2, 0, 90);
|
||||||
|
path.AddArc(x, y + h - r * 2, r * 2, r * 2, 90, 90);
|
||||||
|
path.CloseFigure();
|
||||||
|
g.FillPath(brush, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,6 +62,7 @@ namespace StarfaceOutlookSync.UI
|
|||||||
MinimumSize = new Size(500, 350);
|
MinimumSize = new Size(500, 350);
|
||||||
StartPosition = FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
Font = new Font("Segoe UI", 9);
|
Font = new Font("Segoe UI", 9);
|
||||||
|
Icon = AppIcon.GetIcon();
|
||||||
|
|
||||||
// Profil-Liste
|
// Profil-Liste
|
||||||
_profileList = new ListView
|
_profileList = new ListView
|
||||||
@@ -124,10 +125,26 @@ namespace StarfaceOutlookSync.UI
|
|||||||
private void SetupTrayIcon()
|
private void SetupTrayIcon()
|
||||||
{
|
{
|
||||||
_trayMenu = new ContextMenuStrip();
|
_trayMenu = new ContextMenuStrip();
|
||||||
|
|
||||||
|
_trayIcon = new NotifyIcon
|
||||||
|
{
|
||||||
|
Text = "Starface Kontakt-Sync",
|
||||||
|
Icon = AppIcon.GetSmallIcon(),
|
||||||
|
ContextMenuStrip = _trayMenu,
|
||||||
|
Visible = true
|
||||||
|
};
|
||||||
|
|
||||||
|
_trayIcon.DoubleClick += (s, e) => ShowMainWindow();
|
||||||
|
|
||||||
|
UpdateTrayMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateTrayMenu()
|
||||||
|
{
|
||||||
|
_trayMenu.Items.Clear();
|
||||||
_trayMenu.Items.Add("Oeffnen", null, (s, e) => ShowMainWindow());
|
_trayMenu.Items.Add("Oeffnen", null, (s, e) => ShowMainWindow());
|
||||||
_trayMenu.Items.Add("-");
|
_trayMenu.Items.Add("-");
|
||||||
|
|
||||||
// Schnell-Sync fuer jedes Profil
|
|
||||||
var profiles = _profileManager.GetProfiles();
|
var profiles = _profileManager.GetProfiles();
|
||||||
foreach (var p in profiles.Where(p => p.Enabled))
|
foreach (var p in profiles.Where(p => p.Enabled))
|
||||||
{
|
{
|
||||||
@@ -142,16 +159,6 @@ namespace StarfaceOutlookSync.UI
|
|||||||
_trayMenu.Items.Add("-");
|
_trayMenu.Items.Add("-");
|
||||||
|
|
||||||
_trayMenu.Items.Add("Beenden", null, (s, e) => ExitApplication());
|
_trayMenu.Items.Add("Beenden", null, (s, e) => ExitApplication());
|
||||||
|
|
||||||
_trayIcon = new NotifyIcon
|
|
||||||
{
|
|
||||||
Text = "Starface Kontakt-Sync",
|
|
||||||
Icon = SystemIcons.Application, // Placeholder, wird durch eigenes Icon ersetzt
|
|
||||||
ContextMenuStrip = _trayMenu,
|
|
||||||
Visible = true
|
|
||||||
};
|
|
||||||
|
|
||||||
_trayIcon.DoubleClick += (s, e) => ShowMainWindow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetupAutoSync()
|
private void SetupAutoSync()
|
||||||
@@ -219,7 +226,7 @@ namespace StarfaceOutlookSync.UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Tray-Menu aktualisieren
|
// Tray-Menu aktualisieren
|
||||||
SetupTrayIcon();
|
UpdateTrayMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void NewProfile()
|
private void NewProfile()
|
||||||
|
|||||||
Reference in New Issue
Block a user