Skip to content

Commit

Permalink
Add Root URL, Add Group: Make dialogs resizable. Widen dialogs.
Browse files Browse the repository at this point in the history
Resolves #38
  • Loading branch information
davidfstr committed Dec 25, 2023
1 parent 8f326fe commit 3b276ed
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 13 deletions.
3 changes: 2 additions & 1 deletion RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ Release Notes ⋮
### main (v2.0.0?)

* First-time-run experience improvements
* Add Root URL, Add Group:
* New Root URL and New Group Dialogs:
* Make it optional to provide a name for new Root URLs and Groups.
* Rearrange fields to deemphasize the Name field.
* Fix dialogs to be resizable.

### v1.7.0b (December 18, 2023)

Expand Down
27 changes: 17 additions & 10 deletions src/crystal/browser/addgroup.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@


class AddGroupDialog:
_INITIAL_URL_WIDTH = AddRootUrlDialog._INITIAL_URL_WIDTH
_MAX_VISIBLE_PREVIEW_URLS = 100

# === Init ===
Expand Down Expand Up @@ -50,7 +51,8 @@ def __init__(self,

dialog = self.dialog = wx.Dialog(
parent, title='New Group',
name='cr-add-group-dialog')
name='cr-add-group-dialog',
style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
dialog_sizer = wx.BoxSizer(wx.VERTICAL)
dialog.SetSizer(dialog_sizer)
bind(dialog, wx.EVT_BUTTON, self._on_button)
Expand Down Expand Up @@ -85,15 +87,16 @@ def __init__(self,

preview_box_root_sizer.Add(
wrap_static_box_sizer_child(self._create_preview_box_content(preview_box_root)),
proportion=1,
flag=wx.EXPAND)

content_sizer = wx.BoxSizer(wx.VERTICAL)
content_sizer.Add(
self._create_fields(dialog, initial_url, initial_source),
flag=wx.EXPAND)
content_sizer.Add(preview_box, proportion=0, flag=wx.EXPAND|preview_box_flags, border=preview_box_border)
content_sizer.Add(preview_box, proportion=1, flag=wx.EXPAND|preview_box_flags, border=preview_box_border)

dialog_sizer.Add(content_sizer, flag=wx.EXPAND|wx.ALL,
dialog_sizer.Add(content_sizer, proportion=1, flag=wx.EXPAND|wx.ALL,
border=_WINDOW_INNER_PADDING)
dialog_sizer.Add(dialog.CreateButtonSizer(wx.OK|wx.CANCEL), flag=wx.EXPAND|wx.BOTTOM,
border=_WINDOW_INNER_PADDING)
Expand All @@ -105,6 +108,9 @@ def __init__(self,
position_dialog_initially(dialog)
dialog.Show(True)
dialog.Fit()

dialog.MinSize = dialog.Size
dialog.MaxSize = wx.Size(wx.DefaultCoord, wx.DefaultCoord)

def _create_fields(self,
parent: wx.Window,
Expand All @@ -117,7 +123,8 @@ def _create_fields(self,

pattern_field_sizer = wx.BoxSizer(wx.VERTICAL)
self.pattern_field = wx.TextCtrl(
parent, value=initial_url, size=(300,-1), # width hint
parent, value=initial_url,
size=(self._INITIAL_URL_WIDTH, wx.DefaultCoord),
name='cr-add-group-dialog__pattern-field')
bind(self.pattern_field, wx.EVT_TEXT, self._on_pattern_field_changed)
self.pattern_field.Hint = 'https://example.com/post/*'
Expand Down Expand Up @@ -166,7 +173,7 @@ def _create_preview_box_content(self, parent: wx.Window) -> wx.Sizer:
name='cr-add-group-dialog__preview-members__list')

content_sizer.Add(wx.StaticText(parent, label='Known matching URLs:'), flag=wx.EXPAND)
content_sizer.Add(self.url_list, flag=wx.EXPAND)
content_sizer.Add(self.url_list, proportion=1, flag=wx.EXPAND)

return content_sizer

Expand Down Expand Up @@ -200,26 +207,26 @@ def _update_preview_urls(self) -> None:

# === Events ===

def _on_pattern_field_changed(self, event):
def _on_pattern_field_changed(self, event) -> None:
self._update_preview_urls()

def _on_button(self, event):
def _on_button(self, event: wx.CommandEvent) -> None:
btn_id = event.GetEventObject().GetId()
if btn_id == wx.ID_OK:
self._on_ok(event)
elif btn_id == wx.ID_CANCEL:
self._on_cancel(event)

def _on_close(self, event):
def _on_close(self, event: wx.CloseEvent) -> None:
self._on_cancel(event)

def _on_ok(self, event):
def _on_ok(self, event: wx.CommandEvent) -> None:
name = self.name_field.GetValue()
url_pattern = self.pattern_field.GetValue()
source = self.source_choice_box.GetClientData(
self.source_choice_box.GetSelection())
self._on_finish(name, url_pattern, source)
self.dialog.Destroy()

def _on_cancel(self, event):
def _on_cancel(self, event: wx.CommandEvent) -> None:
self.dialog.Destroy()
12 changes: 10 additions & 2 deletions src/crystal/browser/addrooturl.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@


class AddRootUrlDialog:
_INITIAL_URL_WIDTH = 400 # in pixels

# === Init ===

def __init__(self,
Expand All @@ -26,7 +28,9 @@ def __init__(self,
"""
self._on_finish = on_finish

dialog = self.dialog = wx.Dialog(parent, title='New Root URL', name='cr-add-url-dialog')
dialog = self.dialog = wx.Dialog(
parent, title='New Root URL', name='cr-add-url-dialog',
style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
dialog_sizer = wx.BoxSizer(wx.VERTICAL)
dialog.SetSizer(dialog_sizer)
bind(dialog, wx.EVT_BUTTON, self._on_button)
Expand All @@ -43,6 +47,9 @@ def __init__(self,
position_dialog_initially(dialog)
dialog.Show(True)
dialog.Fit() # NOTE: Must Fit() after Show() here so that wxGTK actually fits correctly

dialog.MinSize = dialog.Size
dialog.MaxSize = wx.Size(wx.DefaultCoord, dialog.Size.Height)

def _create_fields(self, parent: wx.Window, initial_url: str) -> wx.Sizer:
fields_sizer = wx.FlexGridSizer(rows=2, cols=2,
Expand All @@ -54,7 +61,8 @@ def _create_fields(self, parent: wx.Window, initial_url: str) -> wx.Sizer:
fields_sizer.Add(url_label, flag=wx.EXPAND)

self.url_field = wx.TextCtrl(
parent, value=initial_url, size=(300,-1), # width hint
parent, value=initial_url,
size=(self._INITIAL_URL_WIDTH, wx.DefaultCoord),
name='cr-add-url-dialog__url-field')
self.url_field.Hint = 'https://example.com/'
self.url_field.SetSelection(-1, -1) # select all upon focus
Expand Down

0 comments on commit 3b276ed

Please sign in to comment.