<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Breakpoint widget patch</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV>
<DIV>Please do send kevelop related mail to me again</DIV></DIV>
<BLOCKQUOTE dir=ltr 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=Thomas.Downing@ipc.com href="mailto:Thomas.Downing@ipc.com">Downing, 
  Thomas</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=kdevelop@kdevelop.org 
  href="mailto:kdevelop@kdevelop.org">kdevelop@kdevelop.org</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Thursday, January 13, 2005 4:40 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Breakpoint widget patch</DIV>
  <DIV><BR></DIV><!-- Converted from text/plain format -->
  <P><FONT size=2>Hi,<BR><BR>This is a patch against the 05-01-11 version of 
  KDevelop.  It addresses<BR>issues with breakpoint functionality in 
  C++<BR><BR>- Fix operation of the Enable/Disable feature<BR><BR>- Change 
  single click action to select only<BR><BR>- Add double click to go to FilePos 
  break point in editor<BR><BR>- Add Context menu to break point items, Show, 
  Edit, Disable/Enable, Delete<BR><BR>If there is interest, more 
  fixes/enhancements to breakpoint functions for<BR>C++ will be 
  forthcoming.<BR><BR>Thomas 
  Downig<BR>-------------------------------------------------------------------------<BR><BR><BR>diff 
  -c kdevelop-050111/languages/cpp/debugger/gdbbreakpointwidget.cpp 
  kdevelop-musrum/languages/cpp/debugger/gdbbreakpointwidget.cpp<BR>*** 
  kdevelop-050111/languages/cpp/debugger/gdbbreakpointwidget.cpp  Wed Dec 
  22 23:08:45 2004<BR>--- 
  kdevelop-musrum/languages/cpp/debugger/gdbbreakpointwidget.cpp  Thu Jan 
  13 09:42:28 2005<BR>***************<BR>*** 239,247 
  ****<BR>      header->setLabel( IgnoreCount,  
  i18n("Ignore Count") );<BR>      header->setLabel( 
  Hits,         i18n("Hits") 
  );<BR><BR>      
  m_table->show();<BR><BR>!     connect( 
  addMenu,     
  SIGNAL(activated(int)),<BR>               
  this,          
  SLOT(slotAddBlankBreakpoint(int)) );<BR>      
  connect( m_delete,      
  SIGNAL(clicked()),<BR>               
  this,          
  SLOT(slotRemoveBreakpoint()) );<BR>--- 239,253 
  ----<BR>      header->setLabel( IgnoreCount,  
  i18n("Ignore Count") );<BR>      header->setLabel( 
  Hits,         i18n("Hits") 
  );<BR><BR>+     m_ctxMenu = new QPopupMenu( this 
  );<BR>+     m_ctxMenu->insertItem( i18n( "Show" 
  ),    BW_ITEM_Show );<BR>+     
  m_ctxMenu->insertItem( i18n( "Edit" ),    BW_ITEM_Edit 
  );<BR>+     m_ctxMenu->insertItem( i18n( "Disable" ), 
  BW_ITEM_Disable );<BR>+     m_ctxMenu->insertItem( 
  i18n( "Delete" ),  BW_ITEM_Delete 
  );<BR>+<BR>      
  m_table->show();<BR><BR>!     connect( 
  addMenu,       
  SIGNAL(activated(int)),<BR>               
  this,          
  SLOT(slotAddBlankBreakpoint(int)) );<BR>      
  connect( m_delete,      
  SIGNAL(clicked()),<BR>               
  this,          
  SLOT(slotRemoveBreakpoint()) );<BR>***************<BR>*** 250,259 
  ****<BR>      connect( m_removeAll,   
  SIGNAL(clicked()),<BR>               
  this,          
  SLOT(slotRemoveAllBreakpoints()) );<BR><BR>! //    connect( 
  m_table,       SIGNAL(contextMenuRequested(int, 
  int, const QPoint &)),<BR>! 
  //             
  this,          
  SLOT(slotEditRow(int, int, const QPoint &)));<BR>!     
  connect( m_table,       SIGNAL(clicked(int, int, 
  int, const QPoint 
  &)),<BR>!              
  this,          
  SLOT(slotRowSelected(int, int, int, const QPoint 
  &)));<BR>      connect( 
  m_table,       SIGNAL(valueChanged(int, 
  int)),<BR>               
  this,          
  SLOT(slotNewValue(int, int)));<BR><BR>--- 256,269 
  ----<BR>      connect( m_removeAll,   
  SIGNAL(clicked()),<BR>               
  this,          
  SLOT(slotRemoveAllBreakpoints()) );<BR><BR>!     connect( 
  m_table,       SIGNAL(contextMenuRequested(int, 
  int, const QPoint 
  &)),<BR>!              
  this,          
  SLOT(slotContextMenuShow(int, int, const QPoint & )) 
  );<BR>!     connect( m_ctxMenu,     
  SIGNAL(activated(int)),<BR>!              
  this,          
  SLOT(slotContextMenuSelect(int)) );<BR>!<BR>!     connect( 
  m_table,       SIGNAL(doubleClicked(int, int, 
  int, const QPoint 
  &)),<BR>!              
  this,          
  SLOT(slotRowDoubleClicked(int, int, int, const QPoint 
  &)));<BR>!<BR>      connect( 
  m_table,       SIGNAL(valueChanged(int, 
  int)),<BR>               
  this,          
  SLOT(slotNewValue(int, int)));<BR><BR>***************<BR>*** 265,270 
  ****<BR>--- 275,281 
  ----<BR>               
  this,          
  SLOT(slotRemoveBreakpoint()));<BR>      connect( 
  m_table,       
  SIGNAL(insertPressed()),<BR>               
  this,          
  SLOT(slotAddBreakpoint()));<BR>+<BR>  }<BR><BR>  
  /***************************************************************************/<BR>***************<BR>*** 
  417,423 ****<BR>      if 
  (btr)<BR>      
  {<BR>          Breakpoint* 
  bp=btr->breakpoint();<BR>!         
  bp->setEnabled(!isEnabled());<BR>          
  emit publishBPState(*bp);<BR>      }<BR>  
  }<BR>--- 428,434 ----<BR>      if 
  (btr)<BR>      
  {<BR>          Breakpoint* 
  bp=btr->breakpoint();<BR>!         
  bp->setEnabled(!bp->isEnabled());<BR>          
  emit publishBPState(*bp);<BR>      }<BR>  
  }<BR>***************<BR>*** 683,689 ****<BR><BR>  
  /***************************************************************************/<BR><BR>! 
  void GDBBreakpointWidget::slotRowSelected(int row, int col, int btn, const 
  QPoint &)<BR>  {<BR>      if ( btn == 
  Qt::LeftButton )<BR>    {<BR>--- 694,700 ----<BR><BR>  
  /***************************************************************************/<BR><BR>! 
  void GDBBreakpointWidget::slotRowDoubleClicked(int row, int col, int btn, 
  const QPoint &)<BR>  {<BR>      if ( btn == 
  Qt::LeftButton )<BR>    {<BR>***************<BR>*** 702,707 
  ****<BR>--- 713,783 ----<BR>      }<BR>  
  }<BR><BR>+ void GDBBreakpointWidget::slotContextMenuShow( int row, int 
  /*col*/, const QPoint &mousePos )<BR>+ {<BR>+     
  BreakpointTableRow *btr = (BreakpointTableRow *)m_table->item( row, Control 
  );<BR>+<BR>+     if (btr != 
  NULL)<BR>+     
  {<BR>+         
  m_ctxMenu->setItemEnabled( BW_ITEM_Show, (btr->breakpoint( )->type( ) 
  == BP_TYPE_FilePos) );<BR>+         if 
  (btr->breakpoint( )->isEnabled( 
  ))<BR>+         
  {<BR>+             
  m_ctxMenu->changeItem( BW_ITEM_Disable, i18n("Disable") 
  );<BR>+         
  }<BR>+         
  else<BR>+         
  {<BR>+             
  m_ctxMenu->changeItem( BW_ITEM_Disable, i18n("Enable") 
  );<BR>+         
  }<BR>+<BR>+         
  //m_ctxMenu->popup( mapToGlobal( mousePos ) 
  );<BR>+         m_ctxMenu->popup( 
  mousePos );<BR>+     }<BR>+ }<BR>+<BR>+ void 
  GDBBreakpointWidget::slotContextMenuSelect( int item )<BR>+ 
  {<BR>+     
  int                  
  row, col;<BR>+     BreakpointTableRow  
  *btr;<BR>+     
  Breakpoint          
  *bp;<BR>+     FilePosBreakpoint   
  *fbp;<BR>+<BR>+     row= m_table->currentRow( 
  );<BR>+     if (row == 
  -1)<BR>+         
  return;<BR>+     btr = (BreakpointTableRow 
  *)m_table->item( row, Control );<BR>+     if (btr == 
  NULL)<BR>+         
  return;<BR>+     bp = btr->breakpoint( 
  );<BR>+     if (bp == 
  NULL)<BR>+         
  return;<BR>+     fbp = 
  dynamic_cast<FilePosBreakpoint*>(bp);<BR>+<BR>+     
  switch( item )<BR>+     
  {<BR>+         case 
  BW_ITEM_Show:<BR>+             
  if 
  (fbp)<BR>+                 
  emit gotoSourcePosition(fbp->fileName(), 
  fbp->lineNum()-1);<BR>+             
  break;<BR>+         case 
  BW_ITEM_Edit:<BR>+             
  col = m_table->currentColumn( 
  );<BR>+             
  if (col == Location || col ==  Condition || col == 
  IgnoreCount)<BR>+                 
  m_table->editCell(row, col, 
  false);<BR>+             
  break;<BR>+         case 
  BW_ITEM_Disable:<BR>+             
  bp->setEnabled( !bp->isEnabled( ) 
  );<BR>+             
  btr->setRow( 
  );<BR>+             
  emit publishBPState( *bp 
  );<BR>+             
  break;<BR>+         case 
  BW_ITEM_Delete:<BR>+             
  slotRemoveBreakpoint( 
  );<BR>+             
  break;<BR>+         
  default:<BR>+             
  // oops, check it out! this case is not in sync with 
  the<BR>+             
  // m_ctxMenu.  Check the enum in the header 
  file.<BR>+             
  return;<BR>+     }<BR>+ }<BR>+<BR>  
  /***************************************************************************/<BR><BR>  
  void GDBBreakpointWidget::slotEditRow(int row, int col, const QPoint 
  &)<BR>diff -c kdevelop-050111/languages/cpp/debugger/gdbbreakpointwidget.h 
  kdevelop-musrum/languages/cpp/debugger/gdbbreakpointwidget.h<BR>*** 
  kdevelop-050111/languages/cpp/debugger/gdbbreakpointwidget.h    
  Mon Jun 21 22:39:42 2004<BR>--- 
  kdevelop-musrum/languages/cpp/debugger/gdbbreakpointwidget.h    
  Wed Jan 12 13:49:01 2005<BR>***************<BR>*** 17,22 ****<BR>--- 17,23 
  ----<BR>  #define _GDBBreakpointWidget_H_<BR><BR>  #include 
  <qhbox.h><BR>+ #include <qpopupmenu.h><BR><BR>  class 
  QDomElement;<BR>  class QToolButton;<BR>***************<BR>*** 63,68 
  ****<BR>--- 64,70 ----<BR>      void 
  slotRefreshBP(const KURL &filename);<BR><BR>  
  protected:<BR>+     enum BW_ITEMS { BW_ITEM_Show, 
  BW_ITEM_Edit, BW_ITEM_Disable, BW_ITEM_Delete 
  };<BR>      virtual void focusInEvent(QFocusEvent 
  *e);<BR><BR>  private slots:<BR>***************<BR>*** 72,78 
  ****<BR>      void 
  slotEditBreakpoint();<BR>      void 
  slotAddBreakpoint();<BR>      void 
  slotAddBlankBreakpoint(int idx);<BR>!     void 
  slotRowSelected(int row, int col, int button, const QPoint & 
  mousePos);<BR>      void slotEditRow(int row, int 
  col, const QPoint & mousePos);<BR>      void 
  slotNewValue(int row, int col);<BR><BR>--- 74,82 
  ----<BR>      void 
  slotEditBreakpoint();<BR>      void 
  slotAddBreakpoint();<BR>      void 
  slotAddBlankBreakpoint(int idx);<BR>!     void 
  slotRowDoubleClicked(int row, int col, int button, const QPoint & 
  mousePos);<BR>!     void slotContextMenuShow( int row, int 
  col, const QPoint &mousePos );<BR>!     void 
  slotContextMenuSelect( int item );<BR>      void 
  slotEditRow(int row, int col, const QPoint & 
  mousePos);<BR>      void slotNewValue(int row, int 
  col);<BR><BR>***************<BR>*** 98,103 ****<BR>--- 102,108 
  ----<BR>      QToolButton*    
  m_delete;<BR>      QToolButton*    
  m_edit;<BR>      QToolButton*    
  m_removeAll;<BR>+     QPopupMenu*     
  m_ctxMenu;<BR>  };<BR><BR>  
  /***************************************************************************/<BR><BR><BR><BR></FONT></P></BLOCKQUOTE></BODY></HTML>