Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion TrafficMonitor/ClassicalTaskbarDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ void CClassicalTaskbarDlg::AdjustTaskbarWndPos(bool force_adjust)

//设置任务栏窗口的垂直位置
m_rect.MoveToY((m_rcBar.Height() - m_rect.Height()) / 2);
if (theApp.m_taskbar_data.horizontal_arrange && theApp.m_win_version.IsWindows7())
if (theApp.m_taskbar_data.IsHorizontalArrangeForDisplay(GetDisplayIndex()) && theApp.m_win_version.IsWindows7())
m_rect.MoveToY(m_rect.top + DPI(1));
MoveWindow(m_rect);
}
Expand Down
295 changes: 292 additions & 3 deletions TrafficMonitor/CommonData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,9 +251,298 @@ void TaskBarSettingData::ValidWindowOffsetTop()
void TaskBarSettingData::ValidWindowOffsetLeft()
{
if (window_offset_left < -800)
window_offset_top = -800;
if (window_offset_top > 800)
window_offset_top = 800;
window_offset_left = -800;
if (window_offset_left > 800)
window_offset_left = 800;
}

DisplayItemSet TaskBarSettingData::GetDisplayItemForDisplay(int display_index) const
{
auto iter = display_item_per_display.find(display_index);
if (iter != display_item_per_display.end())
{
DisplayItemSet display_item_set;
display_item_set.FromInt(iter->second);
return display_item_set;
}
return display_item;
}

void TaskBarSettingData::SetDisplayItemForDisplay(int display_index, const DisplayItemSet& display_item_value)
{
display_item_per_display[display_index] = display_item_value.ToInt();
if (display_index == 0)
display_item = display_item_value;
}

int TaskBarSettingData::GetItemSpaceForDisplay(int display_index) const
{
auto iter = item_space_per_display.find(display_index);
if (iter != item_space_per_display.end())
return iter->second;
return item_space;
}

void TaskBarSettingData::SetItemSpaceForDisplay(int display_index, int value)
{
int clamped_value = value;
if (clamped_value < 0)
clamped_value = 0;
if (clamped_value > 32)
clamped_value = 32;

item_space_per_display[display_index] = clamped_value;
if (display_index == 0)
item_space = clamped_value;
}

int TaskBarSettingData::GetVerticalMarginForDisplay(int display_index) const
{
auto iter = vertical_margin_per_display.find(display_index);
if (iter != vertical_margin_per_display.end())
return iter->second;
return vertical_margin;
}

void TaskBarSettingData::SetVerticalMarginForDisplay(int display_index, int value)
{
int clamped_value = value;
if (clamped_value < -10)
clamped_value = -10;
if (clamped_value > 10)
clamped_value = 10;

vertical_margin_per_display[display_index] = clamped_value;
if (display_index == 0)
vertical_margin = clamped_value;
}

bool TaskBarSettingData::IsSpeedShortModeForDisplay(int display_index) const
{
auto iter = speed_short_mode_per_display.find(display_index);
if (iter != speed_short_mode_per_display.end())
return iter->second;
return speed_short_mode;
}

void TaskBarSettingData::SetSpeedShortModeForDisplay(int display_index, bool speed_short_mode_value)
{
speed_short_mode_per_display[display_index] = speed_short_mode_value;
if (display_index == 0)
speed_short_mode = speed_short_mode_value;
}

bool TaskBarSettingData::IsValueRightAlignForDisplay(int display_index) const
{
auto iter = value_right_align_per_display.find(display_index);
if (iter != value_right_align_per_display.end())
return iter->second;
return value_right_align;
}

void TaskBarSettingData::SetValueRightAlignForDisplay(int display_index, bool value_right_align_value)
{
value_right_align_per_display[display_index] = value_right_align_value;
if (display_index == 0)
value_right_align = value_right_align_value;
}

int TaskBarSettingData::GetDigitsNumberForDisplay(int display_index) const
{
auto iter = digits_number_per_display.find(display_index);
if (iter != digits_number_per_display.end())
{
int value = iter->second;
if (value < 3)
value = 3;
if (value > 7)
value = 7;
return value;
}

int value = digits_number;
if (value < 3)
value = 3;
if (value > 7)
value = 7;
return value;
}

