@@ -79,6 +79,7 @@ def __init__(self, parent=None):
7979 self .table_widget .setColumnCount (5 )
8080 self .table_widget .setHorizontalHeaderLabels (['Description' , 'Length' , 'Get' , 'Edit' , 'Delete' ])
8181 self .table_widget .setEditTriggers (QTableWidget .NoEditTriggers )
82+ self .table_widget .setSelectionMode (QTableWidget .SingleSelection )
8283 self .table_widget .setAlternatingRowColors (True )
8384 self .table_widget .setStyleSheet ("""
8485 QTableWidget {
@@ -252,6 +253,55 @@ def setup_table_context_menu(self):
252253 self .table_widget .setContextMenuPolicy (Qt .CustomContextMenu )
253254 self .table_widget .customContextMenuRequested .connect (self .show_table_context_menu )
254255
256+ shortcuts = [
257+ ('Ctrl+G' , 'Get Password' , self .get_password_for_selected_row ),
258+ ('Ctrl+Shift+E' , 'Edit Password' , self .edit_password_for_selected_row ),
259+ ('Del' , 'Delete Password' , self .delete_selected_row )
260+ ]
261+
262+ for shortcut , name , callback in shortcuts :
263+ action = QAction (name , self )
264+ action .setShortcut (shortcut )
265+ action .triggered .connect (callback )
266+ self .addAction (action )
267+
268+ def _get_public_key_for_row (self , row ):
269+ if row < 0 :
270+ return None
271+
272+ for col in [2 , 3 , 4 ]:
273+ widget = self .table_widget .cellWidget (row , col )
274+ if widget and hasattr (widget , 'public_key' ):
275+ return widget .public_key
276+ return None
277+
278+ def _execute_action_for_selected_row (self , action_name ):
279+ current_row = self .table_widget .currentRow ()
280+ public_key = self ._get_public_key_for_row (current_row )
281+
282+ if not public_key :
283+ self .show_status_message ('No row selected' , 2000 )
284+ return
285+
286+ method_map = {
287+ 'get' : 'get_password' ,
288+ 'edit' : 'edit_password' ,
289+ 'delete' : 'remove_password'
290+ }
291+
292+ method_name = method_map .get (action_name )
293+ if method_name :
294+ getattr (self , method_name )(public_key )
295+
296+ def get_password_for_selected_row (self ):
297+ self ._execute_action_for_selected_row ('get' )
298+
299+ def edit_password_for_selected_row (self ):
300+ self ._execute_action_for_selected_row ('edit' )
301+
302+ def delete_selected_row (self ):
303+ self ._execute_action_for_selected_row ('delete' )
304+
255305 def show_table_context_menu (self , position ):
256306 item = self .table_widget .itemAt (position )
257307 if not item :
@@ -272,14 +322,17 @@ def show_table_context_menu(self, position):
272322 context_menu = QMenu (self )
273323
274324 get_action = context_menu .addAction ("🔑 Get Password" )
325+ get_action .setShortcut ("Ctrl+G" )
275326 get_action .triggered .connect (lambda checked , pk = public_key : self .get_password (pk ))
276327
277328 edit_action = context_menu .addAction ("✏️ Edit Metadata" )
329+ edit_action .setShortcut ("Ctrl+Shift+E" )
278330 edit_action .triggered .connect (lambda checked , pk = public_key : self .edit_password (pk ))
279331
280332 context_menu .addSeparator ()
281333
282334 delete_action = context_menu .addAction ("🗑️ Delete Entry" )
335+ delete_action .setShortcut ("Del" )
283336 delete_action .triggered .connect (lambda checked , pk = public_key : self .remove_password (pk ))
284337
285338 context_menu .exec_ (self .table_widget .viewport ().mapToGlobal (position ))
@@ -321,16 +374,24 @@ def _show_keyboard_shortcuts(self):
321374 QMessageBox .about (
322375 self ,
323376 "Keyboard Shortcuts" ,
324- f"""<h2>Keyboard Shortcuts</h2>
325-
326- <p><b>F1</b> - Show Help</p>
327- <p><b>Ctrl + Q</b> - Exit Application</p>
328- <p><b>Ctrl + P</b> - Create New Password</p>
329- <p><b>Ctrl + Shift + S</b> - Toggle Sounds</p>
330- <p><b>Ctrl + /</b> - Keyboard shortcuts</p>
331- <p><b>Ctrl + Shift + A</b> - About</p>
332- <p><b>Ctrl + I</b> - Import Passwords</p>
333- <p><b>Ctrl + E</b> - Export Passwords</p>
377+ f"""<h2 style="color: #2a82da">Global Keyboard Shortcuts</h2>
378+
379+ <p><b style="color: #2a82da">F1</b> - Show Help</p>
380+ <p><b style="color: #2a82da">Ctrl + Q</b> - Exit Application</p>
381+ <p><b style="color: #2a82da">Ctrl + P</b> - Create New Password</p>
382+ <p><b style="color: #2a82da">Ctrl + Shift + S</b> - Toggle Sounds</p>
383+ <p><b style="color: #2a82da">Ctrl + /</b> - Keyboard shortcuts</p>
384+ <p><b style="color: #2a82da">Ctrl + Shift + A</b> - About</p>
385+ <p><b style="color: #2a82da">Ctrl + I</b> - Import Passwords</p>
386+ <p><b style="color: #2a82da">Ctrl + E</b> - Export Passwords</p>
387+
388+ <hr>
389+
390+ <h2 style="color: #2a82da">Password's Keyboard Shortcuts</h2>
391+
392+ <p><b style="color: #2a82da">Ctrl + G</b> - Get Password</p>
393+ <p><b style="color: #2a82da">Ctrl + Shift + E</b> - Edit Password</p>
394+ <p><b style="color: #2a82da">Del</b> - Delete Password</p>
334395 """
335396 )
336397
0 commit comments