Files
ssh-access-tui/outlook-bulk-sender/BulkArchiveMailer.AddIn/UI/SettingsForm.Designer.cs
T
redlineoandClaude Sonnet 5 f1c67669fd Fix template list becoming unclickable with many entries via Dock layout
lstTemplates was a direct child of tabTemplates with an explicit pixel
Size, computed once against this dev machine's tab-strip height under
its own DPI/font scale. On the operator's real machine, adding enough
templates pushed rows past the control's actual bottom edge -
maximizing the window didn't help, confirming it wasn't a screen-space
problem but a stale size assumption baked into the designer file (the
same root cause as the earlier add/remove-button visibility bug).

Moved the button strip + list into their own panel (pnlTemplateList),
with the buttons Dock=Top and lstTemplates Dock=Fill - the list's
bounds are now computed by the layout engine against the real
container at runtime, with no absolute size to be wrong about,
regardless of DPI/font scale/window size.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 12:39:49 +03:00

438 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace BulkArchiveMailer.AddIn.UI
{
partial class SettingsForm
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
private System.Windows.Forms.TabControl tabControl;
private System.Windows.Forms.TabPage tabGeneral;
private System.Windows.Forms.TabPage tabTemplates;
private System.Windows.Forms.Label lblArchiveFolder;
private System.Windows.Forms.TextBox txtArchiveFolder;
private System.Windows.Forms.Button btnBrowseFolder;
private System.Windows.Forms.Label lblDomain;
private System.Windows.Forms.TextBox txtDomain;
private System.Windows.Forms.Label lblSignaturePath;
private System.Windows.Forms.TextBox txtSignaturePath;
private System.Windows.Forms.Button btnBrowseSignature;
private System.Windows.Forms.Button btnAutoDetectSignature;
private System.Windows.Forms.CheckBox chkTestModeDefault;
private System.Windows.Forms.Label lblFromAccount;
private System.Windows.Forms.ComboBox cboFromAccount;
private System.Windows.Forms.Panel pnlTemplateList;
private System.Windows.Forms.Panel pnlTemplateButtons;
private System.Windows.Forms.ListBox lstTemplates;
private System.Windows.Forms.Button btnAddTemplate;
private System.Windows.Forms.Button btnRemoveTemplate;
private System.Windows.Forms.Label lblTplDisplayName;
private System.Windows.Forms.TextBox txtTplDisplayName;
private System.Windows.Forms.Label lblTplFileSuffix;
private System.Windows.Forms.TextBox txtTplFileSuffix;
private System.Windows.Forms.Label lblTplFileSuffixHint;
private System.Windows.Forms.Label lblTplLoginPattern;
private System.Windows.Forms.TextBox txtTplLoginPattern;
private System.Windows.Forms.Label lblTplLoginPatternHint;
private System.Windows.Forms.Label lblTplSubject;
private System.Windows.Forms.TextBox txtTplSubject;
private System.Windows.Forms.Label lblTplBody;
private System.Windows.Forms.TextBox txtTplBody;
private System.Windows.Forms.Label lblTplHint;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnResetDefaults;
private void InitializeComponent()
{
this.tabControl = new System.Windows.Forms.TabControl();
this.tabGeneral = new System.Windows.Forms.TabPage();
this.tabTemplates = new System.Windows.Forms.TabPage();
this.lblArchiveFolder = new System.Windows.Forms.Label();
this.txtArchiveFolder = new System.Windows.Forms.TextBox();
this.btnBrowseFolder = new System.Windows.Forms.Button();
this.lblDomain = new System.Windows.Forms.Label();
this.txtDomain = new System.Windows.Forms.TextBox();
this.lblSignaturePath = new System.Windows.Forms.Label();
this.txtSignaturePath = new System.Windows.Forms.TextBox();
this.btnBrowseSignature = new System.Windows.Forms.Button();
this.btnAutoDetectSignature = new System.Windows.Forms.Button();
this.chkTestModeDefault = new System.Windows.Forms.CheckBox();
this.lblFromAccount = new System.Windows.Forms.Label();
this.cboFromAccount = new System.Windows.Forms.ComboBox();
this.pnlTemplateList = new System.Windows.Forms.Panel();
this.pnlTemplateButtons = new System.Windows.Forms.Panel();
this.lstTemplates = new System.Windows.Forms.ListBox();
this.btnAddTemplate = new System.Windows.Forms.Button();
this.btnRemoveTemplate = new System.Windows.Forms.Button();
this.lblTplDisplayName = new System.Windows.Forms.Label();
this.txtTplDisplayName = new System.Windows.Forms.TextBox();
this.lblTplFileSuffix = new System.Windows.Forms.Label();
this.txtTplFileSuffix = new System.Windows.Forms.TextBox();
this.lblTplFileSuffixHint = new System.Windows.Forms.Label();
this.lblTplLoginPattern = new System.Windows.Forms.Label();
this.txtTplLoginPattern = new System.Windows.Forms.TextBox();
this.lblTplLoginPatternHint = new System.Windows.Forms.Label();
this.lblTplSubject = new System.Windows.Forms.Label();
this.txtTplSubject = new System.Windows.Forms.TextBox();
this.lblTplBody = new System.Windows.Forms.Label();
this.txtTplBody = new System.Windows.Forms.TextBox();
this.lblTplHint = new System.Windows.Forms.Label();
this.btnSave = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.btnResetDefaults = new System.Windows.Forms.Button();
this.tabControl.SuspendLayout();
this.tabGeneral.SuspendLayout();
this.tabTemplates.SuspendLayout();
this.pnlTemplateList.SuspendLayout();
this.pnlTemplateButtons.SuspendLayout();
this.SuspendLayout();
//
// tabControl
//
this.tabControl.Location = new System.Drawing.Point(12, 12);
// Height deliberately generous (+80px versus the original 470)
// rather than packed to the computed minimum - see the long
// remark on lstTemplates/btnAddTemplate below for why "just
// enough" turned out not to be enough in practice on a real
// machine (DPI/font-scaling dependent tab-strip height).
this.tabControl.Size = new System.Drawing.Size(660, 550);
this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl.TabPages.AddRange(new System.Windows.Forms.TabPage[] {
this.tabGeneral,
this.tabTemplates});
//
// tabGeneral
//
this.tabGeneral.Text = "Общие";
this.tabGeneral.Padding = new System.Windows.Forms.Padding(12);
this.tabGeneral.UseVisualStyleBackColor = true;
this.tabGeneral.Controls.Add(this.lblArchiveFolder);
this.tabGeneral.Controls.Add(this.txtArchiveFolder);
this.tabGeneral.Controls.Add(this.btnBrowseFolder);
this.tabGeneral.Controls.Add(this.lblDomain);
this.tabGeneral.Controls.Add(this.txtDomain);
this.tabGeneral.Controls.Add(this.lblSignaturePath);
this.tabGeneral.Controls.Add(this.txtSignaturePath);
this.tabGeneral.Controls.Add(this.btnBrowseSignature);
this.tabGeneral.Controls.Add(this.btnAutoDetectSignature);
this.tabGeneral.Controls.Add(this.chkTestModeDefault);
this.tabGeneral.Controls.Add(this.lblFromAccount);
this.tabGeneral.Controls.Add(this.cboFromAccount);
// lblArchiveFolder
this.lblArchiveFolder.Location = new System.Drawing.Point(15, 20);
this.lblArchiveFolder.Size = new System.Drawing.Size(400, 20);
this.lblArchiveFolder.Text = "Папка с архивами ssh-access-tui (общий выходной каталог):";
// txtArchiveFolder
this.txtArchiveFolder.Location = new System.Drawing.Point(15, 43);
this.txtArchiveFolder.Size = new System.Drawing.Size(500, 23);
// btnBrowseFolder
this.btnBrowseFolder.Location = new System.Drawing.Point(525, 41);
this.btnBrowseFolder.Size = new System.Drawing.Size(100, 25);
this.btnBrowseFolder.Text = "Обзор...";
this.btnBrowseFolder.UseVisualStyleBackColor = true;
this.btnBrowseFolder.Click += new System.EventHandler(this.btnBrowseFolder_Click);
// lblDomain
this.lblDomain.Location = new System.Drawing.Point(15, 99);
this.lblDomain.Size = new System.Drawing.Size(400, 20);
this.lblDomain.Text = "Домен электронной почты (login → login@домен):";
// txtDomain
this.txtDomain.Location = new System.Drawing.Point(15, 122);
this.txtDomain.Size = new System.Drawing.Size(300, 23);
// lblSignaturePath
this.lblSignaturePath.Location = new System.Drawing.Point(15, 178);
this.lblSignaturePath.Size = new System.Drawing.Size(610, 20);
this.lblSignaturePath.Text = "Файл подписи (.htm). Пусто = определять автоматически по умолчанию Outlook при каждой отправке:";
// txtSignaturePath
this.txtSignaturePath.Location = new System.Drawing.Point(15, 201);
this.txtSignaturePath.Size = new System.Drawing.Size(500, 23);
// btnBrowseSignature
this.btnBrowseSignature.Location = new System.Drawing.Point(525, 199);
this.btnBrowseSignature.Size = new System.Drawing.Size(100, 25);
this.btnBrowseSignature.Text = "Обзор...";
this.btnBrowseSignature.UseVisualStyleBackColor = true;
this.btnBrowseSignature.Click += new System.EventHandler(this.btnBrowseSignature_Click);
// btnAutoDetectSignature
this.btnAutoDetectSignature.Location = new System.Drawing.Point(15, 247);
this.btnAutoDetectSignature.Size = new System.Drawing.Size(280, 25);
this.btnAutoDetectSignature.Text = "Определить автоматически сейчас";
this.btnAutoDetectSignature.UseVisualStyleBackColor = true;
this.btnAutoDetectSignature.Click += new System.EventHandler(this.btnAutoDetectSignature_Click);
// chkTestModeDefault
this.chkTestModeDefault.Location = new System.Drawing.Point(15, 306);
this.chkTestModeDefault.Size = new System.Drawing.Size(610, 24);
this.chkTestModeDefault.Text = "По умолчанию открывать предпросмотр в тестовом режиме (сохранять в Черновики)";
this.chkTestModeDefault.UseVisualStyleBackColor = true;
// lblFromAccount
this.lblFromAccount.Location = new System.Drawing.Point(15, 378);
this.lblFromAccount.Size = new System.Drawing.Size(400, 20);
this.lblFromAccount.Text = "Отправлять от (аккаунт Outlook текущей сессии):";
// cboFromAccount
this.cboFromAccount.Location = new System.Drawing.Point(15, 401);
this.cboFromAccount.Size = new System.Drawing.Size(500, 23);
this.cboFromAccount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
//
// tabTemplates
//
this.tabTemplates.Text = "Шаблоны";
this.tabTemplates.Padding = new System.Windows.Forms.Padding(12);
this.tabTemplates.UseVisualStyleBackColor = true;
this.tabTemplates.Controls.Add(this.pnlTemplateList);
this.tabTemplates.Controls.Add(this.lblTplDisplayName);
this.tabTemplates.Controls.Add(this.txtTplDisplayName);
this.tabTemplates.Controls.Add(this.lblTplFileSuffix);
this.tabTemplates.Controls.Add(this.txtTplFileSuffix);
this.tabTemplates.Controls.Add(this.lblTplFileSuffixHint);
this.tabTemplates.Controls.Add(this.lblTplLoginPattern);
this.tabTemplates.Controls.Add(this.txtTplLoginPattern);
this.tabTemplates.Controls.Add(this.lblTplLoginPatternHint);
this.tabTemplates.Controls.Add(this.lblTplSubject);
this.tabTemplates.Controls.Add(this.txtTplSubject);
this.tabTemplates.Controls.Add(this.lblTplBody);
this.tabTemplates.Controls.Add(this.txtTplBody);
this.tabTemplates.Controls.Add(this.lblTplHint);
// pnlTemplateList
//
// Left-column container for the template picker (buttons +
// list). Its own outer Location/Size/Anchor still use fixed
// pixel coordinates relative to the tab page, exactly like
// before - that outer placement was never the problem. What
// is Dock-based from here down is everything INSIDE this
// panel, which is the part that actually broke on a real
// machine: lstTemplates used to be a direct child of
// tabTemplates with an explicit Size, so its bottom edge (and
// therefore its scrollability/clickability once many
// templates were added) depended on a hand-computed pixel
// height that was only ever verified on the dev machine's own
// DPI/font scale. Docking removes that computation entirely -
// see pnlTemplateButtons/lstTemplates below.
this.pnlTemplateList.Location = new System.Drawing.Point(15, 20);
this.pnlTemplateList.Size = new System.Drawing.Size(190, 467);
this.pnlTemplateList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
// Dock order matters here: pnlTemplateButtons (Dock=Top) is
// added FIRST, lstTemplates (Dock=Fill) SECOND, so the Fill
// control's layout is computed against whatever client area
// remains under the already-docked top strip.
this.pnlTemplateList.Controls.Add(this.pnlTemplateButtons);
this.pnlTemplateList.Controls.Add(this.lstTemplates);
// pnlTemplateButtons
//
// Fixed-height strip pinned to the top of pnlTemplateList.
// btnAddTemplate/btnRemoveTemplate live inside it at a fixed
// offset from ITS top-left corner (0,0)/(95,0) - a small,
// never-resized container, so plain Location placement here
// carries none of the earlier risk (that risk only existed
// when the same fixed coordinates were relative to the whole,
// variable-height tab page).
this.pnlTemplateButtons.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlTemplateButtons.Size = new System.Drawing.Size(190, 35);
this.pnlTemplateButtons.Controls.Add(this.btnAddTemplate);
this.pnlTemplateButtons.Controls.Add(this.btnRemoveTemplate);
// btnAddTemplate
this.btnAddTemplate.Location = new System.Drawing.Point(0, 0);
this.btnAddTemplate.Size = new System.Drawing.Size(90, 27);
this.btnAddTemplate.Text = "+ Добавить";
this.btnAddTemplate.UseVisualStyleBackColor = true;
this.btnAddTemplate.Click += new System.EventHandler(this.btnAddTemplate_Click);
// btnRemoveTemplate
this.btnRemoveTemplate.Location = new System.Drawing.Point(95, 0);
this.btnRemoveTemplate.Size = new System.Drawing.Size(90, 27);
this.btnRemoveTemplate.Text = "Удалить";
this.btnRemoveTemplate.UseVisualStyleBackColor = true;
this.btnRemoveTemplate.Click += new System.EventHandler(this.btnRemoveTemplate_Click);
// lstTemplates
//
// Dock=Fill: always occupies exactly whatever area of
// pnlTemplateList is left below pnlTemplateButtons, computed
// by the layout engine at every resize/DPI - not a hand-picked
// pixel height that can end up too short (and therefore
// effectively unscrollable/unclickable for items past the cut
// -off) on a machine with different DPI/font scaling than the
// one this was last tested on. IntegralHeight = false just
// means the list doesn't force its height to a whole multiple
// of the item height - irrelevant to whether Fill can "escape"
// the panel, which it structurally cannot.
this.lstTemplates.Dock = System.Windows.Forms.DockStyle.Fill;
this.lstTemplates.IntegralHeight = false;
this.lstTemplates.SelectedIndexChanged += new System.EventHandler(this.lstTemplates_SelectedIndexChanged);
// lblTplDisplayName
this.lblTplDisplayName.Location = new System.Drawing.Point(220, 20);
this.lblTplDisplayName.Size = new System.Drawing.Size(200, 20);
this.lblTplDisplayName.Text = "Название:";
// txtTplDisplayName
this.txtTplDisplayName.Location = new System.Drawing.Point(220, 43);
this.txtTplDisplayName.Size = new System.Drawing.Size(410, 23);
this.txtTplDisplayName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right));
this.txtTplDisplayName.Leave += new System.EventHandler(this.txtTplDisplayName_Leave);
// lblTplFileSuffix
this.lblTplFileSuffix.Location = new System.Drawing.Point(220, 78);
this.lblTplFileSuffix.Size = new System.Drawing.Size(200, 20);
this.lblTplFileSuffix.Text = "Суффикс файла:";
// txtTplFileSuffix
this.txtTplFileSuffix.Location = new System.Drawing.Point(220, 101);
this.txtTplFileSuffix.Size = new System.Drawing.Size(200, 23);
// lblTplFileSuffixHint
this.lblTplFileSuffixHint.Location = new System.Drawing.Point(220, 127);
this.lblTplFileSuffixHint.Size = new System.Drawing.Size(410, 20);
this.lblTplFileSuffixHint.Text = "Файл: {login}_<суффикс>.7z";
this.lblTplFileSuffixHint.ForeColor = System.Drawing.SystemColors.GrayText;
// lblTplLoginPattern
this.lblTplLoginPattern.Location = new System.Drawing.Point(220, 160);
this.lblTplLoginPattern.Size = new System.Drawing.Size(410, 20);
this.lblTplLoginPattern.Text = "Фильтр логина (regex, необязательно):";
// txtTplLoginPattern
this.txtTplLoginPattern.Location = new System.Drawing.Point(220, 183);
this.txtTplLoginPattern.Size = new System.Drawing.Size(410, 23);
this.txtTplLoginPattern.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right));
// lblTplLoginPatternHint
this.lblTplLoginPatternHint.Location = new System.Drawing.Point(220, 209);
this.lblTplLoginPatternHint.Size = new System.Drawing.Size(410, 32);
this.lblTplLoginPatternHint.Text = "Пусто = любой логин. Пример: ^a-.* — только логины, начинающиеся с \"a-\".";
this.lblTplLoginPatternHint.ForeColor = System.Drawing.SystemColors.GrayText;
// lblTplSubject
this.lblTplSubject.Location = new System.Drawing.Point(220, 254);
this.lblTplSubject.Size = new System.Drawing.Size(200, 20);
this.lblTplSubject.Text = "Тема письма:";
// txtTplSubject
this.txtTplSubject.Location = new System.Drawing.Point(220, 277);
this.txtTplSubject.Size = new System.Drawing.Size(410, 23);
this.txtTplSubject.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right));
// lblTplBody
this.lblTplBody.Location = new System.Drawing.Point(220, 312);
this.lblTplBody.Size = new System.Drawing.Size(200, 20);
this.lblTplBody.Text = "Тело письма (HTML):";
// txtTplBody
this.txtTplBody.Location = new System.Drawing.Point(220, 335);
this.txtTplBody.Size = new System.Drawing.Size(410, 125);
this.txtTplBody.Multiline = true;
this.txtTplBody.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtTplBody.AcceptsReturn = true;
this.txtTplBody.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
// lblTplHint
this.lblTplHint.Location = new System.Drawing.Point(220, 467);
this.lblTplHint.Size = new System.Drawing.Size(410, 20);
this.lblTplHint.Text = "Доступные плейсхолдеры: {Login}, {Email}, {Date}";
this.lblTplHint.ForeColor = System.Drawing.SystemColors.GrayText;
this.lblTplHint.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
//
// btnSave / btnCancel / btnResetDefaults
//
this.btnResetDefaults.Location = new System.Drawing.Point(12, 574);
this.btnResetDefaults.Size = new System.Drawing.Size(220, 30);
this.btnResetDefaults.Text = "Сбросить шаблоны по умолчанию";
this.btnResetDefaults.UseVisualStyleBackColor = true;
this.btnResetDefaults.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnResetDefaults.Click += new System.EventHandler(this.btnResetDefaults_Click);
this.btnCancel.Location = new System.Drawing.Point(479, 574);
this.btnCancel.Size = new System.Drawing.Size(90, 30);
this.btnCancel.Text = "Отмена";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
this.btnSave.Location = new System.Drawing.Point(575, 574);
this.btnSave.Size = new System.Drawing.Size(97, 30);
this.btnSave.Text = "Сохранить";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// SettingsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(684, 616);
this.MinimumSize = new System.Drawing.Size(560, 500);
this.Controls.Add(this.tabControl);
this.Controls.Add(this.btnResetDefaults);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnSave);
this.Text = "BulkArchiveMailer — настройки";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
this.MaximizeBox = true;
this.AcceptButton = null;
this.CancelButton = this.btnCancel;
this.tabControl.ResumeLayout(false);
this.tabGeneral.ResumeLayout(false);
this.tabGeneral.PerformLayout();
this.pnlTemplateButtons.ResumeLayout(false);
this.pnlTemplateList.ResumeLayout(false);
this.tabTemplates.ResumeLayout(false);
this.tabTemplates.PerformLayout();
this.ResumeLayout(false);
}
}
}