void TaskBarSettingData::SetDigitsNumberForDisplay(int display_index, int digits_number_value)
{
int clamped_value = digits_number_value;
if (clamped_value < 3)
clamped_value = 3;
if (clamped_value > 7)
clamped_value = 7;

digits_number_per_display[display_index] = clamped_value;
if (display_index == 0)
digits_number = clamped_value;
}

bool TaskBarSettingData::IsHorizontalArrangeForDisplay(int display_index) const
{
auto iter = horizontal_arrange_per_display.find(display_index);
if (iter != horizontal_arrange_per_display.end())
return iter->second;
return horizontal_arrange;
}

void TaskBarSettingData::SetHorizontalArrangeForDisplay(int display_index, bool horizontal_arrange_value)
{
horizontal_arrange_per_display[display_index] = horizontal_arrange_value;
if (display_index == 0)
horizontal_arrange = horizontal_arrange_value;
}

bool TaskBarSettingData::IsSeparateValueUnitWithSpaceForDisplay(int display_index) const
{
auto iter = separate_value_unit_with_space_per_display.find(display_index);
if (iter != separate_value_unit_with_space_per_display.end())
return iter->second;
return separate_value_unit_with_space;
}

void TaskBarSettingData::SetSeparateValueUnitWithSpaceForDisplay(int display_index, bool separate_value_unit_with_space_value)
{
separate_value_unit_with_space_per_display[display_index] = separate_value_unit_with_space_value;
if (display_index == 0)
separate_value_unit_with_space = separate_value_unit_with_space_value;
}

bool TaskBarSettingData::IsShowToolTipForDisplay(int display_index) const
{
auto iter = show_tool_tip_per_display.find(display_index);
if (iter != show_tool_tip_per_display.end())
return iter->second;
return show_tool_tip;
}

void TaskBarSettingData::SetShowToolTipForDisplay(int display_index, bool show_tool_tip_value)
{
show_tool_tip_per_display[display_index] = show_tool_tip_value;
if (display_index == 0)
show_tool_tip = show_tool_tip_value;
}

MemoryDisplay TaskBarSettingData::GetMemoryDisplayForDisplay(int display_index) const
{
auto iter = memory_display_per_display.find(display_index);
if (iter != memory_display_per_display.end())
{
int value = iter->second;
if (value < static_cast<int>(MemoryDisplay::USAGE_PERCENTAGE) || value > static_cast<int>(MemoryDisplay::MEMORY_AVAILABLE))
return memory_display;
return static_cast<MemoryDisplay>(value);
}
return memory_display;
}

void TaskBarSettingData::SetMemoryDisplayForDisplay(int display_index, MemoryDisplay memory_display_value)
{
int value = static_cast<int>(memory_display_value);
if (value < static_cast<int>(MemoryDisplay::USAGE_PERCENTAGE))
value = static_cast<int>(MemoryDisplay::USAGE_PERCENTAGE);
if (value > static_cast<int>(MemoryDisplay::MEMORY_AVAILABLE))
value = static_cast<int>(MemoryDisplay::MEMORY_AVAILABLE);

memory_display_per_display[display_index] = value;
if (display_index == 0)
memory_display = static_cast<MemoryDisplay>(value);
}

int TaskBarSettingData::GetWindowOffsetTopForDisplay(int display_index) const
{
auto iter = window_offset_top_per_display.find(display_index);
if (iter != window_offset_top_per_display.end())
return iter->second;
return window_offset_top;
}

void TaskBarSettingData::SetWindowOffsetTopForDisplay(int display_index, int value)
{
int clamped_value = value;
if (clamped_value < -20)
clamped_value = -20;
if (clamped_value > 20)
clamped_value = 20;

window_offset_top_per_display[display_index] = clamped_value;
if (display_index == 0)
window_offset_top = clamped_value;
}

int TaskBarSettingData::GetWindowOffsetLeftForDisplay(int display_index) const
{
auto iter = window_offset_left_per_display.find(display_index);
if (iter != window_offset_left_per_display.end())
return iter->second;
return window_offset_left;
}

