fixed some numbers, especially. for the privacy dialog
This commit is contained in:
@@ -6,6 +6,19 @@ import getpass
|
|||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def get_resource_path(relative_path):
|
||||||
|
"""Get absolute path to resource, works for dev and for PyInstaller"""
|
||||||
|
try:
|
||||||
|
# PyInstaller creates a temp folder and stores path in _MEIPASS
|
||||||
|
base_path = sys._MEIPASS
|
||||||
|
except Exception:
|
||||||
|
base_path = os.path.abspath(".")
|
||||||
|
|
||||||
|
return os.path.join(base_path, relative_path)
|
||||||
|
|
||||||
|
|
||||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -17,10 +30,11 @@ class PrivacyNoticeDialog(wx.Dialog):
|
|||||||
|
|
||||||
# Calculate optimal dialog size based on screen size
|
# Calculate optimal dialog size based on screen size
|
||||||
screen_width, screen_height = wx.DisplaySize()
|
screen_width, screen_height = wx.DisplaySize()
|
||||||
self.max_width = min(700, screen_width * 0.75)
|
self.max_width = min(400, screen_width * 0.55)
|
||||||
self.max_height = min(700, screen_height * 0.8)
|
self.max_height = min(700, screen_height * 0.8)
|
||||||
|
|
||||||
self.SetMinSize((450, 400))
|
self.SetMinSize((450, 400))
|
||||||
|
self.SetIcon(wx.Icon(get_resource_path("icon.ico"), wx.BITMAP_TYPE_ICO))
|
||||||
self.SetSize((self.max_width, self.max_height))
|
self.SetSize((self.max_width, self.max_height))
|
||||||
|
|
||||||
# Create main sizer
|
# Create main sizer
|
||||||
@@ -29,11 +43,22 @@ class PrivacyNoticeDialog(wx.Dialog):
|
|||||||
# Create header with icon and title
|
# Create header with icon and title
|
||||||
header_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
header_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
|
||||||
# Add info icon
|
icon_path = get_resource_path("icon.ico")
|
||||||
info_icon = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_MESSAGE_BOX, (32, 32))
|
|
||||||
icon_ctrl = wx.StaticBitmap(self, -1, info_icon)
|
# Load as wx.Bitmap
|
||||||
|
custom_bitmap = wx.Bitmap(icon_path, wx.BITMAP_TYPE_ICO)
|
||||||
|
|
||||||
|
# Convert to wx.Image to scale
|
||||||
|
custom_image = custom_bitmap.ConvertToImage()
|
||||||
|
resized_image = custom_image.Scale(64, 64, wx.IMAGE_QUALITY_HIGH)
|
||||||
|
|
||||||
|
# Convert back to wx.Bitmap
|
||||||
|
resized_icon = wx.Bitmap(resized_image)
|
||||||
|
|
||||||
|
# Show in StaticBitmap
|
||||||
|
icon_ctrl = wx.StaticBitmap(self, -1, resized_icon)
|
||||||
header_sizer.Add(icon_ctrl, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 10)
|
header_sizer.Add(icon_ctrl, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 10)
|
||||||
|
|
||||||
# Add title
|
# Add title
|
||||||
title_text = wx.StaticText(self, label="Privacy and System Information")
|
title_text = wx.StaticText(self, label="Privacy and System Information")
|
||||||
title_font = wx.Font(14, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
|
title_font = wx.Font(14, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
|
||||||
@@ -104,16 +129,24 @@ class PrivacyNoticeDialog(wx.Dialog):
|
|||||||
f"wxPython Version: {system_info['wx_version']}"
|
f"wxPython Version: {system_info['wx_version']}"
|
||||||
)
|
)
|
||||||
|
|
||||||
info_text = wx.StaticText(self.scrolled_win, label=info_details)
|
self.info_text = wx.StaticText(self.scrolled_win, label=info_details)
|
||||||
scrolled_sizer.Add(info_text, 0, wx.ALL | wx.EXPAND, 10)
|
scrolled_sizer.Add(self.info_text, 0, wx.ALL | wx.EXPAND, 10)
|
||||||
|
|
||||||
self.scrolled_win.SetSizer(scrolled_sizer)
|
self.scrolled_win.SetSizer(scrolled_sizer)
|
||||||
main_sizer.Add(self.scrolled_win, 1, wx.EXPAND | wx.ALL, 5)
|
main_sizer.Add(self.scrolled_win, 1, wx.EXPAND | wx.ALL, 5)
|
||||||
|
|
||||||
# Add OK button
|
# Add OK button with auto-sizing
|
||||||
ok_btn = wx.Button(self, wx.ID_OK, "I Understand and Continue")
|
ok_btn = wx.Button(self, wx.ID_OK, "I Understand and Continue")
|
||||||
ok_btn.SetDefault()
|
ok_btn.SetDefault()
|
||||||
ok_btn.SetMinSize((160, 35))
|
|
||||||
|
# Calculate button size based on text content
|
||||||
|
btn_dc = wx.ClientDC(ok_btn)
|
||||||
|
btn_dc.SetFont(ok_btn.GetFont())
|
||||||
|
btn_text_width, btn_text_height = btn_dc.GetTextExtent(ok_btn.GetLabel())
|
||||||
|
btn_width = max(160, btn_text_width + 40) # Minimum 160, or text width + padding
|
||||||
|
btn_height = max(35, btn_text_height + 16) # Minimum 35, or text height + padding
|
||||||
|
|
||||||
|
ok_btn.SetMinSize((btn_width, btn_height))
|
||||||
|
|
||||||
btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
btn_sizer.AddStretchSpacer()
|
btn_sizer.AddStretchSpacer()
|
||||||
@@ -131,9 +164,69 @@ class PrivacyNoticeDialog(wx.Dialog):
|
|||||||
self.Bind(wx.EVT_BUTTON, self.on_ok, ok_btn)
|
self.Bind(wx.EVT_BUTTON, self.on_ok, ok_btn)
|
||||||
self.Bind(wx.EVT_SIZE, self.on_resize)
|
self.Bind(wx.EVT_SIZE, self.on_resize)
|
||||||
|
|
||||||
# Fit the dialog to content
|
# Fit the dialog to content with proper text wrapping
|
||||||
self.Fit()
|
self.auto_adjust_layout()
|
||||||
self.adjust_to_screen()
|
|
||||||
|
def auto_adjust_layout(self):
|
||||||
|
"""Automatically adjust the layout to fit text content nicely"""
|
||||||
|
try:
|
||||||
|
# Calculate optimal dialog size based on content
|
||||||
|
screen_width, screen_height = wx.DisplaySize()
|
||||||
|
|
||||||
|
# Get text dimensions to determine optimal width
|
||||||
|
temp_dc = wx.ClientDC(self)
|
||||||
|
temp_dc.SetFont(self.body_text.GetFont())
|
||||||
|
|
||||||
|
# Calculate maximum text width needed
|
||||||
|
max_text_width = 0
|
||||||
|
|
||||||
|
# Check body text lines
|
||||||
|
body_lines = self.body_text.GetLabel().split('\n')
|
||||||
|
for line in body_lines:
|
||||||
|
line_width, _ = temp_dc.GetTextExtent(line)
|
||||||
|
max_text_width = max(max_text_width, line_width)
|
||||||
|
|
||||||
|
# Check system info lines
|
||||||
|
info_lines = self.info_text.GetLabel().split('\n')
|
||||||
|
for line in info_lines:
|
||||||
|
line_width, _ = temp_dc.GetTextExtent(line)
|
||||||
|
max_text_width = max(max_text_width, line_width)
|
||||||
|
|
||||||
|
# Calculate optimal dialog width
|
||||||
|
optimal_width = min(max_text_width + 100, self.max_width) # Text width + margins
|
||||||
|
optimal_width = max(450, optimal_width) # Don't go below minimum
|
||||||
|
|
||||||
|
# Set initial size
|
||||||
|
self.SetSize((optimal_width, self.max_height))
|
||||||
|
|
||||||
|
# Wrap text to fit the calculated width
|
||||||
|
self.body_text.Wrap(optimal_width - 60)
|
||||||
|
self.info_text.Wrap(optimal_width - 60)
|
||||||
|
|
||||||
|
# Fit the scrolled window to content
|
||||||
|
self.scrolled_win.FitInside()
|
||||||
|
|
||||||
|
# Calculate optimal height based on content
|
||||||
|
self.Layout()
|
||||||
|
self.Fit()
|
||||||
|
|
||||||
|
# Get the total content height
|
||||||
|
content_height = self.scrolled_win.GetSizer().GetMinSize().height
|
||||||
|
dialog_height = min(content_height + 150, self.max_height) # Content height + header/footer
|
||||||
|
|
||||||
|
# Set final size
|
||||||
|
self.SetSize((optimal_width, dialog_height))
|
||||||
|
self.Layout()
|
||||||
|
self.scrolled_win.FitInside()
|
||||||
|
|
||||||
|
# Ensure we don't exceed screen bounds
|
||||||
|
self.adjust_to_screen()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error in auto_adjust_layout: {e}")
|
||||||
|
# Fallback: use default sizing
|
||||||
|
self.Fit()
|
||||||
|
self.adjust_to_screen()
|
||||||
|
|
||||||
def get_system_info(self):
|
def get_system_info(self):
|
||||||
"""Gather comprehensive system information with improved processor detection"""
|
"""Gather comprehensive system information with improved processor detection"""
|
||||||
@@ -374,18 +467,16 @@ class PrivacyNoticeDialog(wx.Dialog):
|
|||||||
final_height = min(current_size.height, screen_height - 40)
|
final_height = min(current_size.height, screen_height - 40)
|
||||||
|
|
||||||
self.SetSize(final_width, final_height)
|
self.SetSize(final_width, final_height)
|
||||||
self.body_text.Wrap(final_width - 60)
|
|
||||||
self.Layout()
|
|
||||||
self.scrolled_win.FitInside()
|
|
||||||
self.CentreOnParent()
|
self.CentreOnParent()
|
||||||
|
|
||||||
def on_resize(self, event):
|
def on_resize(self, event):
|
||||||
"""Handle dialog resize to re-wrap text appropriately"""
|
"""Handle dialog resize to re-wrap text appropriately"""
|
||||||
try:
|
try:
|
||||||
if hasattr(self, 'body_text'):
|
if hasattr(self, 'body_text') and hasattr(self, 'info_text'):
|
||||||
new_width = self.GetSize().width - 60
|
new_width = self.GetSize().width - 60
|
||||||
if new_width > 200:
|
if new_width > 200:
|
||||||
self.body_text.Wrap(new_width)
|
self.body_text.Wrap(new_width)
|
||||||
|
self.info_text.Wrap(new_width)
|
||||||
self.scrolled_win.Layout()
|
self.scrolled_win.Layout()
|
||||||
self.scrolled_win.FitInside()
|
self.scrolled_win.FitInside()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
19
src/main.py
19
src/main.py
@@ -1255,8 +1255,27 @@ COMMANDS (type /help in chat for full list):
|
|||||||
logger.error(f"Error during close: {e}")
|
logger.error(f"Error during close: {e}")
|
||||||
self.Destroy()
|
self.Destroy()
|
||||||
|
|
||||||
|
if os.name == 'nt':
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
def enable_high_dpi():
|
||||||
|
try:
|
||||||
|
ctypes.windll.shcore.SetProcessDpiAwareness(1)
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
ctypes.windll.user32.SetProcessDPIAware()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
|
if os.name == 'nt':
|
||||||
|
enable_high_dpi()
|
||||||
|
else:
|
||||||
|
pass
|
||||||
app = wx.App()
|
app = wx.App()
|
||||||
frame = IRCFrame()
|
frame = IRCFrame()
|
||||||
frame.SetIcon(wx.Icon(get_resource_path("icon.ico"), wx.BITMAP_TYPE_ICO))
|
frame.SetIcon(wx.Icon(get_resource_path("icon.ico"), wx.BITMAP_TYPE_ICO))
|
||||||
|
|||||||
Reference in New Issue
Block a user