Skip to content

Commit

Permalink
picviewer: improved mosaic
Browse files Browse the repository at this point in the history
  • Loading branch information
rmackay9 committed Sep 7, 2024
1 parent ea16945 commit 4b8252a
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 42 deletions.
71 changes: 30 additions & 41 deletions MAVProxy/tools/mavpicviewer/mosaic_window2.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@
class mosaic_window2:
"""displays a mosaic of images"""

def __init__(self, filelist):
def __init__(self, filelist, image_select_cb):

# keep reference to callback
self.image_select_cb = image_select_cb

# determine if filelist is a string or a list of strings
self.filenumber = 0
Expand All @@ -44,18 +47,19 @@ def __init__(self, filelist):
self.thumb_columns = 5
self.thumb_rows = ceil(len(filelist) / self.thumb_columns)

# create image viewer
self.im = None
#self.update_image()

# create window
self.app = wx.App()
self.frame = wx.Frame(None, title="Mosaic", size=(650, 200))

# update title
title_str = "PicViewer Mosaic (" + str(self.filenumber+1) + " of " + str(len(self.filelist)) + ")"
self.frame = wx.Frame(None, title=title_str, size=(565, 310))
self.frame.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))

# add menu
self.menu = wx.Menu()
self.menu.Append(1, "Open Folder", "Open a Folder of images")
self.menu.Append(2, "Show All", "Show all images")
self.menu.Append(3, "Show POI", "Show images with POI")
self.menu_bar = wx.MenuBar()
self.menu_bar.Append(self.menu, "Menu")
self.frame.SetMenuBar(self.menu_bar)
Expand All @@ -70,35 +74,25 @@ def __init__(self, filelist):
#self.settings_frame.Bind(wx.EVT_TEXT_ENTER, self.settings_set_button_click, self.settings_text_input)
#self.settings_frame.Bind(wx.EVT_CLOSE, self.apikey_close_button_click)

# add a read-only status text box
self.text_status = wx.TextCtrl(self.frame, id=-1, size=(600, 60), style=wx.TE_READONLY | wx.TE_MULTILINE | wx.TE_RICH)

# add a scrolled panel
self.scrolled_panel = scrolled.ScrolledPanel(self.frame, -1, size=(600, 600), style=wx.TAB_TRAVERSAL)
self.scrolled_panel_sizer = wx.GridSizer(cols=5, hgap=5, vgap=5)

# add an image
#img1_path = self.filelist[1]
#self.wx_image1 = wx.Image(img1_path, wx.BITMAP_TYPE_ANY).Scale(100, 100)
#self.image = wx.StaticBitmap(self.scrolled_panel, wx.ID_ANY, wx.Bitmap(self.wx_image1))

#img2_path = self.filelist[2]
#self.wx_image2 = wx.Image(img2_path, wx.BITMAP_TYPE_ANY).Scale(100, 100)
#self.image2 = wx.StaticBitmap(self.scrolled_panel, wx.ID_ANY, wx.Bitmap(self.wx_image2))

#self.scrolled_panel_sizer.Add(self.image, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
#self.scrolled_panel_sizer.Add(self.image2, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)

# add images
for i in range(len(self.filelist)):
img_path = self.filelist[i]
wx_image = wx.Image(img_path, wx.BITMAP_TYPE_ANY).Scale(100, 100)
image = wx.StaticBitmap(self.scrolled_panel, wx.ID_ANY, wx.Bitmap(wx_image))
self.scrolled_panel_sizer.Add(image, proportion=0, flag=wx.EXPAND | wx.ALL, border=2)
#image = wx.StaticBitmap(self.scrolled_panel, wx.ID_ANY, wx.Bitmap(wx_image))
image = wx.StaticBitmap(self.scrolled_panel, i, wx.Bitmap(wx_image))
image.Bind(wx.EVT_LEFT_DOWN, self.on_image_click)
self.scrolled_panel_sizer.Add(image, proportion=0, flag=wx.EXPAND | wx.ALL, border=2, userData=i)

self.scrolled_panel.SetSizer(self.scrolled_panel_sizer)
self.scrolled_panel.SetupScrolling(scroll_x=True, scroll_y=True)

# add a read-only reply text box
self.text_reply = wx.TextCtrl(self.frame, id=-1, size=(600, 80), style=wx.TE_READONLY | wx.TE_MULTILINE | wx.TE_RICH)

# add a cancel button
self.cancel_button = wx.Button(self.frame, id=-1, label="cancel", size=(75, 25))
#self.frame.Bind(wx.EVT_BUTTON, self.cancel_button_click , self.cancel_button)
Expand All @@ -111,43 +105,38 @@ def __init__(self, filelist):
wx.CallAfter(self.cancel_button.Disable)

# set size hints and add sizer to frame
self.vert_sizer.Add(self.text_status, proportion=0, flag=wx.EXPAND, border=5)
self.vert_sizer.Add(self.scrolled_panel, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
self.vert_sizer.Add(self.text_reply, proportion=0, flag=wx.EXPAND, border=5)
#self.vert_sizer.Add(self.image, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
#self.vert_sizer.Add(self.image2, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
self.vert_sizer.Add(self.horiz_sizer, proportion=0, flag=wx.EXPAND)
#self.frame.Bind(wx.EVT_SIZE, self.on_resize)
self.frame.SetSizer(self.vert_sizer)
self.frame.Layout()

# set focus on the input text box
self.text_reply.SetFocus()
# set focus on the status text box
self.text_status.SetFocus()

# show frame
self.frame.Show()

# window loop (this does not return until the window is closed)
self.app.MainLoop()

self.thread = Thread(target=self.mosaic_window_loop, name='mosaic_window_loop')
self.thread.daemon = False
self.thread.start()

# main loop
#def mosaic_window_loop(self):
# """main thread"""
# while True:
# if self.im is None:
# break
# time.sleep(0.25)
# self.check_events()
def mosaic_window_loop(self):
"""main thread"""
# this does not return until the window is closed
self.app.MainLoop()

# set window title
def set_title(self, title):
"""set image title"""
if self.im is None:
return
self.im.set_title(title)
self.frame.SetTitle(title)

# process window events
def on_image_click(self, event):
"""process image click event"""
self.image_select_cb(event.GetId())

# process window events
def check_events(self):
Expand Down
8 changes: 7 additions & 1 deletion MAVProxy/tools/mavpicviewer/picviewer_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def __init__(self, filelist):
self.update_map()

# create mosaic of images
self.mosaic = mosaic_window2.mosaic_window2(self.filelist)
self.mosaic = mosaic_window2.mosaic_window2(self.filelist, self.mosaic_image_select_cb)

# create menu
self.menu = None
Expand Down Expand Up @@ -122,6 +122,12 @@ def picviewer_window_loop(self):
time.sleep(0.25)
self.check_events()

# image select callback
def mosaic_image_select_cb(self, filenumber):
self.filenumber = filenumber
self.update_image()
self.update_map()

# set window title
def set_title(self, title):
"""set image title"""
Expand Down

0 comments on commit 4b8252a

Please sign in to comment.