void TaskBarSettingData::SetWindowOffsetLeftForDisplay(int display_index, int value)
{
int clamped_value = value;
if (clamped_value < -800)
clamped_value = -800;
if (clamped_value > 800)
clamped_value = 800;

window_offset_left_per_display[display_index] = clamped_value;
if (display_index == 0)
window_offset_left = clamped_value;
}

bool TaskBarSettingData::IsTaskbarWndSnapForDisplay(int display_index) const
{
auto iter = tbar_wnd_snap_per_display.find(display_index);
if (iter != tbar_wnd_snap_per_display.end())
return iter->second;
return tbar_wnd_snap;
}

void TaskBarSettingData::SetTaskbarWndSnapForDisplay(int display_index, bool snap)
{
tbar_wnd_snap_per_display[display_index] = snap;
if (display_index == 0)
tbar_wnd_snap = snap;
}

bool TaskBarSettingData::IsAvoidOverlapWithWidgetsForDisplay(int display_index) const
{
auto iter = avoid_overlap_with_widgets_per_display.find(display_index);
if (iter != avoid_overlap_with_widgets_per_display.end())
return iter->second;
return avoid_overlap_with_widgets;
}

void TaskBarSettingData::SetAvoidOverlapWithWidgetsForDisplay(int display_index, bool avoid_overlap)
{
avoid_overlap_with_widgets_per_display[display_index] = avoid_overlap;
if (display_index == 0)
avoid_overlap_with_widgets = avoid_overlap;
}

int TaskBarSettingData::GetTaskbarLeftSpaceForDisplay(int display_index) const
{
auto iter = taskbar_left_space_win11_per_display.find(display_index);
if (iter != taskbar_left_space_win11_per_display.end())
return iter->second;
return taskbar_left_space_win11;
}

void TaskBarSettingData::SetTaskbarLeftSpaceForDisplay(int display_index, int value)
{
int clamped_value = value;
if (clamped_value < 0)
clamped_value = 0;
if (clamped_value > 300)
clamped_value = 300;

taskbar_left_space_win11_per_display[display_index] = clamped_value;
if (display_index == 0)
taskbar_left_space_win11 = clamped_value;
}

unsigned __int64 TaskBarSettingData::GetNetspeedFigureMaxValueInBytes() const
Expand Down
48 changes: 46 additions & 2 deletions TrafficMonitor/CommonData.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,27 +312,71 @@ struct TaskBarSettingData : public PublicSettingData
DisplayItemSet display_item{ TDI_UP, TDI_DOWN }; //任务栏窗口显示的项目
StringSet plugin_display_item; //任务窗口显示的插件项目

bool show_taskbar_wnd_in_secondary_display{ false }; //是否在副显示器上显示任务栏窗口
int secondary_display_index{}; //在第几个副显示器上显示任务栏窗口
std::set<int> taskbar_display_indices{ 0 }; //显示任务栏窗口的显示器序号:0为主显示器,1及以上为副显示器序号+1
std::map<int, int> display_item_per_display; //各显示器显示项目覆盖值,key: 显示器序号, value: DisplayItemSet::ToInt()
std::map<int, bool> speed_short_mode_per_display; //网速简洁模式覆盖值,key: 显示器序号
bool value_right_align{ false }; //数值是否右对齐
std::map<int, bool> value_right_align_per_display; //数值右对齐覆盖值,key: 显示器序号
int digits_number{ 4 }; //数据位数
std::map<int, int> digits_number_per_display; //数据位数覆盖值,key: 显示器序号
bool horizontal_arrange{ true }; //水平排列
std::map<int, bool> horizontal_arrange_per_display; //水平排列覆盖值,key: 显示器序号
bool show_status_bar{ true }; //显示 CPU/内存的状态条
std::map<int, bool> separate_value_unit_with_space_per_display; //数值和单位空格分隔覆盖值,key: 显示器序号
std::map<int, bool> show_tool_tip_per_display; //鼠标提示覆盖值,key: 显示器序号
std::map<int, int> memory_display_per_display; //内存显示方式覆盖值,key: 显示器序号,value: MemoryDisplay
bool tbar_wnd_on_left{ false }; //如果为true,则任务栏窗口显示在任务栏的左侧(或上方)
bool tbar_wnd_snap{ false }; //如果为true,则在Win11中任务栏窗口贴靠中间任务栏,否则靠近边缘
std::map<int, bool> tbar_wnd_snap_per_display; //Win11下任务栏窗口贴靠方式覆盖值,key: 显示器序号
bool cm_graph_type{ false }; //如果为false,默认原样式,柱状图显示占用率,如为true,滚动显示占用率
bool show_graph_dashed_box{ true }; //显示占用图虚线框

