From: <hug...@li...> - 2011-01-29 10:39:20
|
branch: details: http://hugin.hg.sourceforge.net/hgweb/hugin/hugin/hgrepo/h/hu/hugin/hugin/rev/8f7664fa6f0d changeset: 4906:8f7664fa6f0d user: tmodes date: Sat Jan 29 11:38:58 2011 +0100 description: Added some keyboard shortcuts * select all images with Ctrl+A in different images list * select all control points with Ctrl+A in CP list * insert image in Images tab with Insert * delete image in Images tab with Delete diffstat: src/hugin1/hugin/CPListFrame.cpp | 22 ++++++++++++++++--- src/hugin1/hugin/CPListFrame.h | 2 + src/hugin1/hugin/ImagesList.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ src/hugin1/hugin/ImagesList.h | 12 ++++++++++- src/hugin1/hugin/ImagesPanel.cpp | 7 ++++++ 5 files changed, 81 insertions(+), 5 deletions(-) diffs (202 lines): diff -r aef917620af6 -r 8f7664fa6f0d src/hugin1/hugin/CPListFrame.cpp --- a/src/hugin1/hugin/CPListFrame.cpp Sat Jan 29 08:41:12 2011 +0100 +++ b/src/hugin1/hugin/CPListFrame.cpp Sat Jan 29 11:38:58 2011 +0100 @@ -52,10 +52,16 @@ void OnKey(wxKeyEvent & e) { - if (e.m_keyCode == WXK_DELETE) { - m_list.DeleteSelected(); - } else { - e.Skip(); + switch(e.m_keyCode) + { + case WXK_DELETE: + m_list.DeleteSelected(); + break; + case 1: //Ctrl+A + m_list.SelectAll(); + break; + default: + e.Skip(); } } @@ -741,6 +747,14 @@ } } +void CPListFrame::SelectAll() +{ + unsigned int nrItems = m_list->GetItemCount(); + for (unsigned int i=0; i < nrItems ; i++) + { + m_list->SetItemState(i, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); + } +}; void CPListFrame::OnFineTuneButton(wxCommandEvent & e) { diff -r aef917620af6 -r 8f7664fa6f0d src/hugin1/hugin/CPListFrame.h --- a/src/hugin1/hugin/CPListFrame.h Sat Jan 29 08:41:12 2011 +0100 +++ b/src/hugin1/hugin/CPListFrame.h Sat Jan 29 11:38:58 2011 +0100 @@ -44,6 +44,8 @@ /** Delete the selected points */ void DeleteSelected(); + /** Select all points */ + void SelectAll(); private: diff -r aef917620af6 -r 8f7664fa6f0d src/hugin1/hugin/ImagesList.cpp --- a/src/hugin1/hugin/ImagesList.cpp Sat Jan 29 08:41:12 2011 +0100 +++ b/src/hugin1/hugin/ImagesList.cpp Sat Jan 29 11:38:58 2011 +0100 @@ -40,12 +40,16 @@ using namespace PT; using namespace utils; +wxDEFINE_EVENT(EVT_IMAGE_ADD,wxCommandEvent); +wxDEFINE_EVENT(EVT_IMAGE_DEL,wxCommandEvent); + //------------------------------------------------------------------------------ BEGIN_EVENT_TABLE(ImagesList, wxListCtrl) EVT_LIST_ITEM_SELECTED(-1, ImagesList::OnItemSelected) EVT_LIST_ITEM_DESELECTED(-1, ImagesList::OnItemDeselected) EVT_LIST_COL_END_DRAG(-1, ImagesList::OnColumnWidthChange) + EVT_CHAR(ImagesList::OnChar) END_EVENT_TABLE() // Define a constructor for the Images Panel @@ -82,6 +86,7 @@ m_degDigits = wxConfigBase::Get()->Read(wxT("/General/DegreeFractionalDigits"),1); m_pixelDigits = wxConfigBase::Get()->Read(wxT("/General/PixelFractionalDigits"),1); m_distDigits = wxConfigBase::Get()->Read(wxT("/General/DistortionFractionalDigits"),3); + m_singleSelect=(style & wxLC_SINGLE_SEL); return true; } @@ -259,6 +264,15 @@ SetItemState(imgNr, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } +void ImagesList::SelectAll() +{ + unsigned int nrItems = GetItemCount(); + for (unsigned int i=0; i < nrItems ; i++) + { + SetItemState(i, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); + } +} + void ImagesList::OnItemSelected ( wxListEvent & e ) { DEBUG_TRACE(e.GetIndex()); @@ -272,6 +286,35 @@ } } +void ImagesList::OnChar(wxKeyEvent &e) +{ + switch(e.GetKeyCode()) + { + case WXK_INSERT: + { + wxCommandEvent ev(EVT_IMAGE_ADD,wxID_ANY); + GetParent()->GetEventHandler()->AddPendingEvent(ev); + break; + }; + case WXK_DELETE: + { + wxCommandEvent ev(EVT_IMAGE_DEL,wxID_ANY); + GetParent()->GetEventHandler()->AddPendingEvent(ev); + break; + }; + case 1: //Ctrl+A + { + if(!m_singleSelect && e.ControlDown()) + { + SelectAll(); + } + break; + } + }; + e.Skip(); +}; + + void ImagesList::OnItemDeselected ( wxListEvent & e ) { DEBUG_TRACE(e.GetIndex()); diff -r aef917620af6 -r 8f7664fa6f0d src/hugin1/hugin/ImagesList.h --- a/src/hugin1/hugin/ImagesList.h Sat Jan 29 08:41:12 2011 +0100 +++ b/src/hugin1/hugin/ImagesList.h Sat Jan 29 11:38:58 2011 +0100 @@ -33,6 +33,10 @@ using namespace PT; +//declare 2 event types to communicate with parent about adding/deleting images +wxDECLARE_EVENT(EVT_IMAGE_ADD,wxCommandEvent); +wxDECLARE_EVENT(EVT_IMAGE_DEL,wxCommandEvent); + /** multi use list. * * This list shall contain the overall handling of datas in lists, @@ -103,6 +107,9 @@ */ void SelectSingleImage(unsigned int imgNr); + /** Select all images */ + void SelectAll(); + /** get the currently selected images */ const UIntSet & GetSelected() const; @@ -119,6 +126,8 @@ void OnItemDeselected ( wxListEvent & e ); // save the column width when changed void OnColumnWidthChange( wxListEvent & e ); + /** event handler to capture special key code */ + void OnChar( wxKeyEvent & e); /** create icons for an image */ //void createIcon(wxBitmap & bitmap, unsigned int imgNr, unsigned int size); @@ -134,11 +143,12 @@ // propagate list selections/deselections to client. bool m_notifyParents; + bool m_singleSelect; //for saving column width wxString m_configClassName; DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(ImagesListImage) + DECLARE_DYNAMIC_CLASS(ImagesList) }; /** specialized to display image data (width, position) diff -r aef917620af6 -r 8f7664fa6f0d src/hugin1/hugin/ImagesPanel.cpp --- a/src/hugin1/hugin/ImagesPanel.cpp Sat Jan 29 08:41:12 2011 +0100 +++ b/src/hugin1/hugin/ImagesPanel.cpp Sat Jan 29 11:38:58 2011 +0100 @@ -103,6 +103,8 @@ EVT_TEXT_ENTER ( XRCID("images_text_Y"), ImagesPanel::OnVarTextChanged ) EVT_TEXT_ENTER ( XRCID("images_text_Z"), ImagesPanel::OnVarTextChanged ) EVT_CHECKBOX ( XRCID("images_check_link"), ImagesPanel::OnImageLinkChanged ) + EVT_COMMAND (wxID_ANY, EVT_IMAGE_ADD, ImagesPanel::OnAddImages ) + EVT_COMMAND (wxID_ANY, EVT_IMAGE_DEL, ImagesPanel::OnRemoveImages ) END_EVENT_TABLE() ImagesPanel::ImagesPanel() @@ -832,6 +834,11 @@ } +void ImagesPanel::OnAddImages(wxCommandEvent &e) +{ + MainFrame::Get()->OnAddImages(e); +}; + void ImagesPanel::OnRemoveImages(wxCommandEvent & e) { DEBUG_TRACE(""); |