mirror of
https://github.com/wmjordan/PDFPatcher.git
synced 2026-10-19 14:22:44 +08:00
760a6e4159
-修复部分列表控件在具有内容时初始显示仍为空的问题
167 lines
5.6 KiB
C#
167 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using BrightIdeasSoftware;
|
|
using PDFPatcher.Common;
|
|
using PDFPatcher.Model;
|
|
|
|
namespace PDFPatcher.Functions
|
|
{
|
|
sealed partial class PageSettingsEditor : UserControl
|
|
{
|
|
readonly TypedObjectListView<Model.PageBoxSettings> _SettingsBox;
|
|
private List<Model.PageBoxSettings> _Settings;
|
|
[Browsable(false)]
|
|
public List<Model.PageBoxSettings> Settings {
|
|
get => _Settings;
|
|
set { _Settings = value; _SettingsBox.Objects = value; }
|
|
}
|
|
|
|
public PageSettingsEditor() {
|
|
InitializeComponent();
|
|
this.OnFirstLoad(OnLoad);
|
|
_SettingsBox = new TypedObjectListView<Model.PageBoxSettings>(_PageSettingsBox);
|
|
new TypedColumn<Model.PageBoxSettings>(_PageFilterColumn) {
|
|
AspectGetter = (o) => {
|
|
var f = o.Filter;
|
|
var eo = f & (PageFilterFlag.Even | PageFilterFlag.Odd);
|
|
var pl = f & (PageFilterFlag.Landscape | PageFilterFlag.Portrait);
|
|
return f == PageFilterFlag.NotSpecified ? "所有页面"
|
|
: String.Concat(
|
|
eo == PageFilterFlag.Odd ? "单数"
|
|
: eo == PageFilterFlag.Even ? "双数"
|
|
: String.Empty,
|
|
pl == PageFilterFlag.Landscape ? "横向"
|
|
: pl == PageFilterFlag.Portrait ? "纵向"
|
|
: String.Empty,
|
|
"页");
|
|
}
|
|
};
|
|
new TypedColumn<PageBoxSettings>(_SettingsColumn) {
|
|
AspectGetter = (o) => {
|
|
var r = o.Rotation;
|
|
return String.Concat(
|
|
r == 0 ? Constants.Content.RotationDirections.Zero
|
|
: r == 90 ? Constants.Content.RotationDirections.Right
|
|
: r == 180 ? Constants.Content.RotationDirections.HalfClock
|
|
: r == 270 ? Constants.Content.RotationDirections.Left
|
|
: Constants.Content.RotationDirections.Zero
|
|
);
|
|
}
|
|
};
|
|
new TypedColumn<Model.PageBoxSettings>(_PageRangeColumn) {
|
|
AspectGetter = (o) => { return String.IsNullOrEmpty(o.PageRanges) ? Constants.PageFilterTypes.AllPages : o.PageRanges; },
|
|
AspectPutter = (o, v) => {
|
|
var s = v as string;
|
|
o.PageRanges = s != Constants.PageFilterTypes.AllPages ? s : null;
|
|
}
|
|
};
|
|
_PageSettingsBox.FormatRow += (s, args) => {
|
|
args.Item.SubItems[0].Text = (args.RowIndex + 1).ToText();
|
|
};
|
|
}
|
|
|
|
void OnLoad() {
|
|
_PageSettingsBox.FixEditControlWidth();
|
|
_PageSettingsBox.ScaleColumnWidths();
|
|
_PageSettingsBox.FullRowSelect = true;
|
|
_PageSettingsBox.LabelEdit = false;
|
|
_PageSettingsBox.CellClick += (s, args) => {
|
|
if (args.Column == _PageFilterColumn) {
|
|
ShowMenuForClickedCell(args, _PageRangeFilterTypeMenu);
|
|
}
|
|
else if (args.Column == _SettingsColumn) {
|
|
ShowMenuForClickedCell(args, _PageSettingsMenu);
|
|
}
|
|
};
|
|
_PageRangeFilterTypeMenu.Opening += (s, args) => {
|
|
var f = _SettingsBox.SelectedObject.Filter;
|
|
_AllPagesMenu.Checked = f == PageFilterFlag.All || f == PageFilterFlag.NotSpecified;
|
|
_OddPagesMenu.Checked = (f & PageFilterFlag.Odd) == PageFilterFlag.Odd;
|
|
_EvenPagesMenu.Checked = (f & PageFilterFlag.Even) == PageFilterFlag.Even;
|
|
_PortraitPagesMenu.Checked = (f & PageFilterFlag.Portrait) == PageFilterFlag.Portrait;
|
|
_LandscapePagesMenu.Checked = (f & PageFilterFlag.Landscape) == PageFilterFlag.Landscape;
|
|
};
|
|
_PageRangeFilterTypeMenu.ItemClicked += (s, args) => {
|
|
var o = _SettingsBox.SelectedObject;
|
|
var i = args.ClickedItem;
|
|
if (_AllPagesMenu == i) {
|
|
o.Filter = PageFilterFlag.NotSpecified;
|
|
}
|
|
else if (_OddPagesMenu == i) {
|
|
o.Filter &= ~PageFilterFlag.Even;
|
|
o.Filter ^= PageFilterFlag.Odd;
|
|
}
|
|
else if (_EvenPagesMenu == i) {
|
|
o.Filter &= ~PageFilterFlag.Odd;
|
|
o.Filter ^= PageFilterFlag.Even;
|
|
}
|
|
else if (_LandscapePagesMenu == i) {
|
|
o.Filter &= ~PageFilterFlag.Portrait;
|
|
o.Filter ^= PageFilterFlag.Landscape;
|
|
}
|
|
else if (_PortraitPagesMenu == i) {
|
|
o.Filter &= ~PageFilterFlag.Landscape;
|
|
o.Filter ^= PageFilterFlag.Portrait;
|
|
}
|
|
if (o.Filter == PageFilterFlag.All) {
|
|
o.Filter = PageFilterFlag.NotSpecified;
|
|
}
|
|
_PageSettingsBox.RefreshObject(_PageSettingsBox.SelectedObject);
|
|
};
|
|
_RotateMenu.DropDownOpening += (s, args) => {
|
|
var r = _SettingsBox.SelectedObject.Rotation;
|
|
foreach (ToolStripMenuItem item in _RotateMenu.DropDownItems) {
|
|
item.Checked = false;
|
|
}
|
|
switch (r) {
|
|
case 0: _RotateZeroMenuItem.Checked = true; break;
|
|
case 90: _RotateRightMenuItem.Checked = true; break;
|
|
case 180: _Rotate180MenuItem.Checked = true; break;
|
|
case 270: _RotateLeftMenuItem.Checked = true; break;
|
|
default: _RotateZeroMenuItem.Checked = true; break;
|
|
}
|
|
};
|
|
_RotateMenu.DropDownItemClicked += (s, args) => {
|
|
var o = _SettingsBox.SelectedObject;
|
|
var i = args.ClickedItem;
|
|
if (_RotateZeroMenuItem == i) {
|
|
o.Rotation = 0;
|
|
}
|
|
else if (_RotateRightMenuItem == i) {
|
|
o.Rotation = 90;
|
|
}
|
|
else if (_RotateLeftMenuItem == i) {
|
|
o.Rotation = 270;
|
|
}
|
|
else if (_Rotate180MenuItem == i) {
|
|
o.Rotation = 180;
|
|
}
|
|
_PageSettingsBox.RefreshObject(o);
|
|
};
|
|
}
|
|
|
|
private void ShowMenuForClickedCell(CellClickEventArgs args, ContextMenuStrip menu) {
|
|
var b = _PageSettingsBox.GetSubItem(args.RowIndex, args.ColumnIndex).Bounds;
|
|
menu.Show(_PageSettingsBox, b.Left, b.Bottom);
|
|
}
|
|
|
|
private void _AddPageSettingsButton_Click(object sender, EventArgs e) {
|
|
_Settings.Add(new PageBoxSettings());
|
|
_SettingsBox.Objects = _Settings;
|
|
}
|
|
|
|
private void _RemovePageSettingsButton_Click(object sender, EventArgs e) {
|
|
_PageSettingsBox.RemoveObjects(_PageSettingsBox.SelectedObjects);
|
|
_Settings.Clear();
|
|
_Settings.AddRange(_SettingsBox.Objects);
|
|
}
|
|
|
|
|
|
}
|
|
}
|