int item_space{}; //项目间距
std::map<int, int> item_space_per_display; //各显示器项目间距覆盖值,key: 显示器序号
int vertical_margin{}; //项目垂直间距
std::map<int, int> vertical_margin_per_display; //各显示器垂直间距覆盖值,key: 显示器序号
int window_offset_top{}; //任务栏窗口顶部边距
std::map<int, int> window_offset_top_per_display; //Win11任务栏窗口顶部偏移覆盖值,key: 显示器序号
int window_offset_left{}; //任务栏窗口左侧边距
std::map<int, int> window_offset_left_per_display; //Win11任务栏窗口左侧偏移覆盖值,key: 显示器序号
void ValidItemSpace();
void ValidVerticalMargin();
void ValidWindowOffsetTop();
void ValidWindowOffsetLeft();
DisplayItemSet GetDisplayItemForDisplay(int display_index) const;
void SetDisplayItemForDisplay(int display_index, const DisplayItemSet& display_item_value);
int GetItemSpaceForDisplay(int display_index) const;
void SetItemSpaceForDisplay(int display_index, int value);
int GetVerticalMarginForDisplay(int display_index) const;
void SetVerticalMarginForDisplay(int display_index, int value);
bool IsSpeedShortModeForDisplay(int display_index) const;
void SetSpeedShortModeForDisplay(int display_index, bool speed_short_mode);
bool IsValueRightAlignForDisplay(int display_index) const;
void SetValueRightAlignForDisplay(int display_index, bool value_right_align);
int GetDigitsNumberForDisplay(int display_index) const;
void SetDigitsNumberForDisplay(int display_index, int digits_number);
bool IsHorizontalArrangeForDisplay(int display_index) const;
void SetHorizontalArrangeForDisplay(int display_index, bool horizontal_arrange);
bool IsSeparateValueUnitWithSpaceForDisplay(int display_index) const;
void SetSeparateValueUnitWithSpaceForDisplay(int display_index, bool separate_value_unit_with_space);
bool IsShowToolTipForDisplay(int display_index) const;
void SetShowToolTipForDisplay(int display_index, bool show_tool_tip);
MemoryDisplay GetMemoryDisplayForDisplay(int display_index) const;
void SetMemoryDisplayForDisplay(int display_index, MemoryDisplay memory_display);
int GetWindowOffsetTopForDisplay(int display_index) const;
void SetWindowOffsetTopForDisplay(int display_index, int value);
int GetWindowOffsetLeftForDisplay(int display_index) const;
void SetWindowOffsetLeftForDisplay(int display_index, int value);
bool IsTaskbarWndSnapForDisplay(int display_index) const;
void SetTaskbarWndSnapForDisplay(int display_index, bool snap);
bool avoid_overlap_with_widgets{ false }; //避免与右侧小组件重叠
std::map<int, bool> avoid_overlap_with_widgets_per_display; //Win11下避免与右侧小组件重叠覆盖值,key: 显示器序号
bool IsAvoidOverlapWithWidgetsForDisplay(int display_index) const;
void SetAvoidOverlapWithWidgetsForDisplay(int display_index, bool avoid_overlap);
int taskbar_left_space_win11{}; //Windows11下,任务栏小工具的宽度
std::map<int, int> taskbar_left_space_win11_per_display; //Win11下小工具宽度覆盖值,key: 显示器序号
int GetTaskbarLeftSpaceForDisplay(int display_index) const;
void SetTaskbarLeftSpaceForDisplay(int display_index, int value);
int taskbar_right_space_win11{}; //Windows11下,任务栏窗口距离任务栏右侧的宽度(仅当无法获取到任务栏TrayNotifyWnd窗口的位置时有效)

bool show_netspeed_figure{ false }; //是否显示网速占用图
Expand Down
